Ray Tracing in one Weekend But on CUDA

2024-06-03 08:04
文章标签 cuda one ray tracing weekend

本文主要是介绍Ray Tracing in one Weekend But on CUDA,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Ray Tracing in one Weekend But on CUDA

  • 环境说明
  • 项目代码
  • 项目内容
  • 思路
  • 实现方法
  • 效果

环境说明

代码运行在Visual Studio 2019环境,显卡为NVIDIA GeForce GTX 1650,CUDA版本为11.6,cuDNN版本为8.4.0。具体配置方式见CUDA C/C++ 从入门到入土 第一步——让你的CUDA跑起来.

代码参考以下内容:
Accelerated Ray Tracing in One Weekend in CUDA

Ray Tracing in One Weekend

可视计算讲稿16

项目代码

github

项目内容

该项目实现了PathTracing的渲染算法,并提供了四种基本材质(朗伯表面、金属表面、玻璃介质、光源介质),一种物体球体,并提供环境光,相机系统和配套的数学运算。

并为光追渲染算法提供了GPU支持,使速度有所提高。

思路

先实现CPU上的PathTracing算法,然后将项目移植到GPU上。

PathTracing的大致思想为,从相机镜头向幕布处的每个像素发射光线,计算光线进入世界后在不同物体间的折射、反射(镜面、漫反射),并对光照强度进行积分,最终取多条光线的平均值即可。

CUDA编程的思路需要并行。在光追中可以并行的部分在于计算每个像素的颜色,即可以将原先计算像素颜色的循环并行计算。即每个CUDA核心的一个线程计算一个像素的颜色。在所有线程执行完毕之后,将数据从GPU转移到CPU上并进行保存。

实现方法

C++版本PathTracing。利用基本的C++代码,造轮子。需要说明的是,光追函数需要限制递归的次数(否则有小概率导致无限递归,虽然在这个例子里大概率不可能),同时对输出结果进行gamma校正从而保证生成图像的颜色质量。在判断光线与物体相交的过程中,需要利用法线来判断相交的位置是在物体表面外还是物体内。

CUDA版本的PathTracing做出了以下优化:

  • 光追函数利用并行计算,加速效率。
  • 光线路径追踪函数的递归展开,从而加快运行效率。
  • 对随机数进行重写(因为CUDA并行需要每个线程一个随机数种子)

需要注意的是,在CUDA编程过程中,需要注意device和host的关系,尤其需要注意内存的位置,以及申请的内存位于哪里?否则会出现严重的内存泄露以及段错误。

还需要注意的是,在进行Render之前,需要统一进度,保证各个线程的世界包含相同的内容。在Render之后,也需要保证所有线程运行完毕后,再进行内存复制到Host。

效果

测试效果,其中三个球的材质分别为光源、玻璃、朗伯表面(由近到远)。迭代次数为10.光照强度为1.
在这里插入图片描述

最终效果
迭代次数400,光源材质光强为2.0
在这里插入图片描述

迭代次数50,光源材质光强为2.0
在这里插入图片描述

迭代次数10,且光源材质光强为2

这篇关于Ray Tracing in one Weekend But on CUDA的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1026413

相关文章

【Rust日报】2021-05-13 -- Tracing Prism - 提高日志文件可读性的 Web 程序

Szyszka - 简单好用的批量文件重命名工具 Szyszka 使用 Rust 和 GTK3 创建,具有简单明了的 GUI ,适用于 Linux,Max,Windows。支持多种重命名规则:替换、清除、修改、自定义等。 Github: https://github.com/qarmin/szyszka Snap: https://snapcraft.io/szyszka Tracing Pr

Ubuntu使用 NVIDIA GPU 和 CUDA 设置 LLM 的训练、微调和推理

0.引言 近年来,人工智能领域取得了令人瞩目的进步,其核心是图形处理单元(GPU)和并行计算平台的强大组合。 大模型如 GPT、BER能够理解和生成具有前所未有的流畅性和连贯性的类人文本。然而,训练这些模型需要大量的数据和计算资源,因此 GPU 和 CUDA 是这一努力中不可或缺的工具。 这个博客演示了在 Ubuntu 上设置 NVIDIA GPU 的过程,涵盖 NVIDIA 驱动程序、CUDA

[19] Opencv_CUDA应用之 基于形状的对象检测与跟踪

Opencv_CUDA应用之 基于形状的对象检测与跟踪 形状可以用作全局特征检测具有不同形状的物体,可以是直线、多边形、圆形或者任何其他不规则形状利用对象边界、边缘和轮廓可以检测具有特定形状的对象本文将使用Canny边缘检测算法和Hough变换来检测两个规则形状,即线和圆 1. Canny 边缘检测 Canny 结合了高斯滤波、梯度寻找、非极大值抑制和滞后阈值处理 高通滤波器对噪声非常敏

CUDA deviceQuery参数详解

运行sample里的deviceQuery: C:\ProgramData\NVIDIA Corporation\CUDA Samples\v8.0\1_Utilities\deviceQuery\../../bin/win64/Debug/deviceQuery.exe Starting...CUDA Device Query (Runtime API) version (CUDART st

C++ GPU编程(英伟达CUDA)

安装编译环境 https://developer.download.nvidia.com/compute/cuda/12.5.0/local_installers/cuda_12.5.0_555.85_windows.exe CMakeLists.txt cmake_minimum_required(VERSION 3.10)set(CMAKE_CXX_STANDARD 17)set(CMA

Ubuntu 20.04安装显卡驱动、CUDA和cuDNN(2024.06最新)

一、安装显卡驱动 1.1 查看显卡型号 lspci | grep -i nvidia 我们发现输出的信息中有Device 2230,可以根据这个信息查询显卡型号 查询网址:https://admin.pci-ids.ucw.cz/mods/PC/10de?action=help?help=pci 输入后点击Jump查询 我们发现显卡型号为RTX A6000

环境配置02:CUDA安装

1. CUDA安装 Nvidia官网下载对应版本CUDA Toolkit CUDA Toolkit 12.1 Downloads | NVIDIA Developer  CUDA Toolkit 12.5 Downloads | NVIDIA Developer 安装配置步骤参考:配置显卡cuda与配置pytorch - 知乎 (zhihu.com) 2. 根据CUDA版本,安装cud

zerotier-one自建根服务器方法二

一、简介 zerotier-one免费账户有25设备的限制,如果自己的设备多了就需要付费。不过zerotier-one是开源软件,我们可以自己建立根服务器,不用付费速度还很快。 由于时间关系上一篇文章没有写完,今天继续。 二、准备工作 准备一个有公网IP的云主机。 我用的是“三丰云”,同时提供"免费虚拟主机"和“免费云服务器”产品,有兴趣的可以试一下。 “三丰云”我已经用了一段时间,感

多数据源启动异常:No qualifying bean of type ‘javax.sql.DataSource‘ available: more than one ‘primary‘ bean f

多数据源报错:No qualifying bean of type 'javax.sql.DataSource' available: more than one 'primary' bean found among 初始化方法中 会获取数据源 ,当你有两个数据源的时候,程序不知道取哪一个 ,所以报错,需要设置'primary' 解决办法: 定义数据源的地方 加个primary="true"

python3.7的tensorflow-gpu2.0环境安装CUDA和cuddn,解决cudart64_101.dll not found问题

满心欢喜的以为用anaconda3 5.3.1装好了tensorflow-gpu 在vscode开用的时候,一盆冷水扑过来 PS D:\AI_program\yolo3-keras-master> E:\anaconda3\envs\tensorflow-gpu\python.exePython 3.7.0 (default, Jun 28 2018, 08:04:48) [MSC v.191