![](/img/trans.png)
[英]Unity Shader graph vertex displacement not working on mesh created at runtime
[英]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.