Şu anda bir karakterin arka planda hareket edebileceği bir oyun geliştiriyorum. Fikir, bu karakterin bu arka planı kazması olacaktır. Bir shader tarafından yapılması gerektiğini düşünüyorum ama onunla yeni başlayan biriyim. .Gölgede delik oluşturmak için Shader Unity 2d
Karakterin bu pikselin konumundan çok uzak olması gibi bir şey hayal edebiliyorum, bu nedenle bu pikselin alfa değeri 0'dır. Ve alfa'yı 0'da tutmak için alfa 0'a eşit değil. karakter testi yapmak.
Ancak şimdilik, sprite/diffuse shader ile temel olarak denedim ve piksellerin konumunu elde etmenin bir yolunu bulamıyorum. Sörf fonksiyonunda bir şey denedim ama gerçek bir sonuç çıkmadı. Sörf fonksiyonunun bir kere pixel no ile çalıştırılması gerekiyordu?
Yardım için şimdiden teşekkür ederiz.
Edit Sonunda bir dikey parça gölgelendirici almak için bazı şeyler denedim. Dediğim gibi, alfa ile piksel arasındaki mesafeyi hesaplamaya çalışıyorum. Şimdilik hatam nerede olduğunu anlayamıyorum ama belki biraz daha konuşkan olacak. Bu arada, bu yeni gölgelendiriciyi koyduğumda sıralama katmanım patladı. Ztest ve Zwrite'i kapatmaya çalıştım ama işe yaramıyor. Yani (Ama asıl sorun değil)
Shader "Unlit/SimpleUnlitTexturedShader"
{
Properties
{
// we have removed support for texture tiling/offset,
// so make them not be displayed in material inspector
[NoScaleOffset] _MainTex("Texture", 2D) = "white" {}
_Position("Position", Vector) = (0,0,0,0)
}
SubShader
{
Pass
{
CGPROGRAM
// use "vert" function as the vertex shader
#pragma vertex vert
// use "frag" function as the pixel (fragment) shader
#pragma fragment frag
// vertex shader inputs
struct appdata
{
float4 vertex : POSITION; // vertex position
float2 uv : TEXCOORD0; // texture coordinate
};
// vertex shader outputs ("vertex to fragment")
struct v2f
{
float2 uv : TEXCOORD0; // texture coordinate
float4 vertex : SV_POSITION; // clip space position
float3 worldpos:WD_POSITION;
};
// vertex shader
v2f vert(appdata v)
{
v2f o;
// transform position to clip space
// (multiply with model*view*projection matrix)
o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
// just pass the texture coordinate
o.uv = v.uv;
o.worldpos= mul(_Object2World,o.vertex).xyz;
return o;
}
// texture we will sample
sampler2D _MainTex;
float4 Position ;
// pixel shader; returns low precision ("fixed4" type)
// color ("SV_Target" semantic)
fixed4 frag(v2f i) : SV_Target
{
// sample texture and return it
fixed4 col = tex2D(_MainTex, i.uv);
col.a = step(2,distance(Position.xyz, i.worldpos));
return col;
}
ENDCG
}
}
}
Şu an bazı Görüntü Efektleri Shader ile çalışıyorum. önce, yüzey gölgelendirici üzerinde çalışıyordum, gerçekten bir fark olup olmadığını bilmiyorum. Ama şimdilik, ben dokudaki gölgelendiricimde 'v2f dikey (appdata v) \t ( \t \t v2f o; \t \t o.vertex = mul (UNITY_MATRIX_MVP, v.vertex); \t \t o.uv = v.uv; \t \t o; N0: \t sampler2D _MainTex; (I V2F) \t fixed4 kırılgan: SV_Target \t { \t \t fixed4 sut; \t col.rgb = tex2D (_MainTex, i.uv) .rgb; \t // sadece renkleri ters çevirin \t return col; } Ancak grafiğim hala beyaz. Bir sonraki adım, vert işlevinde WorldPos yaratmayı anladığım ve bir sonraki işlevini kullanacağım gibi olmalıdır. –