MCPcopy Create free account
hub / github.com/carbonengine/trinity / UpdateFogSettings

Method UpdateFogSettings

trinity/Tr2VolumetricsRenderer.cpp:342–398  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

340}
341
342void Tr2VolumetricsRenderer::UpdateFogSettings( const EveComponentRegistry& registry, const EveUpdateContext& updateContext )
343{
344 std::vector<ITr2FroxelFogSettings::FroxelFogSettings*> overrides;
345 double logBlendingSmoothness = m_logBlendingSmoothness;
346
347 registry.ProcessComponents<ITr2FroxelFogSettings>( [&overrides, logBlendingSmoothness]( ITr2FroxelFogSettings* component ) -> void {
348 ITr2FroxelFogSettings::FroxelFogSettings* fogSettings = component->GetFroxelFogSettings();
349
350 //Compute log(1 + thickness * m_logBlendingSmoothness) for each fog
351 fogSettings->logThickness.value = log1p( (double)fogSettings->thickness.value * logBlendingSmoothness );
352 fogSettings->logThickness.enabled = fogSettings->thickness.enabled;
353
354 overrides.push_back( fogSettings );
355 } );
356 sort( begin( overrides ), end( overrides ), []( const auto& a, const auto& b ) {
357 return a->priority > b->priority;
358 } );
359
360 //m_froxelFogSettings = OldPriorityBlend( overrides );
361
362 //std::vector<ITr2FroxelFogSettings::FroxelFogSettings*> test;
363
364#define FROXEL_ACCUMULATE( setting ) m_froxelFogSettings.setting = PriorityBlend::Accumulate( &ITr2FroxelFogSettings::FroxelFogSettings::setting, overrides )
365
366 FROXEL_ACCUMULATE( thickness );
367
368 FROXEL_ACCUMULATE( lightDirectionality );
369
370 FROXEL_ACCUMULATE( environmentIntensity );
371 FROXEL_ACCUMULATE( environmentDirectionality );
372
373 FROXEL_ACCUMULATE( fogColor );
374 FROXEL_ACCUMULATE( backgroundVisibility );
375
376 FROXEL_ACCUMULATE( godRayNoiseIntensity );
377 FROXEL_ACCUMULATE( godRayNoiseFrequency );
378 FROXEL_ACCUMULATE( godRayNoiseAnimationSpeed );
379
380 FROXEL_ACCUMULATE( fogNoiseIntensity );
381 FROXEL_ACCUMULATE( fogNoiseFrequency );
382 FROXEL_ACCUMULATE( fogNoiseMovementSpeed );
383
384 if( m_logBlending )
385 {
386 //Replace the thickness with a logarithmically interpolated one, making the transition from 0 thickness more graceful.
387 FROXEL_ACCUMULATE( logThickness );
388 m_froxelFogSettings.thickness = (float)( expm1( m_froxelFogSettings.logThickness.value ) / logBlendingSmoothness );
389 }
390
391 float delta = updateContext.GetDeltaT();
392
393 m_godRayNoiseAnimation += m_froxelFogSettings.godRayNoiseAnimationSpeed.value * ( delta / m_froxel3DNoise->GetDepth() );
394 m_godRayNoiseAnimation -= floor( m_godRayNoiseAnimation );
395
396 float fogFrequency = exp2f( -m_froxelFogSettings.fogNoiseFrequency.value );
397 m_fogNoiseMovement += m_froxelFogSettings.fogNoiseMovementSpeed.value * delta;
398}
399

Callers 1

BeginRenderMethod · 0.80

Calls 5

GetFroxelFogSettingsMethod · 0.80
GetDeltaTMethod · 0.80
beginFunction · 0.70
endFunction · 0.70
GetDepthMethod · 0.45

Tested by

no test coverage detected