From 50e325017b1d300fe43be1374780fa703bf340f7 Mon Sep 17 00:00:00 2001 From: ccpisheden Date: Thu, 9 Jul 2026 14:38:49 +0200 Subject: [PATCH 1/2] WIP stuff for fog reflection intensity --- trinity/Eve/SpaceObject/Children/EveChildFogVolume.cpp | 2 ++ .../Eve/SpaceObject/Children/EveChildFogVolume_Blue.cpp | 2 ++ trinity/Tr2VolumetricsRenderer.cpp | 9 ++++----- trinity/Tr2VolumetricsRenderer.h | 5 +++-- trinity/Tr2VolumetricsRenderer_Blue.cpp | 7 +++++++ 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/trinity/Eve/SpaceObject/Children/EveChildFogVolume.cpp b/trinity/Eve/SpaceObject/Children/EveChildFogVolume.cpp index 15f13fbe3..ddd909d31 100644 --- a/trinity/Eve/SpaceObject/Children/EveChildFogVolume.cpp +++ b/trinity/Eve/SpaceObject/Children/EveChildFogVolume.cpp @@ -27,6 +27,8 @@ EveChildFogVolume::EveChildFogVolume( IRoot* lockobj ) : m_settings.fogNoiseFrequency = 15.0f; m_settings.fogNoiseMovementSpeed = Vector3( 0.0f, 0.0f, 0.0f ); + m_settings.reflectionIntensity = 1.0f; + // The proper value is set in the UpdateAsyncronous method m_settings.intensity = 0.0f; } diff --git a/trinity/Eve/SpaceObject/Children/EveChildFogVolume_Blue.cpp b/trinity/Eve/SpaceObject/Children/EveChildFogVolume_Blue.cpp index 76f0c2582..c3225a70e 100644 --- a/trinity/Eve/SpaceObject/Children/EveChildFogVolume_Blue.cpp +++ b/trinity/Eve/SpaceObject/Children/EveChildFogVolume_Blue.cpp @@ -51,6 +51,8 @@ const Be::ClassInfo* EveChildFogVolume::ExposeToBlue() VOLUME_ATTRIBUTE_DEFINE( fogNoiseIntensity, "The intensity of the 3D noise used to modify the fog color. Setting this to 0 gives you a uniform fog, while values above 0.0 will add more variation to the fog color, similar to puffy clouds." ) VOLUME_ATTRIBUTE_DEFINE( fogNoiseFrequency, "The frequency of the 3D noise used to modify the fog color. A higher value makes the cloud puffs larger and less detailed, while a smaller value makes the puffs smaller and more numerous. Around 15.0 is a good starting point." ) + VOLUME_ATTRIBUTE_DEFINE( reflectionIntensity, "A color multiplier for the reflections of the fog. 1.0 is the default/realistic value, but it can be reduced to achieve less intense reflections." ) + MAP_ATTRIBUTE( "boundingSphereCenter", m_boundingSphere.center, "", Be::READ ) MAP_ATTRIBUTE( "boundingSphereRadius", m_boundingSphere.radius, "", Be::READ ) MAP_ATTRIBUTE( "volumes", m_volumes, "", Be::READ | Be::PERSIST ) diff --git a/trinity/Tr2VolumetricsRenderer.cpp b/trinity/Tr2VolumetricsRenderer.cpp index 064451f31..7c7db137b 100644 --- a/trinity/Tr2VolumetricsRenderer.cpp +++ b/trinity/Tr2VolumetricsRenderer.cpp @@ -100,7 +100,6 @@ Tr2VolumetricsRenderer::Tr2VolumetricsRenderer( IRoot* ) : } { - m_testValue = 0.0f; Matrix4dFromMatrix( m_godRayNoiseMatrix, IdentityMatrix() ); } @@ -357,10 +356,6 @@ void Tr2VolumetricsRenderer::UpdateFogSettings( const EveComponentRegistry& regi return a->priority > b->priority; } ); - //m_froxelFogSettings = OldPriorityBlend( overrides ); - - //std::vector test; - #define FROXEL_ACCUMULATE( setting ) m_froxelFogSettings.setting = PriorityBlend::Accumulate( &ITr2FroxelFogSettings::FroxelFogSettings::setting, overrides ) FROXEL_ACCUMULATE( thickness ); @@ -381,6 +376,8 @@ void Tr2VolumetricsRenderer::UpdateFogSettings( const EveComponentRegistry& regi FROXEL_ACCUMULATE( fogNoiseFrequency ); FROXEL_ACCUMULATE( fogNoiseMovementSpeed ); + FROXEL_ACCUMULATE( reflectionIntensity ); + if( m_logBlending ) { //Replace the thickness with a logarithmically interpolated one, making the transition from 0 thickness more graceful. @@ -485,6 +482,7 @@ void Tr2VolumetricsRenderer::UpdateFogEnvironmentMap( Tr2RenderContext& renderCo m_updateMieEnvironmentMap->SetParameter( BlueSharedString( "EnvironmentG" ), environmentG ); m_updateMieEnvironmentMap->SetParameter( BlueSharedString( "BlendWeight" ), blendWeight ); m_updateMieEnvironmentMap->SetParameter( BlueSharedString( "Random" ), m_environmentRandom ); + m_updateMieEnvironmentMap->SetParameter( BlueSharedString( "Intensity" ), m_froxelFogSettings.reflectionIntensity.value ); m_updateMieEnvironmentMap->SetParameter( BlueSharedString( "PrecomputedMieEnvironmentMap" ), m_mieEnvironmentMap ); Tr2Renderer::RunComputeShader( m_updateMieEnvironmentMap, environmentMapResolution / 8, environmentMapResolution / 8, 6, renderContext ); } @@ -802,6 +800,7 @@ Tr2GpuResourcePool::Texture Tr2VolumetricsRenderer::RenderFog( resources.applyFroxels->SetOption( BlueSharedString( "ENVIRONMENT_LIGHTING" ), BlueSharedString( m_froxelFogSettings.environmentIntensity.value > 0 ? "ENVIRONMENT_LIGHTING_ENABLED" : "ENVIRONMENT_LIGHTING_DISABLED" ) ); resources.applyFroxels->SetParameter( BlueSharedString( "EveSceneFroxelFogMap" ), fogFroxels ); + resources.applyFroxels->SetParameter( BlueSharedString( "Intensity" ), 1.0f ); Tr2Renderer::DrawScreenQuad( renderContext, resources.applyFroxels ); resources.applyFroxels->SetParameter( BlueSharedString( "EveSceneFroxelFogMap" ), Tr2TextureAL{} ); } diff --git a/trinity/Tr2VolumetricsRenderer.h b/trinity/Tr2VolumetricsRenderer.h index 6127d3eae..924dbde0f 100644 --- a/trinity/Tr2VolumetricsRenderer.h +++ b/trinity/Tr2VolumetricsRenderer.h @@ -49,6 +49,8 @@ BLUE_INTERFACE( ITr2FroxelFogSettings ) : PriorityBlend::Attribute fogNoiseFrequency = 0.0f; PriorityBlend::Attribute fogNoiseMovementSpeed = Vector3( 0.0f, 0.0f, 0.0f ); + PriorityBlend::Attribute reflectionIntensity = 1.0f; + PriorityBlend::Attribute logThickness = 0.0; }; virtual FroxelFogSettings* GetFroxelFogSettings() = 0; @@ -207,8 +209,7 @@ BLUE_CLASS( Tr2VolumetricsRenderer ) : double m_godRayNoiseAnimation; Vector3d m_fogNoiseMovement; - - float m_testValue; + double m_godRayNoiseMatrix[16]; FogViewDependentResources m_fogResources; diff --git a/trinity/Tr2VolumetricsRenderer_Blue.cpp b/trinity/Tr2VolumetricsRenderer_Blue.cpp index 268eb0ccd..870ef818b 100644 --- a/trinity/Tr2VolumetricsRenderer_Blue.cpp +++ b/trinity/Tr2VolumetricsRenderer_Blue.cpp @@ -135,6 +135,13 @@ const Be::ClassInfo* Tr2VolumetricsRenderer::ExposeToBlue() ":jessica-group: Froxel Fog", Be::READ ) + MAP_ATTRIBUTE( + "reflectionIntensity", + m_froxelFogSettings.reflectionIntensity.value, + "A color multiplier for the reflections of the fog. \n" + ":jessica-group: Froxel Fog", + Be::READ ) + MAP_ATTRIBUTE( "logBlending", From 047e634e06b630be487dc74a1e12d562c7b56d38 Mon Sep 17 00:00:00 2001 From: ccpisheden Date: Tue, 29 Sep 2026 14:30:32 +0200 Subject: [PATCH 2/2] Added reflection intensity parameter to per-frame data. --- trinity/Eve/EveSpaceScene.cpp | 5 +++++ trinity/Tr2VolumetricsRenderer.cpp | 3 +-- trinity/Tr2VolumetricsRenderer.h | 26 +++++++++++++++++++++++--- 3 files changed, 29 insertions(+), 5 deletions(-) diff --git a/trinity/Eve/EveSpaceScene.cpp b/trinity/Eve/EveSpaceScene.cpp index 13cc59fd9..579b288f0 100644 --- a/trinity/Eve/EveSpaceScene.cpp +++ b/trinity/Eve/EveSpaceScene.cpp @@ -1773,6 +1773,11 @@ void EveSpaceScene::RenderReflectionPass( Tr2GpuResourcePool& gpuResourcePool, T // set the current reflection GPU_REGION( renderContext, "Reflection" ); + m_volumetricsRenderer->SetIsReflectionProbe( true ); + ON_BLOCK_EXIT( [&] { + m_volumetricsRenderer->SetIsReflectionProbe( false ); + } ); + // lower the reflection intensity for the objects rendered into the reflection // (so the reflections in the reflections don't get brighter and brighter) // we cap it at 0.8 for no good reason, just felt like a good number to cap the reflection intensity in the reflections diff --git a/trinity/Tr2VolumetricsRenderer.cpp b/trinity/Tr2VolumetricsRenderer.cpp index 214b3079e..11417ed95 100644 --- a/trinity/Tr2VolumetricsRenderer.cpp +++ b/trinity/Tr2VolumetricsRenderer.cpp @@ -482,7 +482,6 @@ void Tr2VolumetricsRenderer::UpdateFogEnvironmentMap( Tr2RenderContext& renderCo m_updateMieEnvironmentMap->SetParameter( BlueSharedString( "EnvironmentG" ), environmentG ); m_updateMieEnvironmentMap->SetParameter( BlueSharedString( "BlendWeight" ), blendWeight ); m_updateMieEnvironmentMap->SetParameter( BlueSharedString( "Random" ), m_environmentRandom ); - m_updateMieEnvironmentMap->SetParameter( BlueSharedString( "Intensity" ), m_froxelFogSettings.reflectionIntensity.value ); m_updateMieEnvironmentMap->SetParameter( BlueSharedString( "PrecomputedMieEnvironmentMap" ), m_mieEnvironmentMap ); Tr2Renderer::RunComputeShader( m_updateMieEnvironmentMap, environmentMapResolution / 8, environmentMapResolution / 8, 6, renderContext ); } @@ -800,7 +799,6 @@ Tr2GpuResourcePool::Texture Tr2VolumetricsRenderer::RenderFog( resources.applyFroxels->SetOption( BlueSharedString( "ENVIRONMENT_LIGHTING" ), BlueSharedString( m_froxelFogSettings.environmentIntensity.value > 0 ? "ENVIRONMENT_LIGHTING_ENABLED" : "ENVIRONMENT_LIGHTING_DISABLED" ) ); resources.applyFroxels->SetParameter( BlueSharedString( "EveSceneFroxelFogMap" ), fogFroxels ); - resources.applyFroxels->SetParameter( BlueSharedString( "Intensity" ), 1.0f ); Tr2Renderer::DrawScreenQuad( renderContext, resources.applyFroxels ); resources.applyFroxels->SetParameter( BlueSharedString( "EveSceneFroxelFogMap" ), Tr2TextureAL{} ); } @@ -1062,6 +1060,7 @@ void Tr2VolumetricsRenderer::PopulatePerFrameData( FroxelPerFrameData& data ) data.EnvironmentIntensity = m_froxelFogSettings.environmentIntensity.value; data.EnvironmentG = environmentG; + data.FogMultiplier = m_isReflectionProbe ? std::clamp( m_froxelFogSettings.reflectionIntensity.value, 0.0f, 1.0f ) : 1.0f; for( int32_t i = 0; i < m_planets.size(); i++ ) { diff --git a/trinity/Tr2VolumetricsRenderer.h b/trinity/Tr2VolumetricsRenderer.h index 924dbde0f..e78d0737b 100644 --- a/trinity/Tr2VolumetricsRenderer.h +++ b/trinity/Tr2VolumetricsRenderer.h @@ -109,6 +109,11 @@ BLUE_CLASS( Tr2VolumetricsRenderer ) : static Tr2GpuResourcePool::Texture GetEmptyFogTexture( Tr2GpuResourcePool & gpuResourcePool ); void UpdateFogEnvironmentMap( Tr2RenderContext & renderContext ); + void SetIsReflectionProbe( bool isReflectionProbe ) + { + m_isReflectionProbe = isReflectionProbe; + } + void UpdateVariableStore(); void SetPlanets( const CcpMath::Sphere* planets, size_t planetCount ); void SetSunAngle( float angle ); @@ -129,7 +134,7 @@ BLUE_CLASS( Tr2VolumetricsRenderer ) : float EnvironmentIntensity; float EnvironmentG; - float _pad0; + float FogMultiplier; float _pad1; float _pad2; @@ -201,6 +206,7 @@ BLUE_CLASS( Tr2VolumetricsRenderer ) : bool m_logBlending; double m_logBlendingSmoothness; ITr2FroxelFogSettings::FroxelFogSettings m_froxelFogSettings; + bool m_isReflectionProbe; float m_gameBackClip; @@ -209,7 +215,7 @@ BLUE_CLASS( Tr2VolumetricsRenderer ) : double m_godRayNoiseAnimation; Vector3d m_fogNoiseMovement; - + double m_godRayNoiseMatrix[16]; FogViewDependentResources m_fogResources; @@ -278,7 +284,21 @@ BLUE_CLASS( Tr2VolumetricsRenderer ) : CcpMath::Sphere planets[2]; }; - void UpdatePerObjectData( FogPerObjectData * data, const Matrix& view, const Matrix& projection, const Matrix& viewLast, const Matrix& projectionLast, const Vector3d& origin, const Vector3d& originShift, const Vector3& sunDirection, const Color& sunColor, uint32_t width, uint32_t height, uint32_t depth, const Vector3& jitter, const Tr2ShadowMap* cascadedShadowMap ); + void UpdatePerObjectData( + FogPerObjectData * data, + const Matrix& view, + const Matrix& projection, + const Matrix& viewLast, + const Matrix& projectionLast, + const Vector3d& origin, + const Vector3d& originShift, + const Vector3& sunDirection, + const Color& sunColor, + uint32_t width, + uint32_t height, + uint32_t depth, + const Vector3& jitter, + const Tr2ShadowMap* cascadedShadowMap ); Tr2ConstantBufferAL m_fogConstantBuffer;