Orada cel gölgelendirme yapmak için birkaç geniş yaklaşım görüyorum:
- Ters çevrilmiş normallerle modelin çoğaltılması ve büyütülmesi (benim için bir seçenek değil)
- Kenar tespiti için sobel filtre / parça gölgelendirici yaklaşımları
- Kenar tespiti için şablon tampon yaklaşımları
- Yüz ve kenar normallerini hesaplayan geometri (veya tepe) gölgelendirici yaklaşımları
Geometri merkezli yaklaşımın, aydınlatma ve çizgi kalınlığı üzerinde en fazla kontrolü sağladığını varsayarak doğru muyum? kademeli olarak ovaya karışan bir tepenin siluet çizgisini görebileceğiniz arazi için?
Arazi yüzeylerimde piksel aydınlatmasına ihtiyaç duymazsam ne olur? (Ve muhtemelen hücre tabanlı tepe noktası veya doku haritası tabanlı aydınlatma / gölgeleme kullanmayı planladığım gibi olmayacak.) O zaman geometri tipi yaklaşıma sadık kalmak daha iyi olur mu yoksa bunun yerine ekran alanı / parça yaklaşımı mı tercih ederim? basitleştirmek için? Eğer öyleyse, sadece tüm ağın ana hatlarından ziyade (o ana hat içinde "mürekkep" ayrıntıları olmadan) ağ silueti içindeki tepelerin "mürekkeplenmesini" nasıl elde edebilirim ? (AKA düşündüren konturlar , kırışıklıklar ).
Son olarak, bir geometri gölgelendirici kullanarak çevrilmiş normaller yaklaşımını ucuz bir şekilde taklit etmek mümkün müdür? Bununla ilgili endişem, her bir tepe noktasını kesinlikle kopyalayabildiğim ve bunları buna göre ölçeklendirebileceğim, ancak parçalayıcı normallerde ve parça gölgelendiricideki farklı renklendirmeye nasıl yaklaşacağım?
Ne istiyorum - siluet içindeki müdahaleci çizgilerle değişen çizgi kalınlığı ...
Ne istemiyorum ...
DÜZENLEME: Daha fazla araştırma aşağıdakileri ortaya çıkardı ...
Mesafe tabanlı LoD düşünülse bile arazide büyük bir tepe noktası sayım olduğundan, ne ters çevrilmiş normaller ne de geometri gölgelendirici tabanlı bir yaklaşım (frustum culling ile bile), çoğaltma ve ölçeklendirmede yer alan şeffaf hesaplama karmaşıklığı nedeniyle mantıklı bir seçenek olmazdı yüklenen köşe noktaları.
Arazi yüzeylerinde katı tonlu gölgelendirme şeklinde piksel başına aydınlatmaya ihtiyacım olmadığı düşünüldüğünde, yüz-normal tabanlı yaklaşımları - aksi takdirde doğru yüzey aydınlatması için bir gereklilik - dikkate almak daha az ihtiyatlı hale gelir. doğal olarak hesaplanması oldukça pahalıdır. Ancak en iyi kontrolü sağladıkları doğrudur; örneğin, "sanatsal" vuruşları kullanarak kenarları gölgeleme yeteneği: Güzel, ama yine de, çok karmaşık bir oyun ortamı için gerçekten uygun değil.
Şablon tamponları, gölgelendiricilerdeki tüm işleri yapmayı tercih ettiğim için kaçınmak istediğim bir şeydir. (Kırmızı taslaklı yukarıdaki örnek, şablon tamponu eski okuluyla yapıldı.)
Bu, parça gölgelendirici görüntü-uzay yaklaşımları bırakır. Hesaplama karmaşıklığı, köşe sayısı yerine parça sayısına azaltılır (benim durumumda, bu, geometri gölgelendiricisinde yapmak zorunda olduğumdan 10-100x daha az işlemdir). Bu, süreksizlik filtreleri (örn. Sobel operatörü) uygulayabileceğimiz bir g-tamponu (normal bir tampondan ve isteğe bağlı olarak bir derinlik tamponundan oluşur) oluşturmak için birden fazla render geçişi gerektirir. Derinlik süreksizliği, müstehcen konturları ve kırışıklıkları mümkün kılan şeydir. Bu yaklaşımla tek sorunum, parçalanmış gölgelendiricideki doğru algoritma ile, mürekkepli kenar genişlikleri üzerinde daha ince kontrol sağlayamama.
Yani soru şimdi daha spesifik hale geliyor: Bir parça gölgelendiricide değişken kenar genişliklerini, özellikle dış siluetde, tam olarak nasıl girerim?