повернуть нормаль из object в мир для non uniform масштаба

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

повернуть нормаль из object в мир для non uniform масштаба

Сообщение waruiyume 09 ноя 2019, 09:31

Здравствуйте, подскажите пожалуйста как осуществить сабж. Такие способы
Синтаксис:
  1. mul(normal, (float3x3)unity_WorldToObject) 
  2. mul(transpose((float3x3)unity_WorldToObject), normal) 

правильного результата не дают. Я пытаюсь использовать это со screen space декалью, подозреваю, что проблема в этом- нормали правильно ориентированы только по Z+ оси и мне этого достаточно, но искажаются если изменять масштаб по оси Z, и методы выше этого не исправляют.
Такой костыль таёт, но это костыль.
Изображение
Передавать матрицу из скрипта не хочется.

Быль бы очень рад, если бы кто-то объяснил почему работает костыль.
Заранее спасибо!
Аватара пользователя
waruiyume
Адепт
 
Сообщения: 6143
Зарегистрирован: 30 окт 2010, 05:03
Откуда: Ростов на Дону

Re: повернуть нормаль из object в мир для non uniform масштаба

Сообщение jetyb 12 дек 2019, 07:38

Базовые функции:
Синтаксис:
Используется csharp
// Transforms direction from object to world space
inline float3 UnityObjectToWorldDir( in float3 dir )
{
    return normalize(mul((float3x3)unity_ObjectToWorld, dir));
}

// Transforms direction from world to object space
inline float3 UnityWorldToObjectDir( in float3 dir )
{
    return normalize(mul((float3x3)unity_WorldToObject, dir));
}
 

Если попробовать дописать normalize?
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21


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

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

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