Странное поведение встроенных констант

Шейдеры и все-все-все.

Странное поведение встроенных констант

Сообщение OlegF 13 окт 2011, 19:23

Сразу несколько вопросов. Сначала опишу ситуацию. Есть родительский объект с юниформ скейлом, не равным 1.0, у него есть чайлд объект со скейлом 1.0 (т.е без скейла) и своим шейдером. Если использовать в этом шейдере встроенную матрицу _World2Object, то значения будут разными в эдитор моде и плей моде, а именно в эдитор моде у матрицы не будет скейла. Однако если включить статический батчинг и поставить хотя бы два (!) таких объекта, то значения _World2Object будут одинаковыми и в эдиторе и в плей моде. Если объект будет один, разница остается.
Вопрос - что происходит и что с этим можно сделать?

Второй вопрос про встроенную константу unity_Scale. Она корректно устанавливается в обычных проходах, но в шадоу кастер проходе она равна единице. Сейчас приходится получать скейл как float scale_x = length(float3 (_Object2World[0][0], _Object2World[0][1], _Object2World[0][2])); что совсем не радует. Почему unity_Scale не работает в шадоу кастере и что с этим делать? Вариант с передачей своей константы не вариант - нужен один материал на все объекты.
OlegF
UNец
 
Сообщения: 34
Зарегистрирован: 19 фев 2011, 17:23

Вернуться в Shader Lab

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5