Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

MAYA-125726 - Implement display layer's color override for instanced geometry #2907

Merged
merged 1 commit into from
Mar 2, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 19 additions & 6 deletions lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1026,12 +1026,13 @@ bool MayaUsdRPrim::_GetMaterialPrimvars(
}

bool MayaUsdRPrim::_FilterInstanceByDisplayLayer(
unsigned int usdInstanceId,
BasicWireframeColors& instanceColor,
const TfToken& reprToken,
int modFlags,
bool isHighlightItem,
bool isDedicatedHighlightItem) const
unsigned int usdInstanceId,
BasicWireframeColors& instanceColor,
const TfToken& reprToken,
int modFlags,
bool isHighlightItem,
bool isDedicatedHighlightItem,
InstanceColorOverride& colorOverride) const
{
if (_displayLayerModesInstanced.size() <= usdInstanceId) {
return false;
Expand Down Expand Up @@ -1112,6 +1113,18 @@ bool MayaUsdRPrim::_FilterInstanceByDisplayLayer(
}
}

// Now that we know that this instance will be rendered, let's check for color override.
if (colorOverride._allowed && instanceColor == kDormant) {
if (displayLayerModes._wireframeColorIndex > 0) {
colorOverride._enabled = true;
colorOverride._color = MColor(M3dView::active3dView().colorAtIndex(
displayLayerModes._wireframeColorIndex - 1, M3dView::kDormantColors));
} else if (displayLayerModes._wireframeColorIndex < 0) {
colorOverride._enabled = true;
colorOverride._color = displayLayerModes._wireframeColorRGBA;
}
}

return false;
}

Expand Down
27 changes: 21 additions & 6 deletions lib/mayaUsd/render/vp2RenderDelegate/mayaPrimCommon.h
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,20 @@ class MayaUsdRPrim
kInvalid = 255
};

struct InstanceColorOverride
{
MColor _color;
bool _enabled { false };
const bool _allowed;

InstanceColorOverride(bool allowed)
: _allowed(allowed)
{
}

void Reset() { _enabled = false; }
};

static void
_ProcessDisplayLayerModes(const MObject& displayLayerObj, DisplayLayerModes& displayLayerModes);

Expand Down Expand Up @@ -288,12 +302,13 @@ class MayaUsdRPrim
void _SyncDisplayLayerModesInstanced(SdfPath const& id, unsigned int instanceCount);

bool _FilterInstanceByDisplayLayer(
unsigned int usdInstanceId,
BasicWireframeColors& instanceColor,
const TfToken& reprToken,
int modFlags,
bool isHighlightItem,
bool isDedicatedHighlightItem) const;
unsigned int usdInstanceId,
BasicWireframeColors& instanceColor,
const TfToken& reprToken,
int modFlags,
bool isHighlightItem,
bool isDedicatedHighlightItem,
InstanceColorOverride& colorOverride) const;

void _SyncForcedReprs(
HdRprim& refThis,
Expand Down
10 changes: 7 additions & 3 deletions lib/mayaUsd/render/vp2RenderDelegate/mesh.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1960,7 +1960,8 @@ void HdVP2Mesh::_UpdateDrawItem(
#endif

_SyncDisplayLayerModesInstanced(id, instanceCount);
const int modFlags = drawItem->GetModFlags();
const int modFlags = drawItem->GetModFlags();
InstanceColorOverride colorOverride(useWireframeColors);

stateToCommit._instanceTransforms = std::make_shared<MMatrixArray>();
stateToCommit._instanceColors = std::make_shared<MFloatArray>();
Expand All @@ -1970,13 +1971,15 @@ void HdVP2Mesh::_UpdateDrawItem(
continue;

// Check display layer modes of this instance
colorOverride.Reset();
if (_FilterInstanceByDisplayLayer(
usdInstanceId,
info,
reprToken,
modFlags,
isHighlightItem,
isDedicatedHighlightItem))
isDedicatedHighlightItem,
colorOverride))
continue;

#ifndef MAYA_UPDATE_UFE_IDENTIFIER_SUPPORT
Expand All @@ -1989,7 +1992,8 @@ void HdVP2Mesh::_UpdateDrawItem(
mayaToUsd.push_back(usdInstanceId);
#endif
if (useWireframeColors) {
const MColor& color = wireframeColors[info];
const MColor& color
= colorOverride._enabled ? colorOverride._color : wireframeColors[info];
for (unsigned int j = 0; j < kNumColorChannels; j++) {
stateToCommit._instanceColors->append(color[j]);
}
Expand Down