粗糙表面的微表面模型——Physically Based Material

关于文章 Microfacet Models for Refraction through Rough Sufaces的一点笔记,欢迎指正。

BSDF

BSDF(Bidirectional Sacttering Distribution Function) 描述了光如何在物体表面散射。如果仅仅限制反射或者透射,BSDF经常被称作BRDF或者BTDF,然而BSDF将是BRDF,fs,BTDF,ft 项的综合作用。

微表面法线分布函数 D(m)

给定一个以m为中心的无穷小的立体角dwm和一个宏观表面积dA,D(m)dwm就是在wm 方向上微观表面投影在宏观表面上的面积比例。D是密度函数,单位是1/steradians,有着一下性质:

可以结合此图理解
1.
在这里插入图片描述

2.总的微表面面积至少和宏观面积一样大
在这里插入图片描述
这里个人的理解是,D本身就是投影过的函数 (隐藏着一个cos 项,即从微观表面投影到宏观表面的投影项),所以在wm 的方向上的投影的面积至少和原先定义宏观面积dA一样大

3.在任何方向v上的微表面的投影是和宏观表面上的投影是一样的
在这里插入图片描述

4.当v=n的时候

Shadowing-Masking函数 G

G(i,o,m) 描述了在法线方向m,从入射方向i,和出射方向o之间的可见度, 是对微表面的细节描写,

G(i,o,m)有着一下特性:

5.约束在[0,1]之间

6. i, o方向都可见的话,则G是对称的

7.如果入射方向 i 或者出射方向 o 是在微表面的背面,则G = 0

整合BSDF


我们需要应用一个修正因子在入射微表面的irradiance和离开微表面的散射的radiance根据投影的面积测量。

接下来着重解释 fsm(i,o,m) 的含义

p代表从入射方向进入的能量

是Dirac delta函数, 在数学定义上是广义的函数。他们总是有着一个自己的度量值,例如在o方向的立体角dwo ,并且值由他们的积分来决定。
在这里插入图片描述
这里的g(o) 是任何函数。
在方程8中我们想要表达微表面法线和相关立体角之间的关系。假定对于任何的入射和出射方向,最多有一个微表面能够把能量从 i 散射到 o .为了计算方便,我们引入半程向量的概念,即 i 和 o 的法线方向 h(i,o), 用 h 和 微表面法线 m 来代替 i, o 。但由于Dirac增量函数是根据一个积分定义的,所以相当于积分换元。由此方程9可以写成:

在这里插入图片描述
我们再此定义Jacobian
在这里插入图片描述
由于 fs m(i,o,m) = fr m(i,o,m) + ft m(i,o,m);
对于frm(i,o,m) 理想反射,我们有如下定义:
在这里插入图片描述
在这里插入图片描述
对于理想反射使用Fresnel factor F代表能量有多少被传递
把14式带入11式可得:
在这里插入图片描述
对于理想折射 ftm 来说 由于折射发生在表面两边 由此定义折射率ni no, 由于在两种不同的介质中,入射方向和出射方向会发生改变。Snell 定律可由半程向量ht 表达 由此可知:
在这里插入图片描述
在这里插入图片描述
对于Jacobian来说 由上图可知
在这里插入图片描述
将17式带入11式中: 由于总能量被折射和反射,那么对于折射的能量将是 1 - F(i,m):
在这里插入图片描述
将frm 和ft m带替 fsm即可得最终式。

对于F D G的选择

对于F(i,m) 的选择,这里给出相应公式
在这里插入图片描述
是不是感觉异常的复杂,这里再给出一种近似:Schlick近似
在这里插入图片描述
这个就相当简单了

对于G(i,o,m) 我们使用Smith近似,Smith近似假设入射和出射的可见度不相互影响即可以近似为
在这里插入图片描述
即从入射方向看向着色点和出射发向看向出射点的可见性。

对于法线分布,我们使用如下法线采样函数:
在这里插入图片描述

由于对于不同 的NDF(normal distribution function)来说 对应的采样函数和G(i,o,m)是不同的
所以这里仅介绍 (以下都是法线分布函数)
Beckmann Distribution
在这里插入图片描述
a即粗糙程度
相对应的G项
在这里插入图片描述

