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