簡體   English   中英

Unity Scanlines Shader無法正常工作

[英]Unity Scanlines Shader not working


我正在使用此掃描線着色器,但它不起作用。
我想做的是,如果y位置是2的倍數,則將每個像素都設置為黑色,但這是行不通的。 屏幕上沒有任何變化。 顏色反轉測試(通過將return col更改為return 1 - col可以正常工作,因此着色器實際上會影響圖像。

有誰知道這是什么問題?
謝謝。

    Pass
    {
        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag

        #include "UnityCG.cginc"

        struct appdata
        {
            float4 vertex : POSITION;
            float2 uv : TEXCOORD0;
        };

        struct v2f
        {
            float2 uv : TEXCOORD0;
            float4 vertex : SV_POSITION;
            float4 position : TEXCOORD1;
        };

        v2f vert (appdata v)
        {
            v2f o;
            o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
            o.uv = v.uv;
            o.position = ComputeScreenPos(o.vertex);
            return o;
        }

        sampler2D _MainTex;

        fixed4 frag (v2f i) : SV_Target
        {
            fixed4 col = tex2D(_MainTex, i.uv);

            if (i.uv.y % 2 == 0)
                col -= col;
            return col;
        }
        ENDCG
    }

編輯:我正在使用Unity 5.5.1f1,我的構建設置是Standalone Windows / MacOSX / Linux。

首先, i.uv值為0到1。如果這是后期處理效果,並且您希望窗口y的位置為i.uv.y * _ScreenParams.y ,或者可以使用i.vertex.y

第二個someFloat % 2返回范圍為0..2的float(請參閱HLSL模運算符 ),因此if語句應為:

if (i.uv.y * _ScreenParams.y  % 2 < 1)
   col -= col;

但是,您可以在此處使用step函數。

fixed4 frag (v2f i) : SV_Target
{
    fixed4 col = tex2D(_MainTex, i.uv);

    float ypos = i.uv.y * _ScreenParams.y;
    float ymod = ypos % 2;

    col.rgb *= step(1, ymod);

    return col;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM