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"}
我正在尝试编写一个顶点着色器来缩放对象的大小。我发现很多 "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"}