Study/Etc.

Computer Graphics (Real-Time Rendering - chapter 5: Texturing)

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



= 목차
- 일반화된 텍스처 처리 (Generalized Texturing)
- 이미지 텍스처 처리 (Image Texture Process)
-- 확대 (Magnification)
-- 축소 (Minification)
- 텍스처 캐싱과 압축 (Texture Cashing and Compression)
- 다중 패스 텍스처 렌더링 (Multipass Texture Rendering)
- 다중 텍스처 처리 (Multi-Texture Processing)
- 텍스처 애니메이션 (Texture Animation)
- 텍스처 처리 방법 (Texturing Methods)
-- 알파 매핑 (alpha blending)
-- 환경 매핑 (Environment blending)
-- 조명 매핑 (Light blending)
-- 범프 매핑 (Bump Mapping)
-- 광택 매핑 (Gloss blending)
-- 다른 텍스처 처리 기법

= 텍스처 파이프라인
- 단일 텍스처(2차원이미지)를 위한 일반적인 텍스처 파이프라인
- 객체 공간의 위치를 계산 → (u, v)를 찾기 위해 투영함수를 사용 → 텍셀을 찾기 위해 대응자 함수를 사용 → 값 변환 함수 적용 → 수식이나 단편값을 변경
-- 객체 공간 위치 (object space location)
-- 투영 함수 (projector function)
-- 텍스처 매핑 (texturing mapping)
-- 대응자 함수 (corresponder function)
-- 값 변환 함수 (value transform function)

= 투영 함수 (projection function)
- 텍스처 처리의 첫 단계 : 표면의 위치를 얻어내서 그것을 매개변수 공간 (u, v)으로 투영하는 것
- 투영자 함수 : 텍스처 좌표 생성
- 평면 투영 (Planar Projection), 원통면 투영 (Cylindrical Projection), 구면 투영 (Spherical Projection)
- 비 실시간 렌더링
-- Projector funtion as part of the rendering process itself
-- Apply various projector functions separately
- 실시간 렌더링
-- 투영자 함수는 모델링 단계에서 적용 → 텍스처의 각 꼭지점(정점)을 오브젝트의 특정 위치에 맵핑함
-- 즉, 실시간 렌더링에서는 평면, 원통면, 구명 투영을 사용하지 않음

= 구면 투영
- 구면상에 투영
- Blinn and Newell's 환경 매핑

= 원통면 투영
- 특정한 축을 중심으로 관모양을 가지는 물체에 적합
- 왜곡 현상 발생 : 원통 축에 거의 수직한 면에 매핑하는 경우

= 평면 투영
- X선 투영기는 종이 인형과 같은 원리
- 두가지 투영 방식 지원 : 직교 투영, 원근 투영

= 투영 함수의 왜곡
- 왜곡을 최소화 하는 방법
-- Unwrapping the mesh
-- Near-optimal set of planar projection
- 복잡한 object의 경우 여러개로 나눠서 평면투영을 수행하는 것이 좋음

= 텍스처 좌표
- (u, v, w), w : 깊이값
- (s, t, r, q), q : 동차 좌표

= 대응자 함수
- 매개변수 공간 값을 텍스처 공간의 특정위치로 변환
- Several functions of corresponder

= 일반적인 대응자 함수
- 랩(wrap), 반복(repeat), 타일(tile)
- 거울상(Mirror)
- 고정(clamp), 모서리에 고정(clamp to edge)
- 경계(border), 경계에 고정(clamp to border)

= 텍셀 (Texel)
- 텍스처 안의 한 픽셀
- 하나의 이미지 텍스처를 서로 다른 해상도로 활용가능 (대응자 함수를 통해서)

