diff --git a/src/common/rendering/hwrenderer/data/hw_renderstate.h b/src/common/rendering/hwrenderer/data/hw_renderstate.h index 369914ba0..236cc9e45 100644 --- a/src/common/rendering/hwrenderer/data/hw_renderstate.h +++ b/src/common/rendering/hwrenderer/data/hw_renderstate.h @@ -213,6 +213,7 @@ public: mSurfaceUniforms.uFogDensity = 0.0f; mSurfaceUniforms.uLightLevel = -1.0f; mSurfaceUniforms.uDepthFadeThreshold = 0.0f; + mSurfaceUniforms.uLightProbeIndex = 0; mSpecialEffect = EFF_NONE; mLightIndex = -1; mBoneIndexBase = -1; @@ -560,6 +561,11 @@ public: mFogballIndex = index; } + void SetLightProbeIndex(int index) + { + mSurfaceUniforms.uLightProbeIndex = index; + } + void SetRenderStyle(FRenderStyle rs) { mRenderStyle = rs; diff --git a/src/common/rendering/hwrenderer/data/hw_surfaceuniforms.h b/src/common/rendering/hwrenderer/data/hw_surfaceuniforms.h index 7166fb092..01d0fc877 100644 --- a/src/common/rendering/hwrenderer/data/hw_surfaceuniforms.h +++ b/src/common/rendering/hwrenderer/data/hw_surfaceuniforms.h @@ -45,7 +45,7 @@ struct SurfaceUniforms float uAlphaThreshold; int uTextureIndex; float uDepthFadeThreshold; - float padding1; + int uLightProbeIndex; FVector3 uActorCenter; float padding2; }; diff --git a/wadsrc/static/shaders/binding_struct_definitions.glsl b/wadsrc/static/shaders/binding_struct_definitions.glsl index c17852701..fdb4dd660 100644 --- a/wadsrc/static/shaders/binding_struct_definitions.glsl +++ b/wadsrc/static/shaders/binding_struct_definitions.glsl @@ -115,7 +115,7 @@ struct SurfaceUniforms float uAlphaThreshold; int uTextureIndex; float uDepthFadeThreshold; - float padding1; + int uLightProbeIndex; vec3 uActorCenter; float padding2; }; diff --git a/wadsrc/static/shaders/scene/lightmodel_pbr.glsl b/wadsrc/static/shaders/scene/lightmodel_pbr.glsl index 77d839948..433f18c84 100644 --- a/wadsrc/static/shaders/scene/lightmodel_pbr.glsl +++ b/wadsrc/static/shaders/scene/lightmodel_pbr.glsl @@ -142,8 +142,6 @@ vec3 ProcessMaterialLight(Material material, vec3 ambientLight) Lo += (kD * albedo / PI + specular) * radiance; } - float probeIndex = 0.0; // To do: get this from an uniform - vec3 F = fresnelSchlickRoughness(clamp(dot(N, V), 0.0, 1.0), F0, roughness); vec3 kS = F; @@ -151,13 +149,13 @@ vec3 ProcessMaterialLight(Material material, vec3 ambientLight) const float environmentScaleFactor = 0.1; - vec3 irradiance = texture(IrradianceMap, vec4(N, probeIndex)).rgb * environmentScaleFactor; + vec3 irradiance = texture(IrradianceMap, vec4(N, uLightProbeIndex)).rgb * environmentScaleFactor; vec3 diffuse = irradiance * albedo; kD *= 1.0 - metallic; const float MAX_REFLECTION_LOD = 4.0; vec3 R = reflect(-V, N); - vec3 prefilteredColor = textureLod(PrefilterMap, vec4(R, probeIndex), roughness * MAX_REFLECTION_LOD).rgb * environmentScaleFactor; + vec3 prefilteredColor = textureLod(PrefilterMap, vec4(R, uLightProbeIndex), roughness * MAX_REFLECTION_LOD).rgb * environmentScaleFactor; vec2 envBRDF = texture(textures[BrdfLUT], vec2(clamp(dot(N, V), 0.0, 1.0), roughness)).rg; vec3 specular = prefilteredColor * (F * envBRDF.x + envBRDF.y);