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

时间:2016-04-16 18:45:04

标签: unity3d shader cg

我试图编写一个缩放对象大小的顶点着色器。我找到了许多解决方案"对于这个问题,一切都是沿着法线扩展顶点"像这样:

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;
}

但是,这对于具有锐边的对象(例如立方体)不起作用。在立方体的情况下,它只是使侧面直接移出,但是侧面保持相同的尺寸,因此你得到一个"爆炸"立方体:

enter image description here

有人可以告诉我,为了让任何对象在着色器中正确缩放,我可能会缺少什么?

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:-1)

这可能会有所帮助:

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

使用以下命令禁用该着色器的动态批处理:

Tags {"DisableBatching"="True"}