Gerçek zamanlı gölgelendiricim için ışıltılı bir efekt yaratmaya çalışıyorum ama nasıl yapacağımı bilmiyorum.
İşte bir örnek ve başka bir örnek .
Bunu uygulamak için hangi tekniği kullanabilirim?
Gerçek zamanlı gölgelendiricim için ışıltılı bir efekt yaratmaya çalışıyorum ama nasıl yapacağımı bilmiyorum.
İşte bir örnek ve başka bir örnek .
Bunu uygulamak için hangi tekniği kullanabilirim?
Yanıtlar:
Herhangi bir gölgelendirici tasarlaması istendiğinde, işleri daha küçük sorunlara bölerek başlamalıyız. Ve ışıltılı etkinin aslında gölgelendiricinin iyi görünmesini sağlamaz, ancak bunlardan sadece birini kullanarak genel aydınlatma ve efekt iyi görünmez.
Her şeyden önce gölgelendiricinin doğrudan bir parçası olmayan şeyi belirtelim:
İkincisi, gerçek gölgelendiriciyi ayrı efektlere ayıralım:
Bu tür kumaşların sonsuz sayıda normali olduğuna dikkat edin, ancak burada tarif edilen teknik en önemli normal
En önemli normali yaklaşık olarak hesaplamak için, yapmanın bir yolu, doku koordinatlarını kullanmak ve ağın teğetlerini hesaplamak ve N'yi hesaplamaktır . L 1- (NT) hesaplarsınız.
Tam açıklama burada . Ve muhtemelen bahsettikleri tepe tekniğinden ziyade parça gölgelendiricisinde uygulamanız gerekir. Diğer anizotropik modeller de uygulanabilir.
Şimdi ışıltılı etki için:
Bu, dünya uzayında / yerel doku uzayında veya ekran uzayında ayrı bir geçiş olarak yapılabilir.
Düşünebildiğim algoritma, görüntü işleme tekniğini kullanıyor (örgünün doku koordinatlarına sahip olduğu varsayılarak).
Yukarıdaki görüntünün sadece maks filtresine bir örnek olduğunu ve gürültüye uygulandığında yıldız alanına benzer bir şey vereceğini unutmayın.
Maksimum (ed) gürültüye uygulanan Gausian filtresi örneği.
Bu tekniğin gerçek zamanlı gölgelendirici için önemli ölçüde optimizasyon gerektirebileceğini unutmayın.
İlginç bir makale var AMD - Prosedür almak .
Sparkles düşündüğümden daha zor görünüyor.
İyi çözüm: 3D gürültü fonksiyonunu indekslemek için 3D pozisyonunu kullanın, görünüm vektörünü ekleyin, şeyleri daha da rastgele hale getirmek için frac fonksiyonunu kullanın.
Sparkle:
float specBase = saturate(dot(reflect(-normalize(viewVec), normal),
lightDir));
// Perturb a grid pattern with some noise and with the view-vector
// to let the glittering change with view.
float3 fp = frac(0.7 * pos + 9 * Noise3D( pos * 0.04).r + 0.1 * viewVec);
fp *= (1 - fp);
float glitter = saturate(1 - 7 * (fp.x + fp.y + fp.z));
float sparkle = glitter * pow(specBase, 1.5);