一、为啥需要光线追踪

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

因此,Blinn-Phong在精确计算光照强度的时候是不太准确的,而光线追踪渲染方式,就是为了解决Blinn-Phong光照模型存在的问题

二、光线追踪的三个假设

在光线追踪渲染模型中,光是沿着直线传播,光线和光线之间不会产生碰撞,所有的光路都是可逆的

三、光线追踪的过程

首先从人眼或者相机发出光线,穿过每个像素,打到物体上,并判断光线与物体的交点,该过程如下图所示

如果一条光线可以穿过多个物体,只记录第一个被照射到的物体,后面的物体就被遮挡上了,就形成了阴影,如上图虚线所示

接着利用Blinn-Phong光照模型计算每条光线的照射点的亮度,将所有光线都计算一遍,就能得到所有像素的亮度

然而,这样做得到的结果与Blinn-Phong光照模型得到的结果一样,所以,要在此基础上添加一些额外的东西

添加的东西就是光线的反射和折射(反射和折射不是无限次的,需要指定反射或者折射的最大次数。),当光线打到光滑的物体表面时,会同时发生折射和反射

根据之前的三个设定中的光路的可逆性可知,此时,眼睛与球的交点的光照亮度不仅仅是由Blinn-Phong光照模型定义的,还包括了三角形和四边形的局部关照所产生的光照以及四边形的折射点所产生的的光照

然后,将上述四个点分别与光源连接。计算这四个点的局部光照强度,然后,将其他三个点的光照亮度加权累加(因为要考虑光线反射或者折射时的能量损失,所以要加权累加),最后与眼睛与球的交点的光照亮度进行求和,得到的就是最终该像素点的颜色

四、如何计算光线和物体表面的交点

知道了whited-style光线追踪的过程,那么,该如何计算光线和物体表面的交点呢?

4.1、光线的表示

上述光线方程的最终表达是一个向量,由起点,方向和时间构成

4.2、光线和隐式曲面的交点

以球体为例,将下面两个方程联立求解时间t

结果如下

最后,根据一元二次方程来判断由0,1,2个交点

4.3、光线和显式曲面的交点

思路依然是相同的,将光线方程和平面的点法式方程联立

求得t之后,带入光线方程,就能得到交点了

得到了交点之后,就能进一步判断该点是否在三角形内了

上述过程判断点是否在三角形内较为麻烦,所以又有了直接计算出三角形与光线交点的算法了

上述推导过程如下

交点可以通过光线来表示,也可以通过重心坐标来表示,将上式整理可得

则,整理后的表达式可写成

上式又可以写成

通过克拉默法则可解得

分子分母的行列式可以分别通过向量来表示

其中分母可以表示为

分子可以表示为

所以,t ,b1,b2可以分别表示为

参考

GAMES101-现代计算机图形学入门-闫令琪_哔哩哔哩_bilibili

克莱姆法则_百度百科 (baidu.com)

Möller-Trumbore算法-射线三角形相交算法_zhanxi1992的专栏-CSDN博客

欢迎大家评论交流,作者水平有限,如有错误,欢迎指出

14、计算机图形学——whited-style光线追踪相关推荐

  1. 计算机图形学六:光线追踪-Ray Tracing

    文章目录 阴影映射(Shadow Mapping) Whitted-Style 光线追踪 原理 光线与物体求交 光线的表示方法 光线与隐式曲面求交 光线与显示曲面求交 如何加速 轴对齐包围盒(Axis ...

  2. [渝粤教育] 中国地质大学 计算机图形学(新) 复习题

    <计算机图形学>模拟题 一单选题 1.枚举出图形中所有点的表示方法是() A.图形 B.图像 C.参数法 D.点阵法 2.下面哪个设备不是计算机图形学的输入设备 A.光笔 B.键盘 C.扫 ...

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

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

  4. 计算机图形学——光线追踪(RayTracing)算法

    转自:https://blog.csdn.net/hmbxsy/article/details/80509876?depth_1-utm_source=distribute.pc_relevant.n ...

  5. 16、计算机图形学——基于AABB进行光线追踪的加速(下)

    三.KD-tree加速光线追踪 前面已经说过,均匀空间划分存在一个划分粒度的问题,所以,为了解决这个问题,就出现了基于树形结构的空间划分.基于KD-tree进行空间划分就是其中一种 KD-tree每次 ...

  6. 15、计算机图形学——基于AABB进行光线追踪的加速(上)

    white-styled光线追踪需要计算光线与每个三角形面的交点,并投影到像素上,并且还要考虑光线的反射和折射,所以,计算量很大(GPU你忍一下) 那么,如何降低white-styled光线追踪的计算 ...

  7. 【计算机图形学】OpenGL递归实现光线追踪

    计算机图形学课程设计:基于面向对象的光线跟踪算法设计与实现 目录 一.前言 二.项目实现与说明 1. 数据结构设计 1.1 光线 Ray 1.2 材质 Material 1.3 光照 Light 1. ...

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

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

  9. 计算机图形学14:三维图形的投影变换

    作者:非妃是公主 专栏:<计算机图形学> 博客地址:https://blog.csdn.net/myf_666 个性签:顺境不惰,逆境不馁,以心制境,万事可成.--曾国藩 文章目录 专栏推 ...

最新文章

  1. 蓝牙连接参数关于IOS的限制
  2. Coprime Conundrum 容斥原理
  3. 调用webservice 设置超时时间
  4. 使用内置函数操作数据库
  5. JS中遍历数组的两种方式
  6. 安卓快速排序与冒泡排序
  7. hdu-5673 Robot(默次金数)
  8. 曙光计算机能玩游戏吗,曙光英雄怎么在电脑上玩 用模拟器玩曙光英雄电脑版...
  9. 【深度学习经典网络架构—5】:ResNet
  10. 怎么让搜狗收录-如何加快搜狗收录
  11. 服务器时间 验证码不显示,时间不同步导致网页验证码不能正常显示解决方法...
  12. Vue+ant-design-pro(2)动态路由
  13. js 中的 exec( )方法
  14. 中鑫优配股票配资平台的保障
  15. 我与朗科不得不说的那些事儿
  16. 日常BUG总结:虚拟机centos7无法识别网卡
  17. 给准备第一次参加西雅图峰会的MVP们:签证篇(B1签证)
  18. [附源码]Python计算机毕业设计Sketch2Mod网站Django(程序+LW)
  19. 顶级产品经理是如何利用王者荣耀,3步毁掉你的自律。
  20. Windows server2008部署SpringBoot的jar项目

热门文章

  1. 7216:Minecraft
  2. Django 数据库ORM 操作 - 字段的类型和参数
  3. 第十章: 数据模型高级进阶
  4. 一键生成HTML4和WAP站
  5. 利用ATL创建com组件和如何在程序中使用组件的接口函数和设置接口的属性
  6. 微信公众平台关于fakeid和openid的解析
  7. CF643E Bear and Destroying Subtrees
  8. JavaScript中的JSON
  9. BZOJ 1874: [BeiJing2009 WinterCamp]取石子游戏(SG函数)
  10. python查看删除你微信的账号