关键:Whitted-Style Ray Tracing
光线追踪和光栅化是两个不同的成像方式。

引入光线追踪

在于光栅化的问题:

  1. 光栅化不能很好的表示全局的效果。
  2. 光栅化做阴影很困难
  3. Glossy reflection问题:光线多次反射
  4. 间接光照:光线多次反射

光栅化:实时的
光线追踪:速度慢,但是精确

关于光线的假设:

  1. 光线是直线
  2. 光线之间不会发生碰撞
  3. 光线从光源最终到达眼睛(也可以认为眼睛可以发出感知光线可以到达光源,即光路的可逆性)

怎么做光线追踪

一般做法

光线投射(Ray Casting)

过程(光线投射->怎样生成不同光线):
》》》从照相机出发 穿过平面的每一个像素到达物体上的某个点,此点再与光源连线,若不在阴影中,则光源到此点,再到照相机,为一条有效光路(即可以计算能量,算出颜色,即所谓着色)

例子:

怎么投射光线:

  1. 一根光线可以打到好多个物体上,但我们只考虑光线和场景中物体最近的一个交点。
    (这一点就解决了深度测试的问题)
  2. 然后这个点往光源连一条线,看是否在阴影中。
  3. 对于这一点,有了法线,入射方向,出设方向,就可以着色,着色后就可以写回image中对应像素的值。

Whitted-Style Ray Tracing

上述的方法,仍然是只考虑光线弹射一次。因此,引入Whitted-Style Ray Tracing(是一种递归的算法)

做法:

  1. 光线投射:(考虑反射 折射)


  2. 着色:计算每个弹射点的着色,然后相加。

1. 如何求交点

如何求光线和物体表面的交点:
光线定义:
光线:一条射线,有起点o和方向d

沿着光线的每一个点都可以用r(t)来表示 (t表示时间)

(1) . 如何求光线和球的交点:

(即点即在光线上 也在球上)

求t ?(t是大于等于0的)

(2) . 推广到光线和一般隐式表面的交点?

隐式表面都有各自的表达式,直接带入方程求 t 即可。交点即为o+t d

(3) . 光线和显式表面的交点?

即为光线和三角形求交。
属性:
对于一个封闭的平面来说,若光线与其有奇数个交点,则光源在物体内;若有偶数个交点,则光源在物体外。
如何做光线和三角形求交?
对于每个三角形都判断是否与三角形有交点,并找出t最小的这个交点。
光线和三角形求交延伸为两个问题:

  1. 光线与三角形所在平面是否有交点。
  2. 此交点是否在三角形平面内。(叉积判断)
    解决第一个问题 光线和平面的交?
    平面的方程如何定义:
    由一个法线和一个点决定一个平面。

    如上图:一个平面即为所有p点的集合,此p点构成向量与法线垂直。
    求出 t 并保证 t 大于等于0

    如何判断上面求出的点是否在三角形内:
    用叉乘。

如何简化:即直接算出三角形和光线的交点。
用Moller Trumbore算法 (MT算法):
交点一定在射线上 也一定在三角形内,则可用重心坐标来描述。

光线和显式表面求交如何加速:
之前说,可以对每个三角形都求出交点,然后找t最近的交点,但是太慢了。复杂度是像素个数*三角形个数,甚至还有光线多次弹射增加的次数。

包围盒(Bounding Volumes)

如果光线与包围盒没有交点 那与物体也不可能有交点。
二维:

三维:
长方体:三个对面形成的交集。
常用:Axis-Aligned Bounding Box (AABB) (轴对⻬包围盒)

那光线如何与包围盒求交呢?
二维下:(两个对面)

对于竖直的两条线 对于水平的两条线
然后求两条线段的交集

三维情况下:(三个对面)
对于三个对面,光线进入了三个对面,则光线进入盒子;(进入时间找 最大值)
光线从任何一个对面出来了,则光线离开盒子。(离开时间找 最小值)

if tenter<texit(进入时间 < 离开时间) 则有交点;反之,无交点。

  1. 离开时间小于0 则盒子在光线背后。
  2. 如果离开时间是正的 进入盒子时间是负的。
    则光线起点就在盒子里。 则光线与盒子一定有交点。
    总结: 光线和AABB有交点,当且仅当 进入时间小于离开时间 且 离开时间大于等于0。

为什么要用横平竖直的盒子,即AABB的包围盒。

  1. 光线和与坐标轴平行的面求交点好求。

    上面是随便一个平面,下面是与坐标轴平行的平面。
    假设下图的两个对面是与 yz平面平行的一个平面,即该平面与x轴垂直。求到达平面的时间t,只需用op距离除以do的距离。

