一.V-Ray 是一款光线追踪渲染器(Ray

tracing)

​​当前的主流渲染器,如finalRender、Brazil、Maxwell、MentalRay等,都是以光线追踪技术为主的,而V-Ray渲染器图像中的效果主要是通过光线追踪方法计算出来的,所以V-Ray是一款光线追踪渲染器。

​二.光线追踪渲染器的工作原理

Ray

tracing工作原理图

我们可以这样理解光线追踪渲染器的工作过程:

1.

渲染图像的组成

​假设在相机前面放置一个网格平面,称为视平面(View

plane),网格平面中的每一个小格,就是渲染图像中的一个像素,小网格的多少有渲染输出图像的分辨率决定,如渲染输出图像的分辨率为800X600,则此网格平面就由800X600的小网格组成,如果从相机的位置去看小网格,每一个小网格都覆盖了场景中的一小块区域。可见,如果能计算出每个小网格所覆盖区域的平均颜色,并将此颜色做为小网格的颜色,对小网格进行填充,将网格平面中的所有小格都填充完,也就得到了我们所需要的渲染结果。

​2.

如何出计算这些小网格的平均颜色呢?

​以相机的中点为起点,向小网格的中点发出一条辅助射线(Ray),此射线与场景中的物体相交(如没有相交,则视为与背景相交),如果计算出此交点的颜色,也就得到了小网格的颜色。

​从相机发出的辅助射线与我们的视线方向相同,与场景中物体反射到我们眼晴中的光线的方向相反,故应称为视线,为了方便说明,将此辅助射线,称为采样视线,辅助射线与场景的交点,称为采样点。

​采样点的颜色由采样点所在物体的材质、场景中的光源,场景中的其它物体及背景等多方面因素相互作用决定的。

​除了需要计算采样点在光源的直接照射下,所产生的颜色外:

​如果采样点的材质具有反射属性,则需计算出采样点的反射颜色。

​如果采样点的材质具有折射属性,则需计算出采样点的折射颜色。

​如果采样点与光源之间有其它物体,则需要计算出采样点的阴影颜色。

​如果采样点的周边有其它物体,还需要计算其它物体对此采样点所产生的间接照明效果。

​如果开启了焦散效果,还需要计算出采样点的焦散颜色。

​如果开启了相机的景深及运动模糊效果,还需要计算出采样点的相关模糊颜色。

​将上述采样点的所有颜色综合在一起,就会得到采样点的最终颜色,可见采样点的的最终颜色包含了许多种不同属性的颜色成分。

3.

如何计算采样点不同属性的颜色成分?

​3.1 采样点直接照明颜色的求法

​从采样点向光线发出采样视线,求出光源与采样点的位置关系,根据光源的亮度、颜色等参数再结果采样的材质属性,就可以求出采样点在光源直接照明下所产生的颜色。

​3.2 采样点反射颜色的求法

​如果采样点的材质具有反射属性,根据光线的反射原理,此采样点继续发出采样视线,去与场景中的物体相交,我们将新的交点称为二次采样点,求出二次采样点的颜色,就是此采样点反射的颜色。如果二次采样点还具有反射属性,则此采样点继续重复上面的采样计算,直到所规定的反射次数,或反射颜色减弱到一定阀值后终止。

3.3

采样点折射颜色的求法

​如果采样点的材质具有透明属性,根据光线的折射原理,此采样点继续发出采样视线,去与场景中的物体相交,我们将新的交点称为二次采样点,求出二次采样点的颜色,就是此采样点反射的颜色。

​如果二次采样点还具有透明属性,则此采样点继续重复上面的采样计算,直到所规定的折射次数,或折射颜色减弱到一定阀值后终止。

3.4

采样点阴影颜色的求法

​从采样点向光线求出阴影采样视线,如果光源与采样点间有物体遮挡,则根据光源的阴影参数及遮挡物体物属性,就可以计算出采样点的阴影颜色。

3.5

采样点间接照明颜色的求法

​采样点间接颜色的求法有两类算法:

3.5.1

视线追踪法

​从采样点处,向四周发出采样视线,计算出周边物体对采样点颜色的影响。

3.5.2 光线追踪法

​追踪光源所发出的光线,直接计算每个光源对场景间接照明的总结果,然后再求出采样点间接照明的颜色。

3.6

采样点相机景深及运动模糊效果颜色的求法

​从相机发出采样视线,求出景深及模糊对采样点的影响,从而求出采样点的模糊颜色。

​将采样点的上述颜色求出后,进行综合处理,就会得到采样点的最终颜色。

​从上述采样点颜色成分的计算方法中,我们可以看到,所有的计算不外乎使用了二种方法,一是追踪从相机发出的辅助视线,二是追踪从光源发出的光线,而且为了计算,有的需要对采样点进行多次追踪,这就是光线追踪概念的由来。

​但是,关于光线追踪的概念是极其混乱及模糊的,下面我就对之进行明确说明。

​三. 关于光线追踪(Ray

tracing),光线投射Ray casting)的有关概念说明

​由于最先开发出来的追踪算法,由从相机发出的辅助射线为基础的,并将之命名为Ray

tracing,被翻译成中文时称为光线追踪。

​后来又开发出来了,追踪光源所发出的光线的计算方法,由于这时Ray

tracing的名称已经被使用,为了与之进行区别,取名为Backwards

Ray tracing,翻译成中文为反光线追踪,明明与光线的光向一致,却将之称为反光线追踪,结果更乱了。

​为了区别,后来又对名称进行了修正,将以相机为出发点的追踪称为eye-based

Ray

