Glass Engraving with UV Laser

Freezing a Google Street View panorama inside a K9 crystal cube using UV laser engraving

Tags

xTool F2 Ultra, k9 crystal, glass engraving, uv laser, point cloud, google street view, python

Assignment

  • individual assignment:
    • design and produce something with a digital fabrication process not covered in another assignment

This semester's options were: multi-axis machining, microfabrication, NC grinding, wire EDM, waterjet cutting, composites (wet lay-up), robot arms, laser micro machining and CT scanning, metal laser cutting and welding, 2D inflatables (ultrasonic welding), glass engraving (UV laser), limits of laser PCBs, and embroidery.

I chose glass engraving with UV laser - using focused UV light to create subsurface markings inside K9 crystal.

What to Make

I wanted to freeze a fragment of the physical world inside crystal. The idea: capture a Google Street View panorama of Washington Square Park (NYC) and convert it into a spherical point cloud suspended inside a glass cube. (Don't be surprised if that link shows a different view than what's in this documentation - Google sometimes takes down Street Views and redirects to the nearest available one.)

The Machine

Our lab just got the xTool F2 Ultra with a UV laser module. The UV laser creates tiny micro-fractures at the focal point inside the crystal. These fractures scatter light, creating visible white dots that form 3D images. Pretty cool - the marks are completely internal and protected by the surrounding glass.

Materials

Our TA Quentin prepared K9 crystal cubes from Amazon for the session. We used 50mm cubes because the machine can't easily engrave curved surfaces - the curved glass refracts and scatters the beam.

There's a workaround using index-matching oil that lets you engrave spheres, but xTool doesn't sell it yet (coming January 2026, apparently).

Classmate's Work before I started

My classmate Abby 3D scanned her own head and attached some tentacles she found online. Wonderfully creepy.

Abby's 3D scanned head with tentacles

Process

Building pano2points

I built a Python tool called pano2points to convert Street View panoramas into engravable point clouds. It uses streetlevel to download panoramas directly from Google.

The pipeline: download panorama → filter out bright pixels (sky) → Floyd-Steinberg dithering → map to spherical shell → export as PLY.

Raw equirectangular panorama - notice the crooked horizon
Raw equirectangular panorama - notice the crooked horizon© Google Street View

The raw image is tilted because it's captured from a camera on a backpack carried by a person walking through the park. When you view it on Street View, Google corrects this in the browser. My tool fetches the pitch/roll metadata and auto-levels the panorama before processing:

After spherical correction - horizon leveled
After spherical correction - horizon leveled© Google Street View

The metadata from Google:

{
  "id": "eKHNUWxhdsVMzC9kQyaNuQ",
  "date": "2021-06",
  "lat": 40.73106008840639,
  "lon": -73.9972528394663,
  "pitch": 0.131312750184646,
  "roll": 6.1606266338141396,
  "heading": 3.860726575376108,
  "elevation": 10.22285175323486
}

Generating Point Clouds

# Download panorama (auto-leveled)
uv run scripts/download_washington_square.py data/washington_square.jpg --zoom 3

# Generate point cloud (brightness filter removes sky)
uv run pano2points data/washington_square.jpg --max-size 8000 -r 25 --brightness-max 0.6

The --brightness-max 0.6 filter removes the sky, keeping buildings, trees, and ground.

Zoom
Resolution
Points
2
2048×1024
~158k
3
4096×2048
~630k
4
8192×4096
~2.4M

Engraving

The xTool software imports the PLY and handles layer-by-layer slicing. The laser starts from the bottom and works up to avoid passing through already-engraved areas.

UV laser engraving process - surprisingly fast

Results

I made two versions to compare resolutions:

Version 1: ~158k points

Only took about 3 minutes to engrave - very fast. I particularly liked the detail of the trees in the point cloud. Since it's high frequency detail, I wanted to push the resolution higher.

Version 1: Lower resolution
Version 1: Lower resolution
Walkaround of Version 1

Version 2: ~630k points

This one took 12 minutes - duration scales linearly with point count, which makes sense (4x the points, 4x the time). The PLY file came out to 19.1MB - xTool's glass engraving software only accepts files under 30MB, so we're good but getting close to the limit.

I love how this one turned out. You can actually make out individual trees and the arch. Sorry about the video quality - compressed video really doesn't do it justice. The photo is more representative.

Version 2: Higher resolution
Version 2: Higher resolution
Close-up of the tree detail
Close-up of the tree detail
Walkaround of Version 2

Comparison

Side-by-side: Version 1 (left) vs Version 2 (right)
Version 2 in the machine

References

Design Files