图形学 Lecture7 光线追踪相关推荐

  1. 14、计算机图形学——whited-style光线追踪

    一.为啥需要光线追踪 以往的Blinn-Phong光照模型在渲染场景时,对于光的漫反射和镜面反射都只会计算一次,但是实际上在一个场景里面,光有可能既存在反射也存在折射,而且,反射次数和折射次数并不只是 ...

  2. 用JavaScript玩转计算机图形学(一)光线追踪入门

    系列简介 记得小时候读过一本关于计算机图形学(computer graphics, CG)的入门书,从此就爱上了CG.本系列希望,采用很多人认识的JavaScript语言去分享CG,令更多人有机会接触 ...

  3. 计算机图形学(光线追踪)

    笔记:光线追踪 Why Ray Tracing? Ray-Tracing Algorithm(光线追踪算法) Basic Ray-Tracing Algorithm Whitted-Style Ray ...

  4. 计算机图形学--实时光线追踪

    实时光线追踪 光线追踪的应用场景 实时光线追踪的算法和传统光线追踪在算法本身上并没有什么差异.而是硬件上的突破让速度更快. RTRT关键的技术是降噪 下图的降噪后的效果 工业界对于实时光线追踪的降噪是 ...

  5. 计算机图形学【GAMES-101】11、渲染前沿技术介绍(双向路径追踪BDPT、MLT、光子映射、实时辐射度、外观建模)

    快速跳转: 1.矩阵变换原理Transform(旋转.位移.缩放.正交投影.透视投影) 2.光栅化(反走样.傅里叶变换.卷积) 3.着色计算(深度缓存.着色模型.着色频率) 4.纹理映射(重心坐标插值 ...

  6. PS5 发布,揭秘真假难辨的虚拟和现实

    作者 | 硬核云顶宫 责编 | 伍杏玲 封图 | PS5官网 出品 | CSDN(ID:CSDNnews) 每一个代游戏主机让现实世界的玩家向虚幻的游戏宇宙迈出一步,从任天堂红白机上的魂斗罗,到PS平 ...

  7. 预览速度提升30倍,这是什么黑科技?(天猫618之3D渲染篇)

    简介: 天猫618宣布的 3D 购物时代,相信有很多小伙伴好奇,这背后有哪些"黑科技"?橙子从以下三点为你揭秘--3D实景复刻.3D渲染.3D算法,上周讲了<天猫618宣布开 ...

  8. php怎么加一个透明的菜单栏,window_PHP制作下拉透明菜单,下拉透明菜单 script language= - phpStudy...

    PHP制作下拉透明菜单 下拉透明菜单 var mmenus    = new Array(); var misShow   = new Boolean(); misShow=false; var mi ...

  9. 用C# Bitmap作为画布写个3D软渲染器

    文章目录 Recoards 记录 图元光栅 Bitmap.SetPixel优化成LockBits/UnlockBits指针操作 Blend Projection 投影 Wireframe 线框 Sci ...

最新文章

  1. 预告:Javascript全栈开发的系列文章
  2. centos 6 上安装l7 filter尝试过滤xunlei
  3. Windows 驱动发展基金会(九)内核函数
  4. java 相对路径 文件读取,Java相对路径读取文件
  5. python编写命令行框架_python的pytest框架之命令行参数详解(上)
  6. SageMath安装及使用
  7. c语言编程入门文库,C语言程序设计入门:计算机和编程语言
  8. POJ3980 取模运算【水题】
  9. 博客开通了-里面有秘密哦
  10. IEEE754标准浮点格式
  11. WPF 入门教程打印控件
  12. 身为程序猿——谷歌浏览器的这些骚操作你真的会吗
  13. atr指标 java算法_关于股指期货的SAR、CCI、BIAS、ATR指标的算法
  14. Opencv各个模块功能详细简介
  15. python从云端服务器读数据_云服务器简单实现Python自动运维
  16. 真正的手机密码大全!
  17. 8除以2表示什么意思_8除以2等于4表示什么
  18. 约瑟夫环 -- 丢手绢问题
  19. Java核心技术卷阅读随笔--第3章【Java 的基本程序设计结构】
  20. 用python对股票进行可视化分析_股票分析 | 用Python玩玩A股股票数据分析-可视化部分...

热门文章

  1. 石溪分校 计算机研究生专业,纽约州立石溪分校 - 985本科申请纽约州立大学石溪分校计算机研究生容易吗?要准备什么?还有如果成功了好毕业吗??...
  2. 【python】numpy.percentile()函数
  3. 头的各个部位示意图_牛肉的部位图解与做法+牛肉各个部位分布图及质地简介...
  4. java 正整数类型_Java 整数类型
  5. 6、编写应用程序,计算两个非零正整数的最大公约数和最小公倍数,要求两个非零正整数从键盘输入。
  6. 语音信号短时时域分析
  7. 【centos】安装wget------转发自【小姜dot】
  8. python写打飞机游戏
  9. 接入微信自定义版交易组件3.0,小程序对接视频号操作说明
  10. 盘点40个最佳项目管理工具大全