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需要单独安装。