परिचय
- Fidget एक लाइब्रेरी है जो बड़े पैमाने के गणितीय expression को represent, compile और evaluate करने के लिए डिज़ाइन की गई है, और यह मुख्यतः implicit surface के backend के रूप में बनाई गई है।
- इसे अलग-अलग उपयोग मामलों में बहुत लचीले तरीके से इस्तेमाल किया जा सकता है।
अप्रत्यक्ष सतह क्या है?
- अप्रत्यक्ष सतह को सामान्यतः
f(x, y, z) → d जैसी expression से व्यक्त किया जाता है; यदि d पॉज़िटिव हो तो point मॉडल के बाहर होता है और यदि d नेगेटिव हो तो अंदर।
- उदाहरण के लिए, रेडियस 1 वाली sphere को
f(x,y,z)=x²+y²+z²−1 से व्यक्त किया जा सकता है।
- Fidget का मुख्य फोकस उन closed-form implicit surfaces पर है जो केवल बेसिक arithmetic ऑपरेशन्स से बने हों।
अप्रत्यक्ष सतहों के फायदे
- implicit surface कॉम्पैक्ट होती हैं और बड़े पैमाने पर parallel evaluation के लिए उपयुक्त हैं।
- CSG operations (union, intersection आदि) को सरल तरीके से संभाला जा सकता है।
- closed-form equations optimization के लिए अनुकूल हैं और evaluation के दौरान चुना गया branch ट्रैक किया जा सकता है।
उत्पत्ति
- पिछले 10 वर्षों से implicit surface के rendering और evaluation पर शोध किया गया है।
- Fidget एक निजी शोध परियोजना है, जो Rust में लिखी गई है ताकि libfive जैसी मौजूद kernels की तुलना में इसे उपयोग करना आसान हो।
लाइब्रेरी की संरचना
- Fidget तीन अलग-थलग मुख्य layers और demo applications से मिलकर बना है।
फ्रंटएंड: गणितीय expression निर्माण
- Fidget गणितीय expression बनाने के लिए Rhai scripting language का उपयोग करता है।
- गणितीय tree को directed acyclic graph (DAG) में बदलकर duplicate हटाए जाते हैं।
- SSA tape graph को लाइनियर code के रूप में फ्लैटन करता है।
बैकएंड: तेज़ और लचीला evaluation
- Fidget backend frontend से अलग है और कई evaluation modes को support करता है।
- JIT compiler bytecode को machine instructions में बदलकर performance को अधिकतम करता है।
एल्गोरिद्म
- Fidget तेज़ evaluation पर आधारित होकर अलग-अलग rendering और meshing algorithms implement करता है।
- Meshing में Manifold Dual Contouring का उपयोग किया जाता है, जिससे watertightness, manifoldness और sharp feature preservation सुनिश्चित होता है।
डेमो
- Fidget कई demos के साथ आता है और web GUI इसका सबसे रोचक हिस्सा है।
- इसे web development की latest technologies खोजने के अवसर के रूप में इस्तेमाल किया गया।
भविष्य की संभावनाएँ
- GPU backend जोड़ना, meshing सुधारना, standard library बनाना और higher-level language bindings जैसी चीज़ें अगली प्राथमिकताओं में हैं।
निष्कर्ष
- Fidget अब सार्वजनिक रूप से उपलब्ध है और इसे किसी Rust प्रोजेक्ट में आसानी से जोड़ा जा सकता है।
- इसे ओपन सोर्स तथा commercial उपयोग के लिए अनुकूल लाइसेंस के साथ जारी किया गया है।
1 टिप्पणियां
Hacker News टिप्पणी
यह परियोजना कई कंप्यूटर साइंस क्षेत्रों को कवर करती है, जिसमें डेटा स्ट्रक्चर, अल्गोरिदम, लो-लेवल परफॉर्मेंस वर्क, कंपाइलर, रेंडरिंग/कंप्यूटर ग्राफिक्स, UI/UX डिजाइन टूल्स और GPGPU प्रोग्रामिंग शामिल हैं।
लेखक अन्य अच्छे पोस्ट पढ़ रहे थे।
लेखक को लगता है कि जब उन्होंने अपना implicit surface drawer लिखा था, तब यह प्रोजेक्ट बहुत उपयोगी होता।
libfive मुख्यतः C++ में लिखा लगभग 40K लाइन का कोड है, जिसे मूल लेखक के लिए भी hack करना आसान नहीं।
सबसे अच्छा code-based CAD सॉफ़्टवेयर खोज रहे हैं; cad query आज़माया, लेकिन कुछ समस्याएँ थीं।
कॉलेज के समय एक nuclear physics simulator में लेखक ने implicit surface पर काम किया था।
वे सर्फ़ेस निर्माण के लिए SDF के साथ abstract tree पर काम करना चाहते हैं।
लेखक ने implicit surface पर पेपर और डेमो देखे हैं, और कल्पना के सहारे मॉडल बना सकते हैं।
यह Ian Henry के प्रोजेक्ट की याद दिलाता है।
ग्राफ़िक्स वर्क में कोई अनुभव न रखने वाले व्यक्ति के लिए यह प्रोजेक्ट बेहद दिलचस्प लगता है।