美文网首页Unity Shader分享
用shader给一个圆柱体附上多段颜色(转)

用shader给一个圆柱体附上多段颜色(转)

作者: 树上的cat_ee3c | 来源:发表于2017-09-26 23:02 被阅读18次

    http://www.manew.com/thread-108398-1-1.html

    想着是钻孔数据用三维柱状体显示,结果就做出这么个金箍棒。

    没有C#代码,简单shader可行。

    将参数显示出以便于程序控制,所以说需要定义属性:

    Properties{

    _ColorRange1("Color1 Range", Range(0, 1)) = 0.3

    _ColorRange2("Color2 Range", Range(0, 1)) = 0.6

    _ColorRange3("Color3 Range", Range(0, 1)) = 0.7

    _ColorRange4("Color4 Range", Range(0, 1)) = 0.8

    _Color1("color1", Color) = (1.0, 0.0, 0.0, 1.0)//红

    _Color2("color2", Color) = (0.0, 1.0, 0.0, 1.0)//绿

    _Color3("color3", Color) = (0.0, 0.0, 1.0, 1.0)//蓝

    _Color4("color4", Color) = (1.0, 1.0, 1.0, 1.0)//白

    _Color5("color5", Color) = (0.0, 0.0, 0.0, 1.0)//黑

    }

    图:

    剩下的基本上就是片段着色器的位置和颜色的控制,if-else足够实现.

    代码:

    Shader "Custom/aaa" {

    Properties{

    _ColorRange1("Color1 Range", Range(0, 1)) = 0.3

    _ColorRange2("Color2 Range", Range(0, 1)) = 0.6

    _ColorRange3("Color3 Range", Range(0, 1)) = 0.7

    _ColorRange4("Color4 Range", Range(0, 1)) = 0.8

    _Color1("color1", Color) = (1.0, 0.0, 0.0, 1.0)//红

    _Color2("color2", Color) = (0.0, 1.0, 0.0, 1.0)//绿

    _Color3("color3", Color) = (0.0, 0.0, 1.0, 1.0)//蓝

    _Color4("color4", Color) = (1.0, 1.0, 1.0, 1.0)//白

    _Color5("color5", Color) = (0.0, 0.0, 0.0, 1.0)//黑

    }

    SubShader{

    Pass{

    CGPROGRAM

    #pragma vertex vert

    #pragma fragment frag

    #include "UnityCG.cginc"

    float _ColorRange1;

    float _ColorRange2;

    float _ColorRange3;

    float _ColorRange4;

    fixed4 _Color1;

    fixed4 _Color2;

    fixed4 _Color3;

    fixed4 _Color4;

    fixed4 _Color5;

    //输入顶点结构体,包含位置和颜色

    struct vertexInput {

    float4 vertex : POSITION;

    float4 texcoord0 : TEXCOORD0;

    };

    //片段结构体,包含位置和颜色

    struct fragmentInput{

    float4 position : SV_POSITION;

    float4 texcoord0 : TEXCOORD0;

    };

    //顶点处理

    fragmentInput vert(vertexInput i){

    fragmentInput o;

    o.position = mul (UNITY_MATRIX_MVP, i.vertex);

    o.texcoord0 = i.texcoord0;

    return o;

    }

    //片段处理

    float4 frag(fragmentInput i) : COLOR {

    float4 color;

    if (i.texcoord0.y > 0 && i.texcoord0.y < _ColorRange1) {

    color = _Color1;//红色

    }

    if (i.texcoord0.y > _ColorRange1 && i.texcoord0.y < _ColorRange2) {

    color = _Color2;//绿色

    }

    if(i.texcoord0.y > _ColorRange2 && i.texcoord0.y < _ColorRange3){

    color = _Color3;//蓝色

    }

    if (i.texcoord0.y > _ColorRange3 && i.texcoord0.y < _ColorRange4) {

    color = _Color4;//白色

    }

    if (i.texcoord0.y > _ColorRange4 && i.texcoord0.y < 1) {

    color = _Color5;//黑色

    }

    return color;

    }

    ENDCG

    }

    }

    FallBack "Diffuse"

    }

    相关文章

      网友评论

        本文标题:用shader给一个圆柱体附上多段颜色(转)

        本文链接:https://www.haomeiwen.com/subject/aidqjxtx.html