Q100326: अपना पहला कस्टम Op कैसे लिखें और उसका परीक्षण कैसे करें

सारांश

ऑप्स, Katana में 3D दृश्य डेटा बनाने और उसमें हेरफेर करने वाले ऑपरेशनों के निर्माण खंड हैं। ऑप्स, C++ में लिखे गए Op Types नामक प्लग-इन के उदाहरण हैं। ये Katana के Op API का उपयोग करके विभिन्न ऑपरेशन कर सकते हैं, दृश्य ग्राफ़ में हेरफेर कर सकते हैं और विशेषताओं को संशोधित कर सकते हैं

यह आलेख $KATANA_ROOT/plugins/Src/Ops के अंतर्गत पाए गए HelloWorld उदाहरण Op के आधार पर एक कस्टम Op लिखने, संकलित करने और परीक्षण करने का चरण-दर-चरण उदाहरण प्रदान करता है

अधिक जानकारी

कस्टम Op बनाने से पहले, $KATANA_ROOT/plugins/Src/Ops में दिए गए उदाहरण Ops पर एक नज़र डालना उपयोगी हो सकता है । यह ट्यूटोरियल विशेष रूप से HelloWorld उदाहरण Op पर आधारित है।

निम्नलिखित चरण बताते हैं कि इस Op के स्रोत कोड को कैसे संशोधित किया जाए ताकि एक ऐसा Op बनाया जा सके जो दृश्य ग्राफ में स्थानों पर विशेषताओं को पढ़ और सेट कर सके।

  1. $KATANA_ROOT/plugins/Src/Ops/HelloWorld/src/HelloWorldOp.cpp में cook() फ़ंक्शन को संशोधित करें ताकि यह इस प्रकार दिखे:
static void cook(Foundry::Katana::GeolibCookInterface& interface)
{
   FnAttribute::StringAttribute typeAttr = interface.getAttr("type");
   interface.setAttr("testType",  typeAttr);

    if (interface.atRoot())
    {
       interface.setAttr("hello", FnAttribute::StringAttribute("world!"));
    }

}

  1. उदाहरण Op प्लगइन्स बनाने के लिए, कृपया $KATANA_ROOT/plugins/Src/README.md में दिए गए निर्देशों का पालन करें

    सुनिश्चित करें कि cmake कमांड में स्रोत फ़ाइल पथ सही Katana संस्करण की ओर इंगित कर रहा है। cmake कमांड में -DCMAKE_PREFIX_PATH शामिल करना आवश्यक नहीं है, क्योंकि यह अन्य Op उदाहरणों के लिए निर्भरताएँ निर्दिष्ट कर रहा है जिनमें हमें इस मामले में रुचि नहीं है।

  1. प्लग-इन बन जाने और इंस्टॉल हो जाने के बाद, सुनिश्चित करें कि इंस्टॉल डायरेक्टरी KATANA _RESOURCES का हिस्सा हो। README.md में दिए गए कमांड का उपयोग करके, MyKatanaResources डायरेक्टरी को KATANA _RESOURCES में शामिल किया जाना चाहिए।

  1. Katana लॉन्च करें, एक CameraCreate नोड बनाएं और उससे GenericOp नोड कनेक्ट करें।

  1. GenericOp नोड के opType पैरामीटर को "HelloWorld" पर सेट करें। इसका परिणाम यह होगा कि प्रत्येक स्थान पर testType नामक एक विशेषता सेट हो जाएगी और विशेषता का मान उस स्थान का प्रकार होगा। इसके अतिरिक्त , /root पर hello नामक एक विशेषता को world के मान पर सेट किया जाएगा!

कुक cook() फ़ंक्शन को किसी भी स्थान पर आपकी रुचि के किसी भी गुण को पढ़ने या सेट करने, या कई अन्य ऑपरेशन करने के लिए भी संशोधित किया जा सकता है।

कस्टम ऑप्स में उपयोग किए जा सकने वाले अधिक कार्यों के लिए, कृपया कुक इंटरफेस (सी++) पर Katana डेवलपर गाइड देखें

नोट: Op डिफ़ॉल्ट रूप से सभी स्थानों पर चलता है (जैसा कि GenericOp नोड में applyWhere पैरामीटर द्वारा निर्दिष्ट किया गया है), इसलिए यह प्रत्येक दृश्य ग्राफ़ स्थान पर निष्पादित होगा। उपरोक्त उदाहरण में, इसके परिणामस्वरूप testType विशेषता सभी स्थानों पर सेट हो जाती है।

क्योंकि यह हमेशा वांछनीय नहीं होता है, इसलिए उपरोक्त उदाहरण में एक if कथन भी शामिल है जो यह जांचता है कि क्या इंटरफ़ेस atRoot() है - इसके परिणामस्वरूप if ब्लॉक के अंदर के कथन केवल तभी निष्पादित होंगे जब Op उस शीर्षतम स्थान पर चल रहा हो, जहां इसे पकाया गया है, और आप Op को उस शीर्षतम स्थान के नीचे संपूर्ण दृश्य ग्राफ को पार करने से रोकने के लिए if कथन के बाद interface.stopChildTraversal() का उपयोग कर सकते हैं।

यदि आप अपने Op का उपयोग करने के लिए एक कस्टम नोड प्रकार बनाना चाहते हैं, तो कृपया $KATANA_ROOT/plugins/Src/Ops/Messer/RegisterMesserNode.py के अंतर्गत पाए गए NodeTypeBuilder-आधारित नोड प्रकार के उदाहरण को देखें।

कुछ NodeTypeBuilder API फ़ंक्शन Katana डेवलपर गाइड में प्रलेखित हैं।

आगे की सहायता

यदि आपको इन चरणों में कोई समस्या आती है, तो कृपया एक सहायता टिकट खोलें और हमें बताएं कि आपको क्या समस्या आ रही है और आपने अब तक क्या समस्या निवारण कदम उठाए हैं।

समर्थन टिकट खोलने के तरीके के बारे में अधिक जानकारी के लिए, कृपया Q100064: समर्थन टिकट कैसे खोलें देखें



    हम चाहते हैं कि खेद व्यक्त करते हैं

    कृपया हमें बताएँ कि