MCPcopy Create free account
hub / github.com/DiligentGraphics/DiligentFX / GetMaterialTag

Function GetMaterialTag

Hydrogent/src/HnMaterialNetwork.cpp:171–214  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

169#endif
170
171pxr::TfToken GetMaterialTag(const pxr::VtDictionary& Metadata,
172 const pxr::HdMaterialNode2& Terminal)
173{
174 // Strongest materialTag opinion is a hardcoded tag in glslfx meta data.
175 // This can be used for masked, additive, translucent or volume materials.
176 // See HdMaterialTagTokens.
177 pxr::VtValue vtMetaTag = TfMapLookupByValue(Metadata, pxr::HdShaderTokens->materialTag, pxr::VtValue{});
178 if (vtMetaTag.IsHolding<std::string>())
179 {
180 return TfToken{vtMetaTag.UncheckedGet<std::string>()};
181 }
182
183 // Next check for authored terminal.opacityThreshold value > 0
184 for (const auto& param_it : Terminal.parameters)
185 {
186 if (param_it.first != HnMaterialPrivateTokens->opacityThreshold)
187 continue;
188
189 const pxr::VtValue& vtOpacityThreshold = param_it.second;
190 if (vtOpacityThreshold.Get<float>() > 0.0f)
191 {
192 return HnMaterialTagTokens->masked;
193 }
194 }
195
196 // Next strongest opinion is a connection to 'terminal.opacity'
197 auto IsTranslucent = (Terminal.inputConnections.find(HnMaterialPrivateTokens->opacity) != Terminal.inputConnections.end());
198
199 // Weakest opinion is an authored terminal.opacity value.
200 if (!IsTranslucent)
201 {
202 for (const auto& param_it : Terminal.parameters)
203 {
204 if (param_it.first != HnMaterialPrivateTokens->opacity)
205 continue;
206
207 const pxr::VtValue& vtOpacity = param_it.second;
208 IsTranslucent = vtOpacity.Get<float>() < 1.0f;
209 break;
210 }
211 }
212
213 return IsTranslucent ? HnMaterialTagTokens->translucent : HnMaterialTagTokens->defaultTag;
214}
215
216float GetTerminalOpacityThreshold(const pxr::HdMaterialNode2& Terminal)
217{

Callers 1

HnMaterialNetworkMethod · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected