Search Issue Tracker

Won't Fix

Under Consideration for 6000.0.X, 6000.3.X, 6000.4.X

Votes

3

Found in

6000.0.56f1

6000.2.1f1

6000.3.0a5

6000.4.0a1

6000.5.0a1

Issue ID

UUM-114581

Regression

No

NaN blend shape deltas are replaced with 0.0 when added via AddBlendShapeFrame

-

How to reproduce:
1. Open the “IN-111511_AddBlendShapeFrame“ project
2. Open the “SampleScene”
3. Enter Play Mode
4. In the Hierarchy select the “TestMeshObject”
5. In the Inspector expand the “Skinned Mesh Renderer” Component
6. In the “Selector” Component ensure “Selection” is set to “None”
7. In “BlendShapes” set “NaN BlendShape” value above 0
8. Observe the cube color in Game view

Expected result: The cube is black
Actual result: The cube is white

Reproducible with: 2023.1.0a1, 6000.0.56f1, 6000.2.1f1, 6000.3.0a5

Reproducible on: macOS 15.6 (M1 Max)
Not reproducible on: no other environments tested

  1. Resolution Note:

    After careful review, we’ve decided not to support this in SkinnedMeshRenderer. While supporting NaN values could offer benefits, it risks breaking existing projects that depend on current behavior to filter NaNs out. Additionally, ensuring consistent behavior across all platforms, now and in the future, is not guaranteed.

    Blend shapes are applied using weights; when the weight is 0, the delta is applied but the result is the original vertex. Allowing NaN would break this, since multiplying zero by NaN still yields NaN, resulting in the primitive always getting culled. The described use case instead relies on an implementation detail of SkinnedMeshRenderer: blend shapes with zero weight are skipped. Only this last behavior results in a toggle to cull primitives.

    Instead, for the described use case, we recommend relying on existing values we allow through or creating a custom blendshape-like system. For instance, you can use a compute shader to modify vertices after skinning and achieve a similar result. For this you would need to use SkinnedMeshRenderer.GetVertexBuffer() to retrieve the graphics buffer and dispatch at the correct time in the player loop.

Comments (1)

  1. nekobako-dev

    Aug 25, 2025 23:57

    A blend shape that moves vertices to Vector3.positiveInfinity is used to temporarily hide part of a mesh without actually splitting it.
    I think it would be clearer if the same could also be achieved with Vector3.one * float.NaN.

Add comment

Log in to post comment

All about bugs

View bugs we have successfully reproduced, and vote for the bugs you want to see fixed most urgently.