= 3차원 텍스처
- 물체의 내부를 봐야 할 때 사용하고 일반적인 경우에는 사용하지 않음
- 왜곡이나 봉합선 문제가 없음
- 잡음 함수
-- 잡음 함수의 계산 비용이 높음
-- 실제로는 3차원 배열에 있는 각 격자 점의 값들이 전처리 과정에서 미리 계산, 보간 기법을 이용하여 임의의 점에서의 텍스처 값을 얻어냄
-- 누적 버퍼나 색상 버퍼 혼합 기능을 사용
-- 메모리에 저장하기에는 너무 크고 상세한 정보를 알기도 어려움

= 텍스처로부터 데이터 가져오기
- Data types
-- RGB 삼원색
-- RGBα (α is opacity)
-- Other type of data, (예) bump mapping의 노말

= 표면 변형
- 표면 속성 변경
-- 결합 함수와 텍스처 혼합 연산
--- 대치 (Replace) : 원래 색을 무시 (제한된 경우만 사용하거나, 조명 텍스쳐와 함께 사용)
--- 전사 (Decal) : 색상과 혼합 (특정색은 바탕색을 그냥 보여주고, 나머지는 텍스쳐 색 사용)
--- 변조 (Modulate) : 텍스처와 바탕색을 곱합, 많이 사용

= 결합 함수 - 대치
- 원본 표면 색상을 텍스처 색상으로 대치
- 텍스처 자체가 조명 정보를 가지고 있지 않으면 기존의 조명 정보가 사라짐

= 결합 함수 - 전사
- 텍스처가 바탕 색상과 혼합
- 원래의 α 값은 바뀌지 않음

= 결합 함수  변조
- 표면 색상과 텍스처 색상을 곱합 : 기존 표면의 조명 정보도 유효함

= 이미지 텍스처 처리
- 항상 확대 & 축소가 발생되므로 어떤 방법을 쓸지 고려해야 함
- 확대 (Magnification)
-- 최근접 이웃법 (Nearest neighbor) : box filter, pixelation
-- 쌍선형 보간법 (Bilinear interpolation) : bilinear combination
-- 2차 보간법 (cubic interpolation)
- 축소 (Minification)
-- 최근접 이웃, 쌍선형 보간
-- 밉매핑 (Mipmapping) : 앨리어싱, Nyquist rate, 감마보정
-- 합산 영역 테이블 (Summed-Area table) : 제약 없는 비등방 필터링

= 최근접 이웃법
- 픽셀레이션(Pixelation) : 각각의 텍셀들이 뚜렷하게 보임
- 각 픽셀의 중심으로부터 가장 가까운 텍셀값을 취함
- 결과적으로 그림이 거칠게 보임 → 가장 큰 단점
- 화질은 떨어지지만 간단하고, 속도가 빠름 → 가장 큰 장점, 유클리디안 distance만 4개 고려하면 됨
- 한 픽셀당 한 텍셀이 필요

= 쌍선형 보간법
- 각 픽셀에 대해 이웃한 네 개의 텍셀을 찾음
- 2차원 상에서 선형 보간하여 해당 픽셀의 색상값을 찾아냄
- 결과적으로 약간 흐릿함
- 최근접 이웃 방법을 사용할 때 나타나는 톱니 모양이 사라짐

= 축소
- 영향을 받는 텍셀개수 계산
-- Difficult to determine precisely the exact influence of all texel near a particular pixel
-- Impossible to do so perfectly in real time → 실시간 내에 구할수는 없음
- 다양한 축소 방법
-- 점 샘플링 (point sampling) : 최근접 이웃법 (가운데 점), 쌍선형 보간법 (4군데의 점 평균)
-- 밉매핑
-- 합산 영역 테이블

= 안티앨리어싱
- 앨리어싱 : 하나의 픽셀이 4개 이상의 텍셀들로부터 영향을 받는 경우 필터링은 실패하고 앨리어싱이 생김
- 앨리어싱 해결 : 한 픽셀에 기껏해야 하나의 텍셀들만이 대응되도록 해야 함
- 해결 방법 : 픽셀들의 샘플링 주파수를 증가, 텍셀의 주파수를 감소

