UNLIT_WGSL

Constant UNLIT_WGSL 

Source
pub const UNLIT_WGSL: &str = "// Simple Unlit Shader - With camera and model transforms\n// Renders geometry with a flat white color (no lighting, no vertex colors)\n\n// --- Camera Uniforms (group 0, binding 0) ---\n\nstruct CameraUniforms {\n    view_projection: mat4x4<f32>,\n    camera_position: vec4<f32>,\n};\n\n@group(0) @binding(0)\nvar<uniform> camera: CameraUniforms;\n\n// --- Model Uniforms (group 1, binding 0) ---\n\nstruct ModelUniforms {\n    model_matrix: mat4x4<f32>,\n    normal_matrix: mat4x4<f32>,\n};\n\n@group(1) @binding(0)\nvar<uniform> model: ModelUniforms;\n\n// --- Material Uniforms (group 2, binding 0) ---\n\n// Note: WGSL Uniform struct size MUST exactly match the Rust `MaterialUniforms` struct size\n// sent by the renderer, even if we don\'t use all the fields in the Unlit pipeline.\nstruct MaterialUniforms {\n    base_color: vec4<f32>,\n    emissive: vec3<f32>,\n    specular_power: f32,\n    ambient: vec3<f32>,\n    _padding: f32,\n};\n\n@group(2) @binding(0)\nvar<uniform> material: MaterialUniforms;\n\n// Vertex input matching the standard mesh layout: pos + normal + uv\nstruct VertexInput {\n    @location(0) position: vec3<f32>,\n    @location(1) normal: vec3<f32>,\n    @location(2) uv: vec2<f32>,\n};\n\n// Output from vertex shader to fragment shader\nstruct VertexOutput {\n    @builtin(position) clip_position: vec4<f32>,\n    @location(0) normal: vec3<f32>,\n};\n\n// Vertex shader - transforms positions through model and view-projection matrices\n@vertex\nfn vs_main(input: VertexInput) -> VertexOutput {\n    var output: VertexOutput;\n    let world_pos = model.model_matrix * vec4<f32>(input.position, 1.0);\n    output.clip_position = camera.view_projection * world_pos;\n    output.normal = normalize((model.normal_matrix * vec4<f32>(input.normal, 0.0)).xyz);\n    return output;\n}\n\n// Fragment shader - simple shading based on normal direction for visual feedback\n@fragment\nfn fs_main(input: VertexOutput) -> @location(0) vec4<f32> {\n    // Use normal-based shading so geometry is visible (half-Lambert)\n    let light_dir = normalize(vec3<f32>(0.5, 1.0, 0.3));\n    let ndotl = max(dot(input.normal, light_dir), 0.0);\n    let ambient = 0.15;\n    let brightness = ambient + ndotl * 0.85;\n    let base = vec3<f32>(brightness, brightness, brightness);\n    return vec4<f32>(base * material.base_color.rgb, material.base_color.a);\n}";
Expand description

Simple unlit shader for vertex-colored objects.

Outputs interpolated vertex colors directly without any lighting calculations. Useful for debug visualization and UI elements.