在这里插入图片描述

Phong Distribution

这里定义:

对于Smith G1 对于Phong模型没有解析的解,但由于Phong模型和Beckmann分布是非常相似的,Smith是依赖于NDF的,所以使用
来带入27式,以便估计G项。
采样函数:

GGX Distribution(又名Trowbridge-Reitz 简称TR)

GGX又有tail函数之称,原因请看稍后的图像。

对于三种分布函数的图像化:

红线但又泛着蓝色的是Backmann和Phong的分布,绿线代表GGX函数从图中可以看见对于GGX而言在20多度的时候,下降缓慢,但不为0,这就是长尾巴的含义,同时也有着良好的性质。

同理红线代表Backmann和Phong,绿线代表GGX, 入射方向基本和法线方向相同时,G项为1,不产生作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/246304.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GPU Gems1 - 14 透视阴影贴图(Perspective Shadow Maps: Care and Feeding)

开篇先说,这文章好难懂啊,到现在也没完全弄明白,有大佬的话欢迎指点。这篇大体意思是对Perspective Shadow Maps进行部分优化。GEMS这书这点是真挺蛋疼,很多文章都是对某项技术的优化,那先介绍介绍原来技术嘛&#xff…

GPU Gems1 - 15 逐像素光照的可见性管理

这章讲到了可见性在逐像素渲染光照场景中的作用,也考虑如何使用可见性减少必须渲染的批次数量,从而改善性能。 假设一个非常简单的场景,一个房间,因为房间的不同部位是不同的材质,所以将其分为8个batch,另…

重建世界坐标

1.概论 在屏幕空间做一些操作的时候往往需要从屏幕坐标和深度纹理中重建出相应的世界坐标。 本文会讨论两种重建世界坐标的方法,并详细讲解第二种方法。 使用VP逆矩阵CameraPosInWorld linearDepth * Direction 2.使用VP逆矩阵法 我们知道屏幕坐标是通过Object…

GPU Gems1 - 16 次表面散射的实时近似(Real-Time Approximations to Subsurface Scattering)

这一章,浅墨这篇文章介绍的非常详细,我照扒一遍再稍加一些内容,增加记忆。https://zhuanlan.zhihu.com/p/36499291 【章节概览】 次表面散射(Subsurface Scattering),简称SSS,或3S&#xff0c…

Unity HDRP渲染管线基础指南

HDRP和LWRP简介 Unity2018中引入了可编程渲染管线(Scriptable Render Pipeline,简称SRP),是一种在Unity中通过C#脚本配置和执行渲染的方式。至2018.1版本,Unity中除了默认渲染管线,还提供了轻量级渲染管线…

SSDO AO 图像空间的动态全局光照

本文仅记述SSDO学习笔记! 概述 SSDO Screen-space Direction Occlusion 是对AO的扩充,在AO的基础上,假设没有遮蔽的方向有直接入射光,有遮蔽的方向,可能有间接光的反射。 SSAO理论分析 AO:在计算点的周围…

GPU Gems1 - 17 环境遮挡

环境光遮蔽(Ambient Occlusion)“AO”为Amblent Occlusion的缩写,中文译为环境光遮蔽。在DirectX 10.1 API推出后,Amblent Occlusion升级为SSAO(Screen-Space Ambient Occlusion:屏幕空间环境光遮蔽)&#…

GPU Gems1 - 18 空间BRDF(Spatial BRDFs)

这章主要介绍了空间双向反射分布函数(SBRDF),接着文章讨论了压缩SBRDF表达式,以及由离散光或环境贴图所照明的SBRDF的渲染方法。关于BRDF请参考大佬浅墨的这篇文章https://blog.csdn.net/poem_qianmo/article/details/75943714 S…

浅谈表面反射——波动光学篇

Radiometric Definitions 首先让我们来回忆一下辐射度量学中关于irradiance和radiance的定义: 我们在这里定义光源(source)在x-z平面,因此入射光就可以只用θi\theta_{i}θi​来描述。dAs\mathrm{d}A_{s}dAs​是表面积。定义dΦi\mathrm{d}\Phi_{i}dΦ…