= 밉매핑
- 밉매핑 축소 필터 : 다운샘플링, 원래 영역의 1/4, 하위 텍스처
- 필터링 
-- 불필요하게 블러링하는 효과 : box filter
-- Gaussian, Lanczos, Kaiser filter and etc.
-- 텍스처 모서리 근처에서 필터링 할 때는 텍스처가 반복되는지, 아니면 한번만 쓰이는지를 주의 깊게 살펴야 함
- 감마 보정 : 원래 텍스처의 밝기를 유지
- The measure of affecting texture
-- 픽셀의 적용 범위를 근사하기 위해서 픽셀의 셀에 의해 생성된 사변형에서 긴 모서리를 사용하는 것
-- 4개의 미분값 중에서 절대값이 가장 큰 것을 척도로 사용

= 밉맵핑 - 안티앨리어싱 method
- Store a number of different sizes of the texture
-- Larger Object : Largest texture map
-- Smaller Object : Smallest texture map

= 밉맵핑 - 평가
- 장점 : 축소하는 양에 상관없이 일정한 시간이 소요
- 단점 : 오버블러링 : 직사각형의 영역, 직사각형 영역을 얻어오는 것은 불가능
- To avoid aliasing : 텍스처상에서그 픽셀의 셀이 개략적으로 차지하는 영역의 가장 큰 쪽 값을 선택

= 립맵핑 (Ripmapping)
- 기존의 밉맵을 확장하여 다운샘플링된 직사각형 영역들까지 활용 가능한 하위 텍스처로 포함

= 합산 영역 테이블 (summed area table)
- 텍스처와 동일한 크기를 가진 배열을 생성
- 지정된 색상에 대해 더 많은 정밀도 비트를 가짐
- 평균값은 직사각형의 텍스처 좌표를 사용하여 계산
- Also avoid overblurring
- 수평선쪽으로 뻗어있는 선들의 경우 더 선명하나 대각선으로 지나는 선들은 여전히 오버블러링됨

= 비등방 필터링 (anisotropic Filter; AF)
- Use a number of squares to cover the quad
- 비등방한 정도가 심해질수록 축을 따라서 더 많은 샘플들이 추출
- 비등방선이 임의의 방향을 가리킬 수 있도록 함
- 밉맵에서 사용하는 것 외에 추가적인 텍스처 메모리 필요 없음
- 밉매핑 vs 비등방필터링 비교 : 수평선쪽을 향한 비등방 필터링은 앨리어싱을 최소화하면서 선명한 결과 이미지를 만듦

= 텍스처 캐싱
- 복잡한 응용 프로그램들은 다수의 텍스처를 필요로 함
- 필요한 텍스처에 비해 그래픽 메모리는 항상 부족함
- 해결 방법
-- 텍스처들의 크기를 작게 유지
-- 텍스처를 확대할 경우 문제가 발생
- Texture 들을 memory 상주시킴으로 processor cache 성능을 향상 : 텍스처 캐싱
- 타일링 (Tiling) & 모자이킹 (Mosaicing)
-- 반복되지 않은 여러 개의 텍스처들을 하나의 커다란 텍스처 영상으로 결합하여 빈번하게 교체되는 것을 방지

= 텍스처 캐싱 정책
- LRU (Least recently used)
- 사용빈도가 낮고 오래된 time stamp를 가진 텍스처를 캐쉬에서 우선 제거
- 새로운 텍스처를 삽입하여 다음 영상을 준비함
- 텍스처가 현재 프레임에서 사용이 되면 교체가 빈번하게 일어나느 현상 발생

= 텍스처 압축
- 고정 비율 텍스처 압축방법을 사용함으로 메모리와 대역폭 문제를 직접적으로 해결할 수 있다 : JPEG, PNG
- 텍스처는 압축한 상태로 그래픽 메모리에 load, 렌더링시에 복원
- S3TC (S3 Texture Compression)
- DirectX : S3TC를 표준으로 하여 DXTC 사용
- 압축된 텍스처를 사용하면 같은 크기에 메모리에 고해상도의 텍스처를 적재하여 사용할 수 있음

