1. 3D Lighting

DV·2024년 5월 8일

DirectX_3D

목록 보기
2/13

📒다양한 라이팅 연산 방법


[다양한 라이팅 연산 방법]

  • Gouraud shading: 정점에서 라이팅 연산하는 방법
  • Pong shading: 픽셀단위로 라이팅 연산하는 방법

📌Gouraud shading

: Vtx에서 광원 연산 후 PS에서 보간값 사용

  • 장: 연산량 적음
    • 초창기 그래픽스에서 사용하던 방식
    • 그러나 현재 컴퓨터에선 이정도 연산량 큰 차이 없음
  • 단: 어색함
    • 버텍스의 연산 결과를 보간한 값이므로,
    • 이를 평면에 발라 구체를 만들면 어색함

📌Pong shading

: 각 픽셀의 Normal을 보간해 픽셀마다 광원 연산

  • 보간된 Normal로 각 픽셀마다 적절한 Lighting 연산 가능
    • 평면이지만 곡면처럼 처리 가능

📒Light Reflection


: 반사된 빛이 카메라를 향하면 더 밝아 보임

📌반사벡터 유도

R = P + 2N(-P·N)
반사벡터 = 입사벡터 + 2표면벡터(-입사벡터·표면벡터)

📌좌표계

: View space 사용

  • 반사광 연산은 카메라 정보를 얻어 사용해야 함
  • 카메라 정보 :
    • view matrix에서 얻어 사용 가능
    • 좌표계를 view space로 둔다면 카메라와 관련한 연산 용이

📌반사광 연산

  • 반사된 빛의 크기

    • Reflection Vector와 Camera의 Eye vector 간 각도 연산
    • 내적:
      • 두 벡터가 반대방향으로 교차할 때 반사된 값이 최대
      • (라이팅 연산처럼) cos 사용하기 위해 내적
      • 반대방향 교차이므로 한 벡터는 뒤집어줘야 함
  • 그래프 보정

    • cos의 문제: 그래프가 완만함 (로그그래프처럼 급격히 꺾여야 함)
    • 내적 결과값을 pow해서 그래프 곡선 조절
    • cos 그래프
    • 로그그래프
  • 연산 결과 빛처리

    • 결과값 * reflection scale(설정한 반사값)
    • 오브젝트 값이 아닌 라이트값만 영향을 받아야 함

References.
[1] Reflection Vector derivation: https://novemberfirst.tistory.com/112

0개의 댓글