射线跟踪(递归射线跟踪)

1.简介
•现在,我们将考虑全球方面
•合并间接反射和发射光
•我们将考虑最常用的模型:射线跟踪
•图显示了从光线追踪的抽象光线,但这不是射线追踪的工作方式…
其他几点:
•幼稚的射线跟踪仅处理镜面至镜面相互作用
•需要高级方法来建模完整的“渲染方程”

栅格渲染管道:
•针对像素的项目场景
•离散最后
• 算法:

For each triangleFor each pixel

射线铸造
•将像素发送到场景
•首先离散
• 算法:

For each pixelFor each object

2.可见的表面射线跟踪
•通过追踪从观看者的眼睛到场景中的物体来确定的表面的可见性
• 三个部分:
•初始射线方向 - 每个像素的不同
•隐藏的表面去除 - 最接近哪个表面?
•阴影 - 表面可以“看到”光源

2.1初始射线方向
•定义了相机和视图平面的位置:
View Plane沿N的距离d
•射线通过每个屏幕像素从相机中追踪(= WXH射线):
射线使用位置和方向使用C, d, N, x, V, y and U

2.2隐藏的表面去除
•必须针对场景中的所有对象进行测试,即数据结构: (wxh rays) x (m objects)
•找到交叉点的列表:
•对于P像素(= WXH)和M对象,即P X M Ray-Object相交计算 : If: p=wxh=1000x1000 and m=100, then 100,000,000 ray-object intersection calculations
•如果每个对象的n多边形,则是p x m x n射线多边形交点计算: If: p=1000x1000 and m=100 and n=1000, then 100,000,000,000 ray-polygon intersection calculations
•并确定最近的交叉点

2.3阴影
•在交叉点应用phong或blinn-phong方程

2.4阴影
•在表面交点P处,将阴影触角射线(或灯光射线)呈现到光源(对于每个光源)
•现场中的所有对象都针对此射线进行了测试, 更多交叉计算
•如果阴影触角在通往光源的途中相交的对象,则点P在阴影中: “早期”停止交叉测试
•仅通过这种简单的方法产生硬边阴影

•当心数值准确性
•由于数值不准确,相交点在形状内部,因此浅射线会相交相同的对象,从而产生“阴影”(斑点外观)
•解决方案:添加少量以确保相交点在物体外部

2.5作为算法

For every pixel
Construct a ray from the eye
// find closest intersection point:
For every object in the scene
Find intersection with the ray Keep if closest
// then shade using the closest intersection point:
Shade depending on light and normal vector

关键部分:
•交叉测试
•计算正常用于照明计算

3.递归射线跟踪(Whitted,80)
•称为标准的幼稚射线跟踪
•优雅的组合:
•隐藏的表面去除;
•由于直接照明而引起的阴影;
•全局镜面相互作用效果 - 反射的射线和折射射线;
•阴影(几何)计算。

3.1阶段
•初始射线方向 - 和以前一样
•隐藏的表面拆除 - 和以前一样
•反射和折射光线
•照明模型
•阴影 - 和以前一样
•递归

3.2反射射线
•在交叉点,形成反射射线: R = 2(N.L)N – L
•然后可以进一步追踪,即递归
With epsilon means limit the boundary so that make the image more clearly

3.3折射射线
•根据物体的性质,可能需要折射射线。
Snell的定律(也称为Snell-Descartes Law和Ibn-Sahl Law和折射法)是一种公式 不同的各向同性介质,例如水,玻璃或空气。 该法律以荷兰天文学家和数学家威勒布罗德·斯内利乌斯(Snell)(也称为斯内尔)的名字命名。

在光学元件中,该定律用于射线跟踪来计算入射率或折射的角度,并在实验光学上找到材料的折射率。 该法律也可以在元材料中满足,这使得光以负折射率为负的折射角“向后”。
sin a1/sin a2 = n2/n1 = v1/v2

顺便说一句:折射取决于波长
•折射取决于波长→棱镜
•彩虹是由折射 +内部反射 +折射, 最大角度约42度

3.4结合照明模型组件
•热点P处的强度=本地 +反射 +传输
I§ = Ilocal§ + Iglobal§
I§ = Ilocal§ + krgI(Pr) + ktgI(Pt)
权重krg和ktg控制最终组合

