Study/Etc.

Computer Graphics (Real-Time Rendering - chapter 6 - part 1: Advanced Lighting and Shading)

빨간당무 2011. 4. 27. 16:15
이 문서는 개인적인 공부를 위해 정리된 내용입니다. 다소 오류가 존재할 수 있습니다.



= 목차 - part1 (책에서는 part로 구분되어 있지 않으나 수업 중간에 중간고사를 보았기 때문에 구분함)
- 방사측정과 광도측정 (Radiometry and Photometry)
- 색도 측정 (Colorimetry)
- BRDF 이론 (BRDF Theory)
- BRDF 구현하기 (Implementing BRDFS)
-- 분해법 (Factorization)
-- 환경 매핑 필터링 (Environment Mapping Filtering)
- 정점 셰이더 (Vertex Shader)
- 픽셀 셰이더 (Pixel Shader)
- 셰이딩 언어 (Shading Languages)
= 목차 - part2
- 모션 블러 (Motion Blurer)
- 초점 심도 (Depth of Field)
- 반사 (Reflections)
-- 평면 반사 (Planar Reflections)
-- 광택 효과 (Glossy Effects)
-- 곡면 반사체로부터의 반사
- 굴절 (Refractions)
- 그림자 (Shadows)
-- 평면 그림자 (Planar Shadows)
-- 곡면상의 그림자
-- 그림자 볼륨 (Shadow Volumes)
-- 그림자 맵 (Shadow Map)
-- 그림자 최적화
- 전역 조명 처리 (Global Illumination)
-- 래디오시티 (radiosity)
-- 광선 추적법 (Ray tracing)


= 소개
- 이전의 텍스처 처리 기법
-- Light maps, environment maps, bump mapping
-- 단순 조명처리보다 현실감 있는 표현 가능
-- 물리학적 원리를 무시하기 때문에 현실감이 떨어짐
- 조명처리 모델을 확장하는 방법
-- 빛과 물체의 상호작용에 대한 기본 원리를 이용
-- 전역 조명 알고리즘 : 래디오 시티 (radiosity), 광선 추적법 (Ray tracing)

= 방사 측정 (Radiometry)
- 전자기 스펙트럼을 통해서 빛의 복사에너지를(radiation)를 측정하고 분석
- 광자를 통해 물체가 색상을 나타냄
- 측정 대역 : 3X10^11 부터 3X10^16 Hz 주파수 대역의 광방사에 집중
- 광방사 (Optical radiation) : 자외방사, 가시방사, 적외방사를 포함하는 100[nm] ~ 1[mm]의 파장범위

= 광도 측정 (Photometry)
- 방사측정과 유사 : 단지 사람 시각의 민감도에 가중치를 부여 (녹색에 대한 민감도가 가장 높음)
- 다양한 파장의 강도를 인지되는가에 관심
- CIE 광도 곡선을 사용하여 광도단위로 변환 가능
- 측량조건
-- 관측자가 일반 실내 조명에 적응 후 사람 눈의 평균 반응 측정치 기반
-- 가시대역 또는 가시 스펙트럼의 380[nm] ~ 780[nm] 파장 영역

= CIE 광도 곡선 (Photometric Curves)
- 사람의 눈은 λ = 550 nm 에서 가장 민감

= 광도 단위 (Photometric Units)
- Talbot (광도 측정에서) ↔ Joules (일반적으로) : 에너지 측정 단위 (결국 단위는 같음)
- Lumens (lm)(광도 측정에서) ↔ Watt (일반적으로) : 1 lm은 1cd의 점광원으로 부터 단위입체각을 통해 1 sec 동안 방사되는 광속 (Watt * Time = 빛의 양)
- Candela (cd) : 주어진 방향에서 단위 입체각 당 루멘값을 측정한 값 (1초의 경우 Lumens = Candela의 값은 같음)
- NIt : 입방 미터당 칸델라
- Lux (lx)(룩스) : 조도의 단위로서 입방 미터당 루멘 값 (값이 크면 빛의 세기도 강함)

