cinight/MinimalCompute

C#

1,524

133 commits

updated Mar 24, 2026

See the code

README

Minimal Compute Shader Examples

Minimal test scenes contains compute shaders, compute buffers etc Playing with the transport between CPU <-> GPU

Unity version : 6000.3 (Unity 6.3), contains both BuiltinRP and Universal Render Pipeline (URP) scenes
See branches for older Unity versions
Tested with : Win DX11

SceneImageDescription
🔷 01_Compute_Texture 🔷
01_1_BasicThe most basic one, edit texture with compute shader, shader takes the texture for rendering
01_2_FallingSandExample of using compute to animate texture pixels
01_3_Fluid_2DGPU Fluid. Ref to Scrawk/GPU-GEMS-2D-Fluid-Simulation
01_4_Fluid_3DA 3D version based on above GPU Fluid
🔷 02_StructuredBuffer 🔷
02_1_StructuredBufferNoComputeComputeBuffer can also be used in Shader, not just ComputeShader. The folder contains implementation of unlit vert-frag, surface shader and unlit URP shader
02_2_ComputePaintTexturePaint the texture by sending object positions to compute shader with StructuredBuffer
02_3_RotatingCirclesSimilar to above, just another playground scene
02_4_ComputePaintTexture_DFTSimilar to above but drawing with Epicycles using Discrete Fourier Transform. Ref to The Coding Train's youtube video
02_5_ComputeParticlesDirectGPU Particle, drawing fixed no. of particles
02_6_ComputeSketchDraw quads on the screen with color filled by compute shader
02_7_ShimmerSpherePass spheres position and radius to quad material for a fake shimmer effect
🔷 03_GPU_to_CPU 🔷
03_1_StructuredBufferWithComputeAnother basic one, use compute to calculate some data and send back to CPU
03_2_AsyncGPUReadbackSimilar to StructuredBufferWithCompute, but use AsyncGPUReadback to get array data back to CPU
03_3_AsyncGPUReadbackTexResult is same as ComputeUAVTexture, but this scene uses AsyncGPUReadback to get texture data back to CPU, and CPU send the texture data to Shader for rendering
03_4_AsyncGPUReadbackMeshUpdate mesh vertices with compute + AsyncGPUReadback to get the vertex data back to CPU for physics
03_5_AsyncGPUReadbackMesh_NewMeshAPISame as above but using the new Mesh API
03_6_PixelPercentageCount the filled pixel percentage
03_7_ColorPaletteFind the top colors and replace them
🔷 04_Indirect 🔷
04_1_IndirectComputeSimple indirect compute (indirect dispatch) and CopyCount
04_2_ComputeParticlesIndirectGPU Particle, drawing dynamic no. of particles, no need to read back to CPU!
04_3_ComputeParticlesIndirect_VFXImplementation of above scene with VFX graph
04_4_IndirectReflectedStarDraw stars on the screen only if the pixels are bright enough
🔷 05_Shader_to_CPU 🔷
05_1_UAVInShaderRead some data back to CPU from fragment shader
05_2_ShaderBakeToTextureBake shader pixel result to texture
🔷 06_Compute_Mesh 🔷
06_1_ComputeVertexReplace vertex buffer with StructuredBuffer and drive vertex displacement by compute
06_2_ComputeVertexLitA usecase of above, with different shader passes share the same vertex data
06_3_SkinnedMeshBuffer_SameMeshBlend the vertex data from 2 SkinnedMeshRenderer vertex buffer and render it with MeshRenderer
06_4_SkinnedMeshBuffer_DiffMeshSimilar to above but blending 2 different SkinnedMeshes. The blended triangles are drawn with DrawMeshInstancedIndirect()
06_5_VFXGraphMeshDeformUsing VFX Graph to deforming mesh (particle as vertex)

Disclaimer: The stuff here might not be the best practice / optimized :'(. But at least they works. Play them for fun.

compute-shaders
unity
unity3d

cinight/MinimalCompute

C#

1,524

133 commits

updated Mar 24, 2026

See the code

README

