maya-usd icon indicating copy to clipboard operation
maya-usd copied to clipboard

[EMSUSD-2152] Viewport does not update for animated point instancer with instances

Open csyshing opened this issue 10 months ago • 2 comments

Describe the bug

Hi,

We have encountered viewport drawing issue for animated point instancer where prototypes are instances. The point instancer has time samples (animated) and expect to move frame by frame (1-5), but viewport does not update when scrubbing timeline.

The example has three type of prims:

  • a static cube (for reference)
  • a point instancer with non-instances which moves along Z-axis at frame range 1-5 - animating correctly
  • a point instancer with instances which moves along XY-plane at frame range 1-5 - does not animate as expected

Here is how it should look like in usdview (correct one):

Image

And this is how it currently behaves in Maya:

Image

The point instancer with instances does not get updated unless selecting/deselecting the point instancer.

Steps to reproduce Steps to reproduce the behavior:

  1. Load the provided USD example in Maya
  2. Scrub the timeline or just click any frame between 1 to 5
  3. The point instancer with instances should move but it remains still
  4. Select (or deselect) the problematic point instancer, viewport will suddenly get updated as expected

Expected behavior Expect to get animated point instancer with instances moving correctly.

Attachments

Example USD scene:

#usda 1.0
(
    defaultPrim = "root"
    upAxis = "Y"
    endTimeCode = 5
    startTimeCode = 1
)

over "flattened"
{
    def Mesh "geo"
    {
        float3[] extent = [(-1, -1, -1), (1, 1, 1)]
        int[] faceVertexCounts = [8, 3, 3, 3, 3, 3, 3, 3, 3]
        int[] faceVertexIndices = [0, 7, 6, 5, 4, 3, 2, 1, 0, 1, 8, 1, 2, 8, 2, 3, 8, 3, 4, 8, 4, 5, 8, 5, 6, 8, 6, 7, 8, 7, 0, 8]
        point3f[] points = [(0.7071067, 0.7071067, -1), (0, 0.9999999, -1), (-0.7071067, 0.7071067, -1), (-0.9999999, -2.220446e-16, -1), (-0.7071067, -0.7071067, -1), (0, -0.99999994, -1), (0.70710677, -0.70710677, -1), (1, -2.220446e-16, -1), (0, 2.220446e-16, 1)]
        uniform token subdivisionScheme = "none"
    }
}


def Xform "root"
{
    def PointInstancer "point_instancer_with_instaces"
    {
        float3[] extent = [(-1, -1, -1), (4, 1, 1)]
        point3f[] positions = [(0, 0, 0), (3, 0, 0)]
        quath[] orientations = [(1.0, 0.0, 0.0, 0.0), (0.7071067811865476, 0.7071067811865475, 0.0, 0.0)]
        int[] protoIndices = [0, 0]
        rel prototypes = [
            </root/point_instancer_with_instaces/Prototypes/cone_instance>,
        ]
        float3 xformOp:translate = (2, 0, 0)
        float3 xformOp:translate.timeSamples = {
            1: (2, 2, 0),
            2: (3, 3, 0),
            3: (4, 4, 0),
            4: (5, 5, 0),
            5: (6, 6, 0),
        }
        uniform token[] xformOpOrder = ["xformOp:translate"]

        def Scope "Prototypes"
        {    
            def "cone_instance" (
                instanceable = true
                prepend references = </flattened>
            )
            {
            }
        }
    }

    def PointInstancer "point_instancer_with_non_instances"
    {
        float3[] extent = [(-1, -1, -1), (4, 1, 1)]
        point3f[] positions = [(0, 0, 0), (3, 0, 0)]
        quath[] orientations = [(1.0, 0.0, 0.0, 0.0), (0.7071067811865476, 0.7071067811865475, 0.0, 0.0)]
        int[] protoIndices = [0, 0]
        rel prototypes = [
            </root/point_instancer_with_non_instances/Prototypes/cone_non_instance>,
        ]
        float3 xformOp:translate = (0, 0, 2)
        float3 xformOp:translate.timeSamples = {
            1: (0, 0, 2),
            2: (0, 0, 3),
            3: (0, 0, 4),
            4: (0, 0, 5),
            5: (0, 0, 6),
        }
        uniform token[] xformOpOrder = ["xformOp:translate"]

        def Scope "Prototypes"
        {    
            def "cone_non_instance" (
                prepend references = </flattened>
            )
            {
            }
        }
    }

    def Xform "static"
    {
        def Cube "cube"
        {
        }
    }
}

Specs (if applicable):

  • OS & version : CentOS 7.8
  • Compiler & version : gcc 6.3
  • Maya version : Maya-2023.3.3
  • Maya USD commit SHA : tested official v0.30.0 and latest dev (as of today, dd5b7082c)
  • Pixar USD commit SHA : official USD-22.05 and 25.02a

csyshing avatar Feb 12 '25 03:02 csyshing

Hi @csyshing, thank you for reporting this issue. I will take a look and get back to you shortly. -David

santosd avatar Feb 12 '25 15:02 santosd

Hi @csyshing, I was able to repro the issue on my end on the latest Maya 2026 using the latest Maya USD. Looks to be a viewport refresh issue for instaceable point instancers. I noticed that using the Hydra viewport inside of Maya which is available in Maya 2025 and up at this time. I was able to get it to work. I have logged this issue internally so that our Dev's can have a look. Thank you again for reporting the issue.

santosd avatar Feb 12 '25 15:02 santosd