Yazı ilgi çekiciydi, ancak diyagramda OpenGL / WebGL / WebGPU sanki Vulkan’ın üzerine kurulmuş gibi gösterilmiş; bu yanlış bir anlatım
WebGL ve WebGPU, Vulkan’dan geçmeden doğrudan D3D ve Metal üzerinde çalışır
Ayrıca Vulkan açık kaynak değil, bir standarttır
WebGPU yalnızca tarayıcılarla sınırlı değildir; C++ için Dawn, Rust için WGPU kütüphaneleriyle de sunulur ve Windows, macOS, Linux, iOS, Android gibi platformlarda çalışabilir
Vulkan, DirectX’ten biraz daha fazla platformda çalışsa da Windows’un varsayılan kurulumunda yer almaz ve macOS ya da iOS’ta çalışmaz
Vulkan’ın açık kaynak değil, açık standart olduğunu eklemek isterim
Gerçek uygulamaları her donanım üreticisi kendisi sağlar; Vulkan aslında sadece başlık dosyalarından ibarettir
Ayrıca MoltenVK veya KosmicKrisp gibi Vulkan-to-Metal dönüştürme katmanları sayesinde Apple platformlarında da gayet iyi çalışır
Vulkan tamamen çapraz platform olmasa da DirectX’e göre çok daha geniş bir alanı destekler
DirectX, Windows ve Xbox’ta kullanılır; Vulkan ise Linux, Android, Windows, Nintendo Switch, Switch 2 gibi platformlarda kullanılabilir
WebGPU’nun, her platformun yerel API’sinin (DirectX, Vulkan, Metal) üzerinde duran birleşik bir API olduğundan bahsetmek gerekir
Khronos API’lerinde çok sayıda ek özellik vardır, ancak bazıları özeldir ve taşınabilirliği düşürür
PlayStation Vulkan’ı desteklemez; Switch’te ise OpenGL/Vulkan yerine çoğunlukla NVN kullanılır
Sadece Windows’ta da çalışıyor olması bile Vulkan’ı DirectX’ten daha genel amaçlı yapıyor bence
Bazı Linux VNC ortamlarında Vulkan’ın çalışmaması genel bir durum değil
Çoğu kullanıcı GPU sürücüleri sayesinde Vulkan desteği alıyor
Bu web sitesindeki kurs kalitesi gerçekten şaşırtıcı
Kitap ön sipariş şeklinde bile satışa çıksa projeyi desteklemek isterim
İlk yazıdan beri takip ediyorum; her yeni yazı daha da etkileyici oluyor
Shader’ları denemek istiyorsanız şu IDE’leri öneririm
shadertoy – tarayıcı tabanlı, en kolay ve en popüler seçenek
Shadron – kullanımı güzel, kişisel olarak tercih ediyorum ama biraz niş
SHADERed – UX’ine alışmak zaman alıyor ama özellikleri yeterli
KodeLife – adını duydum ama bizzat kullanmadım
Cables(cables.gl) da oldukça etkileyici Kirell Benzi’nin çok etkileyici çalışmaları var
Mint’in yazılım yöneticisinde wgshadertoy’u keşfettim
flatpak, AUR, macports, Windows gibi çeşitli platformları destekliyor
macOS veya iPadOS’ta Playgrounds ile Metal shader’larına kolayca başlanabilir
Demoscene’de shader canlı kodlama yarışmalarında kullanılan Bonzomatic de var
Programlama nihayetinde insanın anladığını bilgisayarın anlayacağı hale çevirme sürecidir
Ama GPU programlama bunun çok daha zor bir versiyonu
Sayısız tuzak, donanım/yazılım uyumsuzluğu, yetersiz hata ayıklama araçları gibi nedenlerle geliştirme deneyimi oldukça kötü
Topluluğun bunu iyileştirme yönünde pek istekli görünmemesi de üzücü
OpenGL ve DirectX 12 öncesi sürümler, donanım ayrıntılarını soyutlamaya çalışıyordu; ama sonuçta soyutlama ters etki yarattı
Fragment shader yazarken en sezgisel olmayan kısım, koordinat alıp renk üretme fikri
Kalemle çizim yaparken olduğunun aksine, shader her pikselin konumunu hesaplayıp rengini belirler
Nesneleri hareket ettirmek yerine uzayı manipüle ederek düşünmek gerekir
Vertex shader’lar üçgenlerin konumunu ürettiği için daha doğal gelir
Sadece fragment shader’ı aşırı kullandığınızda sezgisel gelmez
Aslında doku örnekleme ve ışık hesaplamaları gibi rendering pipeline’ın son aşamasını üstlenir
PBR veya deferred rendering’de çoğu ortak shader paylaşılır, yalnızca özel efektler özelleştirilir
Bu, shader’ların değil, raster ve vektör grafikler arasındaki farkın meselesi olarak görülmeli
Shading, kontur çizmek değil, fizik tabanlı malzeme görünümünü ifade etme sürecidir
Resim yapmak shading’e daha yakındır; kalem çizimi ise değil
Bir dikdörtgen çizmek için fragment shader kullanmak yanlış bir yaklaşımdır
Shader’ın görevi dikdörtgeni gölgelendirmektir (shading)
Pratikte sınırları vertex shader tanımlar, fragment shader ise içini doldurur
Eğitim amaçlı olarak bazen vertex shader atlanır ve tüm ekran fragment shader ile doldurulur
GPU kodu öğrenirken en zor kısım ilk kurulumun karmaşık ve anlaşılmaz olması
Veri formatları, dönüşüm sırası, CPU-GPU sınırı gibi kavramlar zor; dokümantasyon da yetersiz
GPU’nun global değişken sistemi de kafa karıştırıcı
Soruların bir kısmı GPU’nun kendisinden çok API tasarımıyla ilgili
GPU, SIMT yapısında olduğu için veri erişiminde tutarlılık önemlidir
Dönüşümler her thread içinde sıralı biçimde uygulanır; CPU-GPU sınırı da performans bütçesine göre birden fazla kez aşılabilir
Global değişkenler, uniform gibi her thread’e aynı şekilde aktarılan sabitler olarak düşünülebilir
CUDA’da atomic işlemlerle global erişim mümkündür ama performans maliyeti yüksektir
WebGL başlangıç kursu iyi bir çıkış noktası olacaktır
Sitenin tamamlanmışlık seviyesi şaşırtıcı derecede yüksek
Diyagramlar, kaydırma çubuğu, stil; hepsi çok iyi
Shader’lar GPU’dan önce ortaya çıktı ve CPU’da da çalıştırılabilir
GPU’nun özü SIMT/SIMD yürütme modelidir; shader ise özünde callback fonksiyonu kavramıdır
CPU’dakiyle aynı sıralı düşünceyle yazılabilmesi, shader’ların sadeliğini ve zarafetini oluşturuyor diye düşünüyorum
Tüm illüstrasyonların Figma ile yapılmış olması özellikle etkileyici
Geri bildirimin harika olduğunu belirten bir yanıt bırakıldı
Çalışma gerçekten çok güzel ve çok özenli
%100 katılıyorum. Acaba bu site Next.js ile yapılmış özel bir uygulama mı diye merak ediyorum
Harika iş çıkmış. Baştan sona izlemek çok keyifliydi
Iñigo Quilez’in “This painting is a mathematical formula” videosunu öneririm
Shader’ın her pikselin x, y koordinatlarını bir fonksiyon olarak ifade etme fikrini çok iyi gösteriyor
1 yorum
Hacker News görüşleri
WebGL ve WebGPU, Vulkan’dan geçmeden doğrudan D3D ve Metal üzerinde çalışır
Ayrıca Vulkan açık kaynak değil, bir standarttır
WebGPU yalnızca tarayıcılarla sınırlı değildir; C++ için Dawn, Rust için WGPU kütüphaneleriyle de sunulur ve Windows, macOS, Linux, iOS, Android gibi platformlarda çalışabilir
Vulkan, DirectX’ten biraz daha fazla platformda çalışsa da Windows’un varsayılan kurulumunda yer almaz ve macOS ya da iOS’ta çalışmaz
Gerçek uygulamaları her donanım üreticisi kendisi sağlar; Vulkan aslında sadece başlık dosyalarından ibarettir
Ayrıca MoltenVK veya KosmicKrisp gibi Vulkan-to-Metal dönüştürme katmanları sayesinde Apple platformlarında da gayet iyi çalışır
DirectX, Windows ve Xbox’ta kullanılır; Vulkan ise Linux, Android, Windows, Nintendo Switch, Switch 2 gibi platformlarda kullanılabilir
PlayStation Vulkan’ı desteklemez; Switch’te ise OpenGL/Vulkan yerine çoğunlukla NVN kullanılır
Bazı Linux VNC ortamlarında Vulkan’ın çalışmaması genel bir durum değil
Çoğu kullanıcı GPU sürücüleri sayesinde Vulkan desteği alıyor
Kitap ön sipariş şeklinde bile satışa çıksa projeyi desteklemek isterim
İlk yazıdan beri takip ediyorum; her yeni yazı daha da etkileyici oluyor
Kirell Benzi’nin çok etkileyici çalışmaları var
flatpak, AUR, macports, Windows gibi çeşitli platformları destekliyor
Ama GPU programlama bunun çok daha zor bir versiyonu
Sayısız tuzak, donanım/yazılım uyumsuzluğu, yetersiz hata ayıklama araçları gibi nedenlerle geliştirme deneyimi oldukça kötü
Topluluğun bunu iyileştirme yönünde pek istekli görünmemesi de üzücü
Kalemle çizim yaparken olduğunun aksine, shader her pikselin konumunu hesaplayıp rengini belirler
Nesneleri hareket ettirmek yerine uzayı manipüle ederek düşünmek gerekir
Vertex shader’lar üçgenlerin konumunu ürettiği için daha doğal gelir
Aslında doku örnekleme ve ışık hesaplamaları gibi rendering pipeline’ın son aşamasını üstlenir
PBR veya deferred rendering’de çoğu ortak shader paylaşılır, yalnızca özel efektler özelleştirilir
Shading, kontur çizmek değil, fizik tabanlı malzeme görünümünü ifade etme sürecidir
Resim yapmak shading’e daha yakındır; kalem çizimi ise değil
Shader’ın görevi dikdörtgeni gölgelendirmektir (shading)
Eğitim amaçlı olarak bazen vertex shader atlanır ve tüm ekran fragment shader ile doldurulur
Veri formatları, dönüşüm sırası, CPU-GPU sınırı gibi kavramlar zor; dokümantasyon da yetersiz
GPU’nun global değişken sistemi de kafa karıştırıcı
Barebones WebGL in 75 lines,
Barebones 3D rendering with WebGL
Vulkan, WebGL’e kıyasla çok daha fazla boilerplate kod gerektirir
GPU, SIMT yapısında olduğu için veri erişiminde tutarlılık önemlidir
Dönüşümler her thread içinde sıralı biçimde uygulanır; CPU-GPU sınırı da performans bütçesine göre birden fazla kez aşılabilir
Global değişkenler, uniform gibi her thread’e aynı şekilde aktarılan sabitler olarak düşünülebilir
CUDA’da atomic işlemlerle global erişim mümkündür ama performans maliyeti yüksektir
WebGL başlangıç kursu iyi bir çıkış noktası olacaktır
Diyagramlar, kaydırma çubuğu, stil; hepsi çok iyi
Shader’lar GPU’dan önce ortaya çıktı ve CPU’da da çalıştırılabilir
GPU’nun özü SIMT/SIMD yürütme modelidir; shader ise özünde callback fonksiyonu kavramıdır
CPU’dakiyle aynı sıralı düşünceyle yazılabilmesi, shader’ların sadeliğini ve zarafetini oluşturuyor diye düşünüyorum
Shader’ın her pikselin x, y koordinatlarını bir fonksiyon olarak ifade etme fikrini çok iyi gösteriyor