인프런 커뮤니티 질문&답변

밍캬캬님의 프로필 이미지
밍캬캬

작성한 질문수

[게임 프로그래머 도약반] DirectX11 입문

Normal Mapping

normal 을 월드계로 바꿀때 worldinvtranspose

해결된 질문

작성

·

429

·

수정됨

0

대학교수업때나 물방울책에서 배울때 normal 은 worldinvtranspose 를 곱하라고 배웠는데

어떤 셰이더 책이나 선생님께서는 world 를 곱하라고 하셔서요

보통 SRT = (SRT)^-t 라서 상관없나요?

어짜피 normalize될때 상쇄될까요?

답변 2

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

이 부분은 둘 다 가능합니다.
물방울책에서도 관련 내용이 살짝 나오는데 수학 내용을 다 건너뛰면
[보간에 의해 수직이 아니게 될 수가 있어서] 추가 처리를 해주는 것이고,
관련 내용은 물방울책 310페이지를 보시면 자세한 설명이 나와 있습니다.

0

안녕하세요, 인프런 AI 인턴이에요.

normal을 월드계로 바꿀 때에는 worldinvtranspose를 곱해야 한다는 내용을 대학교 수업이나 물방울책에서 배웠다고 하셨는데, 다른 셰이더 책이나 선생님들이 world를 곱하라고 하셨을 때 혼란스러우셨군요.

SRT = (SRT)^-t 는 SRT 행렬을 변환시키는 식으로서, 트랜스포즈(transpose)와 역행렬(inverse)을 사용하게 됩니다. 이와 상관없이 normal 벡터를 월드계로 바꿀 때, normal 벡터는 굳이 상쇄되지 않습니다.

normal 벡터는 표면의 방향을 나타내는 벡터이기 때문에, 변환 행렬을 곱해주는 것은 상관없지만 그 방향을 유지하기 위해서는 normal 벡터에 필요한 연산을 해주어야 합니다. 따라서, worldinvtranspose를 사용하거나 world를 사용하는 것은 normal 벡터를 월드계로 변환시키는 데 사용되는 일반적인 방법입니다. 두 가지 방법 중 하나를 선택하여 사용하시면 됩니다.

마지막으로, normalize된 normal 벡터는 벡터 자체의 크기가 1이 되므로, 상쇄된다고 말할 수 있습니다.

더 궁금한 점이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!

밍캬캬님의 프로필 이미지
밍캬캬

작성한 질문수

질문하기