= 방사 측정 (방사 에너지)
- 방사 에너지 : Radiant Energy (Q)
-- 방사상태 즉 전자파 형태로 방출되어 전파 또는 입사하는 에너지
--- 하나의 광자 에너지 : (Planck 상수 X 광속) / 광자의 파장
--- 에너지의 기본 단위로서 쥴 (Joule) 단위로 측정
- 방사 플럭스 : Radiant Flux/Power (Φ or P)
-- 단위 시간당 방사 에너지의 비율 (단위 : watt)
-- 면적에 관계되는 값이기 때문에 단위면적당 방사 플럭스를 나타내는 양으로서 방사 플럭스 밀도 (radiant flux density)를 사용

- 방사 측정 (방사 플럭스 밀도)
- 방사 플럭스 밀도 : Radiant Flux Density
-- 단위 시간당, 단위 면적 (물체 표면)을 지나는 광자 에너지
-- 조사도 (Irradiance) : 표면에 도달한 Flux양을 표시
-- 출력 방사도 (Radiosity or Radiant exitance) : 표면을 떠난 Flux의 양을 표시

= 방사 측정 (입체각)
- 입체각 : Solid angle (θ)
-- 2차원의 각 (2π : unit circle)을 3차원의 각 (4π : unit sphere)으로 확장한 개념

= 방사 측정 (방사도)
- 방사도 : Radiance (L)
-- 정의 
--- 방사측정 단위로 pixel에 저장되는 값
--- 방사도 L은 단위 면적당 (dA cosθ), 단위 입체각당 (dw) 와트수 (watts)로 정의됨
-- 입사하는 빛과 표면을 떠나는 빛 모두를 지칭
-- 방사도는 표면과 무관하고, 주어진 방향과 밀접하게 관련됨
--- 방사 플럭스는 표면에 대한 각도가 증가할 수록 넓은 영역에 분포 → 점차적으로 어두어짐
- 투영 영역 : Projected area
-- 평면의 법선 단위 벡터로 표면에 수직으로 사영 된 공간
-- 방사 플럭스는 표면에 대한 각도가 증가할 수록 넓은 영역으로 분포

= 색도 측정 (Colorimetry)
- 앞서 밝기에 대한 내용에 추가로 색상(스펙트럼)을 포함
- 색상 정합 실헙 (COlor matching experiment) → 인지 심리학 실험
-- 망막에 있는 세 종류의 원추 감각 세포로 세가지 신호만 수신 : 임의의 스펙트럼 표현하는데 세 개의 수치를 사용
-- 실험 순서
--- 3개의 색광을 흰색 스크린에 투사 색상들을 서로 더하거나 하나의 패치(patch) 형성
--- 정합할 시험 색상을 패치에 투사
--- 3개의 색광이 시험 색상과 정확히 일치하도록 가중치 조절
-- 실험 결과
--- r, g, b 3가지 빛은 거의 단색이며 r = 645 nm, g = 526 nm, b = 444 nm 의 값을 갖는다

= 색도 측정 (RGB)
- 매우 단순한 모델임, 단점으로 표현할 수 없는 색이 존재
- 기존 CIE-RGB 의 한계 (CIE는 협회임)
-- 색상을 정합하기 위해 음의 가중치를 사용
-- 음의 가중치를 갖는 색상들은 3원광을 조합하여 표현 불가능 (Red의 경우 '-'값을 넣어야 표현할 수 있는 색이 존재)
-- 비디오 표시장치나 프린터 등의 사용에 한계
- 수정된 CIE-RGB Color Matching Functions
-- 단색광을 사용하지 않는 세가지 가상 광원 (x, y, z)을 제안 : 합성광원임 (단순 RGB는 단색광 사용)

= 색도측정 (CIE-XYZ)
- CIE-XYZ Chromaticity Space
-- X, Y, Z tristimulus value는 CIE XYZ에서의 색에 대한 가중치
-- 표면의 반사도와 광원으로부터 색상함수 C(λ) 정의
- CIE-XYZ Chromaticity Diagram
-- (X + Y + Z)에 대하여 정규화된 값

= Other Color System
- CIE color space : 다른 컬러 모델 조정의 참조 모델
- RGB : 비디오 디스플레이 드라이버에 편리한 모델
- HSV/HSB : 색상, 채도, 명도로 표현
- YIQ, YUV, YCrCb : 텔레비전 산업용
- CMYK : 프린팅의 컬러 모델, 청록색, 심홍색, 노란색

