EMISSIVE_WGSL

Constant EMISSIVE_WGSL 

Source
pub const EMISSIVE_WGSL: &str = "// Emissive Material Shader\n// For self-illuminating surfaces with HDR intensity support\n\n// --- Vertex Shader ---\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\nstruct VertexInput {\n    @location(0) position: vec3<f32>,\n    @location(1) normal: vec3<f32>,\n    @location(2) uv: vec2<f32>,\n};\n\nstruct VertexOutput {\n    @builtin(position) clip_position: vec4<f32>,\n    @location(0) uv: vec2<f32>,\n};\n\nstruct ModelUniforms {\n    model_matrix: mat4x4<f32>,\n};\n\n@group(1) @binding(0)\nvar<uniform> model: ModelUniforms;\n\n@vertex\nfn vs_main(input: VertexInput) -> VertexOutput {\n    var out: VertexOutput;\n    \n    let world_pos = model.model_matrix * vec4<f32>(input.position, 1.0);\n    out.clip_position = camera.view_projection * world_pos;\n    out.uv = input.uv;\n    \n    return out;\n}\n\n\n// --- Fragment Shader ---\n\nstruct EmissiveMaterialUniforms {\n    emissive_color: vec4<f32>,  // RGB + padding\n    intensity: f32,             // HDR intensity multiplier\n    _padding: vec3<f32>,\n};\n\n@group(2) @binding(0)\nvar<uniform> material: EmissiveMaterialUniforms;\n\n@fragment\nfn fs_main(in: VertexOutput) -> @location(0) vec4<f32> {\n    // Emissive materials simply output their color multiplied by intensity\n    // No lighting calculations needed - they ARE the light source\n    \n    let emissive = material.emissive_color.rgb * material.intensity;\n    \n    // Simple tone mapping for HDR values\n    let tone_mapped = emissive / (emissive + vec3<f32>(1.0));\n    \n    // Gamma correction\n    let gamma_corrected = pow(tone_mapped, vec3<f32>(1.0 / 2.2));\n    \n    return vec4<f32>(gamma_corrected, material.emissive_color.a);\n}\n";
Expand description

Emissive material shader for self-illuminating objects.

Outputs color multiplied by an intensity factor with HDR support. Includes tone mapping and gamma correction.