第一章 导言 Optix 光线跟踪编程指南

Optix是一款由NVIDIA开发的高效光线跟踪引擎,它不仅简化了光线跟踪程序的开发,还提供了高度可定制化的功能。该引擎适用于图形图像、碰撞检测、声音传播等多个领域,并能与OpenGL和Direct 3D互操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.1 Optix 总览

光线跟踪很适合并行计算的方式实现,GPU在开发并行计算程序时有很大的优势。然而光线跟踪GPU并行算法极不规则,非专业人员不能为之,或为之不能极大发挥GPU的并行计算能力。英伟达Optix光线跟踪引擎很好地解决了这个问题,使得开发并行光线跟踪程序变得相对容易。开发人员不必是图形学专家或者是一个专注于光线跟踪的团队。

Optix 不仅仅是个渲染器。它是一个面向应用的可扩展光线跟踪框架,包括两个部分:    

1)主机端API,用于定义光线跟踪的数据结构

2)设备端基于Cuda C++的编程系统,用于产生光线,碰撞检测,着色等。

这两部分都能够提供更低层级的原生光线跟踪功能,这样开发者就可以将Optix应用到图形图像,碰撞检测,声音传播等领域。

1.1.1动机

通过抽象出一个通用光线跟踪器的执行模型,Optix可以使开发者很容易地组装一个光线跟踪系统。开发者可以自定义模型遍历,着色方式,以及内存,显存管理等功能。更重要的是,Optix会随着硬件的发展而不断演进,这一点和光栅化图形库openGLDirect 3D相似。

只要有可能,Optix引擎都会避免对光线跟踪特定行为的说明,而是提供一个执行Cuda程序的机制以实现着色,相机模型,甚至颜色表达。所以它能够实现递归式光线跟踪,path tracing,碰撞检测,光子贴图或者其它基于光线跟踪的程序。它还可以与openGLDirect 3D进行互操作,实现混合光线跟踪应用。

1.1.2 编程模型

Optix的核心是一个简单且功能强大的抽象光线跟踪器。它利用用户自定义程序来达到控制光线生成,碰撞检测,材质着色和激发新光线的目的。每一条光线(ray)都携带有相应的负载(payload),例如颜色,递归深度或其他属性。开发者需要以CUDA代码的形式向Optix提供相应的功能函数。由于Optix内置递归算法, Optix允许自定义程序产生新光线,而内在的执行机置管理着递归堆栈的细节。Optix 提供了灵活稳定的函数分发和精确的变量继承机制,所以光线跟踪程序能够兼顾其通用性与复杂性。

1.2光线跟踪基础

光线跟踪有许许多多的含义。有时它代指直线与三维物体碰撞点的计算。有时它代指某一特定算法,例如Whetted 式的图像生成方法,在石油开采领域对地震波的仿真。有时它代指一组算法,比如Whetted 算法与其他算法结合,例如分布式光线跟踪。Optix作为一个光线跟踪引擎首先应当满足:用户可以使用它实现光线与物体碰撞;其次,用户可以通过自定义程序实现类似于Whetted 光线跟踪的算法;还有在发生碰撞后,它可以产生光线并能够定义新产生光线的行为。

1968Arthur Apple在渲染固体场景时,光线跟踪在图形学中被首次提出。在1980年,Turner Whetted 将这个思想推进一步,将递归引入光线跟踪,进而可以模拟反射和折射的效果。此后,一连串的进步增加了光线跟踪的准确性,例如引入景深,全内反射,软阴影,运动模糊等。与此同时,许多的研究者通过索引场景中物体极大的提高了光线跟踪的效率。基于光线跟踪的真实渲染算法已经能够精确模拟光线传播。其中一些算法可以在虚拟环境中模拟正向光线跟踪,其余一些模拟反向光线跟踪,或者二者的结合。OPTIX对这三种光线跟踪类型都有很好的支持。

