[英]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.Resize或Material.SetTextureScale 。
編輯:所以我檢查了一下,似乎不可能在着色器腳本中更改紋理的尺寸,所以你應該使用 go 和我在上面發布的 C# 替代方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.