第五章讲述了一些漫反射模型和镜面反射模型的原理和数学公式
博主在unity中实现了一下,把部分结果贴在上面

有下面几个主题:
渲染公式
基本光照定义
光照和lambert法则
双向反射分布函数BRDF
漫反射材质原理简介与模型
镜面反射材质原理简介与模型

基本光照定义

对于我们眼睛可见的光对于表面的作用,他们会发生,反射,穿透,折射,吸收,或者表面自发光。

对于所有物体的光照基本公式如下

如果表面不发光则EmittedLight为0。
接下来会讨论许多种形式的反射函数reflectance Function

irradiance辐照度:表面每单位面积接受到的所有能量(包括光能和其他能量)
illuminance照度:表面每单位面积接受到的所有光能(只有光能)
radiance辐射:表面每单位面积反射的的所有能量(包括光能和其他能量)
luminance亮度:表面每单位面积反射的的所有光能(只有光能)
不同的材质可能会反射不同数量的光为不同方向

光照的lambert法则

同等数量的光照射到的表面积越小,单位表面积受到的能量越多。
当增加表面法线与入射角度增加时,受到光照的表面也增加,说明单位表面积收到的能量越少。
当光照方向与表面法线垂直时,光线正好擦过表面,受到光照为0,但是自然界不可能出现这种状况,因为物体材质都是粗糙的,会受到其他表面反射光的照明。
物体的Lambert漫反射可以用法线与入射角度的cos值表示,光照强度的范围在0-1.cos的范围为-1-1,必须把其限制在光照强度范围内,否则之后的计算会出现错误结果。
公式如下
 
光强IL是一个颜色值。在某些情况下,材质在不同的颜色通道有不同的反射行为。

接下来要讲述的反射公式他们都有着微妙的不同,但都是同一种方式-BRDF。

BRDF

BRDF是描述入射光怎样反射为出射光的函数,用来求出出射光强,我们只关注进入眼睛的部分反射光。BRDF并不适合所有材质
BRDF’有两个属性
1.    他是双向的,意味着可以互换光照入射方向和出射方向,得到的结果是相同的
2.    真正的BRDF服从能量守恒定律

BRDF所需参数如下
 
BRDF也依赖于波长。
BRDF与着色模型相比计算更加复杂,理论更加严谨,更符合真实世界的光照,严格遵守能量守恒定律。

各向同性与各向异性

各向异性意味着反射属性依赖于视角和表面法线,一个例子就是摩擦过的金属,在不同角度存在不同数量的反射光线
 
后面将会实现各向异性效果。

漫反射模型

Lambert模型非常简单但是并不适用于所有材质,效果不真实,其材质均匀,不能反映粗糙度带来的变化。
注意:因为恰好进入眼睛的是物体表面的一小部分部分反射光,并且光射到表面其部分会被吸收,能量会被减弱,所以没有绝对的光强为1的物体表面,比如,假使一个反射光强为1(错误)的物体表面,向他打纯红色的光,他是不会变为红色的,因为纯光强为1编码为RGB格式为(1,1,1),而纯红色的光为(1,0,0)所以不会为红色,所以这个是错误的,自然界中,无论我们看着多白的物体,打上红光也变红,这就是能量守恒定律,自然界的反射光强的最大极值为1/π,这也解释了为什么一些基于物理漫反射模型会除以π的原因了。
游戏中基于物理的渲染能够更好在HDR高动态范围图像中会有更真实的效果。

Oren-Nayar漫反射模型

Lambert过于均匀不能表现材质的粗糙度,比如灰尘,粘土,衣服等等高度回射的材质,回射是物体表面粗糙,存在一定数量的反射光指向光源,Oren-Nayar能更好的实现这种回射效果,显得更为平坦,尤其是实现与光线方向相同的时候。
博主之前看过风之旅者的ppt,他们就是用Oren-Nayar模型来实现松散沙子的漫反射的,效果真实可信
Oren-Nayar模拟的粗糙的小面非常小,屏幕上一个像素包括大量的方向不同的小面在一起,而对于Lambert只包含一个面
对于模型的粗糙程度,描述这些小平面的方向作为一个平均值为0的随机高斯分布。根据这个,可以用一个标准差来度量表面的粗糙程度,标准差越高说明这些小平面的方向越各自不同,表面就越粗糙。我们把这个控制粗糙度的变量设为σ。
公式如下:
 

实现结果:

Minnaert模型

作者说实现效果像天鹅绒,博主感觉。。。参数调大一点直接像高光了好不好。。。总之博主认为效果不好。。。
Minnaert模型意图沿着边缘发射“黑光”,使得结果非常像天鹅绒(才不像。。。)
公式如下:
 
实现结果:

镜面反射模型

镜面反射与漫反射并不相同,漫反射是向所有方向反射,而镜面反射只向镜面方向反射,
 

ward反射模型

ward反射模型比phong更加物理精确。
它含有各向同性各向异性两种模型
各向同性:
sigma变量用来控制粗糙度
 
实现结果:

各向异性:
两个变量代表水平、垂直两个正交方向的粗糙度
 
其实他这个公式的eta方位角听不清楚的,没给明tangent怎么求,博主又找了些资料遂实现之:

结果如下:

视觉化的结果如下,左侧为各项同性的高光,右侧为各向异性的高光,各向异性这种不规则的形状说明反射更倾向于给定的方向
 

schlick模型

schlick模型相比于phong模型计算消耗要少一些,免去了指数运算,但是效果相对phong有差别
公式如下:
 

实现结果:

Cook-Torrance模型

Cook-Torrance模型基于Torrance和Sparrow致力于建立一个BRDF来模拟金属镜面反射

