Game/Graphics
HLSL pow
newpolaris
2018. 8. 1. 13:47
DirectX 9 에서는 내장 DirectX 11 log / exp 를 사용하여 구현했다고 알려져있다 (OpenGL 도 마찬가지)
http://blog.techlab-xe.net/archives/5550 https://www.opengl.org/discussion_boards/showthread.php/182833-pow%28x-2%29-different-then-x%2Ax
보통 경우에서 가장 큰 차이는 전에는 x 부분이 음수면 0이었는데 Nan 으로 바뀌었다는거
https://www.opengl.org/discussion_boards/showthread.php/182833-pow%28x-2%29-different-then-x%2Ax
Fx 기반 MMD 에선,
float3 lambda = float3(680e-9, 550e-9, 450e-9);
c = pow(lambda, 2.0) * float3(1e6, 1e6, 1e6);
return float4(c, 1.0);
0.68, 0.55, 0.45 의 갈색이 나온다
반면, pow(float3(680e-9,550e-9, 450e-9), 2) 는
정상적으로 계산되어 검정색으로 나온다
그로인해 포팅할 때 다른 식으로 바꾸거나 파라메터 수정이 필요했다