shader 边缘泛光2

来源:互联网 发布:战舰世界岛风f3数据 编辑:程序博客网 时间:2024/04/27 06:19


pass1:

v.vertex.xyz += v.normal * _Outer;
边缘沿着法向量延伸

Pass{blend SrcAlpha OneMinusSrcAlphazwrite offCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"float _Scale;float _Outer;struct v2f{float4 pos:POSITION;float3 normal:TEXCOORD0;float4 vertex:TEXCOORD1;};v2f vert (appdata_base v){v.vertex.xyz += v.normal * _Outer;v2f o;o.pos = mul(UNITY_MATRIX_MVP,v.vertex);o.normal = v.normal;o.vertex = v.vertex;return o;}fixed4 frag (v2f IN) : COLOR{//float3 N = mul(float4(IN.normal,0),_World2Object).xyz;float3 N = normalize(mul(IN.normal,(float3x3)_World2Object));float3 V = normalize(WorldSpaceViewDir(IN.vertex));float bright = saturate(dot(N,V));fixed4 col = fixed4(1,1,1,1);col.a *= pow(bright,_Scale);return col;}ENDCG}

得到:



添加内部纯白

pass2

Pass{zwrite offCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"float _Scale;float _Outer;struct v2f{float4 pos:POSITION;};v2f vert (appdata_base v){v2f o;o.pos = mul(UNITY_MATRIX_MVP,v.vertex);return o;}fixed4 frag (v2f IN) : COLOR{return fixed4(1,1,1,1);}ENDCG}



加上

//上面的颜色减掉现在的颜色
blendop Sub
blend one SrcColor

得到 pass2

//内部的纯白Pass{//上面的颜色减掉现在的颜色blendop Subblend one SrcColorzwrite offCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"float _Scale;float _Outer;struct v2f{float4 pos:POSITION;};v2f vert (appdata_base v){v2f o;o.pos = mul(UNITY_MATRIX_MVP,v.vertex);return o;}fixed4 frag (v2f IN) : COLOR{return fixed4(1,1,1,1);}ENDCG}

加上pass3:

Pass{blend SrcAlpha OneMinusSrcAlphazwrite offCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"float _Scale;struct v2f{float4 pos:POSITION;float3 normal:TEXCOORD0;float4 vertex:TEXCOORD1;};v2f vert (appdata_base v){v2f o;o.pos = mul(UNITY_MATRIX_MVP,v.vertex);o.normal = v.normal;o.vertex = v.vertex;return o;}fixed4 frag (v2f IN) : COLOR{//float3 N = mul(float4(IN.normal,0),_World2Object).xyz;float3 N = normalize(mul(IN.normal,(float3x3)_World2Object));float3 V = normalize(WorldSpaceViewDir(IN.vertex));float bright = 1- saturate(dot(N,V));return fixed4(1,1,1,1)*pow(bright,_Scale);}ENDCG}


0 0
原创粉丝点击