蒙特卡洛光线追踪技术系列 见 蒙特卡洛光线追踪技术

在描述光学时,一般有两种描述方式,一种是通过波动和频率来描述,成为波动光学。另一种是通过光的现象来进行描述,例如我们平时看到的光折射散射等现象,称为几何光学。

在几何光学中,光线射入物体后的反射和折射等都能通过公式计算出来,光能的反射和折射比率也能计算出来。

在光经过不平滑的表面时,会向不同方向进行反射,从人眼来看,大概是一种散射的效果。

同时,在物体内部,还会因为内部不同微粒的作用下再发生次表面反射(如上图)。

反射折射都很简单,但是一旦涉及散射,情况就变复杂了。不同的物体具有不同的散射特性,有的散射比较均匀,有的包含次表面散射更多。如果我们建立的模型不够好,就会在渲染的图像上产生不理想的效果。有一种解决思路是通过实际测量的方式来获取散射的数据,这种方式可以获得很高的真实度,在动画电影中涉及很多。

另一种就是可以基于视觉效果来实现光学模型,例如著名的Blinn-Phong反射模型。该模型的特点是可以产生具有一定真实度的图像,而且算法比较简单,计算量也不是很大。缺点是不符合能量守恒,所以在一些场景中不能使用,因为可能在结果叠加中造成能量饱和(累加后的颜色变为白色)。

学过OpenGL的同学都知道,OpenGL2.0里使用的固定光照管线就采用了这种模型,它看起来有种“塑料”的感觉。

而更先进的方案是基于物理的光学模型:《Theory for Off-Specular Reflection From Roughened Surfaces》中Torrance使用辐射度学和微表面理论推导出粗糙表面的高光反射模型,《A Reflectance Model for Computer Graphics》中Cook-Torrance在中把这个模型引入到计算机图形学,该模型从效率和效果上得到了很好的平衡,可以产生很高质量的图像。

由此看来,在计算机图形学中,散射问题一直是大家热衷于研究的主要问题。

现在介绍一下光能的功率

注意这个功率的表示比较简单,就是单位时间内的能量。注意这个功率的表示,与单位面积无关,与单位体积无关,它所表述的就是在某个单位时间里,可以理解为通过某个空间(或者面)的能量总数。

辐照度:  

这个也很好理解,加个单位面积,表示单位时间通过某单位面积的能量。我们可以理解为,太阳照在你家院子里,你觉得很晒,但是有多晒呢?你不能收集你们家全年的阳光总能量来表示,因为这不是你此时此刻感受到的辐射能,你也不能把你们家在的城市都给算上,因为晒到你的阳关总共就那么多。所以你需要用单位时间再加上单位面积表示此时此刻你感受到的辐射能量。

值得注意的是,这个“表面”可能不与光的方向垂直,比如这种极端情况:

虽然有光通过这个区域,但是接收表面什么都接受不到。而在一般情况下:

蓝色平面代表接受光的面,而绿色面表示垂直入射到的面。所以应该计算的平面,得到

辐射强度:现在我们引入一个问题:怎么知道空间中一个点受到的辐射度呢?可能你会回答,用一个单位小面积代替呗。但是这样会有很多问题。

我们知道在二维空间上的角度,扩展到三维空间上,我想大家应该也能想得到一个角度能代表什么。

在二维空间中,角度的大小和边长没有任何关系:

但是我们可以通过把角的顶点放在单位圆里,如下图:

然后计算夹角内的边长来得到该角的度数(因为圆周角为2π,而单位元周长也是2π)

三维空间中的角也同理:

立体角的度数等于立体角在单位球面上对应的区域的面积。我们设立体角大小的 ω。

辐射强度即通过单位立体角的辐射通量:,我们从立体角的公式可以看出,无论光传输距离多远,立体角都不会变(就像二维角与边长无关一样)。

辐亮度(radiance):,目的是为了衡量面辐射源的各向异性。为垂直于给定方向上单位面积、单位时间、在单位立体角中放出的辐射能量。

辐亮度也被称为辐射率,可以看成是眼睛看到的物体上某一点的颜色。为什么我们无论远近,看到红色就是红色,从远处看红领巾和从近处看都是一样的颜色呢?这就是因为当离着物体更远的时候,物体上同样面积的辐射量到视网膜以后的比例就更小,同时视网膜看到的这块面积所在的立体角也更小,正好抵消了。

在我们计算基于物理的着色时,计算表面一点的颜色即计算它的辐亮度。

