@@ -221,8 +221,9 @@ HnTaskManager::HnTaskManager(pxr::HdRenderIndex& RenderIndex,
221221 USD_Renderer::USD_PSO_FLAG_ENABLE_ALL_OUTPUTS,
222222 });
223223 CreateEndOITPassTask ();
224- // We will write mesh ID and depth in a separate pass
225- TranslucentPassOutputs &= ~USD_Renderer::USD_PSO_FLAG_ENABLE_MESH_ID_OUTPUT;
224+ // 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);
226227 }
227228
228229 CreateRenderRprimsTask (HnMaterialTagTokens->translucent ,
@@ -234,6 +235,20 @@ HnTaskManager::HnTaskManager(pxr::HdRenderIndex& RenderIndex,
234235 TranslucentPassOutputs,
235236 });
236237
238+ if (OITEnabled)
239+ {
240+ // When OIT is enabled, we do not render mesh ID, motion vectors and depth in translucent pass.
241+ CreateRenderRprimsTask (HnMaterialTagTokens->translucent ,
242+ TaskUID_RenderRprimsTranslucentMeshId,
243+ {
244+ HnRenderResourceTokens->renderPass_TransparentAll ,
245+ HnRenderPassParams::SelectionType::All,
246+ USD_Renderer::RenderPassType::Main,
247+ USD_Renderer::USD_PSO_FLAG_ENABLE_MESH_ID_OUTPUT | USD_Renderer::USD_PSO_FLAG_ENABLE_MOTION_VECTORS_OUTPUT,
248+ USD_Renderer::ALPHA_MODE_OPAQUE, // Override alpha mode
249+ });
250+ }
251+
237252 // Transparent selected RPrims -> {0 + SelectionDepth}
238253 CreateRenderRprimsTask (HnMaterialTagTokens->additive ,
239254 TaskUID_RenderRprimsAdditiveSelected,
@@ -250,6 +265,7 @@ HnTaskManager::HnTaskManager(pxr::HdRenderIndex& RenderIndex,
250265 HnRenderPassParams::SelectionType::Selected,
251266 USD_Renderer::RenderPassType::Main,
252267 USD_Renderer::USD_PSO_FLAG_NONE,
268+ USD_Renderer::ALPHA_MODE_OPAQUE, // Override alpha mode
253269 });
254270
255271 CreateReadRprimIdTask ();
@@ -357,6 +373,11 @@ pxr::SdfPath HnTaskManager::GetTaskId(const pxr::TfToken& TaskName) const
357373pxr::SdfPath HnTaskManager::GetRenderRprimsTaskId (const pxr::TfToken& MaterialTag, const HnRenderPassParams& RenderPassParams) const
358374{
359375 std::string Id = std::string{" RenderRprimsTask_" } + PBR_Renderer::GetRenderPassTypeString (RenderPassParams.Type ) + " _" + MaterialTag.GetString ();
376+ if (RenderPassParams.AlphaMode != USD_Renderer::ALPHA_MODE_NUM_MODES)
377+ {
378+ Id += " _" ;
379+ Id += USD_Renderer::GetAlphaModeString (RenderPassParams.AlphaMode );
380+ }
360381 for (char & c : Id)
361382 {
362383 if (c == ' :' || c == ' ' )
0 commit comments