일반 매핑에 대해 배우고 있습니다. RGB 값이 XYZ로 변환된다는 것을 이해했지만 내 질문은 어떻게 변환되며 노멀 맵이 파란색과 자주색 인 이유는 무엇입니까?
일반 매핑에 대해 배우고 있습니다. RGB 값이 XYZ로 변환된다는 것을 이해했지만 내 질문은 어떻게 변환되며 노멀 맵이 파란색과 자주색 인 이유는 무엇입니까?
답변:
노멀 맵은 -1에서 1까지의 벡터를 포함하기 때문에이 범위를 0-> 1로 늘려 RGB 범위 내에 맞출 수 있습니다.
따라서 보통 법선에 변형을 적용하여 볼 수있는 것으로 변환합니다.
vec3 colour = vec3(0.5) + normal * 0.5;
파란 색은 노멀 맵이 기본 (0,0,1) 방향으로 프리미티브 (삼각형 등) 노멀을 기준으로 사용되어 삼각형 노멀과의 편차가 없음을 나타 내기 때문입니다. 일반적으로 프래그먼트 셰이더는 런타임시 현재 픽셀 당 법선과 관련하여이 법선을 회전시켜야합니다.
vec3 normal = (colour - vec3(0.5)) * 2.0;
탄젠트 공간 노멀 맵만 주로 파란색입니다. 이는 파란색이 (0,0,1)의 법선을 나타 내기 때문에 삼각형이 평면 x 및 y에있을 때, 즉 표면에 수직 일 때 변하지 않는 법선이 될 것입니다. 접선, x 및 접선, y (이중 법선이라고도 함)는 빨강 및 녹색 채널로 인코딩되며 이러한 형식은 삼각형 표면의 점에 대한 접선 공간 법선을 만듭니다.
접선 공간 법선 맵이 빨간색 (1.0, 0.0, 0.0)으로 만 색상을 인코딩하는 경우 삼각형 표면에 평행 한 접선 공간 법선이 생성됩니다. 이것은 삼각형이 표면에서 90도 정도만 켜지고 삼각형을 볼 수없는 시점에서 뷰 벡터에서만 빛을 내야한다는 것을 의미하기 때문에 결코 보이지 않습니다.
월드 공간 노멀 맵은 구를 통해 단위 노멀을 인코딩하므로 채널당 [-1, 1]에서 [0, 1]까지 인코딩되면 주로 다른 색상이 될 수 있습니다.
여기에서 비교를 볼 수 있습니다.
실제로 노멀 맵은 일반적으로 BC5 와 같은 2 채널 형식으로 인코딩되어 실제로는 x와 y 만 저장합니다. z는 단위 벡터라는 것을 알고 있습니다. 이를 통해 파일 크기를 늘리지 않고도 더 많은 비트로 더 높은 정밀도를 유지할 수 있습니다.
vec3 colour = vec3(0.5) + normal * 0.5;
는 RGB를 XYZ로 변환합니까?