= BRDF 이론
- 양방향 반사도 분포 함수 (BRDF)
-- 입사각으로 반사각을 구하거나 반사각으로 입사각을 구하기 때문에 양방향임
-- Bidirectional reflectance Distribution Funtion
-- 빛이 물체 표면에서 (물성을 고려하여) 어떻게 반사되는지를 설명하는 이론
- 물체마다 고유의 반사 패턴이 존재함 → 이것을 반영한 것이 BRDF 이론임
- Helmholtz 호환성 (Helmholtz reciprocity) : 입사각과 반사각은 바뀔 수 있으며 함수값은 동일하다
- 함수의 값의 정규화 (Normalization) : 나가는 에너지의 총량은 들어오는 에너지보다 작거나 같다

= BRDF 이론의 입출력
- 입력 : 빛의 입사각 (고도각, 방위각), 빛의 반사각 (고도각, 방위각), 빛의 파장 (색상과 채도는 상수)
- 출력 : 주어진 입사 방향에 대해 반사 방향으로 나가는 에너지

= BSSRDF
- BRDF는 BSSRDF의 근사모델
- 양방향 표면 산란 반사도 분포 함수 (Bidirectional Surface Scattering Reflectance Distribution Function : BSSRDF)
-- 표면에서 발생하는 빛의 산란현상 까지 계산
-- 함수 입력으로 입사위치와 반사위치를 포함 : 입사위치로 빛이 입사, 표면을 따라 다른 위치로 이동, 반사 방향을 따라 공간으로 방출

= 반사도 계산식 (Reflectance equation)
- BRDF와 입사 방사도 분포를 이용하여 출력 방사도를 계산하는 식
- 단일 출력방향의 방사도는 임의의 방향으로 들어와 그 방향으로 출력되는 모든 방사도를 합산함

= BRDF의 이론적 모델
- Microfacets
-- 임의의 크기와 각도를 가지면서 표면상에 불규칙하게 분포하는 (가우시안 분포) 작고 평평한 거울집합
-- 정반사 모델 : 일부 microfacet에서 빛이 직접 반사 → 램버트의 법칙에 따라서
-- 난반사 모델 : 여러 개의 facet들끼리 상호 반사
- 고도 상관법 (Height correlation)
-- Microfacet들이 빛과 거의 비슷한 파장을 가짐
-- 간섭, 회절 (diffraction) 등을 표현

= Fresnel reflectance
- BRDF에서의 특이한 현상 : 입사각과 반사각이 매우 작은 경우 발생
- 플라스틱 등에서 발생
- All materials become fully reflective at the shallowest grazing angle
- 난반사로 인해 정반사 효과가 나타남

= BRDF이론적 모델의 한계
- Do not account for anisotropy
-- If the viewer and the light source do not move and a flat sample of the material changes its appearance when it is rotated about its normal
-- Brushed metal, vanished wood, woven cloth, fur, hair
-- Anisotropic BRDF
-- Isotropic BRDF
- Not necessarily useful for representing some given material sample

= 기저 합산 (basis summation) - 수업 중 skip 하였음 (p31 in ppt)
= BRDF 구현 - 수업 중 skip 하였음
= 분해법
= 환경 매핑 필터링
= 환경 매핑 문제점

= 정점 셰이더 (Vertex Shader)
- 정점의 색상, 법선, 텍스처 좌표, 위치 등 각 다각형의 정점과 관련된 값들을 변경시키는 방법을 제공하는 프로그램 모듈
- 그래픽 하드웨어의 파이프라인 일부 : more flexibility
- DirectX 8에서 최초로 소개
- OpenGL extensions에서도 사용가능

