反射

当光线和完美的镜面接触时,我们可以预知它返回的方向。这可以用反射定律计算出来。(公式简单,不赘述)

  • 水虽然看上去像镜子,但是水和玻璃比起金属来说,只能算是很弱的镜面了。

透明度

当光线和透明物体接触时,会发生反射和折射。我们也常常用传递(transmit)来代替折射。但是这两个术语有微小的差别。传递是说,一部分入射光从一侧进入物体,并从另一侧离开。而当它一接触到透明物体的表面时,就转变了方向,而这被称为折射。
- 折射的方向可以用斯涅尔定律(Snell’s Law)计算

  • 折射的强度可以用菲涅耳公式(Fresnel’s equation)计算

  • 上面两个公式相当重要

光泽反射和镜面反射

光泽反射即,当一个物体介于镜面和完全漫反射之间时。或者说其某些地方十分光滑,而某些地方粗糙时。

光泽度也被称为粗糙度(roughness)。同时光泽反射也常常被称为 镜面反射(specular reflection)

  • 在CG中,我们通常说散射(scattering),因为光线不是朝一个方向反射,而是在镜面方向附近的小范围内进行散射

漫反射

入射光线反射向各个方向,所以从哪个方向看,物体都一样亮。导致漫射表面的情况有两种:

  1. 物体表面十分粗糙
  2. 表面由微小结构组成
    光线会在这些结构中来回反射和折射无数次直到离开表面。而这使得光线的方向变得随机。

子面散射(Subsurface Scattering)

子面散射是半透明(translucency)的专业术语。半透明即一个表面处于完全透明和不透明之间。但是半透明和物体的透明度没有多少关系。我们可以清楚地观察到,用强光照射在蜡、用玉或大理石做的小件、或者是较薄的有机材质(皮肤、叶片)上时,有强烈的现象。这个相当难以模拟。

间接漫反射(Indirect Diffuse)

当光线直射到物体表面时,其会反射并照射到其他的物体,而这被称为间接照射。由于物体表面是漫射的,所以被称为间接漫反射。这使得周围未被光线照射到的地方也会被间接照亮。

间接镜面或焦散(Indirect Specular or Caustics)

像漫射物体可以反射光线并照射周围的物体一样,反光物体也可以通过重定向光线来间接照射其他物体。镜头或者水面上的波浪可以将光线聚集于特殊的线或者模式,这被称为焦散(caustics)

软阴影

软阴影和物体的材质无关。模拟软阴影只是一个几何问题,涉及到物体和光源的形状、大小和位置。

漫反射表面从任何角度看都一样亮。但是镜面表面的亮度取决于视线角度。我们称漫反射为视角无关的(view-independent),称镜面反射为视角相关的(view-dependent)

光线传输和着色:两个相关但不同的问题

理解两点:

  • 物体的外观只取决于光的传输和与物质交互的方式

  • 所有的特效都可以大致分为两类:

    • 与物体外观相关
    • 与物体接受多少光线相关

    第一种类别与着色(这给予了物体的外观)相关,其中有之前提到的反射、透明度、镜面反射、漫反射和子面散射。而第二种类别与光线传输(光如何在与不同材质交互后从一个表面传到另一个表面)相关,如间接漫反射、间接镜面、软阴影

    在着色中,我们学习光如何和物质交互。也就是说,它关注从光到达物体到离开物体这中间发生的所有事情。

    光线传输学习光如何从表面之间反射。其关注光从光源到眼睛这之间所经历的路径。

着色和光线传输的界限很模糊。在现实中它们实际上没太多区别。但是在CG中,它们不能有效地用同一种方法去模拟,所以被区分开了。

如果我们原子级地复制现实世界到电脑中,写下代码制定光与原子作用的基本规则,我们只需要等待光来回弹射直到到达我们的眼睛,这样就能生成一个完美的图像。但是现有技术无法做到。我们需要做的,是找到这个过程中最耗时的部分。显然光到达物体表面进行交互是相当复杂的,并且也是最耗时的。

所以,我们在CG中做了区分。着色是设计数学模型来接近光和物体的交互。

模拟光线运动比模拟光与物质的相互作用更简单,但也没那么简单。某些类型的互反射(inter-reflection)相当难以模拟(如焦散)。一方面,设计优秀的数学模型来模仿光与表面的交互是很难的;另一方面,设计一个优秀的光线传输算法也很有挑战性。

全局照明(global illumination)

你可能会有这样的误解,大部分表面因为从光源直接接受到光线,所以才可见。但是实际上有许多情况中,物体是被其他表面间接照明的。你可以看看周围有多少物体是直接暴露在光源下的。间接光照在现实中是重要的环节,如果不模拟这个效果,那么图像将是失真的。在渲染中我们同时模拟直接和间接光照效果,这被叫做全局光照

理想状态下,在渲染中,我们想模拟所有可能的照明脚本(scenario),这取决于:

  • 场景中包含物体的形状、材质
  • 场景中有多少光量
  • 光的类型(太阳、灯泡、火焰)
  • 光的形状
  • 物体在空间中的分布

为什么我们不模拟间接光照呢?因为这将需要从视点发射更多的光线,花费大量时间计算光线和物体的交互,这中间的时间损耗甚至能达到数量级的差距。

使用光线追踪来模拟间接光照是很容易的事,你只要模拟现实世界中光线的运动就行了。但是使用栅格化来模拟十分困难,然而不是不可能。如点云技术(point cloud based),光子映射(photon mapping),虚拟点光源(virtual point light),阴影贴图(shadow mapping)。辐射度算法(Radiosity)在80年代十分流行,但是现在很少使用了。但是最简单的方法是使用光线追踪。

