प्रश्न100291: OpScript के लिए CEL कथन एकत्रित करते समय दक्षता में सुधार कैसे करें

सारांश

यह आलेख बताता है कि OpScript नोड की Lua स्क्रिप्ट के अंदर मूल्यांकित CEL कथन (एक संग्रह ऑपरेशन) के कैश किए गए परिणामों का उपयोग कैसे किया जाए।

यह OpScript नोड पर स्क्रिप्ट बटन की पायथन स्क्रिप्ट को निष्पादित करके, तथा परिणामी दृश्य ग्राफ स्थान पथों को उपयोगकर्ता पैरामीटर में कैश करके प्राप्त किया जाता है, ताकि वे OpScript नोड की Lua स्क्रिप्ट में उपयोग के लिए उपलब्ध हो जाएं।

यह उपयोगकर्ताओं को ' collect' ऑपरेशन करने की अनुमति देता है जब यह उनके लिए सुविधाजनक हो, और OpScript Lua स्क्रिप्ट को कैश किए गए परिणामों पर काम करने देता है, बजाय इसके कि जब भी OpScript नोड को पकाया जाता है, तो संभवतः पूरे दृश्य ग्राफ के खिलाफ CEL कथन का मिलान करना पड़ता है।

कृपया इस बारे में जानकारी के लिए आगे पढ़ें कि ऐसी स्क्रिप्ट कैसे और क्यों स्थापित की जाए।

अधिक जानकारी

उपयोगकर्ता OpScript नोड पर Lua स्क्रिप्ट के भीतर एकत्रित ऑपरेशन के परिणामों का उपयोग करना चाह सकते हैं, उदाहरण के लिए परिणामी स्थान पथों को दृश्य ग्राफ विशेषता के अंतर्गत संग्रहीत करने के लिए या उन्हें Lua स्क्रिप्ट में संचालित करने के लिए उपलब्ध कराने के लिए।

अवांछनीय दृष्टिकोण

किसी OpScript के भीतर CEL कथनों के मूल्यांकन के परिणामों को एकत्रित करना अवांछनीय है, क्योंकि इसके लिए दृश्य के एक भाग को, यदि सम्पूर्ण नहीं, तो प्रत्येक बार अपस्ट्रीम रेसिपी को संशोधित करने के लिए, पकाने की आवश्यकता होती है, ताकि यह निर्धारित किया जा सके कि स्थान दिए गए CEL कथन से मेल खाते हैं या नहीं।

बड़े सीन ग्राफ़ वाले सीन पर काम करते समय यह कम्प्यूटेशनल रूप से बहुत महंगा और लंबा ऑपरेशन हो सकता है। इंटरैक्टिव संदर्भ में यह बेहद अवांछनीय है, और Katana के विलंबित मूल्यांकन मॉडल के विपरीत है।

अनुशंसित दृष्टिकोण

सीईएल स्टेटमेंट्स के मूल्यांकन के परिणाम एकत्र करने के लिए, एक बेहतर विकल्प एक उपयोगकर्ता-ट्रिगर स्क्रिप्ट का उपयोग करना है जिसे एक बार निष्पादित किया जाता है। यह स्क्रिप्ट एक बार के कुक में दृश्य को पार करती है और जानकारी एकत्र करती है जिसका उपयोग नोड पैरामीटर्स को पॉप्युलेट करने के लिए किया जा सकता है। किसी भी प्रासंगिक स्थान परिवर्तन की स्थिति में परियोजना को अद्यतित रखने के लिए इसे दोहराया जाना आवश्यक है।

CEL कथन से मेल खाने वाले मौजूदा स्थानों के समूह को प्राप्त करने के लिए, CEL संग्रह ऑपरेशन का उपयोग करें। स्क्रिप्ट बटन के माध्यम से निष्पादित स्क्रिप्ट में, आप CollectAndSelectInScenegraph() फ़ंक्शन का उपयोग कर सकते हैं जो विजेट्स मॉड्यूल का हिस्सा है:

collector = Widgets.CollectAndSelectInScenegraph(celStatement, traversalRootLocationPath)
matchedLocationPaths = collector.collectAndSelect(select=False, node=myNode)

कहाँ:

  • celStatement वह अभिव्यक्ति है जिसका मूल्यांकन किया जाना है।
  • traversalRootLocationPath वह दृश्य ग्राफ़ स्थान पथ है जहाँ से मूल्यांकन शुरू होना चाहिए। यह /root या कोई अन्य निर्दिष्ट दृश्य ग्राफ़ स्थान हो सकता है, उदाहरण के लिए /root/world/geo यदि इस शाखा में केवल उप-स्थानों का ही CEL कथन से मिलान किया जाना है।

उदाहरण दृश्य

संलग्न उदाहरण दृश्य में आप इस रणनीति का कार्यान्वयन देख सकते हैं। यह दृश्य 'ऑपस्क्रिप्ट में ज्यामिति उत्पन्न करना' उदाहरण परियोजना से L-प्रणाली का उपयोग कर रहा है। आप पैरामीटर टैब के शीर्ष पर स्थित रिंच आइकन पर क्लिक करके और 'उपयोगकर्ता पैरामीटर संपादित करें' पर क्लिक करके, फिर 'CollectGeometryLocations' बटन > 'विजेट विकल्प...' के ऊपर स्थित रिंच आइकन पर क्लिक करके CollectAndSet OpScript नोड में स्क्रिप्ट का निरीक्षण कर सकते हैं।

