AI 도움 없이 밑바닥부터 만든 C++ 패스 트레이서 'Luz' 해커뉴스 공개
한 개발자가 외부 라이브러리 의존성 없이 C++20만으로 밑바닥부터 작성한 패스 트레이서 'Luz'를 해커뉴스 'Show HN'에 공개했다. 'AI 없이 처음부터 직접 C++ 레이 트레이서를 짰다'는 제목 그대로, 외부 도움 없이 손으로 구현한 렌더러임을 전면에 내세운 프로젝트다.
Luz는 몬테카를로 패스 트레이싱과 전역 조명(global illumination)을 핵심으로 한다. 멀티스레드 CPU 렌더링과 적응형 샘플링, NFOR 방식의 특징 버퍼 디노이저를 갖췄으며, PDF를 이용한 중요도 샘플링도 지원한다.
렌더링 가속을 위해 BVH 구조를 쓰며, 메시에는 binned SAH로 구성하고 near-first 방식으로 순회하는 패킹된 메시 BVH를 적용했다. 대기 산란 시뮬레이션도 포함된다.
지원하는 도형은 구·평면·사각형·삼각형·정육면체·볼륨과 OBJ 메시다. 재질은 Lambertian·금속·유전체·발광·등방성 다섯 가지, 광원은 면·점·구·방향 네 종류를 다룬다.
후처리 기능으로는 피사계 심도, 안티에일리어싱, 노출, 대비, 톤 매핑, 감마 보정, 블룸이 들어 있다. 결과물은 BMP와 TIFF로 출력하며, 렌더·디노이즈·후처리·점수 비교까지 나누어 보여주는 결정론적 벤치마크 하네스도 함께 제공한다.
빌드에는 C++20 컴파일러와 Make 또는 CMake 3.16 이상이 필요하고, Python 3는 선택적 도구·스크립트에만 쓰인다. macOS·리눅스·윈도우를 지원하며 WSL도 리눅스 빌드 환경으로 쓸 수 있다. 릴리스 빌드는 기본적으로 -O3, -march=native 네이티브 튜닝, LTO, 가능한 경우 빠른 부동소수점 모드를 켠다.
씬은 자체 포맷인 .luz 파일로 정의하며, Blender의 파이썬 API를 통해 Blender 장면을 .luz로 내보내는 익스포터도 들어 있다. 적응형 샘플링은 --samples 값을 픽셀당 최대 샘플 수로 보고 최소 샘플을 렌더한 뒤 수렴 여부를 주기적으로 점검하는 방식이며, 디노이저 품질을 판단하려면 픽셀당 16 샘플 이상을 권장한다.
개발자는 레이 트레이싱 입문서 'Ray Tracing in One Weekend' 시리즈에 감사를 표하며, 개발 상당 기간이 'AI 이전 시절'이었다고 적었다. Luz는 MIT 라이선스로 공개됐다.