오다기리 박의 알고리즘 노트

[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 13. 고급 렌더링 본문

컴퓨터 그래픽스/OpenGL

[OpenGL로 배우는 컴퓨터 그래픽스] Chapter 13. 고급 렌더링

오다기리 박 2019. 2. 14. 21:19

OpenGL로 배우는 3차원 컴퓨터 그래픽스



Chapter 13. 고급 렌더링

Section 01. 그림자(Shadow)

  • 그림자란?

  • 지면 그림자
    <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>P</mi><mo>'</mo><mo>=</mo><mfenced open="[" close="]"><mtable><mtr><mtd><mi>x</mi><mo>'</mo></mtd></mtr><mtr><mtd><mi>y</mi><mo>'</mo></mtd></mtr><mtr><mtd><mi>z</mi><mo>'</mo></mtd></mtr><mtr><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mo>=</mo><mfenced open="[" close="]"><mtable><mtr><mtd><mo>-</mo><mi>D</mi></mtd><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mo>-</mo><mi>D</mi></mtd><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mn>0</mn></mtd><mtd><mn>0</mn></mtd><mtd><mo>-</mo><mi>D</mi></mtd><mtd><mn>0</mn></mtd></mtr><mtr><mtd><mi>A</mi></mtd><mtd><mi>B</mi></mtd><mtd><mi>C</mi></mtd><mtd><mn>0</mn></mtd></mtr></mtable></mfenced><mo>&#xB7;</mo><mfenced open="[" close="]"><mtable><mtr><mtd><mi>x</mi></mtd></mtr><mtr><mtd><mi>y</mi></mtd></mtr><mtr><mtd><mi>z</mi></mtd></mtr><mtr><mtd><mn>1</mn></mtd></mtr></mtable></mfenced><mo>=</mo><mfenced open="[" close="]"><mtable><mtr><mtd><mo>-</mo><mi>D</mi><mi>x</mi></mtd></mtr><mtr><mtd><mo>-</mo><mi>D</mi><mi>y</mi></mtd></mtr><mtr><mtd><mo>-</mo><mi>D</mi><mi>z</mi></mtd></mtr><mtr><mtd><mi>A</mi><mi>x</mi><mo>+</mo><mi>B</mi><mi>y</mi><mo>+</mo><mi>C</mi><mi>z</mi></mtd></mtr></mtable></mfenced></math>
    <math xmlns="http://www.w3.org/1998/Math/MathML"><mi>P</mi><mo>'</mo><mo>=</mo><mi>T</mi><mo>&#xB7;</mo><mi>L</mi><mo>&#xB7;</mo><msup><mi>V</mi><mrow><mo>-</mo><mn>1</mn></mrow></msup><mo>&#xB7;</mo><mi>V</mi><mo>&#xB7;</mo><mi>M</mi><mo>&#xB7;</mo><mi>P</mi><mspace linebreak="newline"/><mo>&#xA0;</mo><mo>&#xA0;</mo><mo>&#xA0;</mo><mo>&#xA0;</mo><mo>=</mo><mi>T</mi><mo>&#xB7;</mo><mi>L</mi><mo>&#xB7;</mo><mi>M</mi><mo>&#xB7;</mo><mi>P</mi><mspace linebreak="newline"/><mi>M</mi><mo mathvariant="italic">,</mo><mi>V</mi><mo>&#xA0;</mo><mo>:</mo><mo>&#xA0;</mo><mi>&#xBAA8;&#xB378;</mi><mo>&#xD589;</mo><mi mathvariant="normal">&#xB82C;</mi><mo>,</mo><mi mathvariant="normal">&#xBDF0;</mi><mo>&#xD589;</mo><mi mathvariant="normal">&#xB82C;</mi><mspace linebreak="newline"/><mi>L</mi><mo>&#xA0;</mo><mo>:</mo><mo>&#xA0;</mo><mi>&#xC2DC;&#xC810;&#xC744;</mi><mo>&#xA0;</mo><mi>&#xAD11;&#xC6D0;</mi><mo>&#xA0;</mo><mi mathvariant="normal">&#xC704;</mi><mo>&#xCE58;</mo><mi mathvariant="normal">&#xC5D0;</mi><mo>&#xA0;</mo><mi>&#xC124;&#xC815;</mi><mo>&#xD558;</mo><mi mathvariant="normal">&#xB294;</mi><mo>&#xA0;</mo><mi>&#xC2DC;&#xC810;&#xBCC0;</mi><mo>&#xD658;</mo><mo>&#xA0;</mo><mo>&#xD589;</mo><mi mathvariant="normal">&#xB82C;</mi><mspace linebreak="newline"/><mi>T</mi><mo>&#xA0;</mo><mo>:</mo><mo>&#xA0;</mo><mi>&#xACB0;&#xACFC;&#xB97C;</mi><mo>&#xA0;</mo><mi>&#xBC14;&#xB2E5;&#xC5D0;</mi><mo>&#xA0;</mo><mo>&#xD22C;</mo><mi mathvariant="normal">&#xC0C1;</mi><mo>&#xD558;</mo><mi mathvariant="normal">&#xAE30;</mi><mo>&#xA0;</mo><mi mathvariant="normal">&#xC704;</mi><mo>&#xD55C;</mo><mo>&#xA0;</mo><mo>&#xD22C;</mo><mi mathvariant="normal">&#xC0C1;</mi><mo>&#xD589;</mo></math>

  • 셰도우 맵

    • 셰도우 맵 알고리즘 : 영상공간 알고리즘으로, 화면 화소 단위로 그림자 위치를 계산한다.

    • 섀도우 Z버퍼 / 섀도우 맵 : 광원 기준 Z버퍼

    • 알고리즘

if(Zmap + Bias) < Zpixel
픽셀은 그림자 안에 들어감
else
픽셀은 그림자 밖에 있음

Zmap : 섀도우 맵에 저장된 거리

Zpixel : 화소와 광원간의 거리

    • 단점 : Spotlight에만 적용할 수 있다.

  • 그림자 부피 (Shadow Volume)

    • Z - pass 알고리즘


Section 02. 레이트레이싱

  • 연산

    • 광선이 화면 안의 물체와 만나는지 일일히 다 검사해보는 과정에서 시간이 많이 소요됨

    • Bounding Volume 기법으로 가속화 가능


Section 03. 레디오서티

  • 에너지 보존 법칙을 이용하여 은은한 조명효과를 표현하는 기법


Raytracing

Radiosity

표면종류

반짝이는 면, 투명한 면

거친 면(완벽 확산체 가정)

반사광 추적

경면광, 굴절광

확산광

모델링 대상

폐쇄 공간 / 개방 공산

폐쇄 공간

시점의 위치

시점에 따라 결과 변화

시점에 무관

광원

spotlight으로 취급

area light으로 취급

시각적 효과

선명한 반사, 선명한 그림자

은은한 반사, 은은한 그림자

알고리즘

영상공간 알고리즘

객체공간 알고리즘

연산속도

느림

느림