PBR渲染(二)——PBR皮肤渲染

article/2025/9/17 6:26:36

PBR皮肤渲染

在PBR基础框架的基础上实现皮肤的渲染,要根据皮肤的渲染特性来对基础框架进行扩充和修改,从而实现真实感的PBR皮肤渲染。皮肤一般具有以下渲染特性:

1.次表面散射(SSS)
2.BRDF高光(Specular BRDF)
3.细节贴图(Detail Normal:脸部法线一般只包含宏观褶皱,皮肤的微观毛孔肌理可通过一张Tilling的细节法线来表现)
4.粗糙度Roughness
6.环境光遮挡AO
7.清漆涂层(ClearCoat)

1.次表面散射(SSS)

使用预先积分次表面散射(Pre-Integrated Skin )的方法来实现。这种方法用来模拟Diffusion Profiles:
1.采用预积分的LUT来模拟Diffusion Profiles
请添加图片描述

  • 首先对要对LUT贴图进行采样,采样的UV是(NOL,Curvature),分别是NdotL的值和曲率,然后将采样结果替换掉漫反射中的光照强度NOL。

  • 而对于曲率值则可以使用下面的函数计算得出,函数是通过求导的方式计算出曲率。
    请添加图片描述

  • 这种方法得到的次表面散射效果还是比较生硬,接下来对其进行柔化。

2.使用三种不同模糊程度的法线图分别计算R、G、B三种波长的漫反射光照,进一步模拟Diffusion Profiles

  • 使用三种不同模糊程度的法线对LUT进行三次采样,再进行混合,得到最终的次表面散射结果请添加图片描述
  • 通过修改原法线图的mipmap层级来得到R通道的法线图,另外两个通道法线由R通道法线和原法线插值得到,然后再使用三个通道的法线对LUT进行三次采样并混合。

2.BRDF高光(Specular BRDF)

  • 对于皮肤的渲染,首先将原PBR框架的金属度移除,BRDF高光项的SpecularColor直接由Specular Map传入
  • 然后实现直接光BRDF双层高光(DualSpecularGGX),使用两层粗糙度计算两层Alpha2值,并在D项中利用插值因子进行混合,再使用平均粗糙度计算出平均Alpha2值用于V项计算,这一步是直接光双层高光实现。
  • 然后是间接光双层高光。同样是传入两层粗糙度参数,分别计算一次IBL高光,并使用插值因子进行混合。

3.环境光遮蔽AO

  • 开启URP的SSAO,并在Shader中进行采样请添加图片描述
  • 之后和烘培AO混合一起传入光照函数计算。

4.表面阴影柔化(Trick)

  • 在处理完高光之后发现皮肤表面的阴影还是十分生硬,并不像我们的SSS次表面散射效果那样柔和,下面进行修改。
  • 这里的解决方案是先将阴影Shadow值提亮一点,然后利用shadow值在颜色值half3(0.11,0.025,0.012)之间进行插值,从而为阴影着色,使其和暗部的颜色相近,柔和。

5.阴影区域环境光弱化(Trick)

  • 旋转光照方向,当面部完全处于阴影时,我们会发现,即使完全处于暗部,环境光仍然很亮,因为间接光照和直接光并没有直接联系,所以在旋转直接光时环境光并不会受到影响。
  • 解决方案是将阴影Shadow值算入AO,但是这样会将环境光直接覆盖掉,所以将主光源Shadow的最小值限制到一个值(0.35),这样环境光就会达到一个比较合适的效果。

6.细节贴图

  • Detail Normal:脸部法线一般只包含宏观褶皱,皮肤的微观毛孔肌理可通过一张Tilling的细节法线来表现
  • 同样的Detail Normal也要进行一个模糊处理,然后通过一张Detail Mask将Detail Normal和Normal混合,再进行后续的SSS计算。
  • 对于这张Detail Mask主要是用来控制有些部位需要细节贴图,而有些部位则只需要普通Normal。

7.清漆涂层(ClearCoat)