光线跟踪也可以应用于非图形学领域。在计算机辅助设计领域中,光线跟踪可以估算复杂零件的体积。从零件上发射一组平行光线至一横断面,光线从零件上一点到横断面的距离可以确定,将其与横断面面积相乘即可得到相应的体积。还有在游戏中,鼠标的拾取操作也可以看作是光线跟踪的一个应用。Optix能够很轻松地实现以上操作。

对于光线跟踪最普遍的一个特性是计算光线和三维物体碰撞点。在图形渲染程序中,光线与三维物体发生碰撞后会激发新的光线,用于折射或反射等。其他的应用可能不关心光线的行为,而关心碰撞发生时碰撞点所附带的属性。不同需求意味着Optix应能够灵活多变地支持各种场景属性查寻和自定义属性查寻。

光线跟踪还有一个不错的特性,它支持很多几何图形与光线的直接碰撞,例如球体而不用剖分。另外一个特性是光线跟踪的执行时间与三维场景中物体数目是次线性关系,即2N个物体的渲染时间小于二倍N个物体渲染时间。构建加速结构可以将没有参与碰撞的物体进行剔除,进而提高碰撞效率。对于静态物体来说,加速结构将存在于整个程序周期中。对于动态物体来说,Optix支持重建加速结构。加速结构只查询几何体的包围体,当物体被添加时,开发人员需要向Optix提供相应的包围盒,这样加速结构就能得到相应的更新。

对于图形应用来说,光线跟踪技术相对于光栅化技术拥有很多的优势。光线跟踪技术支持各种类型的虚拟相机且易于实现,例如正交相机,针孔相机,全景相机等。屏幕中的像素点可与任意光线结合,故光线的起点不一定是同一起点。光线跟踪易于实现无锯齿失真的硬阴影,软阴影也不难实现。光线跟踪程序还可以和传统的图形学程序进行交互,比如OPENGLD3D 调用可Optix渲染出来的纹理。相反地,OPENGLD3D中深度缓冲区可作为Optix的光线起点用于计算镜面光反射。

 

如果想对光线跟踪了解更多一些可参考以下文献:

 

1.The classic and still relevant book is “An Introduction to Ray Tracing” (Edited by A. Glassner, Academic Press, 1989).

2.A very detailed beginner book is "Ray Tracing from the Ground Up"(K. Suffern, AK Peters, 2007).

3.A concise description of ray tracing is in “Fundamentals of Computer Graphics” (P. Shirley and S. Marschner, AK Peters, 2009).

4. A general discussion of realistic batch rendering algorithms is in"Advanced Global Illumination" (P. Dutré, P. Bekaert, K. Bala, AK Peters, 2006).

5.A great deal of detailed information on ray tracing and algorithms that use ray tracing is in "Physically Based Rendering" (M. Pharr and G. Humphreys, Morgan Kaufmann, 2004).

6. A detailed description of photon mapping is in “Realistic Image Synthesis Using Photon Mapping” (H. Jensen, AK Peters, 2001).