tracing,基于眼睛的光线追踪;将以光源为出发点的追踪称为light-based

Ray tracing,基于光源的光线追踪。

​如果使用直译的方式进行翻译,其名称又烦琐,又不直观,按我的想法:

​将 eye-based Ray tracing

翻译成“视线追踪”

将 light-based Ray

tracing翻译成“光线追踪”

​即简单、直观,又使人容易理解。

​不过在你明白了其算法的原理后,至于称为什么名字,也不是很重要了,一般情况下,将可这二种方法,都笼统的称为光线追踪。

​现在再说一说光线投射

Ray casting

​如果在进行计算时,仅从相机发出了一次采样视线,直接对采样点进行计算,而对采样点不再继续投射新的采样视线的方法,称为光线投射Ray

casting,其实将之翻译为“视线投射”更为合理。

​例如,对场景中漫反射的计算,使用的就是视线投射法。

​关于这三种追踪方法,在V-Ray渲染器中都得到了应用。(文章来源于网络)

matlab 光线追踪 渲染,光线追踪(Ray tracing)渲染器工作原理相关推荐

  1. 转载 调试器工作原理

    调试器工作原理--基础篇 本文是一系列探究调试器工作原理的文章的第一篇.我还不确定这个系列需要包括多少篇文章以及它们所涵盖的主题,但我打算从基础知识开始说起. 关于本文 我打算在这篇文章中介绍关于Li ...

  2. 调试器工作原理——基础篇

    #include <stdio.h>int main(){printf("Hello, world!n");return 0;} 本文是一系列探究调试器工作原理的文章的 ...

  3. python调试器原理_调试器工作原理——基础篇

    本文是一系列探究调试器工作原理的文章的第一篇.我还不确定这个系列需要包括多少篇文章以及它们所涵盖的主题,但我打算从基础知识开始说起. 关于本文 我打算在这篇文章中介绍关于Linux下的调试器实现的主要 ...

  4. 调试器工作原理系列一: 基础篇

    调试器工作原理系列一: 基础篇 本文是一系列探究调试器工作原理的文章的第一篇.我还不确定这个系列需要包括多少篇文章以及它们所涵盖的主题,但我打算从基础知识开始说起. 关于本文 我打算在这篇文章中介绍关 ...

  5. 调试器工作原理(1):基础篇

    调试器工作原理(1):基础篇 2013/04/15 · IT技术, 开发 · 3 评论 · debugger, ptrace, 代码, 调试器 本文是一系列探究调试器工作原理的文章的第一篇.我还不确定 ...

  6. (转)调试器工作原理(1):基础篇

    本文是一系列探究调试器工作原理的文章的第一篇.我还不确定这个系列需要包括多少篇文章以及它们所涵盖的主题,但我打算从基础知识开始说起. 关于本文 我打算在这篇文章中介绍关于Linux下的调试器实现的主要 ...

  7. 调试器工作原理之一——基础篇

    转自 http://blog.csdn.net/gqb_driver/article/details/13988001 英文原文:Eli Bendersky  翻译:伯乐在线- 陈舸 本文是一系列探究 ...

  8. Linux下调试器工作原理

    Linux下调试器工作原理之一-基础篇 介绍关于Linux下的调试器实现的主要组成部分--ptrace系统调用.本文中出现的代码都在32位的Ubuntu系统上开发.请注意,这里出现的代码是同平台紧密相 ...

  9. Linux调试器工作原理——基础篇

    英文原文:Eli Bendersky编译:伯乐在线-陈舸 本文是一系列探究调试器工作原理的文章的第一篇.我还不确定这个系列需要包括多少篇文章以及它们所涵盖的主题,但我打算从基础知识开始说起. 关于本文 ...

  10. javascript原理_JavaScript程序包管理器工作原理简介

    javascript原理 by Shubheksha 通过Shubheksha JavaScript程序包管理器工作原理简介 (An introduction to how JavaScript pa ...

最新文章

  1. Ueditor编辑旧文章,从数据库中取出要修改的内容
  2. 计算机技术与软件专业技术资格(水平)考试常见问题
  3. NYOJ 1068 ST(线段树之 成段更新+区间求和)
  4. MySQL数据库权限管理
  5. 图片热区map-area
  6. 怎么增加服务器容量,新睿云服务器硬盘容量怎么增加?
  7. Java跳出多重循环的方法
  8. Emulator Error: Could not load OpenGLES emulation library: Could not load DLL!
  9. 非同质化代币(NFT)概述
  10. Android实战 - 音心音乐播放器 (开启篇)
  11. vue3中的tsx写法
  12. datalist图片九宫显示
  13. 线性回归与逻辑回归/朴素贝叶斯
  14. 请java老鸟指教一下
  15. UI设计师—这个世界上最棒的工作!
  16. Python——日历模块
  17. 透过微博回港上市,看中概股如何穿越市场周期变动
  18. Ubuntu 22.04​下加快rust的编译速度
  19. 企业服务总线--MuleESB简介
  20. rest_framework基础

热门文章

  1. 什么是客户旅程分析(customer journey mapping)
  2. DP4301国产低功耗Sub 1G收发器芯片兼容433MHz替代CC1101
  3. Android音频压缩分析
  4. 企业发展滞缓,还不是因为踩了这四个数据大坑!
  5. adc0832工作原理详解_ADC0832内部原理
  6. 国际象棋 小麦 用java怎么算_蓝桥杯-放麦子-java
  7. 一位技术演讲家的自白
  8. 新唐NUC980读取U盘配置
  9. 悉尼大学计算机专业本科学费,悉尼大学
  10. Log4j2 日志级别