Deneyim istediğin için, işte benim.
PS2 oyunlarını programladığım günlerde, "katmanlı alfa dörtlü" yaklaşımı sık sık sis uygulamamızın bir yoluydu. Bazen yer sisi olarak, ancak daha yaygın olarak tam ekran sisi olarak kullanılır. Ve her iki durumda da gayet iyi çalıştı. Yani evet, fragman öncesi gölgelendirici günlerinde uygulanabilirdi.
İyi sıralama. Sorun, belirttiğiniz gibi, ekran görüntüsünde görülen gibi yumuşak bir sis istiyorsanız, oldukça sayıda alfa dörtlü almanız gerektiğiydi.
PS2'de genellikle üç ila beş katman arasında bir yer alabiliriz. Hangi kesinlikle önünüzde yüzen sis "duvarları" gibi görünüyordu. Bundan daha fazla ve doluluk oranı kare hızımızı öldürmeye başladı.
Normalde, bu dörtlüler kameranın önündeki sabit mesafelerde çizilirdi, bu yüzden bahsettiğiniz duruma hiç bir zaman "girmeden" giremezsiniz. Öte yandan, bu sabit mesafeler kullanılarak, dünyadaki her şey yaparoyuncu hareket ettikçe bu uçaklardan geçmek, bu oldukça açık bir grafik aksaklık. Neredeyse herkes o zamanlar yaptı, ama şimdi kabul edilemezdi (stilistik nedenlerle yapmazsan). (İstisna: Bazı insanlar, PS2'nin bir tepe gölgelendiriciye eşdeğer bir parçası olarak sis değerlerini hesapladı. Bu işe yaradı ve çok daha hızlıydı, ancak modellerinizin yüksek derecede yorulmasını gerektiriyordu. Örneğin, uzun duvarlara sahip olamazdınız, çünkü sis sadece duvarın köşelerinde hesaplanıyor ve daha sonra duvarın tüm yüzüne sürülüyor ... Örneğin, ortadaki sis seviyesinin hemen yanında duruyorsanız, duvar tamamen sisli görünüyordu. bitiş noktaları)
Sis dörtlerini statik olarak dünyaya yerleştirirseniz (bir olasılık olarak belirttiğiniz gibi), sağladığınız görüntüde olduğu gibi son derece pürüzsüz bir sis görünümü elde edemeyeceğinizi unutmayın - arasında garip çakışmalar olacaktır. bitişik dörtlüler izleyicinin yönüne göre değişir. Bu örtüşmeler çizgiler veya yamuklar (dörtlüler dokusuz ise) veya topaklar (dokulu ise) olarak görünebilir.
Ancak diyelim ki, bu zemin sisini yapmak için geniş, ekrana bakan dörtlüler kullandığımızı ve bu yöntemi kullanarak düz bir zeminde, bir kamera ileriye baktığımızda gerçekten pürüzsüz bir sisin nasıl yapılacağı için bazı hesaplamalar yaptığımızı varsayalım - bu bizim ideal durumumuz . Ufkumuzu tarama çizgisi 540'a koyan HD çözünürlüğü: 1920x1080'i varsayalım. Ufuk çizgisine kadar görünürlüğümüz olduğunu varsayalım (ufka ulaşmadan önce siste tam opaklığa ulaşmadığınızı varsayarak). Her sis çizgisinde bir sis dörtlü başlatma ve bir durma (yumuşak sis elde etmek için) için (540 * 2 ==) 1080 sis dörtlü gerekir. Bu 1080 sis dörtlünden her biri ekranın tüm yatay genişliğini kaplayacak,
Düşük tahmin edelim ve ortalama olarak bir sis düzleminin yaklaşık 300 satır pikseli kapsayacağını varsayalım. En yakın olanlar daha az kapsayacak, en uzak olanlar daha az kapsayacak, orta sıralar çok daha fazla kapsayacak.
Bu tahminle ortalama sis dörtlüsü tarafından (1920x300 ==) 576.000 piksele ulaşılıyor. Toplamda, (576.000 * 1080 ==) "Çok saydam geometri oluşturarak pürüzsüz sis" efekti için toplam 622.080.000 piksele dokunuluyor. Ve bu sayı daha yüksek çözünürlükte çalışan insanlar için artacaktır. Dahası, z tamponuna karşı aynı sayıda test ve neredeyse aynı sayıda piksel harmanlama işlemi yapıyoruz, çünkü tüm bu şeffaf katmanlar birbirini tekrar tekrar çiziyor. Bu çok fazla piksel.
Ve bu en iyi senaryo - kullanıcı aşağı bakar ya da çökerse, sis dörtlülerinin ekran kapsamı çok daha fazla olur.
1080 dörtlü üst üste geldiğimizden, her birinde yaklaşık (1.0 / 1080 ~ =) 0.0009'luk bir alfa değeri ayarlamak istediğimizi unutmayın, böylece tüm 1080 dörtlü bakarsanız sisimiz tam opaklığa ulaşır. (Bundan daha yükseğe gidebiliriz, ancak bu, aralığı olabildiğince yaymak istediğimizi varsayan değerdir). Bu değerin 32 bit renk değerinin alfa bileşeni olarak temsil edilemeyeceğini unutmayın (256 * 0.0009 ~ = 0.237 ve denerseniz denerseniz 0'a yuvarlanır). Çalışması için 0.0009 değerini bir kayan nokta değeri olarak OpenGL'ye vermeniz gerekir. (Ayrıca, her birine aynı değeri ayarlamak istemeyeceğinize dikkat edin - bize düzgün bir sis vermek için bir dörtlü başlamamızı ve bir ufkun altındaki her tarama çizgisinde bitmesini istediğimizi belirledik,
Ayrıca, sis karışımlarının modern bir gölgelendiricide olduğu gibi bu yaklaşımı kullanarak tam olarak çalışmadığını unutmayın - "temel nesne rengi ile bu yüzde kullanarak sis rengi arasındaki karışım" için bir hesaplama almak yerine 1080 elde edersiniz. "şimdiye kadar renk ve sis rengi arasında sis yüzdesine göre karışım" hesaplamaları. Bu, sisin logaritmik bir serpinti sonrasında nesneleri etkileyeceği anlamına gelir. (Yani, 20 sis dörtlüsünden etkilenen bir nesne, 10 sis dörtlüsünden etkilenen bir şeyin iki katı kadar sisli görünecektir, çünkü ilk sis dörtlüsü karıştırma işleminde daha fazla etkiye sahiptir).
Bunların hepsi: Lütfen sadece bir parça gölgelendirici kullanın.
Hayır, gerçekten. Uygulanması daha basit, daha ucuz ve daha hızlı ve daha hızlıdır ve hataya daha az eğilimlidir ve oyununuzu gerçekten yapmaya geri dönmenizi sağlar ve mümkün olan her şekilde daha iyidir. O zamanlar bile belirsiz bir şekilde mümkün olsaydı, PS2 döneminde tamamen geri yapmış olurduk.