请添加图片描述

  • 当材质表面覆盖一层透明清漆涂料时,光线会先在清漆表面发生镜面反射,然后剩下的光线穿过清漆层在材质表面发生漫反射和镜面反射。根据这个原理在Shader中计算并进行混合。清漆效果和之前的双层高光的区别就是光线穿过清漆层会有能量衰减,在计算时要将能量守恒考虑进去。
  • 再计算一层BRDF高光,作为清漆层的镜面反射。传入清漆层自身的SpecularColor和法线,设置清漆反射强度ClearCoat乘入SpecularGGX的F项,F项用来控制材质的菲尼尔反射,将ClearCoat乘入F项就可以控制清漆层反射强度。
  • 上面一个步骤只是叠加了一层清漆层的镜面高光,而对于表面材质并没有计算清漆层的能量损耗。首先来计算直接光能量损耗,清漆层的ClearCoatGGX的F项即可作为清漆层的能量消耗,因为F项菲涅尔反射代表了反射率。之后就可以使用这个能量损耗值去加入表面材质的漫反射和镜面反射光照计算。
  • 上面是直接光清漆效果的计算,环境光的清漆效果计算只有一点点不同,思路是一样的。首先用于环境光采样的反射光线R需要用ClearCoatNormal重新计算,之后是NoV,然后就可以计算SpecularIBL高光。间接光清漆反射强度ClearCoat乘入AO来控制反射强度,能量损耗用上面直接光的F项计算。最后就是用能量损耗值来计算材质表面的间接光漫反射和镜面反射。

http://chatgpt.dhexx.cn/article/W6eU6Wv4.shtml

相关文章

PBR 基础知识干货总结

(1)什么是PBR? 基于物理的渲染过程。 PBR是一种着色和渲染技术,用于更精确的描述光如何与物体表面互动。 PBR的优势: (1)方法论和算法基于精确的计算公式,免除创作表面的猜想过程。 …

PBR与Blinnphong解读

我们做光栅化模式的渲染都了解有两种比较常用的渲染方式,一个是blinnphong的渲染,一个是pbr的渲染。 blinnphong: blinnphong的渲染模式更多的是一种经验值模拟光照对物体的效果。所以他不是一个正确的能量守恒的渲染方式。 blinnphong的渲…

【基于物理的渲染(PBR)白皮书】(一) 开篇:PBR核心知识体系总结与概览

本文由浅墨_毛星云 出品,首发于知乎专栏,转载请注明出处 文章链接: https://zhuanlan.zhihu.com/p/53086060 先放出PBR知识体系的架构图: 图很大,建议下载到本地放大查看。原图下载地址: https://raw.gi…

什么是PBR?

一、什么是PBR? 基于物理渲染以前的渲染是在模仿灯光的外观现在是在模仿光的实际行为试图形看起来更真实 二、PBR组成部分 灯光属性:直接照明、间接照明、直接高光、间接高光、阴影、环境光闭塞表面属性:基础色、法线、高光、粗糙度、金属度…

PBR流程介绍和模型规范

(1)基本流程: (1)制作中模: 基础模型: 指的是中模!! 中模导出为.obj 格式(跟.fbx格式相比:不会出现模型大小的缩放) 高模&#xff1a…

PBR材质:基本原理和简单制作

概要:介绍PBR材质的基本原理以及制作一个简单的PBR材质 参考资料:BASIC THEORY OF PHYSICALLY-BASED RENDERING 如有问题,多多指正。 侵删。 1.PBR是什么,光线的基本原理。 PBR即Physically-based rendering,基于物理…

什么是PBR?pbr入门基础干货

(1)什么是PBR? 基于物理的渲染过程。 PBR是一种着色和渲染技术,用于更精确的描述光如何与物体表面互动。 PBR的优势: (1)方法论和算法基于精确的计算公式,免除创作表面的猜想过程…

PBR——概述、基于物理的材质

PBR概述 PBR,即Physically Based Rendering,主要分为基于物理的材质、基于物理的光照和基于物理的相机三个部分,目前来说对大家最为所熟知的是基于物理的材质部分。本文围绕基于物理的材质进行相关介绍。 什么是PBR 其实最早听说PBR这玩意…

PBR基础理论通俗解释

PBR基础理论通俗解释 今天给大家介绍PBR的基础理论, 不会涉及比较深的具体算法, 算是一篇扫盲的文章, 尽量尝试说人话, 让大家能够对PBR有基本的了解. 什么是PBR? PBR是基于物理的渲染(Physically Based Rendering), 也就是说通过模拟物理世界的方式来渲染. 既然有基于物理…

