# MaterialX

### Needle Engine में MaterialX

MaterialX रेंडरिंग इंजन से स्वतंत्र, ग्राफ़-आधारित तरीके से सामग्री और शेडर्स का वर्णन करने के लिए एक शक्तिशाली मानक है। यह आपको कई सतह परतों और यथार्थवादी प्रकाश व्यवस्था के साथ जटिल सामग्री को परिभाषित करने की अनुमति देता है।

यह फिल्म, वीएफएक्स और ई-कॉमर्स में व्यापक रूप से उपयोग किया जाता है, और Autodesk Maya और 3ds Max, Houdini, V-Ray, और Omniverse जैसे कई पेशेवर ऑथरिंग टूल द्वारा समर्थित है।

::: tip और जानें आप [MaterialX वेबसाइट](https://www.materialx.org/) पर MaterialX के बारे में और जान सकते हैं। :::

Unity के [**Shader Graph**](https://docs.unity3d.com/Packages/com.unity.shadergraph@17.3/manual/index.html) के साथ बनाई गई सामग्री को **Needle MaterialX Exporter** के माध्यम से स्वचालित रूप से MaterialX फ़ाइलों में निर्यात किया जा सकता है, जो हमारे Unity इंटीग्रेशन पैकेज का हिस्सा है।

यह आपको Unity में जटिल, प्रकाशित सामग्री बनाने की अनुमति देता है, और वे आपकी सीन के साथ स्वचालित रूप से निर्यात की जाती हैं। MaterialX निर्यात हमारे मौजूदा अनलिट शेडर निर्यात का विस्तार करता है, जो WebGL2 शेडर्स के उपयोग के कारण कम पोर्टेबल है। MaterialX के साथ, आप WebGPU और भविष्य की रेंडरिंग तकनीकों के लिए तैयार हैं, और अपने वेब प्रोजेक्ट्स में उच्च निष्ठा वाली सामग्री प्राप्त कर सकते हैं।

Needle Engine में MaterialX सपोर्ट आधिकारिक [MaterialX जावास्क्रिप्ट लाइब्रेरी](https://github.com/materialx/MaterialX) का उपयोग करता है, जिसका अर्थ है कि सामग्री को उच्चतम निष्ठा पर दर्शाया जाता है। यह आपको किसी भी MaterialX फ़ाइल का उपयोग करने की अनुमति देता है।

::: info Shader Graph से MaterialX के लिए **प्रो**, **एजु** या **एंटरप्राइज** प्लान की आवश्यकता है। MaterialX एक्सपोर्टर प्रो, एजु और एंटरप्राइज प्लान वाले उपयोगकर्ताओं के लिए उपलब्ध है। [प्लान और मूल्य निर्धारण देखें।](https://needle.tools/pricing) :::

### उपयोग के मामले

MaterialX एक बढ़िया विकल्प है यदि आप

* कलात्मक नियंत्रण और लचीलेपन के लिए अपने प्रोजेक्ट्स के लिए **ग्राफ़-आधारित सामग्री** का उपयोग कर रहे हैं।
* प्रक्रियात्मक बनावट (टेक्सचर), विवरण मानचित्र (डिटेल मैप), या स्तरित सामग्री (लेयर्ड मटेरियल) जैसी **समृद्ध और जटिल सतह सुविधाओं** की आवश्यकता है।
* आपके पास **मौजूदा MaterialX सामग्री** है जिसे आप अपनी स्टूडियो पाइपलाइन में बनाए रखना चाहते हैं।
* विभिन्न रेंडरिंग इंजनों में अपनी प्रस्तुतियाँ (रेंडरिंग) के लिए **सुसंगतता और संगतता** सुनिश्चित करना चाहते हैं।

### अपने प्रोजेक्ट में MaterialX सपोर्ट सक्षम करें

अपने Needle Engine प्रोजेक्ट में MaterialX सपोर्ट को सक्षम करने के लिए, आपको `@needle-tools/materialx` पैकेज को अपने प्रोजेक्ट में जोड़ना होगा।

::: tabs

@tab यूनिटी

1. अपनी सीन में Needle Engine कंपोनेंट का चयन करें।
2. इंस्पेक्टर में "NpmDef Dependencies" अनुभाग ढूंढें, और "साइज" संख्या (जैसे 0 से 1 तक) बढ़ाकर एक नई डिपेंडेंसी जोड़ें।
3. ऑब्जेक्ट पिकर प्रतीक पर क्लिक करें, आंख के प्रतीक के साथ पैकेज दृश्यता सक्षम करें, और सूची से `Needle MaterialX` पैकेज का चयन करें।

   ![यूनिटी में MaterialX पैकेज डिपेंडेंसी ढूंढें और जोड़ें।](https://github.com/needle-tools/needle-engine-support/blob/main/materialx/add-materialx-package-dependency.jpeg) *यूनिटी में MaterialX पैकेज डिपेंडेंसी ढूंढें और जोड़ें।*

अब आप अपने वेब प्रोजेक्ट में MaterialX का उपयोग करने के लिए तैयार हैं।

@tab अन्य Needle इंटीग्रेशन

1. अपने वेब प्रोजेक्ट को कोड एडिटर (जैसे VS Code) में ढूंढें और खोलें। [जानें कि अपने वेब प्रोजेक्ट को कैसे खोलें।](https://github.com/needle-tools/needle-engine-support/blob/main/documentation/lang/hi/project-structure.html#opening-the-web-project-in-a-code-editor)
2. अपने वेब प्रोजेक्ट में एनपीएम रजिस्ट्री से Needle MaterialX पैकेज इंस्टॉल करें।

   ```bash
   npm install @needle-tools/materialx
   ```

   यह MaterialX पैकेज को आपके प्रोजेक्ट में जोड़ देगा।
3. यदि आप हमारे किसी भी Vite-आधारित टेम्प्लेट का उपयोग कर रहे हैं, तो आपको और कुछ करने की आवश्यकता नहीं है। MaterialX पैकेज आपके प्रोजेक्ट में स्वचालित रूप से शामिल हो जाएगा।

   ::: tip यदि आप निश्चित नहीं हैं, तो आप शायद हमारे Vite-आधारित टेम्प्लेट में से एक का उपयोग कर रहे हैं! :::
4. यदि आप Needle Vite प्लगइन्स का उपयोग नहीं कर रहे हैं, तो अपनी मुख्य एंट्री फ़ाइल में MaterialX को आयात और रजिस्टर करें, उदाहरण के लिए `main.ts` में:

   ```ts
   import { useNeedleMaterialX } from "@needle-tools/materialx";
   useNeedleMaterialX();
   ```

अब आप अपने वेब प्रोजेक्ट में MaterialX का उपयोग करने के लिए तैयार हैं।

@tab three.js

आप हमारे MaterialX पैकेज का उपयोग किसी भी three.js प्रोजेक्ट में कर सकते हैं, भले ही आप Needle Engine का उपयोग नहीं कर रहे हों।

1. अपने `GLTFLoader` के साथ हमारे `MaterialX` प्लगइन को रजिस्टर करें:

   ```ts
   import { useNeedleMaterialX } from "@needle-tools/materialx";
   import { GLTFLoader } from "three/examples/jsm/loaders/GLTFLoader.js";

   const gltfLoader = new GLTFLoader();

   // ... register other plugins such as DRACOLoader, KTX2Loader, etc.
   useNeedleMaterialX(gltfLoader);

   // ... load a file that contains MaterialX materials
   gltfLoader.load("https://cloud.needle.tools/-/assets/Z23hmXB2qfHiF-2qfHiF/file", (gltf) => {
       scene.add(gltf.scene);
   });
   ```
2. `NEEDLE_materials_mtlx` एक्सटेंशन वाली GLB फ़ाइलें लोड करें। प्लगइन स्वचालित रूप से MaterialX सामग्री को उन ऑब्जेक्ट्स पर लोड और लागू करेगा जो उनका उपयोग कर रहे हैं।
3. आप `useNeedleMaterialX(gltfLoader, { preload: true })` को कॉल करके MaterialX वेबअसेंबली मॉड्यूल की प्रीलोडिंग सक्षम कर सकते हैं। यह MaterialX वेबअसेंबली मॉड्यूल को पहले से लोड कर देगा, ताकि जब आप MaterialX सामग्री वाली GLB फ़ाइल लोड करें तो वह तैयार रहे।

आप StackBlitz पर three.js प्रोजेक्ट में MaterialX का उपयोग कैसे करें, इसका एक पूर्ण उदाहरण पा सकते हैं: [three.js में MaterialX](https://stackblitz.com/edit/needle-materialx-example?file=main.js)।

:::

### MaterialX सपोर्ट के साथ सामग्री निर्यात करना

1. यूनिटी के Shader Graph से सामग्री बनाएँ।

   ![यूनिटी में एक जटिल Shader Graph का उदाहरण।](https://github.com/needle-tools/needle-engine-support/blob/main/materialx/shadergraph-example.webp) *यूनिटी में एक जटिल Shader Graph का उदाहरण।*
2. अपनी सीन में Shader Graph-आधारित सामग्री वाले ऑब्जेक्ट का चयन करें, या प्रोजेक्ट व्यू में शेडर एसेट का चयन करें।
3. सामग्री गुणों में, "Needle Engine – कस्टम शेडर सेटिंग्स" अनुभाग ढूंढें, और शेडर निर्यात प्रकार के रूप में "MaterialX" चुनें।

   ![Shader Graph सामग्री गुणों में MaterialX निर्यात प्रकार को सक्षम करना।](https://github.com/needle-tools/needle-engine-support/blob/main/materialx/enable-asset-label-from-material.jpeg) *Shader Graph सामग्री गुणों में MaterialX निर्यात प्रकार को सक्षम करना।*
4. जब आप अपनी सीन निर्यात करते हैं, तो "MaterialX" निर्यात प्रकार के साथ शेडर्स का उपयोग करने वाली सभी सामग्री आपकी 3D सामग्री के साथ एम्बेड की जाएंगी, और रनटाइम पर लोड की जाएंगी।

### बाहरी रूप से बनाई गई MaterialX फ़ाइलों का उपयोग करना

Needle MaterialX पैकेज में MaterialX फ़ाइलों को सीधे लोड करने के लिए प्रयोगात्मक समर्थन शामिल है। बनावट (टेक्सचर) को कॉलबैक फ़ंक्शन के माध्यम से हल किया जा सकता है, और सामग्री तीन.जेएस `ShaderMaterial` के रूप में लौटाई जाती है।

आप [StackBlitz पर हमारे MaterialX संग्रह](https://stackblitz.com/@marwie/collections/materialx) में Needle MaterialX पैकेज के साथ काम करने के उदाहरण पा सकते हैं।

:::: tabs @tab कोड से

```ts
import { TextureLoader } from 'three';
import { Experimental_API } from '@needle-tools/materialx';

// URL से एक MaterialX फ़ाइल और उसकी संदर्भित बनावट (टेक्सचर) लोड करें
function load(mtlx_url) {
    const parts = mtlx_url.split('/');
    parts.pop();
    const dir = parts.join('/');

    return fetch(mtlx_url)
    .then((res) => res.text())
    .then((mtlx) => {
        const loader = new TextureLoader();
        Experimental_API.createMaterialXMaterial(mtlx, '', {
            getTexture: async (url) => {
                return await loader.loadAsync(dir + url);
            },
        }).then((mat) => {
            console.log("MaterialX material has been loaded:", mat);
        });
    });
}
```

::: info `Experimental_API.createMaterialXMaterial()` विधि वर्तमान में कई सामग्री लोड करने का समर्थन नहीं करती है, या अतिरिक्त .mtlx संदर्भों वाली MaterialX फ़ाइलें। :::

::::

### समर्थित नोड्स और सुविधाएँ

Needle Engine पूर्ण MaterialX विशिष्टता का समर्थन करता है, जिसमें OpenPBR, Standard Surface, UsdPreviewSurface और Unlit Surface नोड्स शामिल हैं, और इसमें एनपीआर (गैर-फोटोरियलिस्टिक रेंडरिंग) नोड्स जैसे फ्रेस्नेल प्रभाव शामिल हैं। नेस्टेड नोडग्राफ परिभाषाएँ और कस्टम नोड्स भी समर्थित हैं।

Needle Engine में MaterialX सामग्री निम्नलिखित सुविधाओं का समर्थन करती है:

* सीन के पर्यावरण मानचित्र से स्वचालित रूप से आने वाली **इमेज-बेस्ड लाइटिंग** (IBL)
* **रिफ्लेक्शन प्रोब** MaterialX सामग्री का उपयोग करने वाले ऑब्जेक्ट्स को प्रभावित करते हैं
* **प्रकाश स्रोत**: दिशात्मक, बिंदु और स्पॉट लाइट, प्रति सीन में 8 लाइटों की वर्तमान सीमा के साथ
* **टेक्सचर कम्प्रेशन और प्रोग्रेसिव टेक्सचर**। MaterialX सामग्री Needle Engine की शक्तिशाली टेक्सचर कम्प्रेशन और प्रोग्रेसिव लोडिंग सुविधाओं का पूरी तरह से समर्थन करती है, जिससे आप बड़े टेक्सचर का उपयोग कर सकते हैं। वे केवल तभी लोड किए जाएंगे जब उनकी आवश्यकता होगी, और केवल वर्तमान दृश्य के लिए आवश्यक रिज़ॉल्यूशन में।
* रंगों, फ्लोट्स, वैक्टर के लिए **एनिमेटेड सामग्री गुण**। Needle Engine में अन्य सामग्रियों की तरह, किसी भी संख्यात्मक सामग्री गुण को एनिमेट किया जा सकता है।
* सभी MaterialX सतह मॉडल, जिसमें **OpenPBR**, **Standard Surface**, **UsdPreviewSurface**, और **Unlit Surface** शामिल हैं।

Needle MaterialX एक्सपोर्टर निर्यात के लिए यूनिटी के Shader Graph की ग्राफ़-आधारित संरचना का लाभ उठाता है, और Shader Graph नोड्स को MaterialX नोडडेफ और नोडग्राफ में परिवर्तित करता है। यह निम्नलिखित सुविधाओं के लिए समर्थन प्रदान करता है:

* **सामग्री गुण** जैसे रंग, फ्लोट, वेक्टर, टेक्सचर
* संख्याओं, वैक्टर और मैट्रिसेस पर **संचालन**
* **ब्लेंड नोड्स** जैसे मिक्स, ऐड, मल्टीप्लाई, और विभिन्न ब्लेंड मोड के साथ ब्लेंड
* **टेक्सचर** और कलर स्पेस
* एक या अधिक स्तरों की नेस्टिंग वाले **सबग्राफ**
* **वर्टेक्स रंग** समर्थित हैं
* **एकाधिक यूवी चैनल** समर्थित हैं (4 तक)
* **शेडर कीवर्ड** समर्थित हैं और MaterialX में स्विच नोड्स के रूप में निर्यात किए जाएंगे।

### समर्थित MaterialX संस्करण

Needle Engine वर्तमान में MaterialX संस्करण 1.39.4 का समर्थन करता है। पुराने संस्करणों वाले MaterialX दस्तावेज़ भी समर्थित हैं और स्वचालित रूप से नवीनतम संस्करण में अपग्रेड किए जाएंगे।

### MaterialX एक्सपोर्टर की सीमाएँ

Shader Graph द्वारा समर्थित सभी सुविधाएँ MaterialX द्वारा भी समर्थित नहीं हैं। यदि आप किसी असमर्थित नोड को निर्यात करने का प्रयास करते हैं, तो एक्सपोर्टर एक त्रुटि लॉग करेगा और निर्यात प्रक्रिया को रोक देगा। यदि संभव हो, तो आप असमर्थित नोड को समर्थित नोड से बदलकर इस समस्या को ठीक कर सकते हैं।

* **वर्टेक्स विस्थापन अभी समर्थित नहीं है**: MaterialX विस्थापन मैपिंग का समर्थन करता है, लेकिन Needle Engine वर्तमान में इसका समर्थन नहीं करता है। इसका मतलब है कि आपकी MaterialX फ़ाइलों में किसी भी विस्थापन नोड को अनदेखा कर दिया जाएगा।
* **रियलटाइम शैडो**: आपकी सीन में प्रकाश स्रोत MaterialX सामग्री को प्रभावित करेंगे, लेकिन रियलटाइम शैडो वर्तमान में समर्थित नहीं हैं।
* **बेक्ड लाइटमैप**: बेक्ड लाइटमैप वर्तमान में MaterialX सामग्री में समर्थित नहीं हैं।
* **टेंजेंट स्पेस** इस समय समर्थित नहीं है, जिसका अर्थ है कि "टेंजेंट" को स्पेस के रूप में निर्दिष्ट करने वाले Shader Graph नोड्स अलग दिखेंगे।
* **कोड नोड्स** इस समय समर्थित नहीं हैं।

::: tip विशेष "MATERIALX" शेडर कीवर्ड यदि आपके पास असमर्थित नोड्स वाले जटिल शेडर हैं, तो आप उन्हें निर्यात होने से रोकने के लिए "MATERIALX" कीवर्ड का उपयोग कर सकते हैं। कीवर्ड स्विच का "ऑन" पाथ निर्यात किया जाएगा, और "ऑफ" पाथ को निर्यात के लिए अनदेखा कर दिया जाएगा। आप इसका उपयोग कस्टम नोड्स या असमर्थित सुविधाओं वाले शेडर्स को कार्यात्मक बनाए रखने के लिए कर सकते हैं, लेकिन फिर भी उन्हें MaterialX में निर्यात कर सकते हैं। :::

::: info three.js में बिल्ट-इन MaterialX सपोर्ट जबकि three.js में MaterialX के लिए कुछ प्रारंभिक समर्थन है, यह एक कस्टम कार्यान्वयन का उपयोग कर रहा है जो मानक की कई सुविधाओं का समर्थन नहीं करता है, जिससे सामग्री प्रतिनिधित्व में कम सटीकता आती है। Needle Engine आधिकारिक MaterialX जावास्क्रिप्ट लाइब्रेरी का उपयोग करता है, जिसका अर्थ है कि सामग्री को उच्चतम निष्ठा पर दर्शाया जाता है। Needle बिल्ट-इन three.js MaterialX सपोर्ट में योगदान दे रहा है, ताकि किसी बिंदु पर हम दोनों विकल्प प्रदान कर सकें या three.js कार्यान्वयन पर स्विच कर सकें जब यह अधिक व्यापक हो जाए। :::

\
\
यह पृष्ठ एआई का उपयोग करके स्वचालित रूप से अनुवादित किया गया है
