您的位置:首页 > 其它

Fragment shader---片段级模型动态变色1

2018-01-07 05:56 183 查看
1、在顶点中设置颜色

Shader "Custom/s_f_color" {
Properties {
_MainColor ("_MainColor", Color) = (1,1,1,1)
_SecondColor("SecondColor",color)=(1,1,1,1)
}
SubShader{
pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"

float4 _MainColor;
float4 _SecondColor;

struct v2f {
float4 pos:POSITION;
float4 col:COLOR;
};

v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);

if (v.vertex.y < 0)
o.col = _MainColor;
else
o.col = _SecondColor;

return o;
}

fixed4 frag(v2f IN) :COLOR{
return IN.col;
}
ENDCG
}
}
}


分别设置maincolor和secondcolor的颜色为红色和黄色,且颜色进行了融合



2、将颜色代码写在片段程序当中

Shader "Custom/s_f_color" {
Properties {
_MainColor ("_MainColor", Color) = (1,1,1,1)
_SecondColor("SecondColor",color)=(1,1,1,1)
}
SubShader{
pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"

float4 _MainColor;
float4 _SecondColor;

struct v2f {
float4 pos:POSITION;
float y:COLOR;
};

v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
o.y = v.vertex.y;
return o;
}

fixed4 frag(v2f IN) :COLOR{
if (IN.y <0)
return _MainColor;
else
return _SecondColor;
}
ENDCG
}
}
}


颜色明显进行了分层,片段级对像素进行了很细致的区分



3、将分割点做成一个变量

Shader "Custom/s_f_color" {
Properties {
_MainColor ("_MainColor", Color) = (1,1,1,1)
_SecondColor("SecondColor",color)=(1,1,1,1)
_Center("Center",range(-0.5,0.5))=0
}
SubShader{
pass {
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "unitycg.cginc"

float4 _MainColor;
float4 _SecondColor;
float _Center;

struct v2f {
float4 pos:POSITION;
float y:TEXTCOORD0;
};

v2f vert(appdata_base v) {
v2f o;
o.pos = mul(UNITY_MATRIX_MVP,v.vertex);
o.y = v.vertex.y;
return o;
}

fixed4 frag(v2f IN) :COLOR{
if (IN.y <_Center)
return _MainColor;
else
return _SecondColor;
}
ENDCG
}
}
}




4、

注:COLOR:COLOR语义的特殊性,范围是从0到1,所以如果有负值,会强制变为0,传递过去没有负值,所以坐标不能用COLOR语义
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: