【介绍】

Optix是英伟达一直推出的闭源光线跟踪(rayTracing)引擎。对于光线跟踪来说,尤基基于物理的光线跟踪,渲染耗时长,其实时化很难实现。虽然早在1990年怡始,国外很多程序员都在尝试编写和发布实时光线跟踪引擎,但其效率、应用面均未达工程应用的标准,仅做为实验阶段而已。OptiX的出现就在于要大踏步的向前推进光线跟踪引擎实时化的进程。

对于传统的实时光线跟踪引擎(哪怕不实时的光线跟踪引擎)提高效率的通用手段是使用多线程并发执行。因此光线跟踪是基于需要渲染图片的分辩率逐像素发出光线进行与场景求交来执行渲染操作的,因此每个像素之间的独立的,严格来说有多少个像素就可以并发多少个线程来执行渲染。因此光线跟踪引擎大量的提供了CPU端的并发方案,一般是基于Intel的TBB的方案较多。因为TBB是Intel推出的并发编程模块,而CPU又属Intel的最强。

而NVIDIA推出的Optix与前者都不同,因为传统的光栅化渲染管线也是并发的,而GPU近几年又推出了并行计算模块CUDA,而未来的世界一定是并行实时基于物理渲染的世界,因此NVIDIA很早就推出了OptiX,也在最新版本6中与CUDA10进行了强关联。OptiX是在GPU端进行的并发渲染,每个像素一个模块来进行计算,参考了传统的光栅化的OpenGL和DirectX的渲染管线设计目标是一个基础模块,而非业务模块,只负责最基础的光线跟踪操作,比如光线-对象求交,而不负责比如模型运动之类的。

为什么最近突然OptiX的用户多了起来,关注度高了起来,因为NVIDIA推出了实时光线跟踪引擎RTX,至此已经到RTX2080,将光线跟踪的概念做为RTX系列的主打概念推向前台,而RTX的实时光线跟踪SDK并不很多,OptiX是NVIDIA官方发布的,至少很容易想到大家都会使用OptiX来驱动RTX的实时光线跟踪功能。

【安装】

笔者使用的是配置较新的电脑,笔者的文章也针对至少这样配置的电脑。笔者使用的GPU是RTX2070,电脑是ROG枪神2S。15999元。一般来说使用RTX显卡的电脑配置都不会差。

安装配置OptiX开发环境当前需要OptiX 6,CUDA10,以及VS2015,为什么是VS2015呢,主要是CUDA10的SDK当前仅支持到VS2015,对VS2017来说,OptiX中的有些示例会编译不通过。因此官方论坛推荐使用2015。

第一步:在此处下载OptiX6 OptiX官方网站。并安装。

第二步:在此处下载CUDA10 CUDAToolkit10.1官方网站。并安装

第三步:在此处下载VS2015 VS2015官方网站。并安装。在选择安装模块时注意把C++相关内容选上,安装完成后自己建个控制台的C++程序编译运行一下,确保可以编译运行通过。

第四步:在此处下载CMAKE CMAKE官方网站。并安装。

【编译示例】

安装完成后可以检查是否有以下环境变量,没有的话可以手动配置上:(注意目录是你本机上的目录)

CUDA_PATH C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1

CUDA_PATH_V10_1 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.1

在安装目录的OptiX SDK 6.0.0\SDK-precompiled-samples中是一些预编译好的示例,可以双击看一下效果,有些可能不能正常执行,没有关系,因此马上我们要自己手动来编译这些示例。

OptiX的官方示例代码在OptiX SDK 6.0.0\SDK当中,可以看到是使用CMAKE来管理的,那么配置就会非常简单。可以将OptiX SDK 6.0.0\SDK拷到别处以免破坏原始安装文件。将CMakeLists.txt拖入到CMAKE的界面中,编译器务必选择VS2015,优先选X64。点击Configure,然后会发现所有的路径都已经配置好,信息输出框里显示Configure done. 可能肉眼看一下都有哪些配置,也就是示例都使用了哪些库。然后点Generate,最后点击Open Project。则打开工程开始编译即可。然后就可以在工程中编译运行各个OptiX SDK中的示例了。

【其它OptiX示例】

此外,NVIDIA的开发人员还写了另外一批示例,在github当中。可以点击此处查看。还可以点击此处遇到问题在论坛提问。

若遇到问题可以下方留言。

