Skip to content

Commit

Permalink
Merge pull request #2883 from Autodesk/vlasovi/MAYA-125724
Browse files Browse the repository at this point in the history
MAYA-125724 - Implement display layer's wireframe mode for instanced geometry
  • Loading branch information
seando-adsk authored Feb 21, 2023
2 parents b3e5586 + 5d5b4ba commit 7be51e9
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 7 deletions.
25 changes: 21 additions & 4 deletions lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -339,9 +339,11 @@ HdReprSharedPtr MayaUsdRPrim::_InitReprCommon(

// Instanced primitives with instances in display layers use 'forced' representations to
// draw those specific instances, so the 'forced' representations should be inited alongside
if (reprToken != HdVP2ReprTokens->forcedBbox) {
if (reprToken != HdVP2ReprTokens->forcedBbox && reprToken != HdVP2ReprTokens->forcedWire) {
refThis.InitRepr(
drawScene.GetUsdImagingDelegate(), HdVP2ReprTokens->forcedBbox, dirtyBits);
refThis.InitRepr(
drawScene.GetUsdImagingDelegate(), HdVP2ReprTokens->forcedWire, dirtyBits);
}
} else {
// Sync display layer modes for non-instanced prims.
Expand Down Expand Up @@ -769,7 +771,7 @@ void MayaUsdRPrim::_SyncDisplayLayerModesInstanced(SdfPath const& id, unsigned i

_displayLayerModesInstancedFrame = drawScene.GetFrameCounter();

_needForcedBBox = false;
_forcedReprFlags = 0;
_requiredModFlagsBitset.reset();
if (drawScene.SupportPerInstanceDisplayLayers(id)) {
_displayLayerModesInstanced.resize(instanceCount);
Expand All @@ -779,7 +781,9 @@ void MayaUsdRPrim::_SyncDisplayLayerModesInstanced(SdfPath const& id, unsigned i
_PopulateDisplayLayerModes(usdPath, displayLayerModes, drawScene);

if (displayLayerModes._reprOverride == kBBox) {
_needForcedBBox = true;
_forcedReprFlags |= kForcedBBox;
} else if (displayLayerModes._reprOverride == kWire) {
_forcedReprFlags |= kForcedWire;
}

int requiredModFlags = 0;
Expand Down Expand Up @@ -1041,6 +1045,13 @@ bool MayaUsdRPrim::_FilterInstanceByDisplayLayer(
return true;
}

// Match item's wire mode against instance's wire mode
const bool forcedWireItem = (reprToken == HdVP2ReprTokens->forcedWire);
const bool overrideWireInstance = displayLayerModes._reprOverride == kWire;
if (forcedWireItem != overrideWireInstance) {
return true;
}

// Match item's hide-on-playback mode against that of the instance
const bool hideOnPlaybackItem = (modFlags & HdVP2DrawItem::kHideOnPlayback);
if (displayLayerModes._hideOnPlayback != hideOnPlaybackItem) {
Expand Down Expand Up @@ -1107,11 +1118,17 @@ void MayaUsdRPrim::_SyncForcedReprs(
}
};

if (_needForcedBBox) {
if (_forcedReprFlags & kForcedBBox) {
refThis.Sync(delegate, renderParam, dirtyBits, HdVP2ReprTokens->forcedBbox);
} else {
_ForEachRenderItemInRepr(_FindRepr(reprs, HdVP2ReprTokens->forcedBbox), hideDrawItem);
}

if (_forcedReprFlags & kForcedWire) {
refThis.Sync(delegate, renderParam, dirtyBits, HdVP2ReprTokens->forcedWire);
} else {
_ForEachRenderItemInRepr(_FindRepr(reprs, HdVP2ReprTokens->forcedWire), hideDrawItem);
}
}

PXR_NAMESPACE_CLOSE_SCOPE
8 changes: 7 additions & 1 deletion lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,12 @@ class MayaUsdRPrim
kWire = 2
};

enum ForcedReprFlags
{
kForcedBBox = 1 << 0,
kForcedWire = 1 << 1
};

struct DisplayLayerModes
{
//! Requested display layer visibility
Expand Down Expand Up @@ -368,7 +374,7 @@ class MayaUsdRPrim
std::bitset<HdVP2DrawItem::kModFlagsBitsetSize> _requiredModFlagsBitset;

// forced representations runtime state
bool _needForcedBBox = false;
int _forcedReprFlags { 0 };
uint64_t _forcedReprsFrame { 0 };

//! HideOnPlayback status of the Rprim
Expand Down
8 changes: 7 additions & 1 deletion lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1263,13 +1263,19 @@ void HdVP2Mesh::_AddNewRenderItem(
drawItem->SetUsage(HdVP2DrawItem::kSelectionHighlight);
}
// The item is used for wireframe display and selection highlight.
else if (reprToken == HdReprTokens->wire) {
else if (reprToken == HdReprTokens->wire || reprToken == HdVP2ReprTokens->forcedWire) {
renderItem = _CreateWireframeRenderItem(
renderItemName,
kOpaqueBlue,
MSelectionMask::kSelectMeshes,
MHWRender::MFrameContext::kExcludeMeshes);
drawItem->AddUsage(HdVP2DrawItem::kSelectionHighlight);
if (reprToken == HdVP2ReprTokens->forcedWire) {
renderItem->enable(false);
constexpr int sDrawModeAllButBBox
= MHWRender::MGeometry::kAll & ~MHWRender::MGeometry::kBoundingBox;
renderItem->setDrawMode((MHWRender::MGeometry::DrawMode)sDrawModeAllButBBox);
}
}
// The item is used for bbox display and selection highlight.
else if (reprToken == HdVP2ReprTokens->bbox || reprToken == HdVP2ReprTokens->forcedBbox) {
Expand Down
8 changes: 8 additions & 0 deletions lib/mayaUsd/render/vp2RenderDelegate/proxyRenderDelegate.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,13 @@ void _ConfigureReprs()
/*flatShadingEnabled=*/false,
/*blendWireframeColor=*/false);

const HdMeshReprDesc reprDescWire(
HdMeshGeomStyleHullEdgeOnly,
HdCullStyleDontCare,
HdMeshReprDescTokens->surfaceShader,
/*flatShadingEnabled=*/false,
/*blendWireframeColor=*/true);

// Hull desc for shaded display, edge desc for selection highlight.
HdMesh::ConfigureRepr(HdReprTokens->smoothHull, reprDescHull, reprDescEdge);
HdMesh::ConfigureRepr(HdVP2ReprTokens->smoothHullUntextured, reprDescHull, reprDescEdge);
Expand All @@ -294,6 +301,7 @@ void _ConfigureReprs()

// Forced representations are used for instanced geometry with display layer overrides
HdMesh::ConfigureRepr(HdVP2ReprTokens->forcedBbox, reprDescEdge);
HdMesh::ConfigureRepr(HdVP2ReprTokens->forcedWire, reprDescWire);

// smooth hull for untextured display
HdBasisCurves::ConfigureRepr(
Expand Down
3 changes: 2 additions & 1 deletion lib/mayaUsd/render/vp2RenderDelegate/tokens.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,8 @@ PXR_NAMESPACE_OPEN_SCOPE
(bbox) \
(defaultMaterial) \
(smoothHullUntextured) \
(forcedBbox)
(forcedBbox) \
(forcedWire)

#define HDVP2_TOKENS \
(displayColorAndOpacity) \
Expand Down

0 comments on commit 7be51e9

Please sign in to comment.