簡體   English   中英

如何在 Unity Shader 中縮放圖像而不模糊?

[英]How can I scale an image without blur in Unity Shader?

我是 Unity 着色器的新手。 我正在嘗試在垂直方向上縮放我的圖像。 這是我使用的着色器代碼:

Shader "Custom/PostMainCameraProcessShader"
{
Properties{
    _MainTex("Screen Texture", 2D) = "white" {}
    _Param("Param", float) = 1
}
SubShader{
    Pass {

        CGPROGRAM
        #pragma vertex vert
        #pragma fragment frag
        #pragma fragmentoption ARB_precision_hint_fastest
        #include "UnityCG.cginc"

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

        sampler2D _MainTex;
        float4 _MainTex_TexelSize;
        float _Param;

        v2f vert(appdata_img v) {
            v2f o;
            o.vertex = UnityObjectToClipPos(v.vertex);
            o.uv = v.texcoord;

            return o;
        }

        fixed4 frag(v2f i) : COLOR
        {
            float2 uv = i.uv;
            uv.y *= _Param;
            fixed4 tex_screen = tex2D(_MainTex, uv);
            return tex_screen;
        }

        ENDCG
    }
}
FallBack "Diffuse"
}

這是我測試中的圖像:

在此處輸入圖像描述

這是我得到的結果:

在此處輸入圖像描述

那么有人可以給我一些建議,告訴我如何去除頂部模糊並使背景變成純黑色嗎?

非常感謝!

我認為您走在正確的軌道上,您的圖像可以根據需要向兩側伸展。 問題是這里的圖像大小。 您可能需要將 output 圖像更改為一半大小。

紋理有 u 和 v 分量,它們基本上代表寬度和高度。 您需要將 output 紋理的 v 值減半。

另一種方法是在 C# 腳本中嘗試Texture2D.ResizeMaterial.SetTextureScale

編輯:所以我檢查了一下,似乎不可能在着色器腳本中更改紋理的尺寸,所以你應該使用 go 和我在上面發布的 C# 替代方案。

暫無
暫無

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

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