= DXTC 이미지 압축 기법 (유손실 압축)
- 영상은 타일이라고 부르는 4X4 픽셀 블록으로 분할
-- 불투명한 영상의 경우 4X4 픽셀 블록은 두개의 색상 값과 16개의 2비트 값들을 저장함으로 부호화됨
-- 이들 간격을 유지하는 두개의 다른 색상을 얻을 수 있다. (색상 4개)
-- 4X4 픽셀을 사용하는데 4개의 색상만을 사용 (4개 이상은 표현불가능)
-- 4:1 ~ 6:1 의 압축률

= 다중 패스 텍스처 렌더링
- 조명 계산식의 여러 부분들은 독립적인 패스에서 개별적으로 계산가능 → 정교한 표면 조명식을 활용할 수 있음
- 각각의 패스들을 텍스처 연산으로 만들고 필요에 따라 각 패스들을 순차적으로 실행
- 한 패스에서 적용할 수 있는 텍스처 수가 제한되어 있으므로 여러 단계로 순차 적용
- 다중 패스 렌더링에서 사용하는 함수 : 합산 (add) / 혼합 (blend)
- 빛의 위치/밝기에 따라 그림자의 크기와 색상이 달라진다 : 그림자 텍스처와 색상 텍스처를 적용함

= 다중 텍스처 처리
- 두개 혹은 그 이상의 texture들을 단일 패스에 하나 표면에 적용하는 것
- Texture blending cascade → Pipeline 구조 : 한 단계에서 혼합된 텍스처는 다음 단계로 전달
- 복잡한 셰이딩 모델을 구성할 수 있음 (8단계 까지 둘 수 있음)

= 텍스처 애니메이션
- 프레임별로 적용되는 이미지가 계속 달라질 수 있또록 허용함 : (예) 불꽃 이미지
- 프레임별로 텍스처 좌표가 달라지도록 함
- 텍스처 좌표값을 일정하게 더하거나 빼주면 움직이는 효과를 낼 수 있음
- 텍스처 좌표를 변경하여 선형 변환을 표현 : zoom, rotation, shearing
- 텍스처 혼합 기법으로 애니메이션 효과 구현

= 알파 매핑
- 투명하게 렌더링할 부분만 텍셀의 alpha 값을 0으로 설정
- 렌더링 파이프라인의 확장이 필요 : Z-buffer의 값 검사 전에 Alpha값 검사
- 전사 (Decaling) 효과
-- Alpha 값을 조정하여 물체에 표현
-- 경계를 투명하게 설정 후 "경계" 대응자 함수 사용
- Cutout
-- 1개의 다각형으로 복잡한 실루엣의 물체를 렌더링
-- Cross Tree - 적은 비용으로 3차원 나무 구현
- Animation
-- Alpha blending과 texture animation의 결합으로 표현 : 깜박이는 횃불, 식물의 성장, 폭발, 대기효과

= 조명 매핑
- 시점 독립성 (View Independence) : 환경내의 조명이 정적일 경우 난반사 성분은 어떤 각도에서도 동일
- 조명 매핑
-- 미리 계산된 조명 텍스처를 바탕화면의 표면에 곱해서 처리
-- Phong-like Shading
-- Dark mapping (원래 색깔보다 밝아질 수 없음)
- 장점
-- 조명 텍스처는 낮은 해상도로도 사용 가능
-- 적은 비용으로 고급 조명처리 효과
-- 여러 상호아에서 재사용 가능
-- 동적으로 변하는 조명 처리 작업 중 빠르게 계산
- 응용분야
-- Animation : Spot light 효과, 별도의 패스를 두거나, 텍스처 단계를 추가하는 것보다 적은 비용
-- Projective Texture : 슬라이드 영사기 효과
 