基本原理是假设物体表面是由无数不同方向的绝对光滑的小微面组成,存在几何对光照的影响,比如凹凸产生的投影以及对光线的阻挡。
模型也含有菲涅尔项在不同角度的入射光线的反射光线的数量。完整的基本公式如下:
 
有三个重要的项F,D,G来控制不同的效果。D控制粗糙度,G为几何项,控制小微面相互之间的阴影和遮挡,从而决定镜面反射光数量

G项

公式:


G项没有什么额外的依赖物理属性的参数来控制效果变化

F项

F项为菲涅尔项,决定从小微面反射光线的数量并且控制物体视觉的的金属性程度。
公式如下:
 
菲涅尔有时依赖波长来产生丰富的效果。

D项

D项为法线分布项,用来控制小微面的斜率从而决定表面粗糙度。D项有很多种模型来实现比如blinn,Beckmann,并且未来还会研究出更多种D模型,具体可以看这篇文章:

Unity3d 基于物理渲染Physically-Based Rendering之specular BRDF

本书讲了两种方法
Beckmann:
 

和另一种基于高斯分布的Blinn,Blinn计算起来消耗更小:
 

全部结合起来实现结果是这样的:

近期更新下一章

博主近期渲染:

2016的渲染

2015后半段的渲染

---- by wolf96   http://blog.csdn.net/wolf96

进阶光照与材质之光照和反射模型相关推荐

  1. Q118:PBRT-V3材质及其对应的反射模型(笔记)

    Matte材质及其对应的反射模型: 设置材质和反射模型是在材质对象的ComputeScatteringFunctions()成员方法中. 下方是Matte材质的ComputeScatteringFun ...

  2. 【Visual C++】游戏开发笔记四十 浅墨DirectX教程之八 绘制真实质感的三维世界:光照与材质专场...

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 作者:毛星云(浅墨)    邮箱: happylifemxy@163.com 本篇文章里,我们对Direct3D之中固定功能流水线中的3D ...

  3. 【Visual C++】游戏开发笔记四十 浅墨DirectX教程之八 绘制真实质感的三维世界 光照与材质专场

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

  4. Q85:对比“直接光照”和“间接光照”的反射模型

    这里只是罗列"直接光照"和"间接光照"的反射模型的示意图.这一章节的作用主要是:联系之前学过的反射模型(漫反射模型.高光反射模型)和接下来将要学习的反射模型. ...

  5. Direct 3D学习笔记(三)——光照与材质

    Direct 3D学习笔记(三)--光照与材质 现实世界中物体的颜色是一个复杂的系统,物体在不同的光照下,可能呈现在我们面前的就是不同的颜色.根据物理中的光学知识,物体在各种环境光照下,根据物体自身特 ...

  6. URP——着色器和材质——烘焙光照 Baked Lit

    Baked Lit Shader 在通用渲染管道(URP)中,对于只需要通过光照贴图和光照探测烘烤的游戏或应用程序使用此着色器.这个着色器不使用基于物理的阴影和没有实时照明,所以所有实时相关的着色器关 ...

  7. Unity3D Shader编程】之二 雪山飞狐篇:Unity的基本Shader框架写法颜色、光照与材质

    本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40955607 作者:毛星云(浅墨) ...

  8. 【转】光照、材质、纹理的关系

    光照.材质.纹理的关系? 它们的关系的确不好描述. 1.材质与纹理: 1)         纹理?纹理是这个物体具体的表现形状.通过贴图反映,你可以认为它是物体的本来颜色或图案(或外在属性).所以,光 ...

  9. 使用预计算实时全局光照优化照明-微调光照贴图参数

    本文地址:https://blog.csdn.net/t163361/article/details/124107784 翻译说明: 教程翻译主要用谷歌翻译后,对特别不通顺的地方进行了微调.同时针对一 ...

最新文章

  1. 前、后端分离权限控制设计和实现思路
  2. 装机必备工具(普通家庭版)
  3. 研究人员发现利用Excel宏可发起跳板攻击
  4. 求二叉树的深度和宽度
  5. 优雅的读懂支持向量机 SVM 算法
  6. 飞鸽传书文件传输实现原理
  7. JavaScript 代码判断:PC端和手机端
  8. Spring Cloud微服务之Mybatis-Plus代码生成器整合(四)
  9. 力扣133. 克隆图
  10. 测试工具|(本来不想分享的)安卓系统Ping IP工具
  11. 互联网协议以及网络分层
  12. 世链投研|链游操作指南之MIR4
  13. validation参数检验 - 注解介绍
  14. 全链路监控及普罗米修斯学习
  15. 央行发布2020年规章制定计划 涉及个人金融信息保护、征信业务
  16. win7 64位 纯净版旗舰版202104
  17. flex 的图片浏览
  18. L0 图片汇总(方便回顾)
  19. 中国海洋大学计算机考研怎么样,中国海洋大学考研难吗?一般要什么水平才可以进入?...
  20. 汉化MapGuide

热门文章

  1. 如何选择适合自己的自媒体平台?
  2. REDIS上如何批量删除KEY?
  3. 手把手教会OpenGL之纹理贴图、包含纹理载入、纹理过滤、边界处理、纹理参数设置(入门级别案例,棋盘)
  4. java 采集新闻数据
  5. 【手绘漫画】图解LeetCode之相交链表(LeetCode 160)
  6. Elixir-Pattern matching
  7. 数据库进阶,数据库的索引,事物与存储引擎
  8. 前端_什么是页面重构
  9. 使用ICSharpCode.SharpZipLib对文件进行压缩或解压
  10. 马蜂窝用户内容贡献能力模型构建