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"} 
Другие вопросы по тегам