Сразу несколько вопросов. Сначала опишу ситуацию. Есть родительский объект с юниформ скейлом, не равным 1.0, у него есть чайлд объект со скейлом 1.0 (т.е без скейла) и своим шейдером. Если использовать в этом шейдере встроенную матрицу _World2Object, то значения будут разными в эдитор моде и плей моде, а именно в эдитор моде у матрицы не будет скейла. Однако если включить статический батчинг и поставить хотя бы два (!) таких объекта, то значения _World2Object будут одинаковыми и в эдиторе и в плей моде. Если объект будет один, разница остается.
Вопрос - что происходит и что с этим можно сделать?
Второй вопрос про встроенную константу unity_Scale. Она корректно устанавливается в обычных проходах, но в шадоу кастер проходе она равна единице. Сейчас приходится получать скейл как float scale_x = length(float3 (_Object2World[0][0], _Object2World[0][1], _Object2World[0][2])); что совсем не радует. Почему unity_Scale не работает в шадоу кастере и что с этим делать? Вариант с передачей своей константы не вариант - нужен один материал на все объекты.