一日一Shader·模型线框【SS_8】

今天做的效果是连接模型的各顶点,将模型线框化。这个效果的灵感来自于昨天做的星座连线,因为星座间的连线没有规律,所以想用制作好的模型来生成各种线框图。

原理其实也很简单,获取顶点,然后连线……好吧,这条路没走通,换个方案。

根据UV的渲染原理,限制其渲染范围,倒是也能实现边框的感觉,类似这种:

感觉不太理想,三角面没体现出来。要体现出三角面,还得靠Geometry渲染,今天就不深入研究这个了。还是先把UV限制方案完善吧。

这时还要处理3D模型时,背面不显示的问题:

一般用双Pass就行。但是如果用的是SRP管线,它只会识别一个Pass,第二个Pass是无效的,所以要添加一个Tags。

最后的代码:

Shader "MyShader/SS_8" {
    Properties {
        _Color("Color",Color)=(0,0,0,0)
        _EdgeColor("EdgeColor",Color)=(0,0,0,1)
        _Width("Width",Range(0,0.5))=0.2
    }
    SubShader {
        CGINCLUDE
             #include "UnityCG.cginc"
        fixed4 _Color;
        fixed4 _EdgeColor;
        float _Width;  
        struct appdata {
            half4 vertex : POSITION ;
            half2 uv : TEXCOORD0 ;
        };
        struct v2f{
            half4 vertex : SV_POSITION ;
            half2 uv : TEXCOORD0  ;            
            float4 worldPos   : TEXCOORD1;
        };
         v2f vert(appdata v)
        {
            v2f o;
            o.vertex = UnityObjectToClipPos( v.vertex);
            o.uv = v.uv;
            o.worldPos= mul(unity_ObjectToWorld, v.vertex);
            return o;
        }
        fixed4 frag(v2f i) : SV_Target
        {
            fixed4 col;
            float lx = step(_Width, i.uv.x);
            float ly = step(_Width, i.uv.y);
            float hx = step(i.uv.x, 1.0 - _Width);
            float hy = step(i.uv.y, 1.0 - _Width);
            col = lerp(_EdgeColor, _Color, lx*ly*hx*hy);
            return col;
        }
        ENDCG

        Pass {
        Tags{ "LightMode" = "LightweightForward" }
        Blend SrcAlpha OneMinusSrcAlpha  
        Cull Front//要写在CullBack前面
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag           
        ENDCG
        }
        
        Pass {            
        Blend SrcAlpha OneMinusSrcAlpha  
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag           
        ENDCG

        }          
    } 
}

以及最终的效果:

猜你喜欢

转载自blog.csdn.net/yzy1987523/article/details/106968150