Cube1 and Cube2 are Scenegraph Instances of PrototypeCube. Cube1 and Cube2 each have a different primvars:displayColor (red and blue, respectively).
PointInstancer uses these Scenegraph Instances as a prototype.
Actual Results:
Top Row: The Scenegraph Instances render as expected. Each cube shows its per-instance displayColor.
Bottom Row: The PointInstancer does NOT render as expected. The displayColors are missing.
Expected Results:
Change Cube1 and Cube2 to instanceable = false. Now, both the Scenegraph Instances and the PointInstancer render as expected. Both rows show the expected displayColors.
Steps to Reproduce
Open the above USD code in usdview and view the image rendered by Hydra GL.
The top row shows the Scenegraph Instances. The displayColors are shown correctly.
The bottom row shows the PointInstancer. The displayColors are missing.
System Information (OS, Hardware)
This test was performed on Linux using an internal build of USD 23.08 with some modifications. I believe @marktucker tested this issue with USD 24.08 and found the same results.
Other Info
Cube1 and Cube2 also specify per-instance transforms (on the same prims as the displayColor primvars). These per-instance transforms work as expected. Thus, the issue appears specific to per-instance primvars.
I have tested this behavior both with other primvars and with other renderers, and the results are the same. The primvars are missing from the PointInstancer instances of the cubes.
I believe this is a bug when translating the USD scene to the Hydra representation. When viewing the scene through Hydra Scene Browser, the PointInstancer has a duplicated mesh for each cube. Each mesh correctly shows the per-instance transform of the Scenegraph Instance. However, the primvars:displayColor is missing. See image below.
Description of Issue
Example USD code (discussion below):
Cube1 and Cube2 are Scenegraph Instances of PrototypeCube. Cube1 and Cube2 each have a different primvars:displayColor (red and blue, respectively).
PointInstancer uses these Scenegraph Instances as a prototype.
Actual Results:
Top Row: The Scenegraph Instances render as expected. Each cube shows its per-instance displayColor.
Bottom Row: The PointInstancer does NOT render as expected. The displayColors are missing.
Expected Results:
Change Cube1 and Cube2 to instanceable = false. Now, both the Scenegraph Instances and the PointInstancer render as expected. Both rows show the expected displayColors.
Steps to Reproduce
Open the above USD code in usdview and view the image rendered by Hydra GL.
The top row shows the Scenegraph Instances. The displayColors are shown correctly.
The bottom row shows the PointInstancer. The displayColors are missing.
System Information (OS, Hardware)
This test was performed on Linux using an internal build of USD 23.08 with some modifications. I believe @marktucker tested this issue with USD 24.08 and found the same results.
Other Info
Cube1 and Cube2 also specify per-instance transforms (on the same prims as the displayColor primvars). These per-instance transforms work as expected. Thus, the issue appears specific to per-instance primvars.
I have tested this behavior both with other primvars and with other renderers, and the results are the same. The primvars are missing from the PointInstancer instances of the cubes.
I believe this is a bug when translating the USD scene to the Hydra representation. When viewing the scene through Hydra Scene Browser, the PointInstancer has a duplicated mesh for each cube. Each mesh correctly shows the per-instance transform of the Scenegraph Instance. However, the primvars:displayColor is missing. See image below.