Add additional StaticFlagsCompare to Render View for dynamic or static only drawing

This commit is contained in:
Wojtek Figat
2024-04-11 10:21:13 +02:00
parent c4949de28f
commit eac1d19a09
5 changed files with 13 additions and 6 deletions

View File

@@ -127,6 +127,11 @@ public:
/// </summary>
API_FIELD() StaticFlags StaticFlagsMask = StaticFlags::None;
/// <summary>
/// The static flags mask comparision rhs. Allows to draw objects that don't pass the static flags mask. Objects are checked with the following formula: (ObjectStaticFlags and StaticFlagsMask) == StaticFlagsMaskCompare.
/// </summary>
API_FIELD() StaticFlags StaticFlagsCompare = StaticFlags::None;
/// <summary>
/// The view flags.
/// </summary>

View File

@@ -212,12 +212,12 @@ void SceneRendering::DrawActorsJob(int32)
PROFILE_CPU();
auto& mainContext = _drawBatch->GetMainContext();
const auto& view = mainContext.View;
if (view.IsOfflinePass)
if (view.StaticFlagsMask != StaticFlags::None)
{
// Offline pass with additional static flags culling
// Static-flags culling
FOR_EACH_BATCH_ACTOR
e.Bounds.Center -= view.Origin;
if (CHECK_ACTOR && (e.Actor->GetStaticFlags() & view.StaticFlagsMask) != StaticFlags::None)
if (CHECK_ACTOR && (e.Actor->GetStaticFlags() & view.StaticFlagsMask) == view.StaticFlagsCompare)
{
DRAW_ACTOR(*_drawBatch);
}

View File

@@ -273,7 +273,7 @@ bool ProbesRenderer::Init()
view.Mode = ViewMode::NoPostFx;
view.IsOfflinePass = true;
view.IsSingleFrame = true;
view.StaticFlagsMask = StaticFlags::ReflectionProbe;
view.StaticFlagsMask = view.StaticFlagsCompare = StaticFlags::ReflectionProbe;
view.MaxShadowsQuality = Quality::Low;
task->IsCameraCut = true;
task->Resize(probeResolution, probeResolution);

View File

@@ -569,7 +569,9 @@ void RenderList::AddDrawCall(const RenderContextBatch& renderContextBatch, DrawP
const RenderContext& renderContext = renderContextBatch.Contexts.Get()[i];
ASSERT_LOW_LAYER(renderContext.View.Pass == DrawPass::Depth);
drawModes = modes & renderContext.View.Pass;
if (drawModes != DrawPass::None && renderContext.View.CullingFrustum.Intersects(bounds))
if (drawModes != DrawPass::None &&
(staticFlags & renderContext.View.StaticFlagsMask) == renderContext.View.StaticFlagsCompare &&
renderContext.View.CullingFrustum.Intersects(bounds))
{
renderContext.List->ShadowDepthDrawCallsList.Indices.Add(index);
}

View File

@@ -457,7 +457,7 @@ bool ShadowsOfMordor::Builder::initResources()
view.IsOfflinePass = true;
view.Near = HEMISPHERES_NEAR_PLANE;
view.Far = HEMISPHERES_FAR_PLANE;
view.StaticFlagsMask = StaticFlags::Lightmap;
view.StaticFlagsMask = view.StaticFlagsCompare = StaticFlags::Lightmap;
view.MaxShadowsQuality = Quality::Low;
_task->Resize(HEMISPHERES_RESOLUTION, HEMISPHERES_RESOLUTION);