光线追踪对某些特殊的光照效果反而很难模拟。如间接镜面反射。而光子映射是一个设计来有效模拟焦散(间接镜面反射的一种形式)的技术。

光线追踪真的比栅格化更好么?

首先光线追踪相比栅格化是一种更接近自然的模拟技术,而且它可以同时用于解决可视性和光照问题。

光线追踪不是一个奇迹性的方案。它有自己的问题

布林定律:如果一个动画工作室花费十个小时计算一个帧的动画,那么在十年后他们也将花费十小时每帧,无论处理性能有多大的进步。

你需要积极地优化你的代码来使其具有实用性。但是如果你不去管这些技术性的问题,光线追踪的主要缺陷在于噪声-noise(术语称为方差-variance)。而解决方法也很简单粗暴,使用更多的光线来提升模拟的质量。而光线追踪也可以一些其他的技术相结合来提高模拟特定光照效果的效率。

学习Scratchapixel--(6)光线模拟器相关推荐

  1. 保姆式学习,解决夜神模拟器ADB版本不一致问题

    解决模拟器连不上电脑的问题 前言 解决办法 总结 前言 使用adbl连接模拟器时,经常会提示adb版本不一致问题,那么如何解决呢?如图所示 报错,因为模拟器的adb版本是36,而Android SDK ...

  2. ios学习笔记之三- iPhone模拟器基本操作

    标题  iPhone模拟器基本操作 主题 退出后台 iOS程序不会自动退出,只能退到后台运行 shift + command + h进入主界面 shift + command + hh会出现所有进程, ...

  3. Appium学习3:Android模拟器安装与使用

    安卓模拟器简介 安卓模拟器是能在PC平台模拟安卓手机系统的模拟器软件.安卓模拟器能在电脑上模拟出安卓手机运行环境,安卓模拟器让你在电脑上也能体验安卓游戏和应用,在各大下载站都能够下载. 比较常用的安卓 ...

  4. 学习软件测试spu,PS3模拟器RPCS3SPU性能提升补丁测试版

    为大家分享一款PS3模拟器RPCS3 SPU性能提升补丁测试版,是来自"Farseer2"为用户们专门制作的辅助补丁工具,下载使用后可以提升模拟器游戏的性能等,十分实用,感兴趣的玩 ...

  5. 小白学习一eNSP华为模拟器(18) IPV6基本配置

    大家好! 我叫风清云淡,有句话说"相识是缘",我也希望多多认识一些志同道和的朋友.作为一名互联网行业的小萌新,写博客一方面是为了记录自己的学习过程,另一方面是总结自己所犯的错误希望 ...

  6. android 学习运用海马模拟器教程与android环境的搭建

    摘自:https://www.cnblogs.com/KingSkull/p/6066004.html 第三方海马玩模拟器 第一天的学习android采用的模拟器是海马,因此就分享给大家海马模拟器的相 ...

  7. Lightroom学习随笔

    本意是系统的学习Photoshop,但是发现后期中对于色彩和光线都有着比较多的要求,所以打算先从LR入手,学习基础的光线色彩知识,再进一步学习ps. 安装时遇到了问题,记录一下给后来者: 1.点击安装 ...

  8. 深度学习崛起十年:“开挂”的OpenAI革新者

    来源|The Robot Brains Podcast 编译|OneFlow社区 AlexNet,AlphaGo,GPT.CLIP.DALL-E和Codex,这些在AI界轰动一时的杰作,对于任何一个A ...

  9. 《强化学习周刊》第4期:强化学习应用之智慧交通

    No.04 智源社区 强化学习组 R L 学  习 研究 观点 资源 活动 关于周刊 强化学习是当前人工智能领域研究的热点之一,为帮助研究与工程人员了解该领域的进展和资讯,智源社区整理了第4期< ...

最新文章

  1. SAP MM 库存地点权限控制
  2. 全球知识图谱专家分布、研究流派(附学者名单)
  3. Visual Studio调试之符号文件
  4. 贝叶斯神经网络的辩论
  5. polkit 重新安装_CentOS Linux 7.4中polkit服务启动失败
  6. Maven项目启动时如何查找默认的显示页面
  7. 小技巧 ----- 关于Java中的System.arraycopy()
  8. ue4 classuobject没有成员beginplay_UE4异步编程专题 - TFunction
  9. 信号与系统学习之第一章(系统的六大基本性质定义与判别:无记忆性、可逆性、因果性、稳定性、时不变性、线性)
  10. 非IE内核浏览器支持Active X控件
  11. ipv4转ipv6 山石防火墙命令(教育网)
  12. 【Windows】六种正确清理C盘的方法,解决你的红色烦恼
  13. 和平精英小程序服务器开小差,1个BUG存在了4年 光子通过小提示说出了无法修复的原因...
  14. 《UNIX/LINUX系统管理I》课程学习总结
  15. 数据库课程设计:图书信息管理系统(Java+MySQL)(附程序)
  16. 日历+石墨做团队管理
  17. matlab利用已知数据画图三维,Matlab三维数据画图和等高线数据提取
  18. 互联网公司创业的7道槛
  19. Perplexity困惑度解释
  20. RHEL 5下iSCSI Initiator软件安装配置指导

热门文章

  1. 虚拟机centos7繁忙关不了机的解决方法
  2. javaArrayList添加及打印
  3. 小米EA70 2022 款 评测
  4. java 员工类算工资_java 编程 计算工人工资,
  5. 端午安康,使用祝福话语生成词云吧
  6. 关于 ag-grid 的调研之路
  7. U盘总是提示格式化,如何安全恢复里面的数据?
  8. iOS开发 开发笔记,图片裁剪成正方形图片;
  9. RadioButton 和 CheckBox
  10. 电脑自动关机是什么原因?4个解决方法,赶紧码住收藏!