【问题标题】:Unity Scanlines Shader not workingUnity扫描线着色器不起作用
【发布时间】:2018-04-17 06:11:01
【问题描述】:


我正在研究这个扫描线着色器,但它不起作用。
我尝试做的是,如果 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,我的构建设置是独立的 Windows/MacOSX/Linux。

【问题讨论】:

  • 如果你想在i.uv.y % 2时把每个像素都改成黑色,那么col -= col;不应该是col = fixed4(0.0,0.0,0.0,1.0);吗?
  • 不会改变任何东西,但这在将来的某个时候可能会有所帮助,所以还是谢谢
  • 我可以将所有内容调整为颜色,当位置进入播放时会出现问题。 if 语句也可以正常工作。
  • 如果我的第一条评论没有任何变化,这意味着if (i.uv.y % 2 == 0) 永远不会是真的。尝试在它们的末尾添加0,看看会发生什么。 if (i.uv.y % 2.0 == 0.0)。也可以试试fmod函数
  • 仍然没有,但 % 运算符似乎工作正常。我根本无法使用该职位

标签: c# unity3d shader


【解决方案1】:

第一个 i.uv 的值从 0 到 1。如果这是后期处理效果并且您希望窗口 y 位置为 i.uv.y * _ScreenParams.y,或者您可以使用 i.vertex.y

第二个someFloat % 2 返回0..2 范围内的浮点数(参见HLSL modulus operator) 所以 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;
}

【讨论】:

  • 哇,谢谢!这实际上工作得很好!它似乎与后处理堆栈有冲突,但我也许可以自己解决。
  • 是的,在我的脚本中将目标参数添加到 Graphics.Blit 后一切正常。
猜你喜欢
  • 2021-04-21
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多