Skip to content

Commit 8ebf20c

Browse files
Hydrogent: fixed rendering of motion vectors for translucent materials with OIT
1 parent 6530fc7 commit 8ebf20c

File tree

4 files changed

+15
-7
lines changed

4 files changed

+15
-7
lines changed

Hydrogent/src/HnRenderPass.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1333,6 +1333,11 @@ void HnRenderPass::UpdateDrawListItemGPUResources(DrawListItem& ListItem, Render
13331333
if (Geo.TexCoords[1] != nullptr)
13341334
PSOFlags |= PBR_Renderer::PSO_FLAG_USE_TEXCOORD1;
13351335

1336+
if ((m_Params.UsdPsoFlags & USD_Renderer::USD_PSO_FLAG_ENABLE_MOTION_VECTORS_OUTPUT) != 0)
1337+
{
1338+
PSOFlags |= PBR_Renderer::PSO_FLAG_COMPUTE_MOTION_VECTORS;
1339+
}
1340+
13361341
if (pMaterial != nullptr)
13371342
{
13381343
const PBR_Renderer::PSO_FLAGS MaterialPSOFlags = GetMaterialPSOFlags(*pMaterial);
@@ -1343,7 +1348,7 @@ void HnRenderPass::UpdateDrawListItemGPUResources(DrawListItem& ListItem, Render
13431348
else
13441349
{
13451350
// Color map is needed for alpha-masked materials
1346-
PSOFlags |= (MaterialPSOFlags & (PBR_Renderer::PSO_FLAG_USE_COLOR_MAP & PBR_Renderer::PSO_FLAG_ENABLE_TEXCOORD_TRANSFORM));
1351+
PSOFlags |= (MaterialPSOFlags & (PBR_Renderer::PSO_FLAG_USE_COLOR_MAP | PBR_Renderer::PSO_FLAG_ENABLE_TEXCOORD_TRANSFORM));
13471352
}
13481353

13491354
VERIFY(((m_Params.AlphaMode != USD_Renderer::ALPHA_MODE_NUM_MODES ? m_Params.AlphaMode : pMaterial->GetMaterialData().Attribs.AlphaMode) == State.AlphaMode ||

Hydrogent/src/Tasks/HnTaskManager.cpp

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,11 @@ HnTaskManager::HnTaskManager(pxr::HdRenderIndex& RenderIndex,
208208
const USD_Renderer& Renderer = *static_cast<const HnRenderDelegate*>(GetRenderIndex().GetRenderDelegate())->GetUSDRenderer();
209209
const bool OITEnabled = Renderer.GetSettings().OITLayerCount > 0;
210210

211-
USD_Renderer::USD_PSO_FLAGS TranslucentPassOutputs = USD_Renderer::USD_PSO_FLAG_ENABLE_ALL_OUTPUTS;
211+
USD_Renderer::USD_PSO_FLAGS TranslucentPassOutputs = USD_Renderer::USD_PSO_FLAG_ENABLE_ALL_OUTPUTS;
212+
constexpr USD_Renderer::USD_PSO_FLAGS TranslucentMeshIdPassOutputs =
213+
USD_Renderer::USD_PSO_FLAG_ENABLE_MESH_ID_OUTPUT |
214+
USD_Renderer::USD_PSO_FLAG_ENABLE_MOTION_VECTORS_OUTPUT |
215+
USD_Renderer::USD_PSO_FLAG_ENABLE_NORMAL_OUTPUT;
212216
if (OITEnabled)
213217
{
214218
CreateBeginOITPassTask();
@@ -222,8 +226,7 @@ HnTaskManager::HnTaskManager(pxr::HdRenderIndex& RenderIndex,
222226
});
223227
CreateEndOITPassTask();
224228
// We will write mesh ID, motion vectors and depth in a separate pass
225-
TranslucentPassOutputs &= ~(USD_Renderer::USD_PSO_FLAG_ENABLE_MESH_ID_OUTPUT |
226-
USD_Renderer::USD_PSO_FLAG_ENABLE_MOTION_VECTORS_OUTPUT);
229+
TranslucentPassOutputs &= ~TranslucentMeshIdPassOutputs;
227230
}
228231

229232
CreateRenderRprimsTask(HnMaterialTagTokens->translucent,
@@ -244,7 +247,7 @@ HnTaskManager::HnTaskManager(pxr::HdRenderIndex& RenderIndex,
244247
HnRenderResourceTokens->renderPass_TransparentAll,
245248
HnRenderPassParams::SelectionType::All,
246249
USD_Renderer::RenderPassType::Main,
247-
USD_Renderer::USD_PSO_FLAG_ENABLE_MESH_ID_OUTPUT | USD_Renderer::USD_PSO_FLAG_ENABLE_MOTION_VECTORS_OUTPUT,
250+
TranslucentMeshIdPassOutputs,
248251
USD_Renderer::ALPHA_MODE_OPAQUE, // Override alpha mode
249252
});
250253
}

PBR/src/USD_Renderer.cpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,6 @@ USD_Renderer::CreateInfo::PSMainSourceInfo USD_Renderer::GetUsdPbrPSMainSource(U
120120
# endif
121121
#endif
122122
123-
Normal *= Transmittance;
124123
MaterialData *= Transmittance;
125124
IBL *= Transmittance;
126125
)";

Shaders/PBR/private/RenderPBR.psh

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -549,7 +549,6 @@ PSOutput main(in VSOutput VSOut,
549549
D = 1.0 - D;
550550
}
551551
Transmittance = GetOITTransmittance(D, uint2(VSOut.ClipPos.xy));
552-
OutColor.rgb *= Transmittance;
553552
}
554553
#endif
555554
}
@@ -618,6 +617,8 @@ PSOutput main(in VSOutput VSOut,
618617
}
619618
#endif
620619

620+
OutColor.rgb *= Transmittance;
621+
621622
#if CONVERT_OUTPUT_TO_SRGB
622623
{
623624
OutColor.rgb = FastLinearToSRGB(OutColor.rgb);

0 commit comments

Comments
 (0)