Yocto/GL 是小型 C++17 函式庫的集合,用於建立在 MIT 許可下發布的基於物理的圖形演算法。 Yocto/GL 是故意以面向資料的風格編寫的,以便於開發和使用。 Yocto/GL 被分成小庫,以使程式碼導航更容易。請參閱每個頭檔的文件。
yocto/yocto_math.{h}
:固定大小的向量、矩陣、剛性框架、變換yocto/yocto_color.{h}
:色彩轉換、色彩調整、色調映射函數、色彩分級、色彩映射、色彩空間yocto/yocto_geometry.{h}
:光線、邊界框、幾何函數、光-基元相交、點-基元重疊yocto/yocto_noise.{h}
:柏林噪音yocto/yocto_sampling.{h}
:隨機數產生、點和方向生成、蒙特卡洛實用程式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}
:使用兩級包圍體層次結構的三角形網格、四邊形網格、線集和實例場景的光線交集和最近點查詢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 許可證發布的。我們在發行版中包含各種外部依賴項,每個依賴項都有自己的許可證,與所選的許可證相容。
函式庫需要 C++17 編譯器,已知可在 OsX (Xcode >= 11)、Windows (MSVC >= 2019) 和 Linux (gcc >= 9、clang >= 9) 上編譯。
您可以使用 CMake 和mkdir build; cd build; cmake ..; cmake --build .
Yocto/GL 所需的依賴項已包含在發行版中,無需單獨安裝。
Yocto/GL 可選擇支援建置 OpenGL 演示。透過定義 cmake 選項YOCTO_OPENGL
來啟用 OpenGL 支援。 OpenGL 依賴項包含在此儲存庫中。
Yocto/GL 可選擇支援使用 Intel 的 Embree 進行光線投射。請參閱主 CMake 檔案以了解如何連結到它。 Embree 支援透過定義 cmake 選項YOCTO_EMBREE
來啟用。 Embree需要單獨安裝。
Yocto/GL 可選擇支援使用 Intel 的 Open Image Denoise 進行去噪。請參閱主 CMake 檔案以了解如何連結到它。透過定義 cmake 選項YOCTO_DENOISE
來啟用開放影像降噪支援。 OIDN需要單獨安裝。