चूहा अब भी पलक नहीं झपकाता
लेखक: Oleg Sidorkin, Cinevva के CTO और सह-संस्थापक
Cinevva में हमने आपके मॉडल में जान डालने वाले टूल्स पर बहुत काम किया है: उनकी रिगिंग करना, उन पर एनिमेशन लागू करना और हिलने पर सामने आने वाली असहज बारीकियों को ठीक करना। इस काम में हमें न मुड़ने वाले पैर, एनिमेशन ट्रांसफ़र और ऐसी पूँछें जिन्हें चलाने के लिए रिगर ने कोई हड्डी ही नहीं दी जैसी समस्याओं से जूझना पड़ा।
अब मैं उन कैरेक्टरों को कुछ भावनाएँ देना चाहता हूँ। किसी कैरेक्टर को दृश्य में चलने के साथ-साथ हैरान, नाराज़ या खुश भी दिखना चाहिए। इसके लिए चेहरे को हिलाना होगा: पलकें, भौंहें, गाल और ऐसा मुँह जो केवल अपनी स्थिर मुद्रा में रहने से कहीं अधिक कर सके।
हमने हाल के फ़ेशियल-रिगिंग शोध को देखना शुरू किया है, ताकि पता लगा सकें कि किसी मौजूदा मेश से उपयोगी हाव-भाव बनाने में हम कितनी दूर तक जा सकते हैं। यह उस काम का पहला विवरण है: हम वास्तव में क्या चला पाए, हमने कैरेक्टर को कैसे तैयार किया और कोशिश करने पर क्या हुआ।
हमारा परीक्षण कैरेक्टर वही चूहा था जिसका इस्तेमाल पूँछ वाले काम में हुआ था। उसके पास पहले से एक बॉडी रिग और छह एनिमेशन क्लिप थे। वह चल, कूद और तेज़ दौड़ सकता था, लेकिन इन सभी एनिमेशन में उसका चेहरा स्थिर रहता था।
हमने NFR आज़माया, जो एक शोध-आधारित इम्प्लीमेंटेशन है और दिए गए फेस मेश पर हाव-भाव ट्रांसफ़र करता है। पहला आउटपुट मुद्राओं की एक शीट थी, जिन पर जबड़ा खोलना, मुस्कान, पलक झपकना, होंठ सिकोड़ना और भौंह उठाना जैसे लेबल थे। मुझे उसमें ज़्यादा उपयोगी एनिमेशन दिखाई नहीं दिया। जबड़े ने थूथन को खींचकर बिगाड़ दिया था; बाकी अधिकतर तस्वीरें लगभग एक जैसी लग रही थीं।
नतीजे का आकलन करने से पहले तैयारी से जुड़ी एक समस्या को ठीक करना ज़रूरी था। इनपुट मेश बनाते समय हमने चूहे की आँखों के किनारों का बड़ा हिस्सा काट दिया था। इसलिए हमने क्रॉप दोबारा बनाया, उसे फिर चलाया और दोनों प्रयासों को गति में रेंडर किया। वे यहाँ हैं।
NFR को क्या इनपुट दिया गया
पूरे कैरेक्टर में 22,744 एक्सपोर्ट किए गए वर्टेक्स और 30 जॉइंट हैं, लेकिन चेहरे के लिए कोई ब्लेंडशेप या समर्पित जबड़े और आँखों की हड्डियाँ नहीं हैं। हमें मौजूदा रिग को प्रभावित किए बिना चेहरे के कंट्रोल जोड़ने थे।
NFR की इनपुट आवश्यकताएँ बताती हैं कि हम उसे सीधे GLB क्यों नहीं दे सकते थे। उसे एक ऐसी चेहरे की सतह चाहिए जिसमें आँखों और मुँह के खुले हिस्से काटे गए हों, अंदरूनी संरचनाएँ और आँखों के गोले शामिल न हों और मेश मोटे तौर पर उसके उदाहरणों के अनुरूप संरेखित हो। हमने सिर का पिछला हिस्सा, कान और गर्दन हटा दिए, आवश्यक खुले हिस्से बनाए और सबसे बड़े जुड़े हुए हिस्से को रखा। इसके बाद 777 वर्टेक्स और 1,296 त्रिभुज बचे।
इस क्रॉप का हर वर्टेक्स अब भी मूल कैरेक्टर की किसी स्थिति के अनुरूप था। इनफ़रेंस के बाद हमने हर अनुमानित हाव-भाव से अनुमानित न्यूट्रल चेहरा घटाया, ऑफ़सेट को वापस चूहे के स्केल में बदला और उन्हें मूल मेश के मेल खाते वर्टेक्स पर लागू किया। क्रॉप के किनारे के पास मूवमेंट को धीरे-धीरे कम किया गया, ताकि जहाँ चेहरा सिर के बाकी हिस्से से मिलता है वहाँ वह अचानक न रुके।
इससे हमें नौ ब्लेंडशेप मिले: संग्रहीत वर्टेक्स ऑफ़सेट, जिन्हें कोई स्लाइडर न्यूट्रल मेश में ब्लेंड कर सकता है। हर स्लाइडर को शून्य पर सेट करने से मूल चूहा वापस मिल जाता था। हमने उसका स्केलेटन, टेक्सचर और छह बॉडी क्लिप बरकरार रखे, फिर हर हाव-भाव के लिए एक अलग परीक्षण क्लिप जोड़ी।
चेकपॉइंट और इनपुट लोड हो जाने के बाद, T4 पर इनफ़रेंस में लगभग सात सेकंड लगे। उपयोगी हाव-भाव हासिल करने में इससे कहीं अधिक समय लगने वाला था।
हमने उन्हीं हिस्सों को काट दिया था जिनकी हमें ज़रूरत थी
पहली बार आँखों के लिए किए गए कट चौड़े अंडाकार थे। इस चेहरे पर उन्होंने हर आँख के आसपास के किनारे का बड़ा हिस्सा हटा दिया। मुँह का कट दिखाई देने वाली होंठ की रेखा से नीचे था। मेश का वर्णन करने वाले आँकड़ों से कोई भी गलती स्पष्ट नहीं थी: उसके निर्देशांक सीमित थे, कोई विकृत त्रिभुज नहीं था और कोई नॉन-मैनिफ़ोल्ड किनारा नहीं था।
लेकिन क्रॉप को देखने पर समस्या काफ़ी स्पष्ट है। हम उस सतह का बड़ा हिस्सा हटाने के बाद पलकों की गति माँग रहे थे जो उसे संभव बना सकती थी।
दूसरे प्रयास के लिए हमने सिर को सामने से और दो तिरछे कोणों से रेंडर किया। मैंने आँखों के खुले हिस्से, उनके किनारों, मुँह की रेखा, थूथन, नाक, भौंहों और मूँछों को चिह्नित करने में मदद के लिए असिस्टेंट की इमेज-अंडरस्टैंडिंग क्षमता का उपयोग किया। इन रूपरेखाओं को मूल मेश के दिखाई देने वाले त्रिभुजों पर प्रोजेक्ट किया गया। प्रोजेक्शन और त्रिभुज ID को सुरक्षित रखने से हम जाँच सके कि हर कट के बाद चेहरे के कौन-से वास्तविक हिस्से बचे थे।

