· kaynak Hacker News – Front Page (native)
Bir Voronoi shader, takılan bir RTX 4070 ve fract'a uzanan bir iz
Bir haftalık hata ayıklama yazısı, Voronoi shader'ındaki takılmayı RTX 4070'li tek bir makineye ve gürültünün kalbindeki fractional-part fonksiyonuna kadar takip ediyor.

Üç fikirden inşa edilmiş bir Voronoi arka planı
Proje küçük başladı: Yazar, yakın zamanda tamamlanan bir projeyi tanıtan bir müzik videosunun arka planı olarak animasyonlu bir Voronoi deseni istedi. crocidb.com'da yayımlanan ve Hacker News ana sayfasına düşen sonuç yazısı, shader'ı üst üste binmiş üç kavrama bölüyor.
İlk kavram, Worley ya da Voronoi gürültüsünün bir varyantı. Uzay eşit karolara bölünüyor, her karonun içine rastgele bir nokta yerleştiriliyor ve her piksel, çevresindeki üç乘三 karoluk komşuluğundaki dokuz aday merkeze olan uzaklığını ölçüyor. Hangi merkez en yakınsa pikselin hangi hücreye ait olduğunu o belirliyor; bu tek başına, Voronoi diyagramının tanıdık tek renkli petek görünümünü üretiyor.
İkinci kavram UV wrapping: uzay karolanmadan önce koordinatlar bir gürültü alanıyla bozuluyor ve bu da aksi halde katı olan hücreleri daha organik bir şeye büküyor. Üçüncüsü ise bir palet araması. Hücreler merkeze olan ters çevrilmiş uzaklıklarıyla renklendiriliyor, sonra sabit yedi renkli bir palete indeksleniyor ve sınırlı palet bantlanma yapmasın diye küçük bir gölgeleme terimi ekleniyor. Nihai shader Shadertoy'da çalışıyor, gönderi yeni başlayanları giriş olarak The Book of Shaders'a yönlendiriyor ve stuffy knows'a atfedilen müzik yayın platformlarında mevcut.
Yalnızca bir makinede görülen takılma
Geceden sabaha hata bir hata ayıklama gizemine dönüştü. Shader'ı ertesi sabah ikinci bir bilgisayarda açmak, ilk makinenin hiç göstermediği bir takılmayı ortaya çıkardı. Sorun Firefox, Chrome ve Edge'de yeniden üretilebildiğinden tarayıcı elendi. Shader'ı sadeleştirmek — UV bükme kaldırılarak, palet döngüsü dondurularak ve hücreler büyütülerek — hatayı Voronoi merkezlerini üreten döngüye, özellikle de gürültü girdisini oluşturan ve her merkezi kaydıran satırlara yerelleştirdi.
Sıra cihaz matrisine geldi. Tümleşik Intel grafikli iki Linux dizüstü bilgisayar normal render etti. Pixel 9 Pro ve RTX 2070'li bir Linux masaüstü de öyle. Takılan tek makine, RTX 4070'li bir Windows PC'ydi: test edilen beş cihazdan biri, birden fazla tarayıcıda.
Gürültü fonksiyonunun içinde
Alana yeni okuyucular için gönderi kompakt bir ön bilgilendirme sunuyor: bir fragment shader her piksel için, her karede bir kez çalışır, durum tutmaz ve girdilerinin — burada piksel koordinatı ve bir time uniform — saf bir fonksiyonu gibi davranır. Rastgelelik hash fonksiyonlarından üretilmeli ve sonra prosedürel gürültüye yumuşatılmalıdır.
Söz konusu gürültü, Inigo Quilez'in prosedürel gürültüler üzerine yazısından alınan bir value-noise varyantı. Quilez Shadertoy'u yaratan kişi ve yazar, 2019'dan beri yazdığı neredeyse her shader'da bu kodu yeniden kullandığını bildiriyor. Çekirdeği, iki iç içe fract çağrısından oluşan tek satırlık hash1; hash'lenmiş köşe değerleri beşinci dereceden bir düşüş eğrisiyle interpolasyonlanıyor.
İz fract'a çıkıyor
Grafik programcısı arkadaşlar yardım edemeyecek kadar meşgulken yazar bir LLM'e, Kimi K3'e yöneldi. Modelin ilk içgüdüsü hash fonksiyonunun kendisindeki süreklilik kusurunu aramak oldu; yazar bu kodun binlerce Shadertoy shader'ında kullanımda olması gerekçesiyle bu yönü reddetti. Bu çıkmaz sokaktan uzaklaştırılan model, bunun yerine gürültü fonksiyonunun en başındaki fract çağrısını işaret etti ve Nvidia 40 serisi sürücülerdeki fract sorunu hakkında internette şikâyet edenler bulduğunu bildirdi.
Gönderinin getirilen metni anlatının bu noktasında cümlenin ortasında kesildiğinden tam çözüm buraya dahil değil. Ancak başlık hikâyenin nerede sonlandığını gösteriyor: bir float'ın fractional part'ı shader'ınızı düzelttiğinde. Bir sanat projesi olarak başlayan şey, bir hafta boyunca efektleri soymaya, donanım kombinasyonları test etmeye ve derlenmiş shader'ları sökmeye dönüştü — hepsi de grafik kodundaki en ilkel işlemlerden birinin etrafında dönerken.
Neden önemli
Bu, donanımlar arası shader belirsizliğinin somut, yeniden üretilebilir bir vakası. Aynı GLSL kaynak kodu, aksi halde karşılaştırılabilir makinelerde görünür şekilde farklı animasyon üretti ve sapma, tek bir kayan nokta fonksiyonunun belirli bir GPU ve sürücü kombinasyonunda nasıl değerlendirildiğine doğru izlendi. fract gibi fonksiyonların üreticiler arasında aynı davranması garanti edilmez ve saptıklarında belirti bir hata mesajı değil, görsel bir artefakt olur.
Hata ayıklama yaklaşımı da çalınmaya değer: hata tartışılmaz olana kadar efekti azaltın, kodu donanımdan ayırmak için bir cihaz matrisi tutun ve geniş ölçekte sınanmış kodu suçlayan her hipoteze kuşkuyla yaklaşın. Son olarak, bu LLM destekli hata ayıklama hakkında ilginç bir veri noktası. Model bir yanlış ve bir umut verici iz üretti ve hangisinin hangisi olduğunu bilmek yazarının alan uzmanlığına kaldı.
- #shaders
- #gpu
- #debugging
- #graphics-programming
- #webgl