= 광택 매핑
- 각 물체 표면의 정반사 성분을 텍스처로 제공 : 모든 물질, 빛의 속성이 텍스처로 제공 가능

= 환경 매핑
- 복잡한 물체의 곡면에서 반사효과를 표현하는 방법
- 환경맵 텍스처 (Environment Map)를 구성 후 반사벡터를 인덱스로 하여 텍셀값을 가져옴 : 반사될 것이라 예상되는 것을 이용하야 만듬
- 기본 가정
-- EM으로 반사되는 빛과 물체는 멀리 떨어져 있음 : 그렇지 않다면 조명에 의한 영향을 받게됨, 반사체는 하나이고 나머지는 환경맵으로만 구성이 가능한 이유임
-- 반사체는 EM으로 반사되지 않음 : 허용시 서로 반사하게 되어 무한 루프를 돌게 됨
- EM algorithm
-- 환견을 표현하는 2차원 영상 (Environment Map)을 적재
-- 반사체의 각 픽셀에 대해 법선벡터를 계산
-- 관측 벡터와 법선 벡터로 부터 반사 벡터를 계산
-- 반사 벡터를 이용하여 환경맵으로의 Index를 계산
-- 환경 맵으로부터 얻어낸 텍셀 데이터를 사용하여 현재 픽셀의 색을 결정

= Blinn and Newell's Method
- 구 형태의 Environment를 직사각형으로 변형하여 환경맵으로 사용
- 문제점
-- 환경맵의 각 모서리를 이어 붙인 봉합점 (선) : Φ=0인 지점에 경계선 존재, Environment Map이 극점에서 수렴
-- 삼각형의 정점들이 양쪽 모서리에 걸쳐있는 경우 오류 발생

= 정육면제 환경 매핑 (Cubic Environment Mapping)
- 그래픽스 H/W에서 구현되는 가장 일반적인 EM 방법
- Environment의 중앙에 카메라를 위치하고 정육면체의 각 면들을 투영하여 구성
- Environment Map을 비교적 쉽게, 실시간으로 생성 가능
- 균일한 Sampling 특성 → 왜곡이 없다는 뜻
- 반사벡터에서 초대 크기의 성분에 대응하는 면 사용
- 관측방향에 무관하게 사용 가능
- 여러 면에 걸쳐진 정점은 반사벡터 보간 기능으로 해결 : 각 모서리를 따라서 분할

= 구면 매핑 (Sphere Mapping)
- 상용 그래픽 H/W에 적용된 최초의 환경 매핑 기술 : 영화 터미네이터에서 사용됨
- 텍스처 이미지는 구면을 수직하게 바라볼 때 나타나는 영상
-- 구면 앞에 전체 Environment를 투영
-- Light probe 이용
-- 직접 사진을 촬영
-- Ray tracing이나 Cubic EM을 warping하여 구성
- 장점
-- 보간시 고려해야할 텍스처의 봉합선이 없음 : 모든 정점이 한 면에 존재, 텍스처 좌표 계산 용이
- 단점
-- Sphere Map에서 두 점 사이의 움직임은 비선형 : 모서리 쪽일수록 큰 오차 발생
-- 단일 관측방향에 대해서만 유효 : 관측방향 변경 시 동일 맵 사용, 실시간으로 각 관측방향에 따른 EM 구성시 시각적 오류 발생

= 포물면 매핑 (Paraboloid Mapping)
- 2개의 Environment hemisphere를 사용하여 환경맵 구성
-- Sphere map과 유사한 원형 텍스처 생성
-- 반사벡터의 z 성분 부호로 접근할 면 선택
- 정점이 걸쳐있을 경우 2개의 텍스처에 동시에 접근하여 보간
- 장점 
-- Sphere Map, Cubic Map에 비해 더욱 균일한 텍셀 샘플링 가능
-- 관측 조건에 독립적
- 단점
-- Cubic Mapping, Sphere mapping에 비해 큰 비용소요
-- Image를 Warping이나 Ray tracing하여 구성