CEL_Statements_OpScript.png

CEL_Statements_OpScript_2.png

CEL_Statements_OpScript_3.png

CollectAndSelect OpScript नोड पर उपयोगकर्ता पैरामीटर निम्न चरणों का पालन करके सेट किए गए थे:

  1. एक OpScript नोड बनाएं और पैरामीटर्स टैब में इसके पैरामीटर्स को खोलने के लिए e दबाएं।
  2. पैरामीटर्स टैब के शीर्ष पर स्थित रिंच आइकन पर क्लिक करें और फिर 'उपयोगकर्ता पैरामीटर संपादित करें' पर क्लिक करें। इससे नोड में एक नया समूह पैरामीटर जुड़ जाता है, जिसका नाम ' उपयोगकर्ता ' है

    CEL_Statements_OpScript_4.png

  3. उपयोगकर्ता समूह पैरामीटर में पैरामीटर जोड़ने के लिए 'जोड़ें' पर क्लिक करें और पैरामीटर प्रकार के रूप में 'स्ट्रिंग ऐरे' चुनें। यह वह पैरामीटर होगा जहाँ हम मिलान किए गए स्थान पथ संग्रहीत करेंगे।

    CEL_Statements_OpScript_5.png

  4. नए पैरामीटर के ठीक ऊपर रिंच आइकन पर क्लिक करें और 'पैरामीटर का नाम बदलें' पर क्लिक करें। इससे एक डायलॉग बॉक्स खुलेगा जहाँ आप एक नया नाम दर्ज कर सकते हैं। पैरामीटर का नाम बदलकर 'matchedLocationPaths' कर दें।

    CEL_Statements_OpScript_6.png

  5. पुनः 'जोड़ें' पर क्लिक करें और इस बार पैरामीटर प्रकार के रूप में 'बटन' चुनें।
  6. नए बने बटन के ठीक ऊपर रिंच आइकन पर क्लिक करें और 'विजेट विकल्प...' चुनें। इससे एक डायलॉग बॉक्स खुलेगा जहाँ आप बटन के टेक्स्ट को कुछ वर्णनात्मक में बदल सकते हैं, उदाहरण के लिए 'CollectGeometryLocations'। डायलॉग बॉक्स में एक स्क्रिप्ट फ़ील्ड भी है जहाँ आप वे पायथन कमांड जोड़ सकते हैं जिन्हें बटन पर क्लिक करने पर निष्पादित किया जाना चाहिए।
  7. निम्नलिखित पायथन कमांड को स्क्रिप्ट फ़ील्ड में कॉपी और पेस्ट करें:

    collector = Widgets.CollectAndSelectInScenegraph('//*{hasattr("geometry")}', '/root/world/geo')
    # This command will match all scene graph locations underneath /root/world/geo that have a ‘geometry’ attribute
    paths = collector.collectAndSelect(select=False, node=node)
    # The 'node' variable is this parameter's node
    नोड के matchedLocationPaths उपयोगकर्ता पैरामीटर में मिलान किए गए स्थान पथों को संग्रहीत करने के लिए, स्क्रिप्ट में निम्नलिखित कमांड जोड़ें:

    paramName = 'user.matchedLocationPaths'
    param = node.getParameter(paramName)
    element = param.buildXmlIO(True)
    element.removeAllChildren()
    for path in paths:
       child = element.addChild(PyXmlIO.Element("string_parameter"))
       child.setAttr("name", "i%i" % (len(element) - 1))
       child.setAttr("value", path)
    element.setAttr("size", len(element))
    param.parseXmlIO(element)

बटन पर क्लिक करके स्क्रिप्ट चलाने से एक मॉडल डायलॉग खुलेगा, जबकि दृश्य को पार किया जा रहा है और स्थानों को कुक किया जा रहा है, जिससे आपको ऑपरेशन को रद्द करने का विकल्प मिलेगा।

collectAndSelect collectAndSelect() फ़ंक्शन स्थान पथों की एक सूची लौटाएगा जिसे फिर OpScript नोड पर उपयोगकर्ता पैरामीटर के रूप में सेट किया जा सकता है ताकि यह Lua स्क्रिप्ट में उपयोगकर्ता Op Arg के रूप में उपयोग के लिए सुलभ हो, उदाहरण के लिए:

CEL_Statements_OpScript_7.png

अग्रिम पठन

CEL सिंटैक्स पर अधिक जानकारी के लिए कृपया Katana डेवलपर गाइड का CEL संदर्भ अनुभाग देखें।

OpScript नोड की Lua स्क्रिप्ट में उपयोगकर्ता opArgs तक पहुंचने के बारे में अधिक जानकारी के लिए, जैसे कि पायथन स्क्रिप्ट में सेट किया गया है, Katana कुक इंटरफ़ेस (OpScript) पर Katana डेवलपर गाइड देखें

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

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

संलग्नक

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

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