제 목 normal map 강의에서 정규 직교화를 사용하는 이유가 궁금합니다.
작성자 제원 등록날짜 2021-11-15 18:38:58 / 조회수 : 76
강좌명 [단과] DirectX 11 3D 게임프로그래밍 Part 6
  • void NormalMapping(float2 uv, float3 normal, float3 tangent, SamplerState sample)

    {

    ... 

    //탄젠트 공간
        float3 Normal = normalize(normal); //vertex normal : Z에 맵핑
        float3 Tangent = normalize(tangent - dot(tangent, Normal) * Normal); //X에 맵핑

    ...

    }

    강사님이 위와같이 코드를 알려주시면서 정규 직교화에 대해 검색하여 공부해보라고 하셨는데요,

    하나의 직선과 그 직선과 동일한 평면에 있는 선으로 직교하는 선을 구하는것이라고 이해하였습니다.

    그런데 실제 코드에서 사용시에는 tangent벡터가 모델데이터를 파싱하면서 입력하거나, 직접 메쉬를 만들시 입력해준값을 

    사용해서 입력되는데 위의 계산을 다시 하여 탄젠트 벡터를 구하는 부분이 잘 이해가 되지않아 문의드립니다.
        

  • 작성자 : 게임클래스 / 등록날짜 : 2021-11-17 20:22:27
  • 안녕하세요 게임클래스 입니다.

     

    현재 담당 교수님이신 '박문수 교수님'께 해당 질문에 대해 

    답변을 요청드린 상태입니다.

     

    담당선생님께 전달 받으면 추가 답변으로 안내해 드리도록 하겠습니다.

     

    감사합니다.

     

    ------------------아래는 해당 교수님의 답변입니다---------------------------------

    해당 탄젠트 벡터의 값이 C++에서 계산해서 VS -> RS를 거쳐 PS로 넘어갈때 값이 약간씩 변하는 오차가 발생합니다.

    그래서 다시 한번 계산해준거구요.

    사실 그 정도 오차는 무시해도 되므로 정규직교화를 사용하지 않아도 결과에 그렇게 큰 차이는 없습니다.

    정규직교화를 찾아보라고 한 이유는 모델 같은 경우 3D 툴에서 디자인을 통해 Tangent 벡터가 나오지만

    지형같이 직접 C++에서 생성하는 메시의 경우 정규 직교화를 통해 Tangent 벡터를 구하게 되므로

    한번 찾아보라고 말씀드린겁니다.

     

    --------------------------------------------------------------------------------------

    게임개발자가되는 가장 빠른길!

    게임클래스

댓글 1개
  • 제원 [ 2021-11-22 23:39:16 ]
  • 감사합니다~!