[Graphics] Illumination

박민주·2022년 6월 18일
1

Computer Graphics

목록 보기
1/8
post-thumbnail

렌더링에는 조명과 음영이 포함되어 있다.

Lighting

  • 광원과 물체 특성을 감안하여 정점에서의 빛 세기를 계산

Shading

  • 결정된 정점 색을 기준으로 해당 물체 내부 곳곳 마다 색을 부여

Global illumination

  • 직접 들어오는 빛과 그림자, 반사 등을 고려함
  • Indirect illumination

Local illumination

  • 직접 들어오는 빛만 고려하며, 물체에 의한 그림자나 반사되는 빛은 고려하지 않음

Phong Lighting Model

= ambient + diffuse + specular의 조합

  • Local illumination이며 위 수식을 보면 주변 다른 물체나 표면과는 상관이 없는 term들임
  • 로컬이라서 shadow, refraction effects, mirror effect, indirect illumination 같은 것들은 생성 못함

Global illumination 으로 하려면 위 수식을 어떻게 바꿔야할까?

  • 빛의 세기나 방향이 모든 곳에 대해서 적분되서 들어와야 함
  • 반사되는 빛은 한 쪽 방향이 아니라 반사된 곳의 점의 색깔을 정할 때 적분이 재귀적으로 들어감
    그런데 너무 복잡해져서 나온 것이 Rendering equation

Rendering Equation

  • x'점에서 x점까지 도달하는 빛의 세기(Total intensity)에 대한 식

1. Visibility

  • g(x, x')은 x와 x'사이의 거리가 d라고 했을 때 그 사이에 물체가 아무것도 없으면 1/d^2이고
    물체가 있다면 가려져서 안보일 거라 0이됨
  • 거리가 멀어질 수록 잘 안보일 거라서 d가 커질수록 위 값인 visibility는 작아지게 됨

2. Emission

  • 자체로 발광하는 것
  • x'점에서 x점으로 가는 빛의 세기와 그 주변에서 반사되는 빛이 더해짐

3. Reflection

  • 반사 텀인데 위의 Emission이랑 더해져서 Visibility랑 곱해짐 !
  • 어떤 점을 기준으로 형성된 반구가 있다고 했을 때 이 점으로 들어오는 빛을 모두 합한 것

여기까지 하면 수식이 이렇게 되고 이게 최종 식임

위 복잡한 식을 풀기 위해 재귀인 I() 텀을 없애면 direct illumination이 됨
지금부터는 계산을 단순화시키기 위한 작업임

Direct Illumination

  • Ray tracing
  • 광원에서 나오는 빛 중 스크린으로 오는 것만 계산하자
  • 근데 그럼 광원에서 나오는 모든 빛에 대해 일일히 계산해야 해서 너무 계산량이 많아지니까 까꾸로 스크린에서 광원으로 도달하는 빛만 계산하자

Ray Tracing

  • 광원으로부터 Ray를 쏴서 스크린으로 가는 모든 반사를 계산하는 것
  • 그런데 그 많은 Ray의 대부분이 스크린으로 가고 있지는 않아서 비효율적

Indirect Illumination

  • Ray casting, Monte-Carlo, Radiosity

Ray Casting

  • 역방향으로 스크린의 픽셀로부터 Ray를 쏘는 것
  • Ray가 직접 광원에 부딪히는 경우 해당 픽셀의 색은 광원의 색이 됨
  • 쐈는데 아무 물체랑도 만나지 않으면 배경색이 됨
  • 어떤 면과 만나면 광원까지 연결해서 계산
  • Per-pixel processing이라서 프래그먼트 쉐이더에서 계산 가능

Ray Casting 계산

  • 첫번째 교점: 픽셀에서 d의 방향으로 간 ray에 부딪힌 물체와의 교점
  • 두번째 교점: 첫번째 교점에서 광원까지의 ray (Shadow ray)

Rendering Equation

어떻게 모든 reflect와 refract의 방향을 계산할 것인지?

  • Case 1: Sample (1도 단위로 거의 다)
  • Case 2: Random shoot (랜덤으로)
  • Case 3: Pre-determined shoot (미리 정해진 방향으로)

실제로는 랜덤이 가장 좋고, 몇 개나 할 것인지는 재질에 따라서 다름.
100개도 충분한데 유리 같은 경우는 100만개까지도 함

Monte-Carlo Approach

  • 확률적 방법
  • 모든 ray를 다 계산하지 않고, 랜덤하게 ray와 reflection을 선택해서 추적 및 계산

Radiosity

  • Radiosity는 Ray tracing 에서 엄청난 수의 빛을 추적하고 계산해야한다는 문제를 해결하기 위해 제한된 광선 추적을 하는 알고리즘
  • 빛을 확산 반사하는 표면이 있는 장면의 렌더링 방정식을 풀기 위해 finite-element 방법 적용
  • 모든 유형의 빛 경로를 처리하는 Monte-Carlo 와 달리 광원을 떠나 일부 확산 반사되는 경로만 설명 (눈에 닿기 전의 횟수)
  • Global illumination 임
  • 표면에 도달하는 조명은 광원에 직접 오는 것이 아니라 빛을 반사하는 다른 표면에서도 나옴
  • 뷰 팩터(폼 팩터)는 각 표면의 일부분의 관계에 대해 계산함
  • 움직이는 카메라나 움직이는 조명효과에 대한 것 없이 정적이기 때문에 아쉬움

Reflection Model

1. Blinn-phong Reflection Model

  • 기존 Phong 모델을 개선한 것

  • 기존 Phong 모델은 반사 벡터 R을 구하기 위해 매번 내적 연산을 해주어야 했음

  • Blinn-Phong 모델의 경우 반사 벡터 R을 사용하는 대신 중간 벡터 H를 사용

  • H는 R보다 더 가볍게 구할 수 있는데, 내적 연산은 Fragment Shader에서 수행되어야 했지만, H를 구하는 계산은 Vertex Shader에서 더 단순하게 수행할 수 있기 때문

2. Cook Torrance Reflection Model

  • Phong이나 Blinn 모델과 비교하여 'Enery Conservation'과 'Microfacet'을 도입하여 더욱 물리적인 현상을 기반으로 하는 리얼리티를 가능하게 해주었음

3. Oren Nayar Reflection Model

  • 거친 표면에서의 Diffuse를 표현하기 위한 반사 모델
  • 관찰자나 빛의 방향 그리고 거칠기 등을 파라미터로 받는 복잡한 함수가 됨

4. Ward Reflection Model

  • Anisotropic specular highlight

물체와 빛이 상호작용하는 방식

1. BRDF(Bidirectional reflectance distribution function)

  • 어떤 방향으로 반사가 되는지
  • BRDF가 바뀌면 재질도 바뀌어보임

2. BTDF(Bidirectional transmittance distribution function)

  • 빛이 어떤 방향으로 투과되는지

3. BSDF(Bidirectional scattering distribution function, 혹은 BxDF)

  • 이 둘을 합쳐 빛이 재질과 어떻게 상호작용하는지
  • BSSRDF 도 있는데 실제 피부같이 안에 들어갔다 나와서 반사되는 것을 나타냄

참고

profile
Game Programmer

0개의 댓글