[DX3D] 반사광

2024. 10. 10. 17:42·개발/DX11
728x90

반사광

픽셀 쉐이더에서 반사 벡터를 계산하면 각 픽셀마다 반사 벡터 값이 나오는데 이를 카메라가 오브젝트를 쳐다보는 방향, 즉 Eye Vector와 이루는 각도를 비교하여 반사광을 계산할 수 있다. 구현을 위해 필요한 것들은 아래와 같다.

 

1. 픽셀의 View Space 위치
2. 카메라의 View Space 위치
3. Eye Vector
4. 반사벡터

 

View Space는 카메라가 기준이 되기 때문에 카메라의 위치가 (0.f, 0.f, 0.f)이므로 카메라의 View Space 위치를 따로 생각할 필요가 없고, 또한 픽셀의 View Space에서의 좌표가 곧 Eye Vector가 된다.

 

 

 

두 벡터를 Normalize 하여 Reflect Vector와 -Eye Vector를 내적하면 두 벡터의 cos 값이 나오게 되고(0~1) 이 값을 빛의 세기로 사용하면 된다. 그림으로 표현하자면 카메라가 바라보는 방향과 반사광의 방향이 이루는 각도가 0에 가까울 수록 반사광의 세기는 밝아지는 것이다. 

(0 이하의 값이 나오면 안되므로 Saturate)

 

 

 

반사광의 세기를 단순히 내적으로만 구하게 되면 코사인 그래프를 따르게 되므로 각도차이에 따른 변화량이 미미하다. 반사광과의 각도차이가 꽤 있는데도 불구하고 반사되는 양의 변화가 크지 않아 전체적으로 푸석푸석한 느낌이 나게 된다. 각도에 따른 변화량을 크게 주기 위해서 반사광 값에 제곱을 계속 하게 된다면 각도 차이에 따른 변화량이 커져 제곱수가 커질수록 표면이 매끈한 느낌이 많이 나게 된다.

 

반사광 세기에 제곱연산을 하지 않았을 때 반사광 세기에 제곱 연산을 했을 때

 

 

 

'개발 > DX11' 카테고리의 다른 글

[DX11] Post-Processing ( 회색 화면 출력 )  (0) 2024.11.08
[DX3D] Normal Mapping  (1) 2024.10.16
[DX3D] 반사 벡터  (0) 2024.10.10
[DX3D] Cube Mesh  (0) 2024.10.07
[DX11] 렌더링 파이프라인  (0) 2024.05.09
'개발/DX11' 카테고리의 다른 글
  • [DX11] Post-Processing ( 회색 화면 출력 )
  • [DX3D] Normal Mapping
  • [DX3D] 반사 벡터
  • [DX3D] Cube Mesh
Majangnan
Majangnan
  • Majangnan
    개발 모코코
    Majangnan
  • 전체
    오늘
    어제
    • 분류 전체보기 (76) N
      • 개발 (75) N
        • C# (10)
        • SQL (3)
        • Unity (9)
        • Unreal (10)
        • C++ (3)
        • Server (1)
        • DX11 (8)
        • 알고리즘 (30) N
  • 블로그 메뉴

    • 홈
    • 방명록
    • 깃허브
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    c++
    백준
    DX11
    프로그래머스
    UnReal
    DirectX11
    슈팅게임
    Mecanim
    3dlight
    dx3d
    MAC
    언리얼
    블루프린트
    Unity
    상속
    sql
    알고리즘
    blueprint
    C#
    코딩테스트
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Majangnan
[DX3D] 반사광
상단으로

티스토리툴바