Phong Lighting Model

SYiee·2023년 9월 5일
0

Graphics

목록 보기
5/5
post-thumbnail

📌 Phong Lighting Model

Lighting (Illumination)

  • 오브젝트와 라이트가 상호작용하는 것
  • 옛날에 가장 많이 쓰이는 것은 Phong Model이 쓰이고 최근에는 Pixed Based Rendering 이 쓰인다.
    상업 게임에서 많이 쓰이고 advanced lighting techniques에 많은 기초가 되었다.

Phone model을 이루는 term

  • Diffuse : 표면이 알고보니 엄청 울퉁불퉁해서 난반사를 하는 것 같아
  • Specular : 금속같은것은 난반사뿐만 아니라 번쩍 번쩍함이 있어, 특정 각도에서는 엄청 반사를 잘하는 것 같아
  • Ambient : 주변에 있는 것이 영향을 주는 것 같아
  • Emissive :형광 물질같은 자체발관

⇒ 이 네 개를 섞어서 그럴듯 하게 보이게 만든 것이 Phong Lighting Model이다.


✅ Light Sources

Point Light

  • 하나의 포인트로부터 전 방향으로 빛을 뿜어내는 것
  • 포인트로부터의 거리에따라 강도가 달라진다
  • 광원으로부터의 거리에 따라 빛의 강도가 감소합니다.
    The intensity of the light decreasing with distance.

Directional Light

  • 보통 태양빛 같은 것
  • 어디에 존재하다든 하나의 방향과 세기를 갖는다.
  • 광원의 강도는 거리에 따라 변하지 않습니다.
    The intensity of light does not change with distance.

Spotlight

  • a cone shaped light, 형광등 백열등
  • The intensity increases as closer to the center of the light cone and spotlight source.
    광원의 중심에 가까워질수록 강도가 증가합니다.

Ambient

  • 은은하게 밝혀주는 간접광을 constant c로 정의

✅ Diffuse Term

물테가 사실 되게 울퉁불퉁해서 난반사가 일어나는데…

What is diffuse light?

  • the scattered light를 어떻게 모델링할까
  • light가 주변으로 uniform하게 퍼진다.

Diffuse Term in Phong Lighting Model

  • 유니폼하게 적당한 세기로 전체로 나아간다고 하자
  • diffuse surfaces : 충분히 울퉁불퉁하여 난반사를 일으키는 표면
    → diffuse surfaces이 아닌 것 : 금속
  • independent of the view direction, 빛이 얼마나 세게 들어오냐와 관심이 있다.
  • amount of incoming light : 입사각에 영향을 받는다.

Diffuse computation

  • the light vector (l) and surface normal (n)
    → 보통 두 벡터는 다 nomal vecter이다.
    → 그렇기 때문에 두 벡터의 dot product는 대부분 두 벡터가 이루는 갹도만 고려한다는 이야기
  • sds_d : the RGB color of the light source
  • mdm_d : the diffuse reflectance of the object material
  • x : 그냥 벡터 곱한 것 생각하기 component-wise multiplication.

  • mdm_d : The material parameter
    메테리얼의 색
  • (1,1,0)의 의 백색광을 쐈는데 오브젝트가 노란색으로 보인다면 이것은 R G는 반사하고 B는 흡수하는 것이다

  • 물리적으로 100퍼 맞진 않아 그냥 적당히 잘 되도록 approximation한 것이기 때문에

✅ Specular Term

The specular term is used to make a surface look shiny via highlights, and it requires view vector (v) and reflection vector (r) in addition to light vector (l).

카메라가 어디에 위치해 있는지가 중요해진다.

  • r 벡터에 가까울 수록 잘 보이고 멀어질수록 잘 안보이며 일정 거리 이상으로 나가면 아얘 안 보인다

Whereas the diffuse term is view-independent, the specular term is highly view-dependent.

  • perfectly shiny surface : 완전히 정반사만 함.
  • surface that is not perfectly shiny :

⇒ 로가 0일 때 최대 0가 증가해가면서 서서히 감소하도록 모델링한다.

  • sh : shiness term, 승수
    • 조금만 벗어나도 눈이 안 부시게 만들고 싶어 승수를 사용한다.
    • sh는 반사광을 볼 수 있는 각도를 조절해주는 1 이하의 수

✅ Ambient Term

What is ambient light?

  • 간접광 : 주변에 튕겨 내 눈에 들어오는 값
  • 다 계산하기 너무 힘드니까 그냥 적당히 C 정도로 나온다고 생각하자

✅ Emissive Term

What is emissive term?

  • 자체발광하는 거에 많이 쓴다.
  • 애도 그냥 constant value로 조절한다.

The Phong model sums the four terms

  • 과연 전부 다 더하면 태양으로부터 나온 빛P(light source)가 될까?
  • 전부 난반사를 일으킨다고 했는데 과연 그럴가?
  • 결이 있는 오브젝트는 좀 어색해..

⇒ 그래서 이걸 다 지켜 만든것이 BPR이다.


Per-pixel Lighting

Per-vertex lighting vs. per-pixel lighting

  • Per-vertex lightin
    픽셀마다 해주려면 너무 크니까 vertex shaser에서 light로 칼라 계산한 다음에 resterizer가 분산해주는 색깔 입힌다.
    → 최근에는 이런거 없다 gpu가 그냥 알아서 해준다.

Consider two points on an object's surface, each of which makes up a distinct pixel.

  • The pixel shader computes lighting using l, n, r, and v.
  • 계산 상의 편의를 위해 directional light vecter는 같은 값이라 설정
  • 오브젝트의 표면에 따라 n r v가 달라져야 한다
  • r: r = 2n(n·l)-l. → 을 하는 이유는 그냥 vertex shader에서 ps로 넘겨주는 파라미터를 하나 줄이기 위해서이가

✔ Normal for each pixel

  • l : world-space vector
    → cpu에서 넣은 것이다. (space change 되기 전)
    → n을 world space로 넘김
  • VS에서 n을 넘길 때 MwM_w를 곱해 n을 구한것을 pixel shader로 넘겨주어야 한다는 것을 의미

✔ View vector for each pixel

  • VS에서 v vecter를 world spave로 보내주고 camera position EYE를 이용해 view vecter를 구해주고 이것을 resterizer로 넘겨 interpolation 시켜서 vavbv_a v_b를 구한다.

⇒ 구한 것들로 최종적으로 구한다

Blinn-Phong Reflection Model

BPR이 나오기 전에 퐁의 단점을 고치기 위해 시도한 발악

  • 이후 PBR에서도 사용이된다.
  • h라는 halfway vecter를 정의한다.


🖇 Reference

해당 포스트는 강형엽 교수님의 게임그래픽프로그래밍 [GGP-23-1] 수업을 수강하고 정리한 내용입니다. 잘못된 내용이 있다면 댓글로 알려주시면 감사하겠습니다😊

profile
게임 개발자

1개의 댓글

comment-user-thumbnail
2023년 10월 25일
  1. PBR은 pixel-based rendering이 아니라 physically-based rendering을 의미합니다 (BPR도 아니고 PBR입니다)
  2. light vector와 surface normal vector가 둘 다 normal vector가 아니라, unit vector로 가정하고 계산을 합니다
답글 달기