Unity/CG: 在顶点着色器中缩放对象

Unity/CG: Scale object in vertex shader

我正在尝试编写一个顶点着色器来缩放对象的大小。我发现很多 "solutions" 这个问题,都是 "expanding vertices along the normals" 这样的:

v2f vert(appdata_base v)
{
    v2f OUT;
    float3 norm = normalize(v.normal); //Unity 5 fix

    v.vertex.xyz += norm * _Scaling;
    OUT.pos = mul(UNITY_MATRIX_MVP, v.vertex);

    OUT.normals = v.normal;
    return OUT;
}

但是,这不适用于具有锋利边缘的对象,例如立方体。在立方体的情况下,它只是让边直接向外移动,但边保持相同的大小,因此你得到一个 "exploded" 立方体:

谁能告诉我我可能缺少什么才能让任何对象在着色器中正确缩放?

你有中心,你也有相对于它的顶点位置向量。您可以找到它的大小,然后对其进行缩放。

这可能有帮助:

float3 normal= normalize(v.vertex.xyz)*0.05;
v.vertex.xyz+= normal;

并为该着色器禁用动态批处理:

Tags {"DisableBatching"="True"}