【OptiX】OptiX介绍与示例编译相关推荐

  1. tf.cast()函数介绍和示例

    tf.cast()函数介绍和示例 tf.cast(x, dtype, name=None) 释义:数据类型转换 x,输入张量 dtype,转换数据类型 name,名称 示例: import tenso ...

  2. numpy.random.rand(),numpy.random.randn(),numpy.random.normal()函数介绍和示例

    numpy.random.rand(),numpy.random.randn(),numpy.random.normal()函数介绍和示例 1. numpy.random.rand() 均匀分布 范围 ...

  3. 系统开发c语言技术参数,1 C语言 gcc 介绍 C 语言编译 main接受参数

    1 C语言 gcc 介绍 C 语言编译 main接受参数 发布时间:2020-07-19 20:18:28 来源:51CTO 阅读:1216 作者:990487026 1第一个c语言的hello wo ...

  4. mysql创建表分区详细介绍及示例

    mysql创建表分区详细介绍及示例 1. 基本概念 1.1 什么是表分区? 1.2 表分区与分表的区别 1.3 表分区有什么好处? 1.4 分区表的限制因素 2. 如何判断当前MySQL是否支持分区? ...

  5. MISRA-C 2012修改指南介绍及示例

    导言 随着对汽车电子嵌入式软件的重视程度不断提高,为减少软件的缺陷,汽车工业软件可靠性协会MISRA(Motor Industry Software Reliability Association)提 ...

  6. 6、Druid的Roll up详细介绍及示例

    Apache Druid 系列文章 1.Druid(Imply-3.0.4)介绍及部署(centos6.10).验证 2.Druid的入门示例(使用三种不同的方式摄入数据和提交任务) 3.Druid的 ...

  7. Java 观察者模式介绍及示例

    Java 观察者模式介绍及示例 一.观察者模式简介 1.1概念 观察者模式(Observer Pattern) : 观察者模式又名 发布/订阅模式,属于行为模式,定义了对象中一对多的依赖关系,让多个观 ...

  8. ESP32-WROOM-32D模组上传Arduino IDE示例编译的固件后总是重启,该如何解决

    手头的ESP32-WROOM-32D模组搭载的是单核CPU,因此Arduino IDE需要配置成单核编译模式.用ESP32的示例编译并上传固件后不断重启: 例如GetChipID,源代码: uint3 ...

  9. python中的内置函数getattr()介绍及示例

    python中的内置函数getattr()介绍及示例 其实getattr()这个方法最主要的作用是实现反射机制.也就是说可以通过字符串获取方法实例.这样,你就可以把一个类可能要调用的方法放在配置文件里 ...

最新文章

  1. gradle项目 避免每次下载gradle文件/解决依赖下载慢的问题
  2. 曾经我也迷茫,你还在迷茫吗?写给像我一样的在校计算机专业学生作者:Cat_Lee 来源:博客园 发布时间:2009-05-30 20:25 阅读:1104 次 原文链接 [收藏]
  3. 展望2018,多媒体开发新趋势
  4. shopee虾皮科技测试工程师第一次笔试
  5. Android之解决卸载app后再次安装提示room数据库错误
  6. delphi xe http 收不到反馈消息_好消息!浦东这个小区3幢多层住宅都要加装电梯啦→...
  7. 当对象转换成JSON的时候处理时间格式
  8. 数组和JSON之间的格式转换
  9. Mybatis 动态传入表名 字段名 的解决办法
  10. iOS10 推送通知详解(UserNotifications)
  11. vim源码编译启用python
  12. 躺在床上刷抖音,不如来写第一个 GO 程序入门篇
  13. c语言 eval,分享:自己写的eval函数
  14. 吃什么怎么吃关系着民族的命运
  15. 为你精选 · 地产行业数字化转型攻略
  16. 【数据治理-01】开篇:一起聊聊数据治理
  17. 主机连接服务器的过程
  18. 日志特征选择汇总(基于天池比赛)
  19. 《孩子你慢慢来》的读后感作文3500字
  20. python3.8安装xlwings_在EXCEL中启用python宏:记xlwings在win10下的完全安装

热门文章

  1. 修改php文件编码,实现修改对应文件代码
  2. 通过JDBC实现对Oracle,mysql数据库的增删改查,模糊查询,查询全部,根据ID查询,分页查询,统计查询,
  3. 信息系统审计(IT审计)的实施
  4. 五连阳回调买入法_如何精准买在洗盘结束时?“4连阳+1阴”形态,不要犹豫,出现即满仓买进,这可能是抄底最佳时机...
  5. 三元运算符判断0是为flse
  6. Gentle adaboost解释
  7. 关于输入法中文模式下怎么输入英文标点符号
  8. python 3d图如何改变视角_python – 改变3D图垂直(z)轴的位置(Matplotlib)?
  9. python漫画阅读器 漫画网站只能左右翻页,没法上下滚动连续下拉式观看且广告多体验差?因涉及“版权不明”, 审核未通过
  10. 本地调试H5,如何设置接口的请求代理proxy,解决跨域问题(共2步)。