关于手撸PBR Shader效果
又一个星期过去了,毫无进展
之前也因为
目标还是那个目标
在官方的Standard PBR基础上做自己的渲染框架,既可以利用其现有跨平台和多版本验证特性,又可以保证后续扩展能跟上
之前难点有二,一是必须精通PBR,二是Surface Shader
还有很多不那么难的点,高质量素材的获取,Editor扩展开发,熟悉UnityEngine基础类Material,Shader等
其他的难点先不说,光是上面最难的2点
之前也做了一些调整,目标变成
Surface + Built-in Shader + Some Code
不过,这个星期,来到星期5,光花费了5天,最后发现Surface还是太坑
最后,还得改成VF Shader
不要问为什么,问就是代码调整
而Shader并不是一门高级编程语言,也并没有什么工具,而其产出又极其遵循“能显示即合理"
并没有什么好的方法做代码调整(Unity Shader带偏,这也是我之前为什么老吐槽,我也肉身踩坑,再次证明踩不过)
我又得完整,重新,从头学习Unity Standard,所以资源很重要,信息对称也很重要
最简单的积水效果
(其实还没积水)
原来是什么?不要问,问就是经验
//只在基于BRDF有用,要不会过曝
void DoWetShading(inout float3 albedo, inout float gloss, float wetLevel) {
// 越潮湿,地面越暗
albedo *= lerp(1.0,0.3, wetLevel);
//越潮湿,gloss越大,镜面反射更明亮,高光凝聚度更高。
gloss = min(gloss * lerp(1.0,2.5,wetLevel),1.0);
}
从B站那里不长的1个视频里面的一个很小的片段学到的
简单的Albedo贴图,加上法线贴图
只要金属拉到0.8,smoothness == 0.6
拉出金属感,也就有了油腻腻的感觉,就算雪山也很可以很油腻
(至于metric, smoothness,和smoothness_factor的干系,我前面的博客也解(tu)释(cao)了为什么Unity绕这么多圈)
线性空间和Gamma空间有差吗
上图是线性空间的
也已经很初步的做到,明暗合理,我们看看线性如何
单单从这个这个图,和摄像一样,没什么差别
线性空间,由于最新,免除了以前显示器零件不够先进,现在不需要代码增量了,所以默认会亮一点
线性空间对于Gamma空间更多的是影响颜色的明度
关于颜色,关于“亮度”,上面这个图看不出什么效果
如果你真觉得有差的,自己去眼科医院挂个号验眼睛
(当然,比较两者根本没有任何意义,我不是针对网上的某一个媒体,,,,,)
对于想用官方Unity Shader的你,也只能用线性空间
没得选择,再者官方也只给你2个选择,有给你第三个选择的Custom选项吗??
可以自己想想为什么
不要问叔叔怎么知道的
Metallic和Specular Setup有差吗
其实要搞清楚这个问题不难,多研究下内核(看书,除了乐乐姐,甚至官方的例子都不好看;自己看代码,官方就是不让你好看)
相当于白盒,就是得多花点时间,
而我们不想花时间,也不想鸟他官方这坨Shi
只能用黑盒了,盲测
上图是Metallic,我们看看Specular Setup如何
个人的感受:虽然官方说2个XXX工作流,但用程序员的膝盖想下就知道, 光照算法,和颜色算法你,都重用同一个算法,所以不用期待会有变化;唯一不同就是,整体表面没那么黑(还是一大片雪地才能看出),要是一个小盾牌有用吗?实在理解不了Unity官方人员的“用心";就是少了Metallic(我前面博客说了,就是smoothness_factor)参数, 表面没那么金属,没那么”吸光“,所以整体表面显得没那么黑;有一说一,Unity Standard是PBR的,是基于物理的,只是太恶心人而已。