63 HdRenderParam *renderParam,
64 HdDirtyBits *dirtyBits,
65 const TfToken &reprToken)
69 if (*dirtyBits == HdChangeTracker::Clean) {
75#if PXR_VERSION >= 2102
76 Base::_UpdateInstancer(sceneDelegate, dirtyBits);
77 HdInstancer::_SyncInstancerAndParents(sceneDelegate->GetRenderIndex(), Base::GetInstancerId());
79 Base::_UpdateVisibility(sceneDelegate, dirtyBits);
83 if (*dirtyBits & HdChangeTracker::DirtyMaterialId) {
84#if HD_API_VERSION >= 37 && PXR_VERSION >= 2105
85 Base::SetMaterialId(sceneDelegate->GetMaterialId(Base::GetId()));
87 Base::_SetMaterialId(sceneDelegate->GetRenderIndex().GetChangeTracker(),
88 sceneDelegate->GetMaterialId(Base::GetId()));
92 sceneDelegate->GetRenderIndex().GetSprim(HdPrimTypeTokens->material,
93 Base::GetMaterialId()));
96 if (material && material->GetCyclesShader()) {
97 usedShaders[0] = material->GetCyclesShader();
100 usedShaders[0] =
lock.scene->default_surface;
103 for (
Node *shader : usedShaders) {
104 static_cast<Shader *
>(shader)->tag_used(
lock.scene);
107 _geom->set_used_shaders(usedShaders);
110 const SdfPath &
id = Base::GetId();
112 if (HdChangeTracker::IsPrimIdDirty(*dirtyBits,
id)) {
114 _instances[0]->set_pass_id(Base::GetPrimId() + 1);
117 if (HdChangeTracker::IsTransformDirty(*dirtyBits,
id)) {
118 _geomTransform = sceneDelegate->GetTransform(
id);
121 if (HdChangeTracker::IsTransformDirty(*dirtyBits,
id) ||
122 HdChangeTracker::IsInstancerDirty(*dirtyBits,
id))
125 sceneDelegate->GetRenderIndex().GetInstancer(Base::GetInstancerId()));
129 _instances[0]->attributes.front().name() == HdAovTokens->instanceId.GetString());
131 VtMatrix4dArray transforms;
133 transforms = instancer->ComputeInstanceTransforms(
id);
134 _instances[0]->attributes.front() = ParamValue(HdAovTokens->instanceId.GetString(), +0.0f);
138 transforms.push_back(GfMatrix4d(1.0));
139 _instances[0]->attributes.front() = ParamValue(HdAovTokens->instanceId.GetString(), -1.0f);
143 const size_t newSize = transforms.size();
146 for (
size_t i = newSize;
i < oldSize; ++
i) {
150 for (
size_t i = oldSize;
i < newSize; ++
i) {
152 InitializeInstance(
static_cast<int>(
i));
156 for (
size_t i = 0;
i < transforms.size(); ++
i) {
157 const float metersPerUnit =
166 if (HdChangeTracker::IsVisibilityDirty(*dirtyBits,
id)) {
168 instance->set_visibility(Base::IsVisible() ? ~0 : 0);
174 bool rebuild =
false;
175 Populate(sceneDelegate, *dirtyBits, rebuild);
177 if (
_geom->is_modified() || rebuild) {
182 instance->tag_update(
lock.scene);
185 *dirtyBits = HdChangeTracker::Clean;