- OpenGL·Vulkan·Metal·DirectX의 내부 작동 원리를 이해하기 위해 외부 그래픽 라이브러리 없이 소프트웨어 렌더러를 처음부터 구현함
- 삼각형 메시와 텍스처로 구성된 3D 모델을 이미지로 변환하며, GUI나 GPU 애플리케이션 구현은 다루지 않음
- 완성 코드는 약 500줄이고, 학생들은 일반적으로 10~20시간을 들여 작동하는 렌더러를 만들기 시작함
- RGB·RGBA·회색조를 지원하는 TGA 처리 클래스와 단일 픽셀 설정 기능만 주어지며, 선분과 삼각형 그리기는 직접 구현해야 함
- 완성 코드를 복사하기보다 직접 작성해야 렌더링 개념을 이해하고, 3D 라이브러리의 내부 동작도 파악할 수 있음
렌더링 파이프라인을 직접 만드는 과정
- 최신 3D 그래픽 라이브러리의 구조를 느슨하게 따라가며 렌더링 파이프라인의 작동 원리를 학습함
- GPU 애플리케이션 작성법 대신 소프트웨어 렌더러로 내부 동작을 재현함
- 입력은 삼각형 메시와 텍스처로 구성된 3D 모델이며, 출력은 렌더링된 이미지임
- 그래픽 인터페이스 없이 프로그램이 이미지 파일을 생성함
- 외부 의존성을 줄이기 위해 단순한 이미지 형식인 TGA를 사용함
- 처음 제공되는 기능은 이미지 불러오기·저장하기와 픽셀 하나의 색상 설정뿐임
- 선분이나 삼각형을 그리는 내장 함수가 없어 모두 직접 작성해야 함
- 시작 예제는
64x64 RGB 프레임버퍼를 만들고 세 좌표의 픽셀을 흰색으로 설정한 뒤 framebuffer.tga로 저장함
코드 빌드와 실행
git clone https://github.com/ssloy/tinyrenderer.git &&
cd tinyrenderer &&
cmake -Bbuild &&
cmake --build build -j &&
build/tinyrenderer obj/diablo3_pose/diablo3_pose.obj obj/floor.obj
- 실행 결과는
framebuffer.tga 에 저장됨
- 완성 코드는 약 500줄이지만, 직접 구현하는 과정이 개념 이해에 필수이므로 제공 코드를 그대로 사용하는 방식은 권장하지 않음