基于物理的渲染PBR(一):pbr的基础理论和推导

初始PBR 最近刚接触pbr不久,我搜寻了许多文章进行阅读并了解后发现,pbr涉及到的知识点繁琐且不容易理解,所以想在博客上给自己记录并总结一下,方便以后回顾并加深记忆。 这里首先借用知乎上的大佬毛星云关于pbr所涉及到的知识要…

策略路由(PBR)

1、基本概念 PBR (Policy-Based Routing,策略路由): PBR使得网络设备不仅能够基于报文的目的IP地址进行数据转发,更能基于其他元素进行数据转发,例如源IP地址、源MAc地址、目的MAc地址、源端口号、目的端口号、VLAN-ID等等。 用户还可以使用A…

技术美术知识学习_04:PBR的个人理解

一、什么是PBR? PBR(Physically Based Rendering),中文翻译为基于物理的渲染。 PBR是一种渲染方式,是使用基于物理原理和微平面理论的光照模型,以及使用从现实中测量的表面参数来准确表示真实世界材质的渲…

图灵直播|《第一行代码》作者郭霖在线Coding,今晚八点,给你留位!

图源来自Pexels “我们为什么需要 Kotlin?答:消失的 Getter 和 Setter、又见空指针、Smart Cast、打日志、再见Utils、晚安ButterKnife……” 相信很多人初识Kotlin,都是基于谷歌技术大牛 Steve Yegge的一篇文章《为什么说 Kotlin 比你们用的…

撸了郭霖大神写的Framework源码笔记,offer拿到手软

前不久听我一个字节的朋友说了一个神转折的故事。 一名大专生,异常执着地向他们公司投简历,屡战屡败,屡败屡战,前前后后向字节跳动投了九次简历。 你猜后面怎么着?还真让他成功了,第九次居然拿到了offer! 看到这里,不过是一个普普通通的励志故事吧,一个菜鸡凭借自己…

(郭霖)Android图片加载框架最全解析(一),Glide的基本用法

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/53759439 本文同步发表于我的微信公众号,扫一扫文章底部的二维码或在微信搜索 郭霖 即可关注,每天都有文章更新。 现在Android上的图片加载框架非常成熟,从最早…

图灵专访:郭霖的成长之路

各位小伙伴们大家早上好,最近这段时间我真的是快要忙疯了,好多件事情同时在做,实在抽不出时间写原创文章。 正巧想到前段时间和图灵做了一次专访,记录了一些我的成长经历。这篇专访姑且也可以算是一篇原创吧,因为里面的…

第一行代码-第二版(郭霖著)笔记十一(Material Design)

目录 一、什么是Material Design 二、Toolbar 三、滑动菜单 1.DrawerLayout 2.NavigationView 四、悬浮按钮和可交互提示 1.FloatingActionButton:悬浮按钮 2.Snackbar:提示工具 3.CoordinatorLayout:加强版FrameLayout 五、卡片式…

第一行代码-第二版(郭霖著)笔记二(Activity)

目录 一、Activity的用法 1.Activity 2.Toast 3.菜单 4.销毁一个活动 二、Intent 1.使用显示Intent 2.使用隐式Intent 3.更多隐式Intent的用法 4.向下一个活动传递数据 5.返回数据给上一个活动 三、活动的生命周期 1.返回栈 2.活动的四种状态 3.活动的生存期 4…

android动态权限依赖库,动态申请app权限:郭霖大神的PermissionX库带你告别原生

引言 为什么那么多人想要自定义Android的权限申请PermissonX?因为PermissionX默认的权限提醒弹出实在是太丑了!而且,需要在你需要提醒用户弹出Dialog时,显得捉襟见肘,你可能就在想有没有一款能封装进去Dialog提醒用户,具有超棒的用户体验,还能看起来美观大气的Permissio…

跟随郭霖学Volley

volley 下载导入volleyjar 学习地址: https://blog.csdn.net/guolin_blog/article/details/17482095 2013在Google I/O大会提出 github地址: https://github.com/google/volley 下载volley导入到as 具体的操作是: project模式下 具体看图: 之后的操作是打开lib 选择jar 右…