Minimal Compute Shader Examples

Minimal test scenes contains compute shaders, compute buffers etc Playing with the transport between CPU <-> GPU

Unity version : 6000.3 (Unity 6.3), contains both BuiltinRP and Universal Render Pipeline (URP) scenes
See branches for older Unity versions
Tested with : Win DX11

SceneImageDescription
🔷 01_Compute_Texture 🔷
01_1_BasicThe most basic one, edit texture with compute shader, shader takes the texture for rendering
01_2_FallingSandExample of using compute to animate texture pixels
01_3_Fluid_2DGPU Fluid. Ref to Scrawk/GPU-GEMS-2D-Fluid-Simulation
01_4_Fluid_3DA 3D version based on above GPU Fluid
🔷 02_StructuredBuffer 🔷
02_1_StructuredBufferNoComputeComputeBuffer can also be used in Shader, not just ComputeShader. The folder contains implementation of unlit vert-frag, surface shader and unlit URP shader
02_2_ComputePaintTexturePaint the texture by sending object positions to compute shader with StructuredBuffer
02_3_RotatingCirclesSimilar to above, just another playground scene
02_4_ComputePaintTexture_DFTSimilar to above but drawing with Epicycles using Discrete Fourier Transform. Ref to The Coding Train's youtube video
02_5_ComputeParticlesDirectGPU Particle, drawing fixed no. of particles
02_6_ComputeSketchDraw quads on the screen with color filled by compute shader
02_7_ShimmerSpherePass spheres position and radius to quad material for a fake shimmer effect
🔷 03_GPU_to_CPU 🔷
03_1_StructuredBufferWithComputeAnother basic one, use compute to calculate some data and send back to CPU
03_2_AsyncGPUReadbackSimilar to StructuredBufferWithCompute, but use AsyncGPUReadback to get array data back to CPU
03_3_AsyncGPUReadbackTexResult is same as ComputeUAVTexture, but this scene uses AsyncGPUReadback to get texture data back to CPU, and CPU send the texture data to Shader for rendering
03_4_AsyncGPUReadbackMeshUpdate mesh vertices with compute + AsyncGPUReadback to get the vertex data back to CPU for physics
03_5_AsyncGPUReadbackMesh_NewMeshAPISame as above but using the new Mesh API
03_6_PixelPercentageCount the filled pixel percentage
03_7_ColorPaletteFind the top colors and replace them
🔷 04_Indirect 🔷
04_1_IndirectComputeSimple indirect compute (indirect dispatch) and CopyCount
04_2_ComputeParticlesIndirectGPU Particle, drawing dynamic no. of particles, no need to read back to CPU!
04_3_ComputeParticlesIndirect_VFXImplementation of above scene with VFX graph
04_4_IndirectReflectedStarDraw stars on the screen only if the pixels are bright enough
🔷 05_Shader_to_CPU 🔷
05_1_UAVInShaderRead some data back to CPU from fragment shader
05_2_ShaderBakeToTextureBake shader pixel result to texture
🔷 06_Compute_Mesh 🔷
06_1_ComputeVertexReplace vertex buffer with StructuredBuffer and drive vertex displacement by compute
06_2_ComputeVertexLitA usecase of above, with different shader passes share the same vertex data
06_3_SkinnedMeshBuffer_SameMeshBlend the vertex data from 2 SkinnedMeshRenderer vertex buffer and render it with MeshRenderer
06_4_SkinnedMeshBuffer_DiffMeshSimilar to above but blending 2 different SkinnedMeshes. The blended triangles are drawn with DrawMeshInstancedIndirect()
06_5_VFXGraphMeshDeformUsing VFX Graph to deforming mesh (particle as vertex)

Disclaimer: The stuff here might not be the best practice / optimized :'(. But at least they works. Play them for fun.

compute-shaders
unity
unity3d

Significant stargazers

Nathan GDQuest

967 followers · starred Feb 2023

Felix Herbst

180 followers · starred Jan 2021

Beau Gunderson

449 followers · starred Jan 2021

NPatch

8 followers · starred Jun 2021