Unity/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;
}
Однако это не работает для объектов с острыми краями, таких как кубики. В случае с кубом стороны просто перемещаются, но стороны остаются одного размера, поэтому вы получаете "взорванный" куб:
Может кто-нибудь сказать мне, чего мне не хватает, чтобы заставить любой объект правильно масштабироваться в шейдере?
2 ответа
Решение
У вас есть центр, у вас также есть вектор положения вершин относительно этого. Вы можете найти величину этого и затем масштабировать это.
Это может помочь:
float3 normal= normalize(v.vertex.xyz)*0.05;
v.vertex.xyz+= normal;
И отключение динамического пакетирования для этого шейдера с помощью:
Tags {"DisableBatching"="True"}