光线追踪:Whitted Integrator

本文介绍了Whitted光线追踪算法,这是一种简化版的全局光照算法,通过忽略大部分方向的入射光,仅评估光源方向及完美反射和折射方向的光照强度。文章详细解释了Direct和Indirect两部分的工作原理,并提供了PBRT-v3和OptiX SDK中的实现代码。

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

詹令
lealzhan@126.com
2017.7.3

介绍

光线追踪算法简介

最近在学习PBRT(Physically Based Rendering: From Theory to Implementation)的相关资料,看到了Whitted Integrator,研究了下其算法,发现和当初在CMU上CG课做的课程大作业非常类似。当初时间太赶,没怎么花时间研究,于是便有了此文。

光线追踪在Computer Graphics中是所谓圣杯般的存在。现在的大多数应用(游戏,CAD等)都是非光线追踪(局部光照)加各种trick来补偿光线追踪(全局光照)做的渲染。光线追踪一般是指由屏幕像素发射光线,去和场景递归求交着色,追踪求得该像素的颜色值。虽然可以得到很逼真的结果,但是由于计算量大(主要是求交计算),因此实际应用不多。近年来随着GPU的日益强大,特别是Nvdia发布了基于GPU的光线追踪渲染SDK OptiX, 基于光线追踪来渲染的应用预料将日益增多。 本文将介绍Whitted光线追踪算法。

Integrator是指渲染方程?。而对于渲染方程的各种数值求法,衍生出各种Integrator。

Whitted Integrator

Whitted’s algorithm simplifies this integral by ignoring incoming light from most directions and only evaluating Li(p, ωi) for directions to light sources and for the directions of perfect reflection and refraction.
---- PBRT-v2 p12

Whitted Integrator包括两个部分,Direct 和 Indirect。Direct是在hit point向所有光源发射shadow ray和场景求交判断遮挡关系后直接shading。Indirect是指向镜面反射方向和镜面折射方向分别发射一条reflected ray和 refracted ray 进行recursive 追踪。具体见下图,来自 1

在这里插入图片描述
在这里插入图片描述

参考代码

PBRT-v3的whiited integrator的代码2
在这里插入图片描述

50 相机发射的primary ray和场景物体相交测试,如有交点,继续,否则遍历点光源
62 确定使用哪种bsdf
67 如果是自发光物体,计算Le
69~80 (Direct)对所有光源(点光源,面光源,环境光)采样,发射shadow ray,若无遮挡则计算直接光照。
81~85 (Indirect)如果未超过最大深度,追踪 镜面反射 和 镜面折射 的光线。

OptiXSDK中也有Whitted光线追踪算法的代码3

参考


  1. UT-Austin’s Computer Graphics Course Note on Ray Tracing LINK ↩︎

  2. PBRT-v3 1.3.5 AN INTEGRATOR FOR WHITTED RAY TRACING (推荐,和本文代码一致) ↩︎

  3. OptiXSDK sample: OptiXWhitted - whitted’s original sphere scene LINK ↩︎

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值