三维渲染 光能辐射基础相关推荐

  1. 计算机学3d建模吗,计算机三维建模与动画基础

    计算机三维建模与动画基础 语音 编辑 锁定 讨论 上传视频 <计算机三维建模与动画基础>是2008年清华大学出版社出版的图书,作者是张烈,骆春慧. 书    名 计算机三维建模与动画基础 ...

  2. 谈谈GIS三维渲染引擎

    minemap:是我们公司的产品,主要以earth的形态展示,支持矢量切片+倾斜数据(这一点我个人认为是它最大的优点,即兼容了矢量切片精美地图又兼容倾斜数据,目前倾斜数据采用的3dtile格式),目前 ...

  3. GIS三维渲染引擎 到底有什么区别

    minemap:主要以earth的形态展示,支持矢量切片+倾斜数据(这一点我个人认为是它最大的优点,即兼容了矢量切片精美地图又兼容倾斜数据,目前倾斜数据采用的3dtile格式),目前正在重构引擎架构, ...

  4. OSG三维渲染引擎编程学习之十七:“第二章:OSG数学基础” 之 “2.7 世界坐标系、物体坐标系、摄像机坐标系”

    第二章 OSG数学基础 OSG是一个优秀的三维渲染引擎,三维渲染涉及到大量的3D数学知识.3D数学是一门和计算机几何相关的科学,研究怎样用数值的方法来解决几何问题,因此,掌握并灵活运用3D数字知识是O ...

  5. 设计一个高性能三维渲染服务器,第一人称视角三维实景漫游系统渲染流水线架构研究.pdf...

    文档介绍: 同济大学 硕士学位论文 第一人称视角三维实景漫游系统渲染流水线架构研究 姓名:张岩 申请学位级别:硕士 专业:结构工程 指导教师:谢步瀛 20040301 关键词摘要计算机辅助三维实景漫游 ...

  6. 三维渲染中的裁剪总汇

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/72420731 作者:car ...

  7. OSG三维渲染引擎编程学习(全系列开展OSG学习)

    目录 第一章:OpenSceneGraph介绍 第二章:OSG数学基础 第三章:OSG场景组织 第四章:OSG几何体绘制 第五章:OSG场景渲染 第六章:OSG场景工作机制 第七章:OSG场景图形交互 ...

  8. [比较老的文章]三维渲染引擎 OGRE 与 OSG 的比较综述

    1 .引言 随着计算机可视化.虚拟现实技术的飞速发展,人们对实时真 实感渲染以及场景复杂度提出了更高的要求.传统的直接使用底层 图形接口如OpenGL.DirectX开发图形应用的模式越来越暴露出开 ...

  9. 3dsMax插件V-Ray建筑可视化三维渲染细节技术学习教程

    通过学习可用于相机放置.建模.修整等的策略,生成令人印象深刻且逼真的建筑三维渲染.了解如何将您的3D渲染场景提升到一个新的水平,以使您的图像引人入胜.有趣且讨人喜欢.在本课程中,讲师Verena Ta ...

最新文章

  1. linux 导入txt_手机混用闪存到底是真是假:教你查手机闪存型号|闪存|手机|linux|ufs|zip...
  2. 树莓派基于 Linux 的 Windows XP 现已可用
  3. web服务器与网页表单通信,前端与后端通信的几种方式
  4. glance image-create
  5. 树莓派 Ubuntu mate 18.04 下开启vncserver
  6. byte转换int时为何与0xff进行与运算
  7. 如果爱情不会让人受伤
  8. php远程连接403,php中出现“ HTTP 异常 403 - 禁止访问”解决方法 总结
  9. 今天 ,给大家变个魔术!!!
  10. JQuery canvas 验证码
  11. 章节四、1-if条件语句
  12. 笔记本电脑风扇控制软件
  13. 《魔鬼搭讪学》的笔记……
  14. 2015/7/28(总结昨天抄底操作失败-割肉自保)
  15. 树莓派搭建http服务器实现网页监控摄像头
  16. 使用Moses脚本进行数据预处理
  17. 深度分析短视频搬运视频消重九种方法各平台轻松过原创
  18. Springboot毕设项目企业财务管理系统lmm93java+VUE+Mybatis+Maven+Mysql+sprnig)
  19. 浅谈IT服务与服务管理
  20. 论文解读:学习蛋白质的空间结构可以提高蛋白质相互作用的预测

热门文章

  1. Gitalk出现Error:Validation Failed问题的解决办法
  2. Swift游戏实战-跑酷熊猫 07 平台的移动
  3. 四超多强 一文看懂中国CV独角兽格局
  4. vue实现视频播放器功能,你学会了吗
  5. c# 检测中英输入法_用C#控制当前输入法
  6. linux commen cmd
  7. 有没有好奇过路由器宽带拨号的mtu值为什么是1492呢?了解MTU与IP分片
  8. Arduino DRV8825驱动两相步进电机
  9. draco安装与测试
  10. Java程序设计-实验6-sdust