认识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两个函数。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值