当前位置: 首页 > news >正文

认识DiffuseAndSpecularFromMetallic和UNITY_BRDF_PBS

首先要明确这个函数的目的是啥?

在学习金属流还是镜面反射流的时候:https://catlikecoding.com/unity/tutorials/rendering/part-4/

下面是金属流的设置情况。
用一个滑动条来金属的程度
在这里插入图片描述

也就是说metalic值越大,那么材质就越金属。理论上:
漫反射系数=1-metailic
镜面反射系数-metallic

但是文中提到,即使是非金属也有一定程度的镜面反射,所以不是1-metallic那么绝对。
另外原因还考虑都收到颜色空间的影响,所以,unity提供了一个DiffuseAndSpecularFromMetallic用来计算漫反射颜色和漫反射系数。

原型如下:

inline half OneMinusReflectivityFromMetallic(half metallic) {
	// We'll need oneMinusReflectivity, so
	//   1-reflectivity = 1-lerp(dielectricSpec, 1, metallic)
	//                  = lerp(1-dielectricSpec, 0, metallic)
	// store (1-dielectricSpec) in unity_ColorSpaceDielectricSpec.a, then
	//	 1-reflectivity = lerp(alpha, 0, metallic)
	//                  = alpha + metallic*(0 - alpha)
	//                  = alpha - metallic * alpha
	half oneMinusDielectricSpec = unity_ColorSpaceDielectricSpec.a;
	return oneMinusDielectricSpec - metallic * oneMinusDielectricSpec;
}

inline half3 DiffuseAndSpecularFromMetallic (half3 albedo, half metallic,out half3 specColor, out half oneMinusReflectivity
) {
	specColor = lerp(unity_ColorSpaceDielectricSpec.rgb, albedo, metallic);
	oneMinusReflectivity = OneMinusReflectivityFromMetallic(metallic);
	return albedo * oneMinusReflectivity;
}

此函数返回的是漫反射颜色,加上两个out其实共计有三个返回值。

然后我们要知道:UNITY_BRDF_PBS

这个函数的目的是解决啥的呢?上面的金属流或者是镜面反射流最终效果,对于非金属材质效果很模糊,所以为了提高表现效果,unity提供了一个基于物体的渲染算法,其更加真实,更加可预测。
具体的可参看:https://catlikecoding.com/unity/tutorials/rendering/part-4/ 第5节的内容。

这里我们只是明确这两个函数存在的目的是啥。

明确unity对于漫反射和镜面反射提供了两种工作流。
其中金属流使用起来更加容易些,因为只需要一个slider就能控制金属程度。
其次,unity为了效果真是提供了DiffuseAndSpecularFromMetallic和UNITY_BRDF_PBS两个函数。

相关文章:

  • 如何将自发光和漫反射添加到烘焙贴图中
  • Qt+QGIS二次开发:QGIS中使用QgsRubberBand类创建临时图形
  • Shadowmask和Distance Shadowmask的区别
  • Angular7_获取异步方法里面的数据
  • maven tomcat jstl 异常
  • maven下载及配置(win7 64位系统)
  • 寒假一:打印沙漏
  • unity depth texture-01
  • LinearEyeDepth和Linear01Depth
  • 打印沙漏
  • SQLAlchemy增删改查 一对多 多对多
  • 体积光,体积雾——链接
  • python 变量搜寻顺序法则LEGB之E注意事项
  • 体积雾
  • Java线程池详解(一)
  • 《剑指offer》分解让复杂问题更简单
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • axios 和 cookie 的那些事
  • ECMAScript6(0):ES6简明参考手册
  • Effective Java 笔记(一)
  • JavaScript设计模式系列一:工厂模式
  • Laravel核心解读--Facades
  • leetcode46 Permutation 排列组合
  • Map集合、散列表、红黑树介绍
  • mysql_config not found
  • open-falcon 开发笔记(一):从零开始搭建虚拟服务器和监测环境
  • Python学习之路13-记分
  • Vue UI框架库开发介绍
  • 基于HAProxy的高性能缓存服务器nuster
  • 漂亮刷新控件-iOS
  • 学习HTTP相关知识笔记
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • #etcd#安装时出错
  • #vue3 实现前端下载excel文件模板功能
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (Mirage系列之二)VMware Horizon Mirage的经典用户用例及真实案例分析
  • (Ruby)Ubuntu12.04安装Rails环境
  • (zt)基于Facebook和Flash平台的应用架构解析
  • (三)c52学习之旅-点亮LED灯
  • (原创)攻击方式学习之(4) - 拒绝服务(DOS/DDOS/DRDOS)
  • .[backups@airmail.cc].faust勒索病毒的最新威胁:如何恢复您的数据?
  • .NET Micro Framework初体验
  • .NET 设计模式初探
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • .net 无限分类
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET国产化改造探索(一)、VMware安装银河麒麟
  • .NET企业级应用架构设计系列之结尾篇
  • @Bean有哪些属性
  • @cacheable 是否缓存成功_让我们来学习学习SpringCache分布式缓存,为什么用?
  • [ solr入门 ] - 利用solrJ进行检索
  • [Angular 基础] - 表单:响应式表单
  • [Angular] 笔记 6:ngStyle