•本地模型 - phong或blinn-phong:
Ilocal = ambient + diffuse + specular
= Ia ka + Ip (kd(L.N) + ks (R.V)^n)
(或者,如果光源“后面”透明的对象,其中r’或h’涉及材料的折射率)
=Ia ka + Ip (kd(L.N) + kt (R’.V)^m)
or Ia ka + Ip (kd(L.N) + kt (N.H’)^m)
•由于本地和全球组件的组合,我们具有模糊的镜头亮点和完美的镜面反射
•分散术语是本地的。
•(可以使用Monte Carlo方法建模弥漫性扩散效果

3.5阴影
•在表面交点处,阴影触角射线(或灯光射线)可以呈现向光源
•如果阴影触角在通往光源的途中相交不透明的对象,则将Ilocal设置为该光源的环境术语(或调制分散项)
对于透明物体,ILocal被减弱
•仅通过这种简单的方法产生硬边阴影
请参阅Penumbra的分布式射线跟踪

3.6递归
•对于单射线,我们可以遵循反射和折射
•这是一个递归过程,因为射线可能会引起进一步的射线,等等

shootRay ( ray structure )
intersection test for all objects;
if ray intersects objects {get closest object intersection;for every light, cast shadow ray;get normal at intersection point;calculate local intensity (Ilocal);if (reflection) calculate and shootRay(reflected ray)if (refraction)calculate and shootRay(refracted ray)Intensity at hit point P = local+ reflected + transmitted
}

射线跟踪(递归射线跟踪)相关推荐

  1. 目标跟踪 | 3D目标跟踪高级入门!

    点击下方卡片,关注"自动驾驶之心"公众号 ADAS巨卷干货,即可获取 点击进入→自动驾驶之心[目标跟踪]技术交流群 后台回复[目标跟踪综述]获取单目标.多目标.基于学习方法的领域综 ...

  2. Opencv人数统计 yolo kcf人头跟踪 人数统计 KCF目标跟踪 YOLO目标跟踪

    该功能使用的darknet框架,训练的yolo-tiny人头模型,之后使用opencv4.5.1版本调用的yolo-tiny模型,跟踪使用KCF跟踪算法,整体上实现了三个功能: 1.区域内的人头统计: ...

  3. mysql 事件跟踪_ORACLE 事件跟踪

    跟踪文件 Oracle跟踪文件分为三种类型: 1:警告日志文件.记录了数据库启动.运行.关闭时的活动情况.当数据库出现问题时,首先要查看该文件,文件名为alert_sid.log 2:后台跟踪文件.记 ...

  4. 运动规划,路径规划和轨迹规划的关系(补充路径跟踪和轨迹跟踪)

    首先以一张图表明三者的关系: 即:运动规划由路径规划和轨迹规划组成.接下来分别对三者进行介绍. 运动规划(motion planning):在给定的位置A与位置B之间为机器人找到一条符合约束条件的路径 ...

  5. 动态背景下目标跟踪算法目标跟踪

    1.问题描述: 动态背景下目标跟踪算法目标跟踪 2.部分程序: % Programming By ALireza Fasih % Email: ar_fasih@yahoo.com % Please ...

  6. 控制策略为最大功率跟踪(mppt),跟踪方法为扰动观察法,MPPT控制系统主要由光伏阵列、DCDC变换器

    控制策略为最大功率跟踪(mppt),跟踪方法为扰动观察法,MPPT控制系统主要由光伏阵列.DCDC变换器.MPPT控制器和可变负载组成,模拟电网为50Hz相电压峰值311V. ID:315066700 ...

  7. 跟踪任何目标(想跟踪什么就跟踪什么)

    结果展示 介绍 该项目是一个简单的跟踪工具,可以用于跟踪任何你感兴趣的东西.它提供了一个基于Web的界面,让用户可以轻松地创建和管理跟踪列表,同时也提供了一个RESTful API,可以方便地进行数据 ...

  8. 路径跟踪算法之PID路径跟踪与PP跟踪

    路径跟踪算法之PID路径跟踪与PP跟踪 1路径跟踪原理 2 常见的路径跟踪算法 2.1 Pure puresuit(pp)纯跟踪 2.2 PID 跟踪 1路径跟踪原理 在运用好的路径规划算法,规划好一 ...

  9. python实现大疆Tello无人机控制平台并实现语音控制/手势控制/人脸跟踪/绿球跟踪/拍照录像

    Tello智能信息处理平台 介绍 控制 键盘控制 语音控制 视觉功能 人脸跟踪 绿球跟踪 手势控制 体态控制 拍照录像 结语 介绍 本项目是我的一个课程设计.本来打算做大型四旋翼无人机的控制,后来老师 ...

最新文章

  1. css固定gridview的表头
  2. paddlepaddle-VisualDL2.0对项目进行可视化调参
  3. 【js】日期插件 my97日期控件
  4. LSGO软件技术团队2015~2016学年第十一周(1109~1115)总结
  5. Golang切片的三种简单使用方式及区别
  6. typescript 学习
  7. es6笔记 day3---Promise
  8. 【git】git如何添加本地不是git的项目到Git库中
  9. 如何解决/home/oracle: is a directory报警
  10. jQuery获取select onChange的值
  11. android调用本地js文件上传,利用node.js android 实现文件上传
  12. ASP.NET验证码
  13. USBCAN 、便携式 CAN 分析仪 、CAN卡
  14. linux之I2C驱动分析
  15. 车型数据库设计 mongodb
  16. C++:本地图片拷贝到剪切板
  17. js拖拽(二)仿iGoogle自定义首页模块拖拽
  18. Coding and Paper Letter(八十五)
  19. 2020年医美行业网络关注度分析报告
  20. Codeforces446C - DZY Loves Fibonacci Numbers

热门文章

  1. php parse url 反向,PHP中一个parse_url的错误用法
  2. QT实现简易ctp程序
  3. C语言学习—结构体的定义与使用
  4. 出现了一个问题,导致程序停止正常工作。如果有可用的解决方案,windows 将关闭程序并通知你
  5. SAP 物料凭证历史查询--(后台配置)
  6. 自然语言处理 文本预处理(下)(张量表示、文本数据分析、文本特征处理等)
  7. php课程banner,如何利用react 实现banner轮播效果
  8. 自相关、互相关函数学习笔记
  9. c++string字符串查找和替换
  10. 大数据分页查询 or 导出 慢sql治理