Yocto/GL은 MIT 라이센스에 따라 출시된 물리 기반 그래픽 알고리즘을 구축하기 위한 작은 C++17 라이브러리 모음입니다. Yocto/GL은 개발 및 사용의 용이성을 위해 의도적으로 데이터 지향 스타일로 작성되었습니다. Yocto/GL은 코드 탐색을 더 쉽게 하기 위해 작은 라이브러리로 분할됩니다. 문서는 각 헤더 파일을 참조하세요.
yocto/yocto_math.{h}
: 고정 크기 벡터, 행렬, 고정 프레임, 변환yocto/yocto_color.{h}
: 색상 변환, 색상 조정, 톤 매핑 기능, 색상 그레이딩, 색상 맵, 색상 공간yocto/yocto_geometry.{h}
: 광선, 경계 상자, 기하학 함수, 광선 기본 교차, 점 기본 겹침yocto/yocto_noise.{h}
: 펄린 노이즈yocto/yocto_sampling.{h}
: 난수 생성, 점 및 방향 생성, Monte Carlo 유틸리티yocto/yocto_shading.{h}
: 프레넬 함수, bsdf 로브, 투과율 로브, 위상 함수의 평가 및 샘플링yocto/yocto_image.{h,cpp}
: 단순 이미지 데이터 유형, 이미지 크기 조정, 톤 매핑, 색상 교정, 절차적 이미지, 절차적 태양-하늘yocto/yocto_shape.{h,cpp}
: 간단한 모양 데이터 구조, 삼각형 메쉬 조작용 유틸리티, 쿼드 메쉬 및 선 세트, 법선 및 접선 계산, 선형 및 Catmull-Clark 세분화, 절차적 모양 생성, 광선 교차 및 가장 가까운 점 쿼리yocto/yocto_scene.{h,cpp}
: 장면 표현 및 속성 평가yocto/yocto_bvh.{h,cpp}
: 2레벨 경계 볼륨 계층 구조를 사용하는 삼각형 메쉬, 쿼드 메쉬, 라인 세트 및 인스턴스 장면의 광선 교차점 및 가장 가까운 점 쿼리yocto/yocto_trace.{h,cpp}
: 영역 및 환경 조명, 미세면 GGX 및 표면 아래 산란, 다중 중요도 샘플링을 지원하는 표면 및 머리카락의 경로 추적yocto/yocto_sceneio.{h,cpp}
: 이미지, 모양 및 장면 직렬화yocto/yocto_modelio.{h,cpp}
: Ply, Obj, Stl 형식에 대한 하위 수준 구문 분석 및 쓰기yocto/yocto_pbrtio.{h,cpp}
: Pbrt 형식에 대한 저수준 구문 분석 및 쓰기yocto/yocto_cli.{h}
: 인쇄 유틸리티 및 명령줄 구문 분석yocto/yocto_parallel.h
: 동시성 유틸리티 (더 이상 사용되지 않음)라이브러리를 테스트하기 위해 작성된 다음 애플리케이션에서 Yocto/GL이 작동하는 것을 볼 수 있습니다:
apps/ytonemap.cpp
: 이미지 변환 및 보기apps/ycolorgrade.cpp
: 이미지 색상 그레이딩apps/yconvert.cpp
: 장면 변환apps/yconverts.cpp
: 모양 변환apps/ytrace.cpp
: 오프라인 및 대화형 장면 렌더링apps/ycutrace.cpp
: CUDA를 사용한 오프라인 및 대화형 장면 렌더링apps/yview.cpp
: 대화형 장면 보기다음은 경로 추적기로 렌더링된 일부 테스트 이미지입니다. 더 많은 이미지가 프로젝트 사이트에 포함되어 있습니다.
Yocto/GL은 데이터를 명시적으로 만드는 "데이터 지향 프로그래밍 모델"을 따릅니다. 데이터는 간단한 구조체에 저장되며 무료 기능을 사용하거나 직접 액세스됩니다. 모든 데이터는 공개되므로 캡슐화를 시도하지 않습니다. 우리가 이렇게 하는 이유는 Yocto/GL이 병렬 코드를 작성할 때 더 쉬운 보다 명확한 데이터 흐름을 통해 더 쉽게 확장하고 더 빠르게 배울 수 있기 때문입니다. Yocto/GL은 주로 연구 및 교육에 사용되므로 명시적 데이터는 해킹 가능성이 더 높고 이해하기 쉽습니다.
Yocto/GL의 거의 모든 객체는 값 의미를 갖습니다. 이는 모든 것을 간단하게 복사하고 직렬화할 수 있으며 메모리 관리가 필요하지 않음을 의미합니다. 이는 잠재적으로 가짜 복사본을 도입할 수 있다는 단점이 있지만 메모리 손상이 발생하지 않도록 보장하는 이점이 있습니다. 이는 이와 같은 매우 작은 라이브러리에서도 초보 C++ 사용자에게 주요 문제인 것으로 나타났습니다.
코드 스타일 측면에서 우리는 객체 지향적 접근 방식보다는 기능적 접근 방식을 선호하며 클래스 메서드보다 자유 함수를 선호합니다. 모든 함수와 데이터는 yocto
네임스페이스에 정의되어 있으므로 라이브러리는 서로를 간단하게 호출할 수 있습니다.
Yocto에서 템플릿을 사용하는 것은 템플릿이 없는 것에서 템플릿을 많이 사용하는 것까지 많은 리팩토링의 이유였습니다. 이 시점에서 Yocto는 가독성을 위해 일부 템플릿을 사용합니다. 앞으로는 수학 코드에서 템플릿 사용을 늘리면서 많은 API를 명시적으로 입력할 예정입니다.
IO의 오류 처리를 위해 상태 객체 또는 부울 플래그와 오류 문자열을 사용하는 인터페이스를 반환합니다. 내부적으로는 외부 라이브러리에서 사용될 때 예외가 사용되지만, 그렇지 않은 경우에는 예외가 사용되지 않습니다. 현재 예외는 "프로그래머 오류"를 보고하는 데만 사용됩니다. 즉, 함수에서 사전 조건이나 사후 조건이 위반되는 경우, 표준 라이브러리에서는 예외가 발생합니다.
라이브러리는 MIT 라이센스에 따라 출시됩니다. 우리는 배포판에 각각 선택한 라이센스와 호환되는 3개의 자체 라이센스가 있는 다양한 외부 종속성을 포함합니다.
이 라이브러리에는 C++17 컴파일러가 필요하며 OsX(Xcode >= 11), Windows(MSVC >= 2019) 및 Linux(gcc >= 9, clang >= 9)에서 컴파일되는 것으로 알려져 있습니다.
mkdir build; cd build; cmake ..; cmake --build .
Yocto/GL 필수 종속성은 배포판에 포함되어 있으므로 별도로 설치할 필요가 없습니다.
Yocto/GL은 선택적으로 OpenGL 데모 구축을 지원합니다. OpenGL 지원은 cmake 옵션 YOCTO_OPENGL
을 정의하여 활성화됩니다. 이 저장소에는 OpenGL 종속성이 포함되어 있습니다.
Yocto/GL은 레이 캐스팅을 위해 Intel의 Embree 사용을 선택적으로 지원합니다. 연결 방법은 기본 CMake 파일을 참조하세요. Embree 지원은 cmake 옵션 YOCTO_EMBREE
정의하여 활성화됩니다. Embree는 별도로 설치해야 합니다.
Yocto/GL은 선택적으로 잡음 제거를 위해 Intel의 Open Image Denoise 사용을 지원합니다. 연결 방법은 기본 CMake 파일을 참조하세요. Open Image Denoise 지원은 cmake 옵션 YOCTO_DENOISE
를 정의하여 활성화됩니다. OIDN은 별도로 설치해야 합니다.