작성
·
127
·
수정됨
0
안녕하세요 이번 강의를 잘 이해했나 의문이 들어서 질문 남깁니다
먼저 제가 이해한 내용을 설명해보자면
Normal Map이란 어떤 물체의 세부적 표현을 정점의 추가 없이
표현하기 위해서 나온 기술?이고
해당 Map의 각 픽셀의 RGB 값을 x, y, z로 해석하여
float4 map = NormalMap.Sample(LinearSampler, uv);
[0, 1] 구간으로 변환 후 3D 세상에서 표현하기 위해 [-1,1]구간으로 변환 한다
float3 tangentSpaceNormal = (map.rgb * 2.0f - 1.0f);
그리고 이 값을 World좌표계로 변환하기위해 탄젠트 스페이서에서의 t,b,n을 좌표 변환 공식?에 의해
[tx, ty, tz]
[bx, by, bz]
[nx, ny, nz] 행렬이 나오게 되고 이러한 TBN 행렬을 이용해서 World 좌표로 치환할 수 있다
이렇게 정리해봤는데 잘못 이해하거나 누락된 부분이 있을까요?
답변 1
0
안녕하세요, 인프런 AI 인턴입니다.
toyboy0113님, 정말 잘 이해하고 계십니다. Normal Map에 대한 설명이 매우 명확하게 잘되어있네요. 정규 맵(Normal Map)은 3D 모델의 세부적인 높낮이와 요철을 더 많은 폴리곤을 추가하지 않고도 구현할 수 있게 해주는 기술입니다. 여러분이 설명해주신 것처럼, Normal Map에서 추출한 데이터를 통해 각 픽셀의 RGB 값을 법선 벡터로 변환하고, 이를 다시 월드 공간 상의 법선로 변환해 물체의 외관에 더 많은 디테일을 부여하게 됩니다.
여러분이 설명한 과정에서 텍스처로부터 샘플링한 법선 맵 값(map.rgb * 2.0 - 1.0)을 [-1, 1] 구간으로 변환하여 탄젠트 공간의 정규 벡터를 구하고, 이를 TBN(탄젠트, 비노멀, 노멀) 행렬을 사용하여 월드 공간으로 변환하는 과정은 정확히 이해하신 부분입니다.
단, 이 과정에서 중요한 것 중 하나는 TBN 행렬의 정확한 계산과 정규 맵 데이터의 정확한 해석입니다. TBN 행렬을 구성하는 탄젠트(Tangent), 비탄젠트(Binormal 또는 Bitangent), 그리고 노멀(Normal) 벡터가 올바르게 계산되어야 모델에 정확하게 세부 디테일을 반영할 수 있습니다.
누락되었거나 잘못 이해하신 부분은 없어 보입니다. 다만, 실제로 이 과정을 구현할 때는 정밀도와 퍼포먼스, 그리고 사용하는 3D 엔진이나 API에 따른 구현 방법의 차이에 주의할 필요가 있습니다.
여러분의 이해도가 상당히 높으며, 이 과정을 통해 게임 프로그래밍 내에서의 그래픽 처리에 대해 더 깊이 이해하고 있는 것 같습니다. 만약 추가적으로 궁금한 점이 있으시면 질문 남겨주세요.