लेख दिलचस्प था, लेकिन डायग्राम में OpenGL / WebGL / WebGPU को Vulkan के ऊपर बना हुआ दिखाना गलत है
WebGL और WebGPU, Vulkan से होकर नहीं बल्कि सीधे D3D और Metal के ऊपर काम करते हैं
इसके अलावा Vulkan open source नहीं बल्कि एक standard है
WebGPU सिर्फ ब्राउज़र तक सीमित नहीं है; यह C++ के लिए Dawn, Rust के लिए WGPU लाइब्रेरी के रूप में भी उपलब्ध है, इसलिए Windows, macOS, Linux, iOS, Android आदि पर चल सकता है
Vulkan, DirectX की तुलना में थोड़े अधिक platforms पर चलता है, लेकिन यह Windows की default configuration में शामिल नहीं होता और macOS या iOS पर नहीं चलता
मैं यह जोड़ना चाहूँगा कि Vulkan open source नहीं बल्कि एक open standard है
इसकी actual implementation हर hardware vendor करता है, और Vulkan अपने आप में सिर्फ header files है
साथ ही MoltenVK या KosmicKrisp जैसे Vulkan-to-Metal translation layers के ज़रिए यह Apple platforms पर भी अच्छी तरह चल सकता है
Vulkan पूरी तरह cross-platform नहीं है, लेकिन DirectX की तुलना में कहीं अधिक व्यापक support देता है
DirectX Windows और Xbox पर है, जबकि Vulkan Linux, Android, Windows, Nintendo Switch, Switch 2 आदि पर इस्तेमाल किया जा सकता है
यह भी बताना चाहिए कि WebGPU हर platform के native API (DirectX, Vulkan, Metal) के ऊपर मौजूद एक unified API है
Khronos APIs में बहुत सारे extensions हैं, लेकिन उनमें से कुछ proprietary हैं, इसलिए portability कम हो जाती है
PlayStation Vulkan को support नहीं करता, और Switch पर OpenGL/Vulkan की जगह ज़्यादातर NVN का इस्तेमाल होता है
मुझे लगता है कि सिर्फ Windows पर चलने की वजह से भी Vulkan, DirectX से ज़्यादा general-purpose है
कुछ Linux VNC environments में Vulkan न चलना कोई सामान्य स्थिति नहीं है
ज़्यादातर users को GPU drivers के ज़रिए Vulkan support मिल जाता है
इस वेबसाइट की course quality सच में चौंकाने वाली है
अगर किताब pre-order के रूप में भी बेची जाए तो मैं इस project को support करना चाहूँगा
मैं पहली पोस्ट से follow कर रहा हूँ, और हर लेख के साथ यह और प्रभावशाली लगती है
अगर आप shaders के साथ experiment करना चाहते हैं, तो मैं ये IDEs recommend करूँगा
shadertoy – browser-based है, सबसे आसान और सबसे popular
Shadron – usability अच्छी है, इसलिए मुझे व्यक्तिगत रूप से पसंद है, लेकिन थोड़ा niche है
SHADERed – UX की आदत पड़ने में समय लगता है, लेकिन features पर्याप्त हैं
KodeLife – नाम सुना है, लेकिन खुद इस्तेमाल नहीं किया
मैंने Mint के software manager में wgshadertoy देखा
flatpak, AUR, macports, Windows आदि कई platforms support करता है
macOS या iPadOS पर Playgrounds के साथ Metal shaders शुरू करना आसान है
demoscene में shader live-coding competitions के लिए इस्तेमाल होने वाला Bonzomatic भी है
programming आख़िरकार वही प्रक्रिया है जिसमें इंसान जो समझता है, उसे कंप्यूटर की समझ में बदलता है
लेकिन GPU programming में यह कठिनाई कहीं ज़्यादा होती है
इतने सारे pitfalls, hardware/software mismatch, debugging tools की कमी आदि के कारण development experience बहुत खराब हो जाता है
यह भी अफ़सोसजनक है कि community में इस समस्या को सुधारने की इच्छा कम दिखती है
OpenGL और DirectX 12 से पहले के versions hardware details को abstract करने की कोशिश थे, लेकिन नतीजे में abstraction उल्टा नुकसानदेह साबित हुआ
fragment shader लिखते समय सबसे कम intuitive हिस्सा यह है कि आप coordinates लेते हैं और color output करते हैं
पेन से चित्र बनाने के उलट, shader हर pixel की position की गणना करके उसका रंग तय करता है
objects को हिलाने के बजाय space को manipulate करने के तरीके से सोचना पड़ता है
vertex shader ज़्यादा natural लगता है क्योंकि वह triangles की position output करता है
यह सिर्फ तब unintuitive लगता है जब fragment shader का misuse किया जाए
असल में यह texture sampling और lighting calculations जैसी rendering pipeline की अंतिम stage संभालता है
PBR या deferred rendering में ज़्यादातर shared shaders इस्तेमाल होते हैं, और केवल special effects custom होते हैं
इसे shaders की समस्या नहीं बल्कि raster vs vector graphics के अंतर के रूप में देखना चाहिए
shading का काम outlines बनाना नहीं, बल्कि physically based materials को व्यक्त करना है
painting shading के ज़्यादा करीब है, लेकिन pen drawing नहीं
rectangle बनाने के लिए fragment shader का इस्तेमाल करना गलत approach है
shader का काम rectangle को shade करना है
असल में vertex shader boundaries define करता है, और fragment shader अंदरूनी हिस्सा भरता है
teaching purposes के लिए कभी-कभी vertex shader छोड़कर पूरी screen को fragment shader से भरा जाता है
GPU code सीखते समय सबसे कठिन हिस्सा initial setup का जटिल और कठिन होना है
data formats, transformation order, CPU-GPU boundary जैसी concepts मुश्किल हैं और documentation भी कम है
GPU का global variable system भी उलझन पैदा करता है
कुछ सवाल GPU से ज़्यादा API design के बारे में हैं
GPU की SIMT structure में data access consistency महत्वपूर्ण होती है
transformations हर thread के भीतर क्रमवार लागू होते हैं, और CPU-GPU boundary को performance budget के अनुसार कई बार पार किया जा सकता है
global variables, uniform की तरह, ऐसे constants हैं जो हर thread को समान रूप से दिए जाते हैं
CUDA में atomic operations के ज़रिए global access संभव है, लेकिन performance cost बहुत अधिक होती है
WebGL का introductory course एक अच्छा starting point हो सकता है
साइट की polish हैरान कर देने वाली है
diagrams, scrollbar, style — सब शानदार हैं
shaders, GPU से पहले आए थे और CPU पर भी चल सकते हैं
GPU का मूल SIMT/SIMD execution model है, और shader असल में callback function की अवधारणा जैसा है
मुझे लगता है कि CPU जैसी ही sequential thinking के साथ लिखा जा सकना, shaders की सादगी और सुंदरता की वजह है
यह बात विशेष रूप से प्रभावशाली लगी कि सभी illustrations Figma में बनाए गए हैं
मैंने जवाब में लिखा कि feedback शानदार है
काम सच में सुंदर है और बहुत polished है
100% सहमत। जिज्ञासा है कि क्या यह साइट Next.js से बना कोई custom app है
शानदार काम। इसे देखते हुए पूरा समय आनंद आया
Iñigo Quilez का वीडियो “This painting is a mathematical formula” recommend करता हूँ
यह shader की उस अवधारणा को बहुत अच्छे से दिखाता है जिसमें हर pixel के x, y coordinates को एक function के रूप में व्यक्त किया जाता है
1 टिप्पणियां
Hacker News राय
WebGL और WebGPU, Vulkan से होकर नहीं बल्कि सीधे D3D और Metal के ऊपर काम करते हैं
इसके अलावा Vulkan open source नहीं बल्कि एक standard है
WebGPU सिर्फ ब्राउज़र तक सीमित नहीं है; यह C++ के लिए Dawn, Rust के लिए WGPU लाइब्रेरी के रूप में भी उपलब्ध है, इसलिए Windows, macOS, Linux, iOS, Android आदि पर चल सकता है
Vulkan, DirectX की तुलना में थोड़े अधिक platforms पर चलता है, लेकिन यह Windows की default configuration में शामिल नहीं होता और macOS या iOS पर नहीं चलता
इसकी actual implementation हर hardware vendor करता है, और Vulkan अपने आप में सिर्फ header files है
साथ ही MoltenVK या KosmicKrisp जैसे Vulkan-to-Metal translation layers के ज़रिए यह Apple platforms पर भी अच्छी तरह चल सकता है
DirectX Windows और Xbox पर है, जबकि Vulkan Linux, Android, Windows, Nintendo Switch, Switch 2 आदि पर इस्तेमाल किया जा सकता है
PlayStation Vulkan को support नहीं करता, और Switch पर OpenGL/Vulkan की जगह ज़्यादातर NVN का इस्तेमाल होता है
कुछ Linux VNC environments में Vulkan न चलना कोई सामान्य स्थिति नहीं है
ज़्यादातर users को GPU drivers के ज़रिए Vulkan support मिल जाता है
अगर किताब pre-order के रूप में भी बेची जाए तो मैं इस project को support करना चाहूँगा
मैं पहली पोस्ट से follow कर रहा हूँ, और हर लेख के साथ यह और प्रभावशाली लगती है
Kirell Benzi के प्रभावशाली काम वहाँ हैं
flatpak, AUR, macports, Windows आदि कई platforms support करता है
लेकिन GPU programming में यह कठिनाई कहीं ज़्यादा होती है
इतने सारे pitfalls, hardware/software mismatch, debugging tools की कमी आदि के कारण development experience बहुत खराब हो जाता है
यह भी अफ़सोसजनक है कि community में इस समस्या को सुधारने की इच्छा कम दिखती है
पेन से चित्र बनाने के उलट, shader हर pixel की position की गणना करके उसका रंग तय करता है
objects को हिलाने के बजाय space को manipulate करने के तरीके से सोचना पड़ता है
vertex shader ज़्यादा natural लगता है क्योंकि वह triangles की position output करता है
असल में यह texture sampling और lighting calculations जैसी rendering pipeline की अंतिम stage संभालता है
PBR या deferred rendering में ज़्यादातर shared shaders इस्तेमाल होते हैं, और केवल special effects custom होते हैं
shading का काम outlines बनाना नहीं, बल्कि physically based materials को व्यक्त करना है
painting shading के ज़्यादा करीब है, लेकिन pen drawing नहीं
shader का काम rectangle को shade करना है
teaching purposes के लिए कभी-कभी vertex shader छोड़कर पूरी screen को fragment shader से भरा जाता है
data formats, transformation order, CPU-GPU boundary जैसी concepts मुश्किल हैं और documentation भी कम है
GPU का global variable system भी उलझन पैदा करता है
Barebones WebGL in 75 lines,
Barebones 3D rendering with WebGL
Vulkan में WebGL की तुलना में कहीं ज़्यादा boilerplate code चाहिए होता है
GPU की SIMT structure में data access consistency महत्वपूर्ण होती है
transformations हर thread के भीतर क्रमवार लागू होते हैं, और CPU-GPU boundary को performance budget के अनुसार कई बार पार किया जा सकता है
global variables, uniform की तरह, ऐसे constants हैं जो हर thread को समान रूप से दिए जाते हैं
CUDA में atomic operations के ज़रिए global access संभव है, लेकिन performance cost बहुत अधिक होती है
WebGL का introductory course एक अच्छा starting point हो सकता है
diagrams, scrollbar, style — सब शानदार हैं
shaders, GPU से पहले आए थे और CPU पर भी चल सकते हैं
GPU का मूल SIMT/SIMD execution model है, और shader असल में callback function की अवधारणा जैसा है
मुझे लगता है कि CPU जैसी ही sequential thinking के साथ लिखा जा सकना, shaders की सादगी और सुंदरता की वजह है
यह shader की उस अवधारणा को बहुत अच्छे से दिखाता है जिसमें हर pixel के x, y coordinates को एक function के रूप में व्यक्त किया जाता है