Matt Pfeiffer ᯅ
@mattpfeiffer.bsky.social
Platforms Engineer | Audio/Graphics | RealityKit | Metal
RealityKit experiment #84
(code in the replies)
Here's an update to my Logitech Muse example that handles the pressure values for the tip and secondary button
(code in the replies)
Here's an update to my Logitech Muse example that handles the pressure values for the tip and secondary button
November 6, 2025 at 1:54 PM
RealityKit experiment #84
(code in the replies)
Here's an update to my Logitech Muse example that handles the pressure values for the tip and secondary button
(code in the replies)
Here's an update to my Logitech Muse example that handles the pressure values for the tip and secondary button
RealityKit experiment #83
(code in the replies)
This example turns the Logitech Muse into a virtual laser pen for point-to-point measurements. The surface intersection point is determined by raycasting along the stylus' aim-origin vector against the scene reconstruction meshes
(code in the replies)
This example turns the Logitech Muse into a virtual laser pen for point-to-point measurements. The surface intersection point is determined by raycasting along the stylus' aim-origin vector against the scene reconstruction meshes
October 27, 2025 at 11:23 AM
RealityKit experiment #83
(code in the replies)
This example turns the Logitech Muse into a virtual laser pen for point-to-point measurements. The surface intersection point is determined by raycasting along the stylus' aim-origin vector against the scene reconstruction meshes
(code in the replies)
This example turns the Logitech Muse into a virtual laser pen for point-to-point measurements. The surface intersection point is determined by raycasting along the stylus' aim-origin vector against the scene reconstruction meshes
RealityKit experiment #82
(code in the replies)
Here’s a simple Logitech Muse example that tracks the aim, handles the action buttons, and triggers haptics
(code in the replies)
Here’s a simple Logitech Muse example that tracks the aim, handles the action buttons, and triggers haptics
October 24, 2025 at 10:14 AM
RealityKit experiment #82
(code in the replies)
Here’s a simple Logitech Muse example that tracks the aim, handles the action buttons, and triggers haptics
(code in the replies)
Here’s a simple Logitech Muse example that tracks the aim, handles the action buttons, and triggers haptics
RealityKit experiment #81
(code in the replies)
I found a scan of a human skeleton and wanted to try to visualize it in RealityKit. The PLY file had millions of triangles, so I had to decimate the mesh. It ended up being really satisfying to see the wireframe at different LODs
(code in the replies)
I found a scan of a human skeleton and wanted to try to visualize it in RealityKit. The PLY file had millions of triangles, so I had to decimate the mesh. It ended up being really satisfying to see the wireframe at different LODs
October 5, 2025 at 5:05 PM
RealityKit experiment #81
(code in the replies)
I found a scan of a human skeleton and wanted to try to visualize it in RealityKit. The PLY file had millions of triangles, so I had to decimate the mesh. It ended up being really satisfying to see the wireframe at different LODs
(code in the replies)
I found a scan of a human skeleton and wanted to try to visualize it in RealityKit. The PLY file had millions of triangles, so I had to decimate the mesh. It ended up being really satisfying to see the wireframe at different LODs
RealityKit experiment #80
(gist in the replies)
LowLevelMesh “Falling Sand” dissolution and reassemble effect created with SDF shapes and Marching Cubes. A Metal compute shader uses a spatial sweep to "release" triangles that rigidly start to fall
(gist in the replies)
LowLevelMesh “Falling Sand” dissolution and reassemble effect created with SDF shapes and Marching Cubes. A Metal compute shader uses a spatial sweep to "release" triangles that rigidly start to fall
October 2, 2025 at 9:45 AM
RealityKit experiment #80
(gist in the replies)
LowLevelMesh “Falling Sand” dissolution and reassemble effect created with SDF shapes and Marching Cubes. A Metal compute shader uses a spatial sweep to "release" triangles that rigidly start to fall
(gist in the replies)
LowLevelMesh “Falling Sand” dissolution and reassemble effect created with SDF shapes and Marching Cubes. A Metal compute shader uses a spatial sweep to "release" triangles that rigidly start to fall
RealityKit experiment #79
(code in the replies)
Animating 3D text by converting the output of MeshResource(extruding:) to a LowLevelMesh and applying a Metal compute shader
The MeshResource was interesting to unpack since it had multiple models/parts plus instance transforms
(code in the replies)
Animating 3D text by converting the output of MeshResource(extruding:) to a LowLevelMesh and applying a Metal compute shader
The MeshResource was interesting to unpack since it had multiple models/parts plus instance transforms
September 25, 2025 at 11:27 AM
RealityKit experiment #79
(code in the replies)
Animating 3D text by converting the output of MeshResource(extruding:) to a LowLevelMesh and applying a Metal compute shader
The MeshResource was interesting to unpack since it had multiple models/parts plus instance transforms
(code in the replies)
Animating 3D text by converting the output of MeshResource(extruding:) to a LowLevelMesh and applying a Metal compute shader
The MeshResource was interesting to unpack since it had multiple models/parts plus instance transforms
RealityKit experiment #78
(gist in the replies)
LowLevelMesh explode-and-assemble animation created by meshing an SDF using Marching Cubes and rigidly pushing it’s triangles outward
(gist in the replies)
LowLevelMesh explode-and-assemble animation created by meshing an SDF using Marching Cubes and rigidly pushing it’s triangles outward
September 18, 2025 at 11:24 AM
RealityKit experiment #78
(gist in the replies)
LowLevelMesh explode-and-assemble animation created by meshing an SDF using Marching Cubes and rigidly pushing it’s triangles outward
(gist in the replies)
LowLevelMesh explode-and-assemble animation created by meshing an SDF using Marching Cubes and rigidly pushing it’s triangles outward
RealityKit experiment #77
(gist in the replies)
Color-blending metaballs created from animated sphere SDFs via Marching Cubes. LowLevelMesh vertices store per-vertex color in the Geometry Color vertex attribute, read by ShaderGraphMaterial
(gist in the replies)
Color-blending metaballs created from animated sphere SDFs via Marching Cubes. LowLevelMesh vertices store per-vertex color in the Geometry Color vertex attribute, read by ShaderGraphMaterial
August 29, 2025 at 12:20 PM
RealityKit experiment #77
(gist in the replies)
Color-blending metaballs created from animated sphere SDFs via Marching Cubes. LowLevelMesh vertices store per-vertex color in the Geometry Color vertex attribute, read by ShaderGraphMaterial
(gist in the replies)
Color-blending metaballs created from animated sphere SDFs via Marching Cubes. LowLevelMesh vertices store per-vertex color in the Geometry Color vertex attribute, read by ShaderGraphMaterial
RealityKit experiment #76
(gist in the replies)
LowLevelMesh blob from meshing the smooth-min of animated sphere SDFs with marching cubes. Glassy ShaderGraphMaterial is based on Apple's "Implementing adjustable material" sample
(gist in the replies)
LowLevelMesh blob from meshing the smooth-min of animated sphere SDFs with marching cubes. Glassy ShaderGraphMaterial is based on Apple's "Implementing adjustable material" sample
August 20, 2025 at 8:59 AM
RealityKit experiment #76
(gist in the replies)
LowLevelMesh blob from meshing the smooth-min of animated sphere SDFs with marching cubes. Glassy ShaderGraphMaterial is based on Apple's "Implementing adjustable material" sample
(gist in the replies)
LowLevelMesh blob from meshing the smooth-min of animated sphere SDFs with marching cubes. Glassy ShaderGraphMaterial is based on Apple's "Implementing adjustable material" sample
RealityKit experiment #75
(gist in the replies)
LowLevelMesh shape shifting by interpolating between two signed distance fields and meshing with marching cubes
(gist in the replies)
LowLevelMesh shape shifting by interpolating between two signed distance fields and meshing with marching cubes
August 13, 2025 at 11:40 AM
RealityKit experiment #75
(gist in the replies)
LowLevelMesh shape shifting by interpolating between two signed distance fields and meshing with marching cubes
(gist in the replies)
LowLevelMesh shape shifting by interpolating between two signed distance fields and meshing with marching cubes
RealityKit experiment #74
(gist in the replies)
- LowLevelMesh with disconnected geometry
- Marching Cubes + SDF for vertex positions
- Vertex normals from SDF gradient
- Polynomial smooth-min to blend the shapes
(gist in the replies)
- LowLevelMesh with disconnected geometry
- Marching Cubes + SDF for vertex positions
- Vertex normals from SDF gradient
- Polynomial smooth-min to blend the shapes
August 8, 2025 at 11:15 AM
RealityKit experiment #74
(gist in the replies)
- LowLevelMesh with disconnected geometry
- Marching Cubes + SDF for vertex positions
- Vertex normals from SDF gradient
- Polynomial smooth-min to blend the shapes
(gist in the replies)
- LowLevelMesh with disconnected geometry
- Marching Cubes + SDF for vertex positions
- Vertex normals from SDF gradient
- Polynomial smooth-min to blend the shapes
RealityKit experiment #73
(gist in the replies)
Here's a simple burn fade example. The ShaderGraphMaterial directly sets the color and opacity from the UV2 attribute of the LowLevelMesh vertices and the Metal compute shader updates those color/opacity values
(gist in the replies)
Here's a simple burn fade example. The ShaderGraphMaterial directly sets the color and opacity from the UV2 attribute of the LowLevelMesh vertices and the Metal compute shader updates those color/opacity values
July 22, 2025 at 12:22 AM
RealityKit experiment #73
(gist in the replies)
Here's a simple burn fade example. The ShaderGraphMaterial directly sets the color and opacity from the UV2 attribute of the LowLevelMesh vertices and the Metal compute shader updates those color/opacity values
(gist in the replies)
Here's a simple burn fade example. The ShaderGraphMaterial directly sets the color and opacity from the UV2 attribute of the LowLevelMesh vertices and the Metal compute shader updates those color/opacity values
RealityKit experiment #72
(gist in the comments)
LowLevelMesh Torus Spinner
- incrementally adds vertices/indices (or shifts the indexOffset when removing)
- multiple layers of varying opacity and minor radius are stacked with additive blend mode for the glow effect
(gist in the comments)
LowLevelMesh Torus Spinner
- incrementally adds vertices/indices (or shifts the indexOffset when removing)
- multiple layers of varying opacity and minor radius are stacked with additive blend mode for the glow effect
July 20, 2025 at 12:42 PM
RealityKit experiment #72
(gist in the comments)
LowLevelMesh Torus Spinner
- incrementally adds vertices/indices (or shifts the indexOffset when removing)
- multiple layers of varying opacity and minor radius are stacked with additive blend mode for the glow effect
(gist in the comments)
LowLevelMesh Torus Spinner
- incrementally adds vertices/indices (or shifts the indexOffset when removing)
- multiple layers of varying opacity and minor radius are stacked with additive blend mode for the glow effect
RealityKit experiment #71
(gist in the comments)
- Loads mesh & texture from USDZ
- LowLevelMesh verts use float4 color+alpha in uv2
- ShaderGraphMaterial blends texture with uv2.rgb, sets opacity from uv2.w
- Metal Compute Shader animates uv2
(gist in the comments)
- Loads mesh & texture from USDZ
- LowLevelMesh verts use float4 color+alpha in uv2
- ShaderGraphMaterial blends texture with uv2.rgb, sets opacity from uv2.w
- Metal Compute Shader animates uv2
July 16, 2025 at 11:30 AM
RealityKit experiment #71
(gist in the comments)
- Loads mesh & texture from USDZ
- LowLevelMesh verts use float4 color+alpha in uv2
- ShaderGraphMaterial blends texture with uv2.rgb, sets opacity from uv2.w
- Metal Compute Shader animates uv2
(gist in the comments)
- Loads mesh & texture from USDZ
- LowLevelMesh verts use float4 color+alpha in uv2
- ShaderGraphMaterial blends texture with uv2.rgb, sets opacity from uv2.w
- Metal Compute Shader animates uv2
RealityKit experiment #70
(gist in the comments)
Grass Mesh with Wind 🌬️🌿
- Single LowLevelMesh with part for each blade
- Poisson Disk Sampling for evenly distributed blade placement
- Incremental mesh growth performed on CPU
- Compute Shader for offsetting vertices on GPU
(gist in the comments)
Grass Mesh with Wind 🌬️🌿
- Single LowLevelMesh with part for each blade
- Poisson Disk Sampling for evenly distributed blade placement
- Incremental mesh growth performed on CPU
- Compute Shader for offsetting vertices on GPU
July 6, 2025 at 3:43 PM
RealityKit experiment #70
(gist in the comments)
Grass Mesh with Wind 🌬️🌿
- Single LowLevelMesh with part for each blade
- Poisson Disk Sampling for evenly distributed blade placement
- Incremental mesh growth performed on CPU
- Compute Shader for offsetting vertices on GPU
(gist in the comments)
Grass Mesh with Wind 🌬️🌿
- Single LowLevelMesh with part for each blade
- Poisson Disk Sampling for evenly distributed blade placement
- Incremental mesh growth performed on CPU
- Compute Shader for offsetting vertices on GPU
RealityKit experiment #69 🇺🇸🔊
(gist in the comments)
Happy 4th of July!!
- LowLevelMesh + compute shader for flag
- Burst particles + point light for fireworks
- Entity.playAudio(resource:) for sound
- MeshResource(extruding:) for text
(gist in the comments)
Happy 4th of July!!
- LowLevelMesh + compute shader for flag
- Burst particles + point light for fireworks
- Entity.playAudio(resource:) for sound
- MeshResource(extruding:) for text
July 4, 2025 at 3:26 PM
RealityKit experiment #69 🇺🇸🔊
(gist in the comments)
Happy 4th of July!!
- LowLevelMesh + compute shader for flag
- Burst particles + point light for fireworks
- Entity.playAudio(resource:) for sound
- MeshResource(extruding:) for text
(gist in the comments)
Happy 4th of July!!
- LowLevelMesh + compute shader for flag
- Burst particles + point light for fireworks
- Entity.playAudio(resource:) for sound
- MeshResource(extruding:) for text
RealityKit experiment #68
(gist in the comments)
One LowLevelMesh with 50 procedurally growing branches. Each branch pre-allocates vertex/index space with offsets. Using multiple parts with index offsets organizes the bookkeeping which enables growing each branch incrementally
(gist in the comments)
One LowLevelMesh with 50 procedurally growing branches. Each branch pre-allocates vertex/index space with offsets. Using multiple parts with index offsets organizes the bookkeeping which enables growing each branch incrementally
June 30, 2025 at 3:07 PM
RealityKit experiment #68
(gist in the comments)
One LowLevelMesh with 50 procedurally growing branches. Each branch pre-allocates vertex/index space with offsets. Using multiple parts with index offsets organizes the bookkeeping which enables growing each branch incrementally
(gist in the comments)
One LowLevelMesh with 50 procedurally growing branches. Each branch pre-allocates vertex/index space with offsets. Using multiple parts with index offsets organizes the bookkeeping which enables growing each branch incrementally
RealityKit experiment #67
(gist in the comments)
LowLevelMesh with multiple parts and material indexing
(gist in the comments)
LowLevelMesh with multiple parts and material indexing
June 29, 2025 at 3:45 PM
RealityKit experiment #67
(gist in the comments)
LowLevelMesh with multiple parts and material indexing
(gist in the comments)
LowLevelMesh with multiple parts and material indexing
RealityKit experiment #66
(gist in the comments)
LowLevelMesh growing/shrinking branch
(gist in the comments)
LowLevelMesh growing/shrinking branch
June 28, 2025 at 11:33 AM
RealityKit experiment #66
(gist in the comments)
LowLevelMesh growing/shrinking branch
(gist in the comments)
LowLevelMesh growing/shrinking branch
RealityKit experiment #65
(code in the comments)
LowLevelMesh sphere to circular plane morph using Metal compute shader
(code in the comments)
LowLevelMesh sphere to circular plane morph using Metal compute shader
June 22, 2025 at 2:30 PM
RealityKit experiment #65
(code in the comments)
LowLevelMesh sphere to circular plane morph using Metal compute shader
(code in the comments)
LowLevelMesh sphere to circular plane morph using Metal compute shader
RealityKit experiment #64
(code in the comments)
LowLevelMesh sphere to rectangular plane morph using Metal compute shader
(code in the comments)
LowLevelMesh sphere to rectangular plane morph using Metal compute shader
June 21, 2025 at 2:17 PM
RealityKit experiment #64
(code in the comments)
LowLevelMesh sphere to rectangular plane morph using Metal compute shader
(code in the comments)
LowLevelMesh sphere to rectangular plane morph using Metal compute shader
RealityKit experiment #63
(code in the comments)
Procedural tree with LowLevelMesh. Branching is still pretty simple, but figured I'd share before going too deep into growth direction algorithms
(code in the comments)
Procedural tree with LowLevelMesh. Branching is still pretty simple, but figured I'd share before going too deep into growth direction algorithms
June 14, 2025 at 3:35 PM
RealityKit experiment #63
(code in the comments)
Procedural tree with LowLevelMesh. Branching is still pretty simple, but figured I'd share before going too deep into growth direction algorithms
(code in the comments)
Procedural tree with LowLevelMesh. Branching is still pretty simple, but figured I'd share before going too deep into growth direction algorithms
RealityKit experiment #62
(code in the comments)
Pancake effect using LowLevelMesh and a Metal compute shader. It progressively compresses all vertices towards the minimum Z bound
(code in the comments)
Pancake effect using LowLevelMesh and a Metal compute shader. It progressively compresses all vertices towards the minimum Z bound
June 1, 2025 at 3:10 PM
RealityKit experiment #62
(code in the comments)
Pancake effect using LowLevelMesh and a Metal compute shader. It progressively compresses all vertices towards the minimum Z bound
(code in the comments)
Pancake effect using LowLevelMesh and a Metal compute shader. It progressively compresses all vertices towards the minimum Z bound
RealityKit experiment #61
(code in the comments)
Height map image to animated 3D terrain pipeline using LowLevelMesh, LowLevelTexture, and Metal compute shaders
Inspired by Apple's tutorial on the topic (link in replies)
(code in the comments)
Height map image to animated 3D terrain pipeline using LowLevelMesh, LowLevelTexture, and Metal compute shaders
Inspired by Apple's tutorial on the topic (link in replies)
May 26, 2025 at 10:13 PM
RealityKit experiment #61
(code in the comments)
Height map image to animated 3D terrain pipeline using LowLevelMesh, LowLevelTexture, and Metal compute shaders
Inspired by Apple's tutorial on the topic (link in replies)
(code in the comments)
Height map image to animated 3D terrain pipeline using LowLevelMesh, LowLevelTexture, and Metal compute shaders
Inspired by Apple's tutorial on the topic (link in replies)
RealityKit experiment #60
(code in the comments)
Takes USDZ model, extracts vertex/texture data into LowLevelMesh & LowLevelTexture, then uses compute shaders to morph the vertices to a sphere and fade the texture to white
(code in the comments)
Takes USDZ model, extracts vertex/texture data into LowLevelMesh & LowLevelTexture, then uses compute shaders to morph the vertices to a sphere and fade the texture to white
May 25, 2025 at 3:08 PM
RealityKit experiment #60
(code in the comments)
Takes USDZ model, extracts vertex/texture data into LowLevelMesh & LowLevelTexture, then uses compute shaders to morph the vertices to a sphere and fade the texture to white
(code in the comments)
Takes USDZ model, extracts vertex/texture data into LowLevelMesh & LowLevelTexture, then uses compute shaders to morph the vertices to a sphere and fade the texture to white