목차
제1장 소개 ... 21
1.1 Cg란 무엇인가? ... 21
1.1.1 그래픽 하드웨어용 프로그래밍 언어 ... 22
1.1.2 Cg에서 자료 흐름 구조 ... 23
1.1.3 GPU의 특수성과 CPU의 범용성 ... 23
1.1.4 Cg 사용에 대한 수행 성능 근거 ... 24
1.1.5 기존 언어들과 공존 ... 25
1.1.6 그 외의 Cg의 요소 ... 27
1.1.7 Cg 프로그램들의 제안된 실행 환경 ... 28
1.2 정점, 프래그먼트 그리고 그래픽 파이프라인 ... 29
1.2.1 컴퓨터 그래픽 하드웨어의 발전사 ... 29
1.2.2 그래픽 하드웨어의 4세대 ... 30
1.2.3 그래픽 하드웨어 파이프라인 ... 34
1.2.4 프로그래밍 가능한 파이프라인 ... 38
1.2.5 정점, 프래그먼트 프로그래밍 능력에 대한 Cg의 지원 ... 42
1.3 Cg 개발 역사 ... 42
1.3.1 마이크로소프트와 엔비디아의 Cg와 HLSL 개발을 위한 협력 ... 44
1.3.2 비대화식 셰이딩 언어 ... 45
1.3.3 3D 그래픽을 위한 프로그래밍 인터페이스 ... 48
1.4 Cg 작업 환경 ... 48
1.4.1 표준 3D 프로그래밍 인터페이스 : OpenGL 그리고 Direct3D ... 48
1.4.2 Cg 컴파일러와 런타임 라이브러리 ... 51
1.4.3 CgFX 툴킷과 파일 포맷 ... 53
1.5 연습 문제 ... 57
1.6 좀더 읽을거리 ... 57
제2장 간단한 프로그램 예제 ... 61
2.1 간단한 정점 프로그램 ... 61
2.1.1 출력 구조체 ... 62
2.1.2 지시자 ... 63
2.1.3 구조체의 멤버 ... 64
2.1.4 벡터 ... 64
2.1.5 행렬 ... 65
2.1.6 의미구조 ... 66
2.1.7 함수 ... 67
2.1.8 입력과 출력 의미구조의 차이 ... 68
2.1.9 함수 몸체 ... 70
2.2 예제 컴파일하기 ... 71
2.2.1 정점 프로그램 프로필 ... 71
2.2.2 Cg 컴파일 에러의 종류 ... 73
2.2.3 프로필 종속적인 에러 ... 74
2.2.4 여러 개의 진입 함수 ... 75
2.2.5 다운로딩 그리고 정점, 프래그먼트 프로그램 설정하기 ... 76
2.3 간단한 프래그먼트 프로그램 ... 78
2.3.1 프래그먼트 프로그램 프로필 ... 80
2.4 정점, 프래그먼트 프로그램 예제로 렌더링하기 ... 82
2.4.1 OpenGL로 삼각형 그리기 ... 82
2.4.2 Direct3D로 삼각형 그리기 ... 83
2.4.3 같은 결과 얻기 ... 83
2.5 연습 문제 ... 85
2.6 좀더 읽을거리 ... 85
제3장 매개변수, 텍스처 그리고 표현식 ... 87
3.1 매개변수 ... 87
3.1.1 Uniform 매개변수 ... 87
3.1.2 const 형 한정자 ... 90
3.1.3 변하는 매개변수 ... 91
3.2 텍스처 샘플러 ... 93
3.2.1 샘플러 객체 ... 94
3.2.2 텍스처 색상 값 가져오기 ... 95
3.2.3 텍스처 샘플링을 위한 텍스처 좌표 전송하기 ... 96
3.3 수식 ... 97
3.3.1 연산자 ... 97
3.3.2 프로필 종속적인 수치 자료형 ... 99
3.3.3 표준 라이브러리 제공 함수 ... 102
3.3.4 2D 비틀기 ... 106
3.3.5 더블 비전 ... 110
3.4 연습 문제 ... 115
3.5 좀더 읽을거리 ... 115
제4장 변환 ... 117
4.1. 좌표계 ... 117
4.1.1 객체 공간 ... 119
4.1.2 동차 좌표계 ... 119
4.1.3 세계 공간 ... 120
4.1.4 모델 변환 ... 120
4.1.5 시점 공간 ... 121
4.1.6 시점 변환 ... 121
4.1.7 절단 공간 ... 123
4.1.8 투영 변환 ... 123
4.1.9 정규화된 장치 좌표계 ... 124
4.1.10 윈도우 좌표계 ... 125
4.2 좌표계 적용하기 ... 125
4.3 연습 문제 ... 126
4.4 좀더 읽을거리 ... 127
제5장 조명 ... 129
5.1 조명과 조명 모형 ... 129
5.2 기본적인 정점 당 조명 모형 구현 ... 131
5.2.1 기본적인 조명 모형 ... 131
5.2.2 기본적인 정점 당 조명을 위한 정점 프로그램 ... 139
5.2.3 정점 당 조명을 위한 프래그먼트 프로그램 ... 149
5.2.4 정점 당 조명 결과 ... 150
5.3 프래그먼트 당 조명 ... 150
5.3.1 프래그먼트 당 조명 구현 ... 152
5.3.2 프래그먼트 당 조명을 위한 정점 프로그램 ... 153
5.3.3 프래그먼트 당 조명을 위한 프래그먼트 프로그램 ... 153
5.4 조명 함수 만들기 ... 155
5.4.1 함수 선언 ... 156
5.4.2 조명 함수 ... 157
5.4.3 구조체 ... 158
5.4.4 배열 ... 159
5.4.5 흐름 제어 ... 160
5.4.6 산란 그리고 반영 조명 계산 ... 161
5.5 기본 모형 확장 ... 162
5.5.1 거리 감쇠 ... 162
5.5.2 점적광 효과 추가하기 ... 164
5.5.3 방향광 ... 169
5.6 연습 문제 ... 170
5.7 좀더 읽을거리 ... 171
제6장 애니메이션 ... 173
6.1 시간에 따른 움직임 ... 173
6.2 떨리는 물체 ... 174
6.2.1 정점 프로그램 ... 174
6.2.2 유격(displacement) 계산 ... 176
6.3 입자 시스템 ... 179
6.3.1 초기 조건 ... 180
6.3.2 벡터화된 계산 ... 181
6.3.3 입자 시스템 매개변수 ... 181
6.3.4 정점 프로그램 ... 182
6.3.5 입자 시스템 꾸미기 ... 184
6.4 키프레임 보간법 ... 186
6.4.1 키프레임 배경 지식 ... 186
6.4.2 보간 방법 ... 189
6.4.3 기본적인 키프레임 보간법 ... 190
6.4.4 조명을 지원하는 키프레임 보간법 ... 192
6.5 정점 스키닝 ... 193
6.5.1 정점 스키닝의 이론 ... 193
6.5.2 정점 스키닝용 정점 프로그램 ... 195
6.6 연습 문제 ... 197
6.7 좀더 읽을거리 ... 198
제7장 환경 매핑 기법 ... 201
7.1 환경 매핑 ... 201
7.1.1 입방체맵 텍스처 ... 202
7.1.2 입방체맵 생성하기 ... 203
7.1.3 환경 매핑의 개념 ... 203
7.1.4 반사 벡터 계산하기 ... 204
7.1.5 환경 매핑의 가정 ... 205
7.2 반사 환경 매핑 ... 206
7.2.1 애플리케이션 지정 매개변수 ... 207
7.2.2 정점 프로그램 ... 208
7.2.3 프래그먼트 프로그램 ... 212
7.2.4 제어맵 ... 213
7.2.5 정점 프로그램 대 프래그먼트 프로그램 ... 213
7.3 굴절 환경 매핑 ... 214
7.3.1 굴절의 물리학 ... 215
7.3.2 정점 프로그램 ... 217
7.3.3 프래그먼트 프로그램 ... 219
7.4 프레넬 효과와 색 분광 ... 220
7.4.1 프레넬 효과 ... 220
7.4.2 색 분광 ... 221
7.4.3 애플리케이션 지정 매개변수 ... 223
7.4.4 정점 프로그램 ... 223
7.4.5 프래그먼트 프로그램 ... 225
7.5 연습 문제 ... 227
7.6 좀더 읽을거리 ... 228
제8장 범프 매핑 ... 229
8.1 벽돌 벽에 범프 매핑하기 ... 229
8.1.1 벽돌 벽의 법선맵 ... 230
8.1.2 법선맵 텍스처로 범프맵 저장하기 ... 231
8.1.3 벽돌 벽에 간단한 범프 매핑하기 ... 234
8.1.4 반영 범프 매핑(specular bump mapping) ... 238
8.1.5 다른 기하 도형에 범프 매핑하기 ... 242
8.2 벽돌 바닥에 범프 매핑하기 ... 244
8.2.1 벽돌 바닥을 렌더링하기 위안 정점 프로그램 ... 246
8.3 원환체에 범프 매핑하기 ... 249
8.3.1 원환체의 수학 ... 250
8.3.2 원환체 범프 매핑 정점 프로그램 ... 253
8.4 다각형 메쉬에 범프 매핑하기 ... 255
8.4.1 단일 삼각형 살펴보기 ... 255
8.4.2 주의 사항 ... 258
8.4.3 다각형 모델에 일반화하기 ... 259
8.5 범프맵과 다른 효과 혼합하기 ... 260
8.5.1 데칼맵 ... 260
8.5.2 광택맵 ... 261
8.5.3 기하학적 자기 가림 ... 261
8.6 연습 문제 ... 263
8.7 좀더 읽을거리 ... 263
제9장 고급 주제 ... 265
9.1 안개 ... 265
9.1.1 균일 안개 ... 266
9.1.2 안개의 속성 ... 267
9.1.3 안개의 수학 ... 268
9.1.4 공식 이해하기 ... 271
9.1.5 Cg로 균일 안개 만들기 ... 272
9.2 비실사적인 렌더링 ... 274
9.2.1 툰 셰이딩 ... 275
9.2.2 툰 셰이딩 구현하기 ... 276
9.2.3 모든 것을 합치기 ... 279
9.2.4 이 기법의 문제 ... 279
9.3 투영 텍스처링 ... 281
9.3.1 투영 텍스처링의 동작 원리 ... 282
9.3.2 투영 텍스처링 구현하기 ... 284
9.3.3 투영 텍스처링을 수행하는 코드 ... 286
9.4 그림자 매핑 ... 289
9.5 합성 ... 291
9.5.1 입력 픽셀을 출력 픽셀로 대응하기 ... 292
9.5.2 기본 합성 연산 ... 293
9.6 연습 문제 ... 296
9.7 좀더 읽을거리 ... 297
제10장 프로필과 성능 ... 301
10.1 프로필 설명 ... 301
10.1.1 DirectX 8용 정점 셰이더 프로필 ... 301
10.1.2 OpenGL용 기본 엔비디아 정점 프로그램 프로필 ... 302
10.1.3 OpenGL용 ARB 정점 프로그램 프로필 ... 303
10.1.4 DirectX 9용 정점 셰이더 프로필 ... 303
10.1.5 OpenGL용 고급 엔비디아 정점 프로그램 프로필 ... 304
10.1.6 DirectX 8용 픽셀 셰이더 프로필 ... 304
10.1.7 OpenGL용 기본 엔비디아 프래그먼트 프로그램 프로필 ... 305
10.1.8 DirectX 9 픽셀 셰이더 프로필 ... 306
10.1.9 OpenGL용 ARB 프래그먼트 프로그램 프로필 ... 307
10.1.10 OpenGL용 고급 엔비디아 프로그램 프로필 ... 307
10.2 성능 ... 308
10.2.1 Cg 표준 라이브러리의 활용 ... 308
10.2.2 Uniform 매개변수의 활용 ... 308
10.2.3 정점 프로그램 대 프래그먼트 프로그램 ... 309
10.2.4 자료형이 성능에 미치는 영향 ... 310
10.2.5 벡터화의 활용 ... 311
10.2.6 함수 저장을 위한 텍스처의 활용 ... 311
10.2.7 자유로운 스위즐링과 부정의 사용 ... 312
10.2.8 픽셀 셰이딩의 최소화 ... 312
10.2.9 짧은 어셈블리가 반드시 빠른 것은 아니다 ... 313
10.3 연습 문제 ... 314
10.4 좀더 읽을거리 ... 314
부록 A Cg 시작하기 ... 315
A.1 이 책의 부록 CD에 수록된 소프트웨어 구하기 ... 315
A.2 Cg Toolkit 구하기 ... 315
부록 B Cg 런타임 ... 317
B.1 Cg 런타임이란 무엇인가? ... 317
B.2 왜 Cg 런타임을 사용하는가? ... 318
B.2.1 미래를 위한 준비 ... 318
B.2.2 종속성에 대한 문제가 해결 ... 318
B.2.3 입력 매개변수 관리 ... 319
B.3 Cg 런타임은 어떻게 동작하는가? ... 319
B.3.1 헤더 파일 ... 320
B.3.2 문맥 생성하기 ... 321
B.3.3 프로그램 컴파일하기 ... 321
B.3.4 프로그램 적재하기 ... 322
B.3.5 프로그램 매개변수 변경하기 ... 323
B.3.6 프로그램 실행하기 ... 324
B.3.7 자원 해제하기 ... 325
B.3.8 오류 다루기 ... 325
B.4 좀더 자세한 사항 ... 326
부록 C CgFX 파일 형식 ... 327
C.1 CgFX란 무엇인가? ... 327
C.2 형식 둘러보기 ... 328
C.2.1 기법 ... 329
C.2.2 단계 ... 329
C.2.3 렌더링 상태 ... 330
C.2.4 변수 그리고 의미구조 ... 331
C.2.5 주해 ... 331
C.2.6 예제 CgFX 파일 ... 332
C.3 CgFX 형식을 지원하는 Cg 플러그인 ... 334
C.4 CgFX에 관해서 좀더 배우려면 ... 334
부록 D Cg 키워드 ... 335
D.1 Cg 키워드 목록 ... 335
부록 E Cg 표준 라이브러리 함수 ... 337
E.1 수학 함수 ... 338
E.2 기하학 함수 ... 341
E.3 텍스처맵 함수 ... 342
E.4 미분 함수 ... 344
E.5 디버깅 함수 ... 344
E.6 기타 함수 ... 345
찾아보기 ... 346
닫기