钢铁侠Unlit光照Shader,三种效果变化
返回目录
大家好,我是阿赵。这里是制作钢铁侠材质的第一部分,模型发光部分的材质制作。
1、效果分析
这一个部分只是处理眼睛、胸口、手掌的发光部位,为了能单独控制这些部分,所以在制造模型的时候,需要给这些部位的网格指定Channel为2,这样,在使用多维子材质的时候,就可以单独为这些发光的shader指定一个材质球。
其实多维子材质在我平常在游戏引擎里面是比较的不喜欢用的,因为一个模型用了多个材质球,本身就是多个pass。但针对这个例子本身来说,钢铁侠的身体材质本身会比较复杂,而发光的部位本身会比较的单纯,如果分开来计算,对性能反而是有帮助的。
在做了通道指定之后,在导入引擎使用时,就可以指定2个材质球了,第一个材质球是身体部分的,第二个材质球是发光部分的。
2、完整shader
Shader "azhao/IronManLightCode"
{Properties{[HDR]_lightCol("lightCol", Color) = (1,1,1,0)}SubShader{Tags { "RenderType"="Opaque" }LOD 100Pass{CGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"struct appdata{float4 vertex : POSITION;};struct v2f{float4 vertex : SV_POSITION;};float4 _lightCol;v2f vert (appdata v){v2f o;o.vertex = UnityObjectToClipPos(v.vertex);return o;}fixed4 frag (v2f i) : SV_Target{fixed4 col = _lightCol;return col;}ENDCG}}
}
3、说明
可以看出,上面的shader非常的简单,只是指定了一个lightCol作为灯光的颜色而已。
需要注意的是,这里的颜色定义使用了HDR
[HDR]_lightCol("lightCol", Color) = (1,1,1,0)
具体什么是HDR颜色,各位可以自己去搜一下。我简单说明就是,平常我们使用的颜色都是LDR,L指Low,它的颜色强度取值范围都是0-1的,而HDR的H指的是High,它的颜色强度取值范围是可以超过1的。
不过单纯是设置了HDR颜色之后,会发现模型也没有发光
然后我们再添加一个Bloom屏幕后处理:
可以看到现在是已经发光了。
在旧版本的Unity屏幕后处理,并没有支持HDR效果,所以旧版本的Bloom只是单纯的模糊再叠加,所以是越接近白色的地方越亮。
Unity新的Post-process后处理系统支持了HDR效果之后,就变成了根据HDR颜色来做辉光效果,就算是白色,但如果HDR强度小于等于0时,也不会发光。
知道了这个规则之后,我们就可以调整HDR颜色,做出不同的发光效果。