= 환경 매핑을 사용한 조명 처리
- 하이라이트 표현 - 하이라이트를 화너경맵체 표시 → 반사되는 조명도 쉽게 처리할 수 있음, 카트라이더의 케릭터 모자에 하이라이트
- Recursive reflection : EM을 재귀적으로 구성
- Diffuse, Gloss, Reflection Mapping
-- Environment Mapping을 이용하여 빠르게 계산 가능
-- 평면에서 EM보다 평면반사 기법 사용하는 것이 더 좋음
--- 반사되는 광선들의 각도가 거의 동일
--- 텍스처의 작은 부분이 크게 확대되기 때문에 화질 저하

= 범프 매핑 : 물체 표면의 굴곡을 주고자 할 때 사용
- wrinkle, dimple을 표현하는 trick 기법
- 물체의 geometry는 변화시키지 않음 → 추가로 폴리곤을 더 쓰지 않음
- 표면의 normal vector만 perturbation
- Local model에 의해, dimple이 있는 것처럼 보임
- 단점 : silhouette line (검은 윤곽, 실루엣)들에서는 굴곡을 표현하지 못하고 매끈함
- 범프매핑을 위해 노멀 벡터 (Normal vecter)와 하이트 필드 (Height field)를 이용한 두가지 방식이 존재함
-- Normal vecter는 높이 값에 u, v 반향의 x, y, z 값을 모두 저장해야 함, 이후 연산은 간단
-- Height field는 높이값만을 저장, 이후 연산 복잡

= Height field 이용법
- 텍스처 값은 높이를 나타냄 : 흰색은 높은 지역, 검정색은 낮은 지역
- Height field는 u, v 에 해당하는 부호화된 값을 유도하는데 사용 : 이웃한 열, 행들의 차이를 이용하여 기울기 계산

= Offset vector Bump Mapping
- Height map 대신 D vector 저장
- 텍스처 안의 각 점에 저장
- 표면이 어디를 향하게 할지 결정

= 부조 범프 매핑 (Emboss Bump Mapping)
- 윤곽인 뚜렷하게 보이도록 하는 것 (엠보싱)

= 부조 범프 매핑 알고리즘
- 난반사 단색 텍스처로 적용된 height field로 표면을 렌더링
- 광원의 방향에서 모든 정점의 (u, v) 좌표를 쉬프트
- 난반사 텍스처로 적용된 고도필드를 이용하여 표면을 다시 한번 렌더링 한 후 첫 번째 패스에서 나온 결과에서 뺄셈
- 고도 필드를 배제하고, 난반사 조명 효과를 가진 Gouroud 셰이딩 방식으로 표면을 다시 한번 렌더링
- 셰이딩된 영상을 결과에 추가

= 내적 범프 매핑 (Dot Product Bump Mapping)
- dot bump mapping
- 표면에 대한 실제 법선들이 normal map에 저장
- 법선 벡터들로 이루어진 Bump 텍스처와 광원 벡터 내적
- 광원을 따라 모양이 변하는 면 생성 가능

= 환경 맵 범프 매핑 (Environment Map Bump Mapping)
- 알고리즘
-- 하나의 방향 벡터를 Bump Map에서 읽음
-- 방향벡터를 이용하여 환경 맵좌표를 게산
-- 이때 반사벡터에 사용자가 정의한 행렬을 적용하여 회전, 크기 변환

= 다른 텍스처 처리 기법
- 비행기 시뮬레이션에 사용되는 상세 텍스처
- 알파 혼합 투명도를 써서 만든 부드러운 에지를 가지도록 한 사각형으로 안티앨리어싱 된 선과 문자를 표현하는 방법
- 수평 관상 조명을 반사하는 환경 매핑의 한 형태의 원통면 매핑
- 벡터 필드 가시화를 위한 Line integral convolution
- 비실사 렌더링
- 볼륨 렌더링

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