Страница 1 из 1

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

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

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

Быль бы очень рад, если бы кто-то объяснил почему работает костыль.
Заранее спасибо!

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

СообщениеДобавлено: 12 дек 2019, 07:38
jetyb
Базовые функции:
Синтаксис:
Используется 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?