= 정점 셰이더를 사용하는 이유
- 높은 사실성, 빠른 렌더링
- GPU 안에서의 프로그래밍을 할 수 있음 (flexible)
- 다양한 특수효과 : 머리카락 & 털의 애니메이션, 정점당 라이팅, 물속 효과, 옷감 효과 (영화 "중천"에 적용됨)
- 셰이더를 지원하는 그래픽 하드웨어 : GeForce 3/4TI 이상, RADEON 8500 이상
- 예전에는 변환(Transform), 조명처리 (Lighting)를 CPU에서 처리
- 최근에는 그래픽 가속기 파이프라인의 일부분으로 포함
- 장점 : CPU는 다른 작업을 할 수 있음 (CPU-GPU 병렬처리)
- 단점
-- 하드웨어를 사용하면서 조명 계산에 기본적인 Gouraud/Phong 모델만 사용할 수 있음 → 7~8년전 이야기임 이제는 다됨
-- 다른 변형된 조명처리 방법들은 그래픽 하드웨어에서 처리 불가 

= 정점 셰이더 아키텍처
- 기하 단계
- 5개의 모듈로 이루어짐 : 정점 입력, 임시 레지스터, 상수, 정점 셰이더, 정점 출력

= 정점 셰이더 효과
- 골격 구조 애니메이션 (Skeletal Animation)
-- Matrix Palette Skinning NVIDA의 GeForce 3 GPU는 32개의 행렬(=뼈대)들이 정점 하나에 적용된 애니메이션 가능
-- 예) 걷는 장면을 반복하는 경우
- 모핑과 키프레임 애니메이션 (Morphing And Key Frame Animation)
-- 물체의 두 단계를 정의하고 이 두 단계 사이를 Vertex Shader를 사용하여 보간법(Interpolation)을 실행
-- 예) 돌고래의 뒷꼬리 부분만 위아래로 반복하는 경우
- 절차적 변형 (Procedural Deformation)
-- 평평하거나 일반적인 모양의 물체를 특별한 단계를 거쳐 변형하는 방식
-- 예) 깃발의 펄럭임, 물방울 떨어졌을 때 움직이는 파동
- 굴절 효과 (Refraction Effects)
-- 렌즈의 중심에서 외곽으로 갈 수록 왜곡이 강함
-- 예) 돋보기 효과

= 픽셀 셰이더 (Pixel Shader)
- GPU에서 픽셀을 처리하는 작은 단위의 프로그램
- "fragment Shading"이라고도 함
- 렌더링 단계에서 픽셀별로 수행
- 고정 기능 다중 텍스처 파이프라인을 획기적으로 확장
- 일단의 상수들, 보간된 값들 그리고 얻어온 텍스처 값에 일련의 연산 들을 적용하여 픽셀 색상을 얻어내고 부수적으로 알파값을 처리 = 알파블랜딩
- 좀더 현실감 있는 조명 모델과 여러 가지 다른 효과들을 생성해내는 유연한 방법을 제공
- DirectX 8에서 픽셀 셰이딩의 개념을 소개하고 특수한 어셈블리 형식의 언어를 이용하여 텍스처 연산을 정의함

= 픽셀 셰이더를 사용하는 이유
- 단일 패스, Per-Pixel lighting
- 진정한 Phong 셰이딩
- Anisotropic lighting
- 비실사 렌더링(Non-Photorealistic Rendering) → 붗으로 그린 것 같은 효과들
- Per-pixel fresnel term 입체적 효과 (Volumetric effects)
- 진보된 범프 매핑 (스스로 그림자를 만드는 범프 맵) → 범프 매핑 자체는 그림자를 만들 수 없음

= 픽셀 셰이더 아키텍처
- 래스터화 단계
- 6개의 모듈로 이루어짐 : 난반사정반사색상 (vertex shader의 output), 임시 레지스터, 상수 레지스터, 텍스쳐 좌표, 주소 지정 명령, 산술 논리 연산 모듈

= 픽셀 셰이더 효과
- 디스플레이스먼트 맵핑
- 섬공 효과
- 지구 표면에 물결 효과

= 셰이딩 언어
- Vertex Shader와 Pixel Shader를 어셈블리 언어 프로그램으로 작성하는 것이 코드를 이해하고 수정하기 쉽게 함
- 매크로나 셰이더 프리뷰어 같은 도구들은 디버깅의 부담을 덜어준다
- Renderman 셰이더들의 렌더링 능력을 더 높이기 위해 사용됨
- HLSL (Direct X 9.0)
- nVidia cg

referece : 리얼-타임 렌더링 2판 (Real-Time Rendering), 신병석, 오경수 공역, 정보문화사