A discussion of using ray tracing interactively for picking and collision detection, as well as a detailed discussion of shading and ray-primitive intersection is in "Real-Time Rendering" (T. Akenine-Möller, E. Haines,N. Hoffman, AK Peters, 2

Optix SDK 下载 4.1 . 1 Optix 4 现在 自由 使用 在 任何 应用 , 包括 商业 和 教育 应用 。 为 下载 你 必须 NVIDIA 这些 显影剂 - 。 通过 点击 "Agree & Download"按钮 , 确认 您 已 阅读 并 同意 遵守 软件 开发者 套件 、 采样 工具 和 许可 协议 用于 封装 的 SDK 使用 。 下载 将 开始 后 立即 点击 "Agree & Download"按钮 下方 。 Windows 7 和 更 高 、 64 位 同意 & 下载 Linux 接受 & 下载 Mac OSX 10.9 或 更 高 接受 & 下载 版本 说明 ( 615kB , PDF ) 版本 说明 Optix NVIDIA ® ™ 4.1 . 1 ( 2017 年 8 月 ) 欢迎 来到 的 第一个 重大 更新 的 Optix 4 SDK 。 Optix 4 是 发展 中 的 一个 重要 里程碑 Optix , 完全 重新 实现 的 核心 组件 , 包括 一个 全新 的 基于 LLVM 编译 流水线 。 重新 设计 内部 已经 酝酿 了 几年 , 人们 对 更好 的 总体 性能 、 多 GPU 缩放 , 调试 和 配置 、 以及 其他 特性 。 4 版本 保持 向 后 兼容 现有 的 Optix 应用 提供 的 API , 易于 使用 Optix 是 已知 的 。 Optix 4 现在 自由 使用 在 任何 应用 中 , 它 是 私人 或 商业 性质 , 而 无需 任何 额外 许可 或 批文 。 4.1 版本 是 一个 维护 版本 , 提供 性能 和 鲁棒性 的 改进 以及 最近 支持 CUDA 和 Visual Studio 版本 。 改进 4.1 . 1 主机 存储器 使用量 减少 场景 的 几何 形状 的 大量 实例 。 固定 一 臭虫 , 其 原始 索引 偏移 被 忽略 , 如果 一个 仅 包含 单个 geometrygroup geometryinstance 。 把 一 臭虫 固定 在 有 Optix 素数 的 最小 有效 位 的 浮点数 可以 命中 距离 确定性 的 三角形 中 的 一些 场景 , 根据 其 位置 在 BVH 中 。 所有 样品 使用 Optix CUDA SDK 主要 通过 默认 上下文 。 固定 的 场景 时 许多 材料 共享 geometryinstances 。 固定 内存 泄漏 在 GL Interop 破坏 缓冲器 修正 当 CUDA 计算 高速缓存 有时 没有 踢 中 , 导致 长 的 编译 时间 。 架构 更新 安装程序 以 在 安装 时 避免 安全 问题 的 SDK 。 改进 到 4.1 . 0 支持 CUDA 8.0 支持 Visual Studio 2015 年 建立 自己 的 SDK 各种 错误 修复 , 包括 更 坚固 的 节点 处理 复杂 图形 的 变化 在 某些 情况 下 , 内核 性能 更好 Optix 头 现在 nvrtc 兼容 , 与 运输 带 运行 时 编译 库 ( CUDA 阅读 更 多 ) 改进 4.0 . 2 新 的 EULA , 现在 允许 不 受约束 的 在 商业 应用 中 使用 Optix &bra; 黄金 &ket; Optix 和 几个 固定 的 问题 , 导致 使用 时 故障 trbvh 大 场面 修正 了 一个 问题 , 可能 导致 不必要 的 呼叫 重建 或 BVH 时 rtcontextsetentrypointcount rtcontextsetraytypecount 但 不 改变 表达式 的 值 修正 了 一个 问题 , 可能 会 导致 编译 错误 时 使用 的 不同 原子 类型 的 单个 节目 降低 的 存储器 要求 trbvh 当 使用 多个 改进 鲁棒性 Optix 上下文 &bra; 黄金 &ket; 修正 了 一些 在 内存不足 的 情况 下 RT _ 返回 ERROR _ UNKNOWN _ ERROR 代替 RTP 存储器 分配 失败 _ _ _ 改进 4.0 . 1 固定 “ 无效 设备 ” 错误 , 当 运行 在 某些 情况 下 , 在 GPU 帕斯卡 修正 了 某些 修改 可以 触发 断言 节点 图 修正 了 CPU 回退 的 trbvh 修正 了 一个 问题 , 可能 导致 损坏 输出 当 使用 3D 展开 当 使用 固定 的 性能 问题 的 实例 主要 对 Windows Optix 改进 编译 时 启用 Optix 例外 各种 改进 错误 消息 格式 的 半 添加 处理 rtugetsizeforrtfo
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值