GPU Gems1 - 19 基于图像的光照(Image-Based Lighting)

这篇文章打破了当时立方体贴图环境(Cube-Map Environment)用法的桎梏,深入研究了更多可能的逼真光照效果。文章主要研究了基于图像的光照(Image-Based Lighting,IBL),包括局部化的立方体映射&am…

Polygonal-Light Shading with LTC

概述 如果我们有一个上半球的余弦分布函数(Do)(D_{o})(Do​),并对这个余弦分布函数进行一个矩阵(M)(M)(M)变换,变换为一个新的分布函数(D)(D)(D)。 DMDoD M D_{o}DMDo​ 这就是基本思想:用一个余弦分布函数来拟合出不同的分布函数&#xff…

GPU Gems1 - 20 纹理爆炸(Texture Bombing)

【章节概览】 这章介绍了纹理爆炸(Texture Bombing)和相关的细胞技术,它们能在Shader中增加视觉的丰富性,图像的多样性,并减少大块纹理图案的重复性。 【核心要点】 纹理爆炸(Texture bombing&#xff0…

Catlike Coding网站文章解析 -- 1.Procedural Grid

原文英文版链接https://catlikecoding.com/unity/tutorials/procedural-grid/,里面有每一部分的untiy工程链接,文章内容也更详实。 本章内容: 创建一系列点使用协程实现他们的摆放位置定义一个由三角形组成的平面自动生成法线添加纹理坐标和…

GPU Gems1 - 21 实时辉光(Real-Time Glow)

这章浅墨的文章讲的很细了,这里基本照扒一遍加深印象,原文链接:https://zhuanlan.zhihu.com/p/36499291 【章节概览】 这章讲到2D光照效果中的辉光(Glow)和光晕(Halo),展示了如何通…

Catlike Coding网站文章解析 -- 2.Procedural Grid

本章内容 创建一个闭合的cube mesh给cube添加带弧度平滑的边缘定义法线使用sub-meshes(子mesh)创建一个常规shader合并碰撞体1.合成一个cube 上一章https://mp.csdn.net/postedit/89474068我们已经实现了一个平面mesh。一个cube由6个平面组成&#xff…

GPU Gems1 - 23 景深技术综述

本章主要介绍如何使用GPU创建实时的景深(Depth of Field)效果。参考浅墨总结文章的链接https://zhuanlan.zhihu.com/p/36499291 聚焦在枪上,背景模糊【核心要点】 物体在距离镜头的一个范围之内能够清晰成像(经过聚焦&#xff09…

GPU Gems1 - 22 颜色控制(Color Controls)

这章将在游戏中图像处理的讨论,扩展到技术和艺术上控制颜色的方法和应用,包括将图像从一些的色彩空间中移入移出,以及快速地给任何2D或3D场景加上精美的色调。 色彩校正(Color Correction)是几乎所有印刷和胶片成像应…

GPU Gems1 - 25 用纹理贴图进行快速过滤宽度的计算

这章介绍在片元shader中计算导数近似值的技术。这个技术把特别的值载入纹理mipmap的每个级别,以特殊的方式使用纹理映射硬件,计算出导数的结果,给出在屏幕上的像素间某个量的变化率。 Cg标准程序库提供ddx和ddy函数,计算任意关于…

GPU Gems1 - 24 高质量的过滤

在一些应用中,高质量的过滤是至关重要的,可以用像素shader代码执行任何过滤。GPU着色程序不用于CPU的主要之处在于:一般来说,CPU数学操作比纹理访问更快,而在GPU中恰恰相反。图像过滤的目的很简单:对于给你…

GPU Gems1 - 26 OpenEXR图像文件格式与HDR(The OpenEXR Image File Format and HDR)

【章节概览】 这章中,大名鼎鼎的工业光魔公司的Florian Kainz、Rod Bogart和DrweHess介绍了OpenEXR标准,这是一种当时新的高动态范围图像(HDRI)格式,在计算机成像的顶级电影中正在快速推广。对于基于图像照明的开发者…