Unity'de bu örneklerde olduğu gibi bir efekti elde etmek istiyorum:
Benim özel senaryomda birkaç gereklilik var:
- Spritelar alfa karışımı kullanıyor ve spritelar şeffaf alanlara sahip.
- Karakteri tıkayan 2 tür öğe vardır. Biri siluet efektini yaratmalı ve diğeri normal gibi davranmalıdır.
Siluet oluşturan öğeleri tıkamak için ZWrite'ı etkinleştiririm ve yapmayan öğeler için devre dışı bırakırım.
Karakter için gölgelendiricinin kuyruğunu şeffaf + 1 olarak ayarlamaya çalıştım ve bu geçişi ekledim:
Pass
{
ZTest Greater
Lighting Off
Color [_Color]
}
Ve etki kısmen çalışıyor:
Siluet karakterin her yerine çizilir, hatta şeffaf olan kısımlar bile. Şeffaf parçalar bir siluet oluşturmamalıdır.
Siluet, karakter bir hareketli grafiğin arkasındayken, hareketli grafiğin o kısmı şeffaf olsa bile oluşturulur. Hareketli grafiğin şeffaf bir parçasının arkasında olmak silueti yaratmamalıdır.
Karakter, arkalarında olsa bile öğelerin geri kalanında görünür. Sanırım bunun sebebi kuyruğu Şeffaf + 1 olarak ayarlamaktır. Ancak Şeffaf olarak bırakırsam, karakter doğru sırada çizilir, ancak siluet asla görülmez.
Birinin bana verdiği bu ipuçlarını takip etmeye çalıştım, ancak işe yarayamadım:
1) Spriteları oluşturan geçişi olduğu gibi bırakın.
2) z arabelleğine yazan ancak alfaya dayalı pikselleri atmak için clip () kullanan bir gölgelendiriciye sahip bir geçiş ekleyin. Z-buffer'ı MSAA ve alfa-kapsama alanı kullanmadan yumuşak z testleri yapmak için kullanamazsınız. Bunun kalitesi harika olmayacak, ancak yapabileceğiniz en iyi şey bu. Daha hızlı bir alternatif, bir desen veya gürültü renk taklidi veya spritelarınızın oldukça keskin kenarları varsa, eski moda bir eşiktir.
3) z-testini kullanarak tıkanma rengini çizen tıkanabilir nesnelere üçüncü geçiş ekleyin ve son geçiş olarak çizildiğinden emin olun.
Özellikle Unity'de gölgelendiricilere yeniyim ve nasıl düzgün çalışacağını anlayamıyorum.