(sim) Vegas Küresi için shader yazımı
(whenistheweekend.com)- The Sphere sayfası, küre yüzeyinin renginin nasıl hesaplandığını 5 örnek ve GLSL shader parçalarıyla gösteriyor
- Shader girdileri
time,vUv,vNormalbileşenlerinden oluşuyor ve renk değişiminin merkezinde zaman ile UV koordinatları yer alıyor main(), her pikselin nihai rengini hesaplamak içingl_FragColoriçinevec4(...)yerleştiriyor- RGB değerleri, zamana bağlı değişimi ifade etmek için
cos(time + vUv.xyx + vec3(0., 2., 4.))temel alınarak oluşturuluyor - Tanımlanan
vNormal, verilen kod parçası içinde kullanılmadığı için şu anki renk hesabını etkilemiyor
The Sphere sayfasının yapısı
- Başlık The Sphere
- Gövdede
example 1ileexample 5arasında örnek etiketleri bulunuyor - Ardından GLSL gibi görünen shader kodu yer alıyor
GLSL shader kodunun akışı
- Girdi değişkenleri üç tane:
time,vUv,vNormaltime,uniform floatvUv,varying vec2vNormal,varying vec3
main()fonksiyonugl_FragColordeğerini ayarlıyor- Renk
0.5 + 0.5 * cos(...)biçiminde hesaplanıyor cos()girdisine zaman değeri,vUv.xyx,vec3(0., 2., 4.)birlikte veriliyor- Alfa değeri
1.olarak sabitleniyor
1 yorum
Hacker News yorumları
Matrix efektini çalıştırmayı başardım.
Kürenin üst kısmı görünecek şekilde UV'yi ayarlamaya çalışıp vazgeçtim ama three.js'in uniform'ları olan projectionMatrix ve modelViewMatrix'i GLSL'in üst kısmında sadece tanımlayınca referans verebildim.
Statik bir Penrose döşemesi yaptım: https://gist.github.com/vjeranc/265db912d4004c7c0b0f16ae5fda...
Küre sonsuz olmadığı için aperiyodik döşeme kullanmanın pratik bir anlamı yok, ama yine de güzel görünüyor.
Sonsuz bir koniyi döşeyebilecek benzer bir karo kümesi ya da tek bir karo olup olmadığını henüz bilmiyorum.
İlginç bir soru olarak kalıyor, ama hangi projeksiyonun anlamlı olduğu yeterince net olmadığı için daha derine inmek zor.
Konudan biraz sapıyor ama The Sphere'ün gerçekte ne kadar büyük bir mühendislik projesi olduğu büyüleyici.
Yapının kendisinden, kürenin içindeki ve dışındaki binlerce LED panelin senkronizasyonuna, Las Vegas sıcağında soğutmaya ve içerideki 18.000 koltuğu yeterince serin ve havalandırılmış tutmaya kadar her şeyi kapsıyor.
Sıradan ofis binalarının çoğunda bile düzgün havalandırma yok.
Basit bir smiley.frag yaptım: https://gist.github.com/nickbarth/4ec5147bd1288fd2bcfc4c5b46...
Proje çok güzel.
Her kodun ayrı bir URL'si olsa paylaşması kolay olurdu. Kodu URL'nin içine gömmek de iyi bir yöntem gibi görünüyor.
Büyük bir gülen yüz shader'ı yaptım.
Ağzı
sdRingile yapan, sol-sağ simetrisini kullanarak gözleri tek seferde işleyen ve sarı renkte çıktı veren GLSL kodu.Shader'lara ilk kez dokundum ve dönen bir karpuz yaptım.
RGB tuple'larıyla uğraştığını,
fract()'ın kalan işlemi gibi göründüğünü ve bu değerleri karesini alıp toplayarak yumuşak şeritler oluşturduğunu az çok anlıyorum; ama shader'ın tam olarak nasıl çalıştığı,vUv'nin ne olduğu vegl_FragColor'ın nereye atandığı hâlâ belirsiz.Ardından üçgenleri parçalara, yani piksellere böler ve her parça için fragment shader'ı çalıştırır.
Burada girişler, tüm parçalara aynı değerle gelen
timeuniform'u ve vertex'ten çıktıktan sonra üçgen içinde doğrusal olarak enterpole edilenvUv'dir;vUv, küre üzerindeki piksel koordinatlarına karşılık gelir.gl_FragColor, o parçaya uygulanacak RGBA renk çıktısıdır.Tipik bir oyun ya da Google Earth shader'ında buna tekstürleme ve aydınlatma eklenir; GPU yürütme modeli tek tek piksel kodluyormuşsunuz gibi görünse de aslında SIMT olduğu için NVIDIA aynı anda 32, AMD ise 64 piksel işler.
Koşullu ifadelerin genelde iki dalı da çalıştıran koşullu işlemlere dönüştüğünü düşünebilirsiniz.
https://www.shadertoy.com/ hoşunuza gidebilir.
https://www.glslsandbox.com üzerindeki shader'lara da bakmaya değer.
Ancak oraya olgunlaşmamış kişiler sık sık NSFW shader'lar yüklüyor ve yöneticiler de pek titiz incelemiyor gibi; dikkatli olmak lazım.
“NSFW GLSL içeriğinin” Kolmogorov karmaşıklığının ne kadar olduğunu merak ettiriyor.
https://www.glslsandbox.com/e#108133.0
NSFW: https://www.glslsandbox.com/e#108230.3
Kod yorumlarında ChatGPT'den bedeni daha kilolu yapmasını, arka plana kayan çizgiler eklemesini, renkleri değiştirmesini ve belirli vücut bölümleri eklemesini isteyen prompt'lar bırakılmış.
Çok iyi.
Benim isocity projemde birinin gönderdiği çözüme bakınca, oluşturulan şehri URL ile paylaşılabilir hâle getiriyor.
Benzer bir yöntem uygulanabilir gibi: https://github.com/victorqribeiro/isocity/commit/c6588171e37...
The Sphere, demo partisi düzenlemek için harika bir yer olabilir.
https://en.wikipedia.org/wiki/Demoscene#Parties