Size: a a a

Unity Floodилка

2020 December 10

n

neFormal in Unity Floodилка
источник

KK

Kirill Kirsanov in Unity Floodилка
WellMOR
Угу. Ну ноль пусть вернёт.
Я конечно понимаю что это логичный исход, однако все же, мне кажется это логичным исходом
источник

KK

Kirill Kirsanov in Unity Floodилка
Как вообще нормалайз происходит?
Считается magnitude вектора а потом вектор делится на magnitude?
источник

W

WellMOR in Unity Floodилка
Kirill Kirsanov
Я конечно понимаю что это логичный исход, однако все же, мне кажется это логичным исходом
Логично.
Изюминка - это происходит только на iOS. И только на чипе А8.
источник

W

WellMOR in Unity Floodилка
Kirill Kirsanov
Как вообще нормалайз происходит?
Считается magnitude вектора а потом вектор делится на magnitude?
Reference Implementation
normalize for a float3 vector could be implemented like this.

float3 normalize(float3 v)
{
 return rsqrt(dot(v,v))*v;
}
источник

n

neFormal in Unity Floodилка
что лучше: Inf или Exception?
источник

n

neFormal in Unity Floodилка
на размышление даётся 30 секунд
источник

W

WellMOR in Unity Floodилка
neFormal
что лучше: Inf или Exception?
Зависит.
Но в общем случае - кидай эксепшон
источник

KK

Kirill Kirsanov in Unity Floodилка
Типа если это vector(3,3,3), то магнитьюд это 3*sqrt(3)=5,196 и деля по вектор поаргументно, то 3/5,196=0,577350268
И получается newVector(0.577,0.577,0.577) у которого длина как раз = 1
источник

KK

Kirill Kirsanov in Unity Floodилка
И если magnitude на который мы делим = 0, (а у (0,0,0) он равен нулю) то при делении  вектора получается обычное деление на ноль
источник

W

WellMOR in Unity Floodилка
Суть в том, что на каждом чипе эти базовые операции могут быть имплеменчены по своему.
Иногда даже на хардварном уровне.

Ну и вот.
источник

KK

Kirill Kirsanov in Unity Floodилка
А можно добавить проверку if(magnitude==0) return vector3.zero ? Или просто написать свою операцию с этой проверкой?
источник

P

Phantom in Unity Floodилка
WellMOR
Reference Implementation
normalize for a float3 vector could be implemented like this.

float3 normalize(float3 v)
{
 return rsqrt(dot(v,v))*v;
}
float Normalize (float3 vector) => rsqrt(dot(vector,vector)) * vector;
источник

W

WellMOR in Unity Floodилка
Phantom
float Normalize (float3 vector) => rsqrt(dot(vector,vector)) * vector;
?
источник

KK

Kirill Kirsanov in Unity Floodилка
Зачем ты это написал
источник

KK

Kirill Kirsanov in Unity Floodилка
Phantom
float Normalize (float3 vector) => rsqrt(dot(vector,vector)) * vector;
Это не решает никакую проблему
источник

KK

Kirill Kirsanov in Unity Floodилка
Kirill Kirsanov
А можно добавить проверку if(magnitude==0) return vector3.zero ? Или просто написать свою операцию с этой проверкой?
источник

P

Phantom in Unity Floodилка
Kirill Kirsanov
Это не решает никакую проблему
Решает проблему с немингом, а также делает код короче
источник

W

WellMOR in Unity Floodилка
Ну, можно сделать так:
```
float3 normalize(float3 v)
{
 return rsqrt(max(0.00001,dot(v,v)))*v;
}
```
источник

W

WellMOR in Unity Floodилка
Phantom
Решает проблему с немингом, а также делает код короче
проблему... с нэймингом?
источник