美文网首页
Billboard Shader

Billboard Shader

作者: 庄什么庄 | 来源:发表于2017-03-19 15:48 被阅读0次

    1、alpha blend need to turn off zwrite, or tansparent object will cut off opaque object behind, 

    in this case, you can not get effect you want to realize. so, pay attention to the render sequence of objects

    2、about DisableBatching tag, unity official explain

    //code ( unity version5.4.0)

    Shader"billboard"{

    Properties{

    _MainTex ("TextureImage",2D) ="white"{}

    _ScaleX ("ScaleX",Float) =1.0

    _ScaleY ("ScaleY",Float) =1.0

    //_Pos("Poscenter",Vector)=(0,0,0,0)

    _Scope("Scope",float) =2.0

    //_Color("Color",color)=(1,1,1,1)

    _Random("Random",Range(-1,1)) =0.5

    }

    SubShader{

    Tags{"Queue"="Transparent""RenderType"="Opaque""DisableBatching"="True"}

    LOD200

    //Lightingoff

    //BlendoneOneMinusSrcAlpha

    BlendSrcAlphaOneMinusSrcAlpha

    //ZWriteoff

    ZWriteon

    ZTestLEqual

    //BlendDstColorZero

    //AlphaTestLess1

    Pass{

    //

    //CUlloff

    //ZWriteon

    CGPROGRAM

    #pragmavertexvert

    #pragmafragmentfrag

    //User-specifieduniforms

    uniformsampler2D_MainTex;

    uniformfloat_ScaleX;

    uniformfloat_ScaleY;

    //float4_Pos;

    float_Scope;

    float_Random;

    //half4_Color;

    structvertexInput {

    float4vertex: POSITION;

    float4tex :TEXCOORD0;

    };

    structvertexOutput {

    float4pos : SV_POSITION;

    float4tex :TEXCOORD0;

    };

    vertexOutput vert(vertexInput input)

    {

    vertexOutput output;

    output.pos =mul(UNITY_MATRIX_P,

    mul(UNITY_MATRIX_MV,float4(0.0,0.5, input.vertex.z,1.0))

    +float4(input.vertex.x, input.vertex.y,0.0,0.0)

    *float4(_ScaleX, _ScaleY,1.0,1.0) );

    //mul(p,mul(mv,pos1)+pos2);

    //floatdis=distance(input.vertex,_Pos);

    //input.vertex.y=sin(dis+_Time.y*_Speed)*_Pos.w;

    //output.tex.x=input.vertex.y;

    //output.pos=mul(UNITY_MATRIX_MVP,input.vertex);

    //floatoffsetY=sin(output.pos.y+_Time.y)*_Scope;

    floatoffsetY =sin((output.pos.x+output.pos.z)+_Time.y)*_Scope;

    if(output.pos.y>0)

    output.pos.xyz =float3(output.pos.x+offsetY, output.pos.y, output.pos.z);

    //else

    //output.pos.xyz=float3(output.pos.x+offsetY,output.pos.y,output.pos.z);

    //input.tex.w=input.tex.w*_CutOff;

    output.tex = input.tex;

    returnoutput;

    }

    half4frag(vertexOutput input) :COLOR

    {

    returntex2D(_MainTex,float2(input.tex.xy));

    //return_Color*input.tex.x;

    }

    ENDCG

    }

    }

    }

    相关文章

      网友评论

          本文标题:Billboard Shader

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