Clip() işleviyle neredeyse yatay halkalardaki pikselleri atarak nesneyi “kesen” unity elkitabından this one benzeri bir gölgelendiriciyi kodlamaya çalışıyorum.Unity worldPos ilgili yönü
Shader "Example/Slices" {
Properties {
_MainTex ("Texture", 2D) = "white" {}
_BumpMap ("Bumpmap", 2D) = "bump" {}
}
SubShader {
Tags { "RenderType" = "Opaque" }
Cull Off
CGPROGRAM
#pragma surface surf Lambert
struct Input {
float2 uv_MainTex;
float2 uv_BumpMap;
float3 worldPos;
};
sampler2D _MainTex;
sampler2D _BumpMap;
void surf (Input IN, inout SurfaceOutput o) {
clip (frac((IN.worldPos.y+IN.worldPos.z*0.1) * 5) - 0.5);
o.Albedo = tex2D (_MainTex, IN.uv_MainTex).rgb;
o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));
}
ENDCG
}
Fallback "Diffuse"
}
Sadece yatay çizgilerden ziyade, rasgele bir açıyla dilimlemek istiyorum. worldPos Z çarpan gerçekten dilimin açısını değiştirmek olmadığını (ben kodlama shaderlara yeniyim beri) ben deney neticesinde, bu yüzden buna bir özellik değişkeni ayarlayın: iki sorun ancak
clip (frac((IN.worldPos.y+IN.worldPos.z*_MYANGLEVARIABLE) * 5) - 0.5);
Bu sahiptir . 1) 1,0'a kadar olan değerler satırları 45 dereceye kadar döndürür, ancak bunun ötesinde çizgiler "dalgalı" gitmeye başlar ve düzgün çizgilerden ziyade her türlü desenlere dönüşür ve 2) bu sadece yüz pozitif yönde yönlendirilirse çalışır. veya negatif X ekseni. Z'e bakarken çizgiler hareket etmiyor ve Y'ye bakarken daha büyük oluyorlar ama dönmüyorlar. Benzer bir durum ama beklendiği gibi 1) keyfi açıları elde nasıl yerine X
Herhangi bir fikir daha Z'ye çalışan -
IN.worldPos.x
için IN.worldPos.y
Tahmin edebileceğiniz mu neyi değiştirme? 2) Yüz yönüne bakılmaksızın çalışmasını sağlayın mı?
Ben worlPos kullanıyorum çünkü her zaman hatların ekran alanı yerine nesneye göre olmasını istiyorum, ancak belki başka bir yol var mı? Benim gerçek gölgelendiricim, & yüzey gölgelendiricisi yerine bir parçadır, worldPos'u dikeyden fragmana geçiriyorum.
çok teşekkürler
dat görünüyor ... – Fattie