हमने दिखाई देने वाले 131 त्रिभुजों को दोनों आँखों के किनारों का हिस्सा चिह्नित किया। पहले क्रॉप में उनमें से केवल 25 बचे थे। नए क्रॉप में 123 बचे। यह इनपुट में एक उपयोगी सुधार है, हालाँकि यह रिटेंशन को हमारे अपने एनोटेशन के आधार पर मापता है, किसी स्वतंत्र सेगमेंटेशन की सटीकता के आधार पर नहीं।
हमने संरेखण भी बदला। पहले वाले रेफ़रेंस एक्सटेंट से मिलान करने के बजाय, हमने एकसमान स्केल और स्थिति तय करने के लिए मेल खाते चेहरे के लैंडमार्क का इस्तेमाल किया। नए क्रॉप में 586 वर्टेक्स और 952 त्रिभुज थे। उसमें अब भी खाली जगहें और खुले किनारे थे; इस प्रयास में नई पलकें या मुँह का अंदरूनी भाग बनाने के बजाय मौजूदा ज्योमेट्री चुनी गई थी।
ज़्यादा गति, ज़्यादा खिंचाव
दूसरे रन में उन्हीं वेट्स और उन्हीं नौ हाव-भाव कंट्रोल का इस्तेमाल किया गया। इस बार मैं पूरी गति देखना चाहता था, इसलिए हमने न्यूट्रल स्थिति और हर पूर्ण हाव-भाव के बीच की मध्यवर्ती तीव्रताएँ रेंडर कीं, फिर वापस न्यूट्रल स्थिति पर आए। ऊपर दिया गया वीडियो दोनों संस्करणों को समान लाइटिंग में दिखाता है।
आँखें अब भी खुली रहती हैं। जबड़े का कंट्रोल थूथन को बदलता है, लेकिन मुँह को विश्वसनीय ढंग से नहीं खोलता। मुँह के कुछ कंट्रोल पहले से अधिक गति देते हैं, खासकर फ़नल, लेकिन उनके साथ सतह भी विकृत हो जाती है।
इस विकृति को संख्या में मापने के लिए हमने किनारों की लंबाई जाँची। कैरेक्टर मेश के हर किनारे के लिए हमने पूर्ण हाव-भाव पर उसकी लंबाई को न्यूट्रल स्थिति की लंबाई से विभाजित किया और उन किनारों को गिना जिनकी लंबाई दोगुनी से अधिक हो गई थी।
| कंट्रोल | पहला क्रॉप: 2× से अधिक लंबे किनारे | संशोधित क्रॉप: 2× से अधिक लंबे किनारे | संशोधित संस्करण का सबसे खराब खिंचाव |
|---|---|---|---|
| जबड़ा खोलना | 13 | 44 | 5.27× |
| बाईं मुस्कान | 0 | 30 | 5.53× |
| माउथ फ़नल | 0 | 89 | 11.29× |
किसी छोटे किनारे का अनुपात बड़ा हो सकता है, इसलिए चेहरे के रिग का मूल्यांकन करने के लिए मैं केवल इसी माप का इस्तेमाल नहीं करूँगा। इस मामले में यह रेंडर में दिखाई देने वाली चीज़ों से मेल खाता है। संशोधित मुँह ज़्यादा हिलता है और उस गति में कुछ ऐसा खिंचाव भी है जो हमें नहीं चाहिए।
हमने एक साथ तीन चीज़ें बदलीं: क्रॉप, संरेखण और बाहरी सीमा पर फ़ेड। यह तुलना हमें नहीं बता सकती कि हर गड़बड़ी किस बदलाव के कारण हुई। लेकिन यह बताती है कि कुल मिलाकर संशोधित तैयारी ने इस कैरेक्टर के चेहरे की समस्या हल नहीं की।
हमने NFR का इस्तेमाल क्यों किया
यह प्रयोग चलाने से पहले हमने दूसरे इम्प्लीमेंटेशन भी देखे। Google का GNM Head लोड हुआ और उसने अपने मानव-सिर वाले मेश पर हाव-भाव बनाए। उन हाव-भावों को हमारे चूहे पर लागू करने के लिए अलग फ़िटिंग और ट्रांसफ़र चरण की ज़रूरत पड़ती। Example-Based Facial Rigging को मेल खाते हाव-भाव के उदाहरणों की आवश्यकता थी, जो हमारे कैरेक्टर के पास नहीं थे।
RigAnyFace और OmniFaceRig भी प्रासंगिक थे, लेकिन 11 सितंबर 2026 तक हमें इनमें से किसी के लिए भी ऐसा सार्वजनिक इनफ़रेंस कोड और वेट्स नहीं मिले जिन्हें हम चला सकें। OmniFaceRig के डेटासेट लिंक पर अब भी “जल्द आ रहा है” लिखा था। NFR के पास जारी किया गया चेकपॉइंट और कस्टम मेश के लिए एक प्रक्रिया थी, इसलिए हमने उसी को एनिमेटेड चूहे तक पहुँचाया।
ये पाँच तुलनीय रन नहीं थे। हमने अपनी चेहरे की सतह पर NFR का परीक्षण किया, GNM को उसके अपने हेड मेश पर जाँचा और बाकी विकल्पों के लिए इनपुट या उपलब्धता की सीमाओं पर रुक गए।
अगले प्रयास के लिए एक पलक चाहिए
क्रॉप खराब था और उसे ठीक करना सार्थक था। लेकिन आँख का किनारा सुरक्षित रखने भर से उसे आँख को ढकने के लिए पर्याप्त ज्योमेट्री या सही गति नहीं मिलती। मुँह की भी ऐसी ही समस्या है: हम थूथन को खींच सकते हैं, लेकिन इस प्रयोग ने उस मुद्रा के लिए आवश्यक खुला हिस्सा और अंदरूनी संरचना नहीं बनाई है।
अगली बार मैं एक पलक झपकने और एक बार जबड़ा खुलने पर काम करूँगा। पलक को ऐसा आकार दूँगा जो आँख के ऊपर बंद हो सके, होंठ और मुँह का अंदरूनी हिस्सा तैयार करूँगा, फिर इन दोनों गतियों के लिए सुधारात्मक आकार फ़िट या तैयार करूँगा। बाकी कंट्रोल जोड़ने से पहले उन्हें सामने के साथ-साथ बगल से भी जाँचूँगा।
हमने दोनों प्रयास सुरक्षित रखे हैं, जिनमें मूल अनुमान और बिल्कुल वही क्रॉप शामिल हैं, ताकि अगले काम की तुलना इस नतीजे से की जा सके। फ़िलहाल बॉडी रिग और उसके एनिमेशन सुरक्षित हैं। चेहरे के आकार अभी भी एक प्रयोग हैं; मैं उन्हें किसी तैयार कैरेक्टर में इस्तेमाल नहीं करूँगा।