프로젝트 소개
Graphics Foundations는 컴퓨터 그래픽스 기초를 주제별로 다루는 자체 완결형 학습 자료로, 실시간 및 레이 트레이싱 이미지의 기반이 되는 수학, 렌더링 파이프라인, 알고리즘을 설명한다. UCLA CS 174A(Introduction to Computer Graphics, 2019–2021)의 6개 학기 디스커션 세션 자료에서 출발했으며, 독립적인 자료로 다시 작성되었다. 저자는 이것이 공식 강의 자료가 아니라고 밝히고 있다.
구성과 내용
자료는 0~12번까지 13개 장으로 구성된 학습 경로로 정리되어 있으며, 순서대로 읽도록 의도되었다. 각 장은 학습 목표를 제시하고 그림으로 설명하며 데모에 연결하고, 마지막에는 자가 점검 질문과 숨겨진 답을 둔다.
- 0장: 그래픽스를 위한 설정과 JavaScript(도구, 모듈, 클래스, 클로저, 형식화 배열, 프레임 루프)
- 1장: 렌더링 파이프라인과 GLSL(정점/프래그먼트 셰이더, 래스터화, 클립 공간)
- 2장: 점, 벡터, 좌표계(아핀 공간, 동차 좌표와 무게중심 좌표, 내적과 외적)
- 3장: 삼각형으로 도형 모델링(이산화, 인덱스 메시, 스트립, 와인딩, 평평한 법선과 부드러운 법선)
- 4장: 변환(이동, 회전, 크기 조절, 전단, 반사; 순서; 계층 구조; 애니메이션)
- 5장: 기저 변환(프레임, 좌표 변환, 카메라를 프레임으로)
- 6장: 시점과 투영(look-at, 직교 및 원근 투영 유도, 클리핑, z-버퍼)
- 7장: 조명과 셰이딩(Phong 및 Blinn–Phong, 광원 유형, flat/Gouraud/Phong 셰이딩, 법선 행렬)
- 8장: 텍스처 매핑(UV 매핑, 필터링, 밉맵, 원근 보정 보간, 범프/노멀/디스플레이스먼트)
- 9장: 충돌 감지(경계 부피, 분리축 정리, 넓은 단계, 시간 스텝)
- 10장: 그림자, 거울, 투명도(섀도 매핑, 평면 거울, 알파 블렌딩, 프리멀티플라이드 알파)
- 11장: 레이 트레이싱(레이 생성, 교차, 재귀 광선, 광선 트리, 가속)
- 12장: 대화형 그래픽스 프로젝트 구축(계획, 타이밍 및 상태 머신, 입자, 스카이박스, 피킹, 합성, 색)
노트와 함께 두 가지 연습문제 세트가 제공된다. Problems I(기초, 변환, 시점)과 Problems II(조명, 텍스처, 충돌, 레이 트레이싱)이며, 각각 전체 풀이가 포함되어 있다. 선수 지식은 임의의 언어로 프로그래밍할 수 있는 능력과 벡터, 행렬, 내적·외적 수준의 선형대수이며, 0장에서 필요한 JavaScript를 다룬다.
데모
7개의 대화형 브라우저 데모가 각 장을 보조하며, 라이브 GitHub Pages 사이트에서 연결된다. hello triangle(순수 WebGL), transformations, camera and projection, lighting and shading, texture mapping, ray tracing, bounding volumes이다. 데모 02~07은 Garett Ridge가 만든 작은 교육용 라이브러리인 TinyGraphics.js를 기반으로 하며, 벤더링하지 않고 공개된 복사본에서 로드한다. 데모는 WebGL 2를 지원하는 데스크톱 브라우저를 대상으로 한다. 로컬 서버 스크립트(node tools/serve.mjs)가 제공되며, 로컬에 복제한 TinyGraphics.js를 대상으로 개발하는 옵션도 있다.
저장소 구성과 품질 검사
저장소는 notes/, exercises/, figures/(tools/figures.py가 생성한 SVG 그림), demos/(데모마다 HTML 파일 하나와 공용 헬퍼), tools/로 구성된다. 주목할 점은 노트가 코드처럼 테스트된다는 것이다. 스크립트가 노트와 연습문제의 모든 계산 예제를 다시 계산하고, 링크·앵커·그림의 원본성 및 강의 운영 관련 내용의 부재를 확인하며, 각 데모를 헤드리스 Chromium에서 로드하여 모든 컨트롤을 누르고 스크린샷을 찍고, GitHub.com에서 수식이 어떻게 렌더링되는지 감사한다. fix_math.py 스크립트는 GitHub에서 네이티브 MathML로 잘못 렌더링되는 LaTeX 구문(예: \mathbf, \boxed, \tag, \operatorname)을 다시 작성한다. 데모 검사는 WebGL 2를 지원하는 로컬 Chromium이 필요하며, 사람이 검토할 스크린샷을 생성한다.
크레딧과 라이선스
이 노트는 UCLA CS 174A의 디스커션 세션 자료로 시작되었으며, Prof. Asish Law와 Prof. Demetri Terzopoulos가 맡은 강의를 보조했다. 주제 선택과 순서는 해당 강의를 따른다. 강의 슬라이드, 교재 그림, 과제물은 포함되어 있지 않다. 원래의 주간 디스커션 자료는 아카이브 태그와 분기별 저장소에서 계속 확인할 수 있다. 노트, 연습문제, 그림, 데모는 © Yunqi Guo이며 CC BY-NC-ND 4.0으로 라이선스된다. 즉, 출처를 밝히고 비상업적 목적으로 수정하지 않은 사본을 읽고, 공부하고, 공유하는 것은 허용되지만, 수정본 배포나 상업적 사용은 허용되지 않는다. TinyGraphics.js는 별도의 프로젝트이며 자체 조건이 적용된다.
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.