Complete Projects
42.1 Animated plasma (fullscreen pixel shader)
cbuffer Frame : register(b0) { float gT; float3 pad; float2 gRes; float2 pad2; };
float4 PlasmaPS(float4 pos : SV_Position) : SV_Target
{
float2 uv = (pos.xy - 0.5 * gRes) / gRes.y;
float t = gT * 0.5;
float v = sin(uv.x * 10 + t) + sin((uv.y * 10 + t) * 0.5)
+ sin((uv.x * 10 + uv.y * 10 + t) * 0.5)
+ sin(length(uv * 10 + float2(sin(t * 0.3), cos(t * 0.5)) * 3) + t);
return float4(0.5 + 0.5 * cos(3.14159 * v + float3(0, 2, 4)), 1);
}42.2 Compute-shader Game of Life
Texture2D<uint> gPrev : register(t0);
RWTexture2D<uint> gNext : register(u0);
cbuffer Life : register(b0) { uint2 gGrid; };
[numthreads(8, 8, 1)]
void LifeCS(uint3 id : SV_DispatchThreadID)
{
if (any(id.xy >= gGrid)) return;
uint n = 0;
[unroll] for (int y = -1; y <= 1; ++y)
[unroll] for (int x = -1; x <= 1; ++x)
if (x != 0 || y != 0)
n += gPrev[(int2(id.xy) + int2(x, y) + int2(gGrid)) % int2(gGrid)]; // wrap around
uint alive = gPrev[id.xy];
gNext[id.xy] = (n == 3 || (alive && n == 2)) ? 1 : 0;
}
// Ping-pong the two textures each frame; visualize with a pixel shader reading gNext.42.3 Larger projects
glTF PBR viewer (D3D12) metallic-roughness PBR, IBL precomputed in compute, CSM shadows, HDR + ACES, TAA, ImGui debug views (normals, roughness, AO) Deferred + clustered renderer
G-buffer MRT, compute light clustering into a froxel grid, thousands of point lights, SSAO, SSR, bloom GPU-driven renderer bindless SM 6.6, meshlets with amplification-shader culling, Hi-Z occlusion, ExecuteIndirect, one draw per frame Hybrid ray tracer rasterized G-buffer + DXR/RayQuery shadows, reflections, AO; temporal + spatial denoiser Ocean & sky
FFT ocean in compute, tessellation or mesh shaders, Fresnel, foam, physically based atmosphere Unity/Unreal stylized pack toon lighting, outlines, dissolve, water, and a post-process stack as reusable engine shaders