Skip to content

उन पूँछों को एनिमेट करना जिन्हें रिगर ने कभी हड्डी नहीं दी ​

Oleg Sidorkin द्वारा, Cinevva के CTO और सह-संस्थापक

11 सितंबर, 2026 को अपडेट किया गया: माउस ने हमें क्या सिखाया में इलास्टिक मोड़, फ़्लोर कॉन्टैक्ट और पूँछ के कारण शरीर के उठने का एक दूसरा प्रकार जोड़ा गया है।

एक उपयोगकर्ता ने हमारे रिगर में एक एंथ्रोपोमॉर्फिक लोमड़ी को रिग किया और Walk क्लिप चलाई। शरीर ठीक था। पूँछ गीले तौलिये की तरह बाएँ पैर से लिपट गई, और जहाँ बाएँ तथा दाएँ पैर के वेट मिलते थे, वहाँ वह फट गई। नीचे वही लोमड़ी हमारा प्रमुख उदाहरण है, और इसका समाधान अब रिगर तथा उसकी क्लिप चलाने वाली रनटाइम लाइब्रेरी—दोनों में लाइव है।

इस लेख में दिखाई गई लोमड़ी और माउस, दोनों को हमारे 3D मॉडल जनरेटर से बनाया गया, फिर Cinevva में रिग और एनिमेट किया गया।

पीछे से चलती हुई लोमड़ी की तीन प्रतियाँ: मूल रिग, जिसकी पूँछ बाएँ पैर के चारों ओर मुड़ी हुई है; सीधी नीचे लटकती कठोर पूँछ; और बोन चेन पर लगी पूँछ, जो ऊपर और पीछे उठी हुई है

बाएँ से दाएँ, एक ही फ़्रेम में कदम के बीच की अवस्था: रिगर से निकला मूल रिग, वही रिग जिसमें पूरी पूँछ को एक ही टुकड़े के रूप में पेल्विस को सौंपा गया है, और अपनी बोन चेन पर लगी पूँछ जिसे रनटाइम झुला रहा है। आप इन तीनों को नीचे जाकर चारों ओर घुमा सकते हैं।

ह्यूमनॉइड रिगर ऐसा क्यों करता है ​

हमारा Fast इंजन Make-It-Animatable पर बना है, जो एक निश्चित Mixamo-शैली के कंकाल का अनुमान लगाता है: शरीर की 22 हड्डियाँ, या उँगलियों सहित 65। मेश के हर वर्टेक्स को इन्हीं हड्डियों में से किसी एक को सौंपना होता है। सूची में पूँछ नहीं है, इसलिए मॉडल अपनी जानकारी के अनुसार अगला सर्वोत्तम विकल्प चुनता है और पूँछ के वर्टेक्स उस अंग को सौंप देता है जो उसके सीखे हुए फ़ीचर स्पेस में सबसे निकट हो। इस लोमड़ी के लिए वह बाईं पिंडली थी, जबकि बाकी वेट दोनों जाँघों के बीच बँट गया।

यह वेट में कोई बग नहीं है। यह टेम्पलेट की सीमा है। कोई प्रॉम्प्ट या सेटिंग मॉडल से पूँछ की हड्डी नहीं बनवा सकती, क्योंकि उसके पास बनाने के लिए पूँछ की हड्डी है ही नहीं। पंखों, केप, लंबे बालों और धड़ से लटकने वाली हर दूसरी चीज़ के साथ भी यही होता है।

कुछ भी बदलने से पहले हमने लोमड़ी की पूँछ के 1,582 वर्टेक्स पर इसकी लागत मापी। प्रत्येक वर्टेक्स से उसे वास्तव में हिलाने वाली हड्डियों तक की दूरी का वेटेड औसत, 191 सेमी लंबे मॉडल पर 47 सेमी था। पूँछ को लगभग आधा मीटर दूर से नियंत्रित किया जा रहा था।

पूँछ खोजना ​

इस चरण पर हमारे पास केवल रिग किया हुआ GLB है, और हमें बस उसी की आवश्यकता है। यह पास किसी भी रिगर के आउटपुट पर चलता है, केवल हमारे रिगर पर नहीं।

कंकाल के ऊपर एक डिस्टेंस फ़ील्ड। प्रत्येक वर्टेक्स p और बाइंड स्पेस में जॉइंट a से जॉइंट b तक के प्रत्येक बोन सेगमेंट के लिए, सेगमेंट से दूरी है

d(p,ab)=‖p−(a+t(b−a))‖,t=clamp((p−a)⋅(b−a)∥b−a∥2,0,1)

और किसी वर्टेक्स की कंकाल दूरी सभी सेगमेंटों में न्यूनतम दूरी होती है। अंतिम जॉइंट के आगे एक छोटा स्टब जोड़ा जाता है, ताकि थूथन या हाथ को उसकी अपनी हड्डी से दूर न माना जाए। कोई वर्टेक्स दूर तब है जब यह दूरी मॉडल की ऊँचाई के 7% से अधिक हो। लोमड़ी के लिए यह 13 सेमी है।

दूर स्थित स्किन के जुड़े हुए हिस्से। दूर वाले वर्टेक्स को मेश के अपने फ़ेस के साथ कनेक्टेड कंपोनेंट में समूहित किया जाता है। एक विवरण ने हमारा एक घंटा खर्च कराया: एक्सपोर्टर UV और हार्ड-नॉर्मल सीम पर वर्टेक्स विभाजित कर देते हैं, इसलिए इस मेश में 23,129 वर्टेक्स हैं लेकिन केवल 29,081 त्रिभुज, और केवल फ़ेस ग्राफ़ एक पूँछ को दर्जनों अलग-अलग द्वीपों में तोड़ देता है। हम पहले स्थिति के आधार पर वर्टेक्स वेल्ड करते हैं, वेल्ड किए गए ग्राफ़ पर कनेक्टिविटी चलाते हैं, और फिर प्रत्येक मूल वर्टेक्स पर वेट वापस लिखते हैं।

यह कहाँ जुड़ता है? किसी हिस्से का कॉलर उसके पड़ोस में मौजूद गैर-दूर वर्टेक्स की रिंग है। उसका केंद्र निकटतम जॉइंट के आधार पर हमें बताता है कि वह हिस्सा कहाँ से लटकता है, लेकिन एक पक्षपात के साथ: यदि धड़ या जाँघ का जॉइंट निकटतम दूरी के 1.5 गुना के भीतर है, तो वह चुना जाता है, क्योंकि पेल्विस के आसपास जाँघों के ऊपरी सिरे हिप्स जितने ही निकट होते हैं और उनके बीच स्थित पूँछ की जड़ शरीर की होती है। हम जानबूझकर इसके लिए कॉलर के वेट पर भरोसा नहीं करते। अलग शेल के रूप में मॉडल की गई पूँछ में—जैसा अधिकांश गेम मॉडल में होता है—कॉलर पूँछ की अपनी रूट रिंग होती है, जिस पर वही खराब वेट होता है जिसे हम ठीक करने की कोशिश कर रहे हैं।

यह उपांग है या शरीर का हिस्सा? दो परीक्षण। मोटे धड़ की हड्डी से दूर स्किन हड्डी के चारों ओर लिपटी होती है, इसलिए उसका द्रव्यमान केंद्र वापस हड्डी पर आता है। पूँछ एक तरफ बाहर निकली होती है, इसलिए उसका द्रव्यमान केंद्र हर हड्डी से दूर होता है। हम आवश्यक करते हैं कि सेंट्रॉइड की कंकाल दूरी उस हिस्से की पहुँच की कम से कम 40% हो। फिर आकार का परीक्षण: जहाँ λ1≥λ2 उस हिस्से के कोवेरियंस के दो सबसे बड़े आइगेनवैल्यू हैं, वहाँ लंबाई का अनुपात λ1/λ2 है। यहाँ पूँछ का स्कोर लगभग 2.6 होता है; केप या स्कर्ट का स्कोर 1 के करीब होता है। केवल पेल्विस से लटकने वाले लंबे हिस्से चेन बनते हैं। रीढ़ से लटकने वाले लंबे हिस्से—जैसे म्यान, तरकश या पट्टा—शरीर से उगे हुए नहीं बल्कि पहने हुए होते हैं, और जिस हड्डी से जुड़े हैं उसी पर कठोरता से चलते हैं। सिर से लटकने वाले कानों को वैसा ही छोड़ दिया जाता है: कानों के लिए सिर के साथ कठोरता से चलना बिल्कुल सही है।

लोमड़ी की पूँछ दो ओवरलैपिंग शेल के रूप में निकली—स्किन के ऊपर फर, जो कभी वेल्ड नहीं किए गए थे—इसलिए एक ही अटैचमेंट पर मौजूद वे हिस्से जिनके बाउंडिंग बॉक्स आधे से अधिक ओवरलैप करते हैं, आपस में मिला दिए जाते हैं। एक पूँछ, एक चेन।

पहला चरण: इसे कठोर बनाना ​

पहला ईमानदार समाधान एक दोपहर लेता है। उस हिस्से के हर वर्टेक्स को Hips पर 1.0 वेट दिया जाता है। पूँछ फटना बंद कर देती है और पेल्विस के साथ एक ही टुकड़े के रूप में चलती है। यह तख़्त जैसी दिखती है, और चित्र में बीच वाली लोमड़ी यही है। हमने इसे एक माइलस्टोन के रूप में रिलीज़ किया क्योंकि बनावट के कारण इसका खिंचाव बिल्कुल शून्य है, जिससे यह नीचे दिए गए मापन के लिए उपयोगी संदर्भ बनती है।

दूसरा चरण: इसके साथ एक चेन बढ़ाना ​

पूँछ के साथ एक निर्देशांक। हम कॉलर से हिस्से के भीतर Dijkstra चलाते हैं, जहाँ मेश एज की लागत उसकी लंबाई होती है। प्रत्येक पूँछ वर्टेक्स को जड़ से एक जियोडेसिक दूरी g मिलती है, और g का 99वाँ परसेंटाइल पूँछ की लंबाई L होता है: लोमड़ी के लिए 81 सेमी, यानी उसकी ऊँचाई का 42%।

जॉइंट। सेगमेंटों की संख्या K=clamp(round(L/0.1H),3,8) है, लोमड़ी के लिए चार। जॉइंट J0 कॉलर का सेंट्रॉइड है और जॉइंट Ji उस स्किन का सेंट्रॉइड है जिसकी जियोडेसिक दूरी iL/K से आधे सेगमेंट के भीतर आती है। Ji←12Ji+14(Ji−1+Ji+1) के दो पास चेन को वहाँ टेढ़ा-मेढ़ा होने से रोकते हैं जहाँ क्रॉस-सेक्शन असमान हो, जैसा कि घनी पूँछ का सिरा हमेशा होता है। हड्डियाँ Tail_1 से Tail_K तक हैं, साथ में वेट-रहित Tail_End; ये Hips के अधीन पेरेंट की गई हैं और Hips का बाइंड रोटेशन साझा करती हैं, ताकि हर हड्डी अपने पेरेंट के फ़्रेम में शुद्ध ट्रांसलेशन हो। उनके इनवर्स बाइंड मैट्रिक्स सीधे इससे मिल जाते हैं, और मौजूदा क्लिप उनका उल्लेख कभी नहीं करतीं, इसलिए आगे की प्रक्रिया में कुछ नहीं टूटता।

वेट। जहाँ s=Kg/L, k=⌊s⌋, और f=s−k है, वहाँ सेगमेंट k के किसी वर्टेक्स का स्वामित्व हड्डी k+1 के पास होता है और वह सिरों को अपने पड़ोसियों के साथ साझा करता है:

wprev=clamp(0.5−2f, 0, 0.5),wnext=clamp(2f−1.5, 0, 0.5),wself=1−wprev−wnext

किसी जॉइंट पर दोनों हड्डियाँ 50/50 अनुपात में मिलती हैं; सेगमेंट के बीच में एक हड्डी पूरी स्किन को नियंत्रित करती है। रूट सेगमेंट के लिए "prev" Hips है, इसलिए पूँछ कॉलर पर सिलवट बनाने के बजाय शरीर में सहजता से ब्लेंड होती है।

पास के बाद पूँछ पर वेटेड बोन दूरी 47 सेमी से घटकर 17 सेमी रह गई, जो लगभग पूँछ की अपनी त्रिज्या के बराबर है। स्किन को नियंत्रित करने वाली हड्डी से वह इससे अधिक करीब नहीं आ सकती।

मेश के ऊपर कंकाल के साथ चलती हुई लोमड़ी का साइड दृश्य; पूँछ की चार हड्डियाँ पेल्विस से पूँछ के साथ चलती हैं और उसे ऊपर तथा पीछे उठाए रखती हैं

तीसरा चरण: किसी चीज़ को हड्डियाँ हिलानी होंगी ​

हमारी लाइब्रेरी की किसी भी क्लिप में पूँछ के ट्रैक नहीं हैं, इसलिए अतिरिक्त काम के बिना चेन अपनी बाइंड पोज़ बनाए रखती है और लोमड़ी तख़्त जैसी पूँछ के साथ घूमती है। गेम इसे प्रोसीजरल सेकेंडरी मोशन से हल करते हैं, और हम भी ऐसा ही करते हैं—उस रनटाइम लाइब्रेरी में जिसे हर रिग किया हुआ मॉडल पहले से लोड करता है।

प्रत्येक जॉइंट टिप वेग v वाला एक पार्टिकल p है। उसका रेस्ट टार्गेट T वह स्थान है जहाँ बाइंड पोज़ के अनुसार टिप होनी चाहिए, जिसकी गणना हर फ़्रेम पेरेंट बोन के वर्तमान वर्ल्ड ट्रांसफ़ॉर्म से की जाती है। पार्टिकल एक डैम्प्ड स्प्रिंग का अनुसरण करता है:

p¨=ω2(T−p)−2ζωp˙+g

जहाँ ω=2πf। रूट सेगमेंट f=0.9 Hz पर झूलता है और टिप उसकी आधी आवृत्ति पर, क्योंकि पूँछ के आधार पर मांसपेशी और सिरे पर फर होता है। मूल डैम्पिंग अनुपात ζ=0.45 था; नीचे दिया गया माउस अपडेट ओवरशूट घटाने के लिए इसे बढ़ाकर 0.65 कर देता है। गुरुत्वाकर्षण 1 m/s² है, 9.8 नहीं; पूँछ में मांसपेशियाँ होती हैं। हम सेमी-इम्प्लिसिट Euler से इंटीग्रेट करते हैं, फिर p को बोन हेड के चारों ओर हड्डी की लंबाई वाले गोले पर वापस प्रोजेक्ट करके रोप कंस्ट्रेंट लागू करते हैं। रस्सी खिंच नहीं सकती, इसलिए उसके साथ का वेग भी नहीं खिंच सकता: रेडियल कंपोनेंट (p˙⋅n^)n^ हटा दिया जाता है और झूलने वाला वेग रखा जाता है। अंत में हड्डी का रोटेशन वापस निकाला जाता है: वह क्वाटरनियन जो उसकी बाइंड दिशा को पार्टिकल की दिशा में ले जाता है।

चूँकि पार्टिकल वर्ल्ड स्पेस में रहते हैं, Hips को मोड़ने या तेज़ करने पर पूँछ पीछे रह जाती है और अपने आप झूलती है। कुछ भी स्क्रिप्टेड नहीं है।

यहाँ तीन गलतियाँ स्वीकार करना उपयोगी है, क्योंकि मापे जाने तक हर एक ठीक दिखती थी।

पहला संस्करण प्रत्येक फ़्रेम में हर पार्टिकल को उसके टार्गेट की ओर एक निश्चित अंश, 60 fps पर 12%, खींचता था। स्प्रिंग के रूप में लिखने पर यह ω≈0.12/Δt≈21 rad/s होता है—3.4 Hz की कंपकंपी—और चूँकि इस कठोरता ने रूट सेगमेंटों को मुश्किल से हिलने दिया, सारा मोशन टिप पर जमा हो गया। स्प्रिंग को भौतिक इकाइयों में लिखने से दोनों समस्याएँ एक साथ ठीक हो गईं।

दूसरे संस्करण ने रोप करेक्शन को वेग के रूप में वापस फ़ीड किया: करेक्शन को Δt से विभाजित करके। यह मानक पोज़िशन-बेस्ड-डायनेमिक्स अपडेट जैसा लगता है और तब तक स्थिर रहता है जब तक Hips धीरे चलते हैं, जैसा कि वॉक साइकल में होता है। पेरेंट जितना तेज़ चलता है, करेक्शन उतना बड़ा होता है, और वह उतना ही अधिक वेग डालता है। दो-तिहाई सेकंड में आधा मीटर का हिप स्विंग पर्याप्त था: एक हड्डी 95° घूमी जबकि उसकी पड़ोसी हड्डियाँ 3° हिलीं। हमारी किसी भी रिलीज़ की गई क्लिप से अधिक ज़ोर से Hips को झुलाने वाले एक हेडलेस टेस्ट ने इसे पकड़ लिया; वॉक साइकल इसे कभी नहीं पकड़ पाती।

तीसरी गलती नीचे दिया गया कैरी एंगल था। इसे हर जॉइंट के अपने फ़्रेम में लागू किया गया था, इसलिए चार हड्डियों वाली पूँछ चार बार ऊपर उठी, लोमड़ी की पीठ के विरुद्ध गेंद की तरह मुड़ गई और हर मोड़ पर अपनी ही स्किन फाड़ने लगी। नीचे दिए गए मापन ने इसे खोजा: पूँछ की एज स्ट्रेच p99 पर 2.3 तक पहुँच गई, जबकि शरीर की बेसलाइन 1.3 थी—उस पिंडली से भी बदतर जहाँ से यह शुरू हुई थी। अब carry पूरी पूँछ का उठाव है, जिसे उसके सभी जॉइंटों में बाँटा जाता है।

क्लिपिंग। पूँछ को पैरों के बीच सीधा नीचे लटकते हुए मॉडल किया गया था, और वॉक साइकल में पैर उसके आर-पार जाते थे। इसलिए स्प्रिंग जिस रेस्ट पोज़ को लक्ष्य बनाता है वह मेश की अपनी पोज़ नहीं है: 50° का carry, Hips के साइड अक्ष के चारों ओर रेस्ट टार्गेट को पीछे और ऊपर उठाता है, जैसे लोमड़ी चलते समय अपनी पूँछ रखती है। यह 50° पूरी पूँछ का उठाव है, जिसे उसके जॉइंटों में बाँटा जाता है, इसलिए चेन चाहे चार हड्डियों की हो या आठ की, आर्क सहज रहता है। और कोई भी पार्टिकल पूँछ की जड़ से गुजरने वाले आगे की ओर मुख किए प्लेन को पार नहीं कर सकता, इसलिए पूँछ कभी पैरों के बीच नहीं झूल सकती।

इसे मापना ​

ये 6 सितंबर के मूल लोमड़ी मापन हैं, नीचे दिए गए माउस बदलावों से पहले के। ये पहले चेन सॉल्वर का दस्तावेज़ हैं, संशोधित डिफ़ॉल्ट का नया बेंचमार्क नहीं।

स्थिर चित्र फटने के बारे में कुछ साबित नहीं करते, इसलिए हम क्लिप के दौरान एज स्ट्रेच मापते हैं। मेश की हर उस एज के लिए, जिसके दोनों वर्टेक्स पूँछ पर हैं, हम Walk क्लिप के दौरान समान अंतर वाले 24 समय-बिंदुओं पर उसकी स्किन की गई लंबाई और बाइंड लंबाई का अनुपात लेते हैं। 1 का अनुपात अविकृत स्किन है। 1.5 से अधिक खिंची या 0.67 से कम सिकुड़ी एज को फटा हुआ माना जाता है। सामान्य स्किनिंग विकृति कैसी दिखती है, इसकी बेसलाइन के लिए शरीर की एज को भी इसी तरह मापा जाता है।

Walk क्लिप, पूँछ की एज के 96,864 नमूनेp95p99अधिकतमफटी हुई
मूल रिग1.602.424.0311.4%
Hips से कठोरता से जुड़ी1.001.001.000%
पूँछ की चेन1.091.181.300%
संदर्भ के लिए शरीर1.131.291.78—

मूल रिग में पूँछ की हर नौ एज में से एक फटने की सीमा से अधिक खिंची, और सबसे खराब एज अपनी बाइंड लंबाई से चार गुना हो गई। चेन की सबसे खराब एज 30% लंबी होती है, जो शरीर की अपनी 1.78 बेसलाइन के भीतर है, और कुछ भी नहीं फटता। कठोर पूँछ ठीक 1.00 पर रहती है क्योंकि वह एक ही टुकड़े के रूप में चलती है; यही वह संख्या थी जिसने चेन पर भरोसा करने से पहले हमें बताया कि परीक्षण हार्नेस सही था।

वास्तव में झूलने वाली पूँछ को अपनी स्किन थोड़ा विकृत करनी पड़ती है, इसलिए चेन का काम 1.00 तक पहुँचना नहीं बल्कि शरीर में पहले से होने वाली विकृति से कम रहना है। इस तालिका के एक पुराने संस्करण में चेन का p99 1.03 दिखाया गया था, जो बेहतर दिखता था लेकिन वास्तव में बदतर था: पूँछ मुश्किल से हिल रही थी, क्योंकि ऊपर बताए गए वेग बग ने उसे अत्यधिक डैम्प करके लगभग कठोर संस्करण जैसा बना दिया था।

लाइव तुलना ​

लोमड़ी की तीन प्रतियाँ, एक ही क्लिप, एक ही फ़्रेम। चारों ओर घुमाने के लिए ड्रैग करें, ज़ूम करने के लिए व्हील चलाएँ। क्लिप बदलें, चेन को उसकी उठी हुई रेस्ट पोज़ में देखने के लिए पूँछ की फ़िज़िक्स बंद करें, और चेन कहाँ स्थित है यह देखने के लिए हड्डियाँ चालू करें।

किनारे से दिखाई गई वही श्रृंखला, अकेली, कंकाल के रेखांकन के साथ। स्प्रिंट वह क्लिप है जिसमें स्प्रिंग सबसे स्पष्ट दिखाई देता है।

चूहे ने हमें क्या सिखाया ​

लोमड़ी से यह स्थापित हुआ कि एक श्रृंखला फटने की समस्या रोक सकती है। लंबी, पतली पूँछ वाले चूहे ने गति की बची हुई त्रुटियों को देखना बहुत आसान बना दिया। लोमड़ी के फर में छिप जाने वाला तीखा मोड़ चूहे पर टूटे हुए जोड़ जैसा दिखाई देता है। उसकी पूँछ फर्श तक भी पहुँचती है और उसका मॉडल किया गया आकार एक ओर मुड़ता है। ये तीन अलग-अलग समस्याएँ हैं; स्प्रिंग की कठोरता बढ़ा देने से ये सभी हल नहीं होतीं।

नीचे दी गई ऐनिमेशन लाइब्रेरी में चूहे पर अलग-अलग ऐनिमेशन आज़माएँ। कैमरा घुमाने के लिए पात्र को खींचें, थंबनेल पट्टी को बगल में स्क्रॉल करें, या कोई गति खोजने के लिए उसकी खोज और श्रेणी फ़िल्टर का उपयोग करें। बड़े प्रीव्यू में चलाने के लिए किसी टाइल पर क्लिक करें। पूँछ का निरीक्षण शुरू करने के लिए Walk, Crouch Backward, Crawl Idle और Back Flip उपयोगी विकल्प हैं। यह पट्टी हमारे ऐनिमेशन हीरो जैसे ही लाइव ऐनिमेशन प्रीव्यू का उपयोग करती है और ब्राउज़ करते समय गतियाँ लोड करते हुए पूरा कैटलॉग उपलब्ध कराती है।

इन गतियों को अपने रिग किए गए पात्र पर आज़माने और चुनी हुई क्लिप निर्यात करने के लिए पूरी ऐनिमेशन लाइब्रेरी खोलें →।

स्प्रिंगों की श्रृंखला को भी मोड़-प्रतिरोध चाहिए ​

कणों को प्रत्येक हड्डी की लंबाई बनाए रखने के लिए बाधित किया गया था, लेकिन हर जोड़ अब भी लगभग स्वतंत्र रूप से घूम सकता था। लंबाई बाधाएँ खिंचाव रोकती हैं; वे हिंज को मुड़कर तह होने से नहीं रोकतीं। चूहे ने ठीक इसी अंतर को उजागर किया।

चूहे में सुधारों से पहले: पूँछ का कंकाल सिरे के पास अचानक दिशा बदलता है और मेश नीचे की ओर मुड़े हुए हिस्से पर समाप्त होता है

सुधारों से पहले: खंडों की लंबाई बरकरार रखना वक्र को सुचारु बनाए रखने के लिए पर्याप्त नहीं था।

अब हम विश्राम वक्र के सापेक्ष मापे गए पड़ोसी जोड़ों के अतिरिक्त मोड़ों को आपस में जोड़ते हैं। मोड़ों की तुलना एक साझा संदर्भ फ़्रेम में की जाती है, ताकि हड्डियों की अलग-अलग अक्षें एक जोड़ के बाएँ मोड़ को अगले जोड़ पर असंबंधित मरोड़ में न बदल दें। हर चरण आंशिक रूप से अपडेट किए गए मानों के बजाय अपने पड़ोसियों का स्नैपशॉट पढ़ता है। कपलिंग ब्लेंड प्रति रेंडर किए गए फ़्रेम के एक निश्चित अंश के बजाय 1−e−kΔt है, जिसकी डिफ़ॉल्ट दर k=12 प्रति सेकंड है।

किसी जोड़ का प्रत्यास्थ मोड़ उसकी विश्राम दिशा से 30° आगे तक सीमित है। हमने डैम्पिंग को भी बढ़ाकर 0.65 कर दिया है और मोड़ की सीमा की ओर धकेलते रहने वाले वेग को हटा देते हैं, ताकि वह जमा होकर अचानक झटके के रूप में मुक्त न हो सके। आधार को कूल्हों से सहारा मिलता रहता है और सिरा अधिक नरम रहता है। जब पूँछ को फर्श पर लेटना हो, तब संपर्क मोड़ सीमा को ओवरराइड कर सकता है।

कणों की स्थितियों को नहीं, घूर्णनों को जोड़ना। N कड़ियों को कूल्हों पर i=0 से क्रमांकित करें। मान लें कि hi किसी कड़ी का सिरा, pi उसका पूर्वानुमानित अंतिम बिंदु और ℓi उसकी लंबाई है। उसकी संभावित दिशा di=(pi−hi)/∥pi−hi∥ है। वर्तमान पैरेंट के फ़्रेम में, ri को इकाई विश्राम दिशा और d~i को संभावित दिशा मानें। swing(a,b) को वह सबसे छोटा इकाई क्वाटर्नियन मानें जो इकाई वेक्टर a को b तक ले जाता है। यदि Ai उस पैरेंट के विश्राम फ़्रेम को साझा कूल्हा फ़्रेम में घुमाता है, तो पड़ोसियों से तुलना किया जाने वाला मोड़ है

qi=Aiswing(ri,d~i)Ai−1.

यह कॉन्जुगेशन मोड़ का निर्देशांक फ़्रेम बदलता है; यह पात्र में कोई अतिरिक्त घूर्णन नहीं जोड़ता। पिछले चरण के स्नैपशॉट qjold का उपयोग करते हुए, किसी आंतरिक जोड़ का पड़ोसी लक्ष्य और युग्मित मोड़ हैं

q¯i=slerp(qi−1old,qi+1old,12),α=1−exp⁡(−kΔt),qi∗=slerp(qi,q¯i,α).

आधार पर पड़ोसी लक्ष्य अगले जोड़ के मोड़ और आइडेंटिटी क्वाटर्नियन I के बीच आधा होता है, जो कूल्हों से मिलने वाले सहारे को दर्शाता है। मुक्त सिरा अपने एक पड़ोसी का उपयोग करता है; एकल-कड़ी वाली पूँछ पड़ोसी कपलिंग छोड़ देती है। k=12s−1 के साथ, α 60 fps पर लगभग 0.181 और 30 fps पर 0.330 है। इससे कपलिंग को समय-आधारित दर मिलती है, हालाँकि संपूर्ण सॉल्वर में अब भी इंटीग्रेशन और संपर्क त्रुटि होती है जो टाइम स्टेप पर निर्भर करती है।

स्केलर घटक wi वाले इकाई क्वाटर्नियन qi∗ के लिए, उसका सबसे छोटा घूर्णन कोण θi=2arccos⁡(clamp(|wi|,0,1)) है। प्रत्यास्थ सीमा है

qilimited={qi∗,θi≤θmax,slerp(I,qi∗,θmax/θi),θi>θmax,θmax=π/6.

संपर्क प्रोजेक्शन से पहले हम इस मोड़ को वापस पैरेंट फ़्रेम में रूपांतरित करते हैं और इसे ri पर लागू करते हैं। यह एक स्थानीय मोड़-स्मूथिंग नियम है, पूर्ण प्रत्यास्थ-छड़ सिमुलेशन नहीं: यह अतिरिक्त वक्रता बाँटता और सीमित करता है, लेकिन वैश्विक बेंडिंग ऊर्जा हल करने का दावा नहीं करता।

लोड की गई मुद्रा आवश्यक नहीं कि बाइंड मुद्रा हो ​

चूहे की सहेजी गई फ़ाइल में अंतिम पूँछ जोड़ पर पहले से लगभग 28° का घूर्णन था। हम उस लोड किए गए घूर्णन को न्यूट्रल मानकर पढ़ रहे थे और फिर उसके ऊपर स्प्रिंग की गति जोड़ रहे थे। पहले से ऐनिमेट या निर्यात की गई मुद्रा स्प्रिंग के लक्ष्य का स्थायी हिस्सा बन गई थी।

अब सॉल्वर उपलब्ध होने पर कंकाल की इनवर्स बाइंड मैट्रिस से न्यूट्रल स्थानीय ट्रांसफ़ॉर्म पुनर्प्राप्त करता है। यदि किसी रिग में Tail_End हेल्पर नहीं है, तो उसका अंतिम खंड आने वाली स्पर्शरेखा को उस अंतिम हड्डी के अपने स्थानीय फ़्रेम में व्यक्त करते हुए आगे बढ़ाता है। जैसे ही अंतिम हड्डी का अभिविन्यास अलग होता है, पैरेंट के फ़्रेम से वेक्टर कॉपी करना गलत हो जाता है।

एकतरफ़ा घुमाव का एक और कारण था: वह वास्तविक बाइंड ज्यामिति में मौजूद था। इसलिए बाइंड मुद्रा को सही ढंग से पुनर्प्राप्त करने से यह झुकाव बना रहा। अब सिमुलेशन डिफ़ॉल्ट रूप से कूल्हा स्पेस में बनाए गए और प्रत्येक सुधारे गए पैरेंट के फ़्रेम में रूपांतरित किए गए केंद्रित विश्राम चाप का उपयोग करता है। restCurve मॉडल किए गए घुमाव को वापस मिला सकता है: 0 केंद्रित चाप है, 1 लेखक द्वारा बनाया गया वक्र बनाए रखता है। इससे स्प्रिंगों का लक्ष्य बदलता है; यह मेश या उसके स्किन वेट दोबारा नहीं लिखता।

संदर्भ ट्रांसफ़ॉर्म पुनर्प्राप्त करना। मान लें कि Bi किसी हड्डी की इनवर्स बाइंड मैट्रिक्स है। उसका बाइंड-वर्ल्ड ट्रांसफ़ॉर्म Wi0=Bi−1 है, इसलिए जब हड्डी और पैरेंट दोनों में बाइंड मैट्रिस हों, तो न्यूट्रल स्थानीय ट्रांसफ़ॉर्म है

Li0=(Wparent(i)0)−1Wi0.

Li0 को विघटित करने से हमें आवश्यक स्थानीय स्थानांतरण और घूर्णन मिलते हैं। इसके बजाय लोड किए गए क्वाटर्नियन को पढ़ने पर इस संदर्भ की जगह सहेजे गए ऐनिमेशन का कोई मनमाना फ़्रेम आ जाता।

केंद्रित चाप बनाना। मान लें कि ai कूल्हा स्पेस में खंड i की लेखक द्वारा निर्धारित इकाई दिशा है। हम मूल दिशा के पार्श्व घटक को हटाकर c=normalize(0,a0y,a0z) प्राप्त करते हैं और यदि वह प्रोजेक्शन लुप्त हो जाए तो नीचे की दिशा का उपयोग करते हैं। β∈[0,1] को restCurve और C को रेडियन में कुल कैरी कोण मानें। जहाँ rot(q,v) क्वाटर्नियन q द्वारा वेक्टर v के घूर्णन को दर्शाता है, वांछित कूल्हा-स्पेस दिशा है

Qi(β)=slerp(I,swing(c,ai),β),ui=Rx(Ci+1N)rot(Qi(β),c),ri=rot(Ai−1,ui).

यहाँ Rx कूल्हों की एक ओर से दूसरी ओर जाने वाली अक्ष के चारों ओर घूर्णन है। महत्वपूर्ण रूप से, Ai में ऊपर के जोड़ों पर पहले से लागू विश्राम सुधार शामिल हैं। इससे ui इस खंड की इच्छित निरपेक्ष दिशा बनता है, न कि हर जोड़ पर सीधा करने वाला सुधार दोबारा जोड़ने वाला मान। β=0 पर मॉडल किया गया पार्श्व घुमाव हट जाता है; β=1 पर कैरी लागू होने से पहले उसकी दिशाएँ बनी रहती हैं।

पूँछ जमीन छू सकती है; वह चूहे को उठा नहीं सकती ​

जमीन से संपर्क किसी खंड को उसकी लंबाई के गोले और फर्श के प्रतिच्छेदन पर घुमा देता है। किसी कण की ऊँचाई को केवल क्लैंप करने से हड्डी छोटी हो जाएगी; क्लैंप करके उसकी लंबाई बहाल करने से वह फिर भूमिगत जा सकती है। मोटाई के लिए हम केंद्ररेखा से नीचे 0.025 वर्ल्ड यूनिट छोड़ते हैं, नीचे की ओर संपर्क वेग हटाते हैं और फिसलन को डैम्प करते हैं। समतल फर्श डिफ़ॉल्ट रूप से वर्ल्ड Y = 0 पर होता है और उसे खिसकाया या अक्षम किया जा सकता है। यह एक समतल बाधा है, भूभाग या पूर्ण मेश टकराव नहीं।

गोला–फर्श प्रतिच्छेदन। फर्श की ऊँचाई और केंद्ररेखा क्लीयरेंस के योग को F=g0+ρ लिखें, जहाँ डिफ़ॉल्ट रूप से g0=0 और ρ=0.025 हैं। खंड को यह संतुष्ट करना होगा

∥pi−hi∥=ℓi,(pi)y≥F.

यदि पूर्वानुमानित अंतिम बिंदु फर्श से नीचे है, तो u=(F−hiy)/ℓi परिभाषित करें। जब |u|≤1 हो, तो संपर्क एक क्षैतिज वृत्त पर स्थित होता है। यदि t एक क्षैतिज इकाई दिशा है, तो सुधारा गया अंतिम बिंदु है

pi′=hi+ℓi(1−u2t+uey),ey=(0,1,0).

इसकी ऊँचाई ठीक F है और सिर से इसकी दूरी ठीक ℓi है, क्योंकि (1−u2)+u2=1। हम t को संभावित दिशा के क्षैतिज प्रोजेक्शन से चुनते हैं और यदि वह प्रोजेक्शन लुप्त हो जाए तो विश्राम दिशा का सहारा लेते हैं। कूल्हों का पीछे बनाए रखने वाला समतल वृत्त के अनुमत हिस्से को सीमित कर सकता है। संपर्क को प्रत्यास्थ मोड़ सीमा पर प्राथमिकता मिलती है। यदि सिर फर्श से इतना नीचे हो कि u>1, तो इस निश्चित-लंबाई वाले खंड का कोई भी घूर्णन वहाँ तक नहीं पहुँच सकता; कार्यान्वयन हड्डी को खींचने या शरीर को उठाने के बजाय u को क्लैंप करता है।

अन्य वेग प्रोजेक्शन के बाद, संपर्क में मौजूद कण का बचा हुआ नीचे की ओर वेग हटा दिया जाता है और उसके वेग को डैम्प किया जाता है:

vi′=e−γΔt[vixmax(0,viy)viz],γ=8s−1.

यह साधारण डैम्पिंग वाला अप्रत्यास्थ संपर्क है, कूलॉम-घर्षण मॉडल नहीं। यह पूँछ के फर्श पर टिके रहने के दौरान गुरुत्वाकर्षण को नीचे की ओर वेग संचित करने से रोकता है।

इससे पूँछ का फर्श में धँसना हल हो गया, लेकिन दो अन्य जगहों पर भी पूँछ पैरों को हवा में तैरा सकती थी।

पहला, व्यूअर पूरे लोड किए गए मेश के सबसे निचले बिंदु को जमीन पर रखता था। यदि सहेजी गई पूँछ तलवों से नीचे लटकती थी, तो वह पूँछ को समायोजित करने के लिए पूरे पात्र को उठा देता था। अब व्यूअर शरीर का फर्श निर्धारित करते समय पूँछ-प्रधान स्किन को अनदेखा करता है, जबकि कैमरा फ़्रेमिंग में अब भी पूरा पात्र शामिल रहता है।

दूसरा, रीटार्गेटर का शरीर-ग्राउंडिंग पास भी पूँछ को गिनता था। Back Flip के दौरान वह उस स्किन को जमीन से ऊपर रखने के लिए श्रोणि को उठाता था, जबकि स्वतंत्र पूँछ सॉल्वर बाद में उसे वैसे भी हिला देता।

कौन-सी स्किन को श्रोणि उठाने की अनुमति है? मान लें कि S शरीर के सैंपल किए गए स्किन सपोर्ट बिंदु हैं, T वे बिंदु हैं जिन पर पूँछ की हड्डियों का प्रभुत्व है, और E वे हैं जो अंग-संपर्क सॉल्वरों के स्वामित्व में हैं। संदर्भ फर्श को कैलिब्रेशन के समय S∖T से मापा जाता है। फ़्रेम t में शेष शरीर की क्लीयरेंस है

fbody=minv∈S∖Tyv0,c(t)=minv∈S∖(T∪E)yv(t)−fbody,Lraw(t)=max(0,a(t)−c(t)).

यहाँ a(t)≤0 संदर्भ फर्श से नीचे जाने के लिए स्रोत से प्राप्त अनुमति है। Lraw रीटार्गेटर की समयगत स्मूथिंग और अंग सामंजस्य से पहले माँगी गई उठान है। दोनों न्यूनतमों में समान पूँछ बहिष्करण होना चाहिए: केवल वर्तमान-मुद्रा प्रोब से इसे हटाने पर भी गलत संदर्भ फर्श बना रहेगा। कार्यान्वयन हर फ़्रेम पर प्रत्येक वर्टेक्स का मूल्यांकन करने के बजाय प्रमुख हड्डी के अनुसार समूहित स्किन का सैंपल लेता है।

नीचे की तुलना में बताई गई अतिरिक्त उठान केवल कच्चे सुधार की नहीं, बल्कि अंतिम श्रोणि पथों के बीच का अंतर है:

Δyhips(t)=yhipstail counted(t)−yhipstail excluded(t).

Back Flip के अंत के पास मापी गई श्रोणि उठान

हमने समान ऐनिमेशन समयों पर उसी चूहे का सैंपल लिया और केवल यह बदला कि शरीर की ग्राउंडिंग में पूँछ शामिल थी या नहीं। दोनों कॉलम समान मॉडल वर्ल्ड निर्देशांकों का उपयोग करते हैं; अंतर पूँछ को गिनने से आई अतिरिक्त ऊँचाई को अलग करता है।

1.93 s की क्लिप में समयश्रोणि की ऊँचाई: पूँछ शामिलश्रोणि की ऊँचाई: पूँछ बाहरपूँछ गिनने से अतिरिक्त उठान
1.16 s50.5 cm35.0 cm15.4 cm
1.55 s81.3 cm70.3 cm11.0 cm
1.84 s92.2 cm77.2 cm15.0 cm
1.93 s90.6 cm77.2 cm13.4 cm

लैंडिंग के बाद खड़े होते समय पात्र को ऊपर उठना चाहिए। त्रुटि अंतिम कॉलम में दी गई अतिरिक्त उठान है, वह इच्छित रिकवरी गति नहीं। मानों को सैंपल की गई वर्ल्ड स्थितियों से स्वतंत्र रूप से राउंड किया गया है।

इस चूहे में पूँछ को बाहर रखने से Back Flip के अंतिम हिस्से में श्रोणि की लगभग 15 cm अतिरिक्त उठान हट गई। अंत के पास शरीर का प्रोब अपने संदर्भ फर्श से लगभग एक मिलीमीटर के भीतर रहा, बजाय उसके कई सेंटीमीटर ऊपर तैरने के। अब पूँछ की स्किन न तो शरीर का फर्श तय करती है, न वह सुधार जो उसकी श्रोणि को उठाता है। पूँछ सॉल्वर स्वयं केवल पूँछ की हड्डियों को घुमाता है; वह मॉडल, कूल्हों या पैरों को कभी स्थानांतरित नहीं करता।

कोई ऐनिमेशन चलाने से पहले ही वह किसी मुद्रा को विरासत में पा सकता है ​

उठी हुई झुकी मुद्रा ने एक अलग समस्या उजागर की। हम लाइब्रेरी क्लिप क्रमशः जनरेट करते हैं, ताकि हर क्लिप तैयार होने से पहले ही व्यूअर प्लेबैक शुरू कर सके। रीटार्गेटिंग प्लेबैक वाले उसी कंकाल का उपयोग कर रही थी। सॉल्व के बीच प्रीव्यू श्रोणि को हिला सकता था और अगली क्लिप उस ऐनिमेटेड मुद्रा को अपने कैलिब्रेशन संदर्भ के रूप में पढ़ती थी। क्लिप बदलते समय रीसेट करने से जनरेट किए गए ट्रैक्स में पहले से बेक हो चुका खराब संदर्भ ठीक नहीं हो सकता था।

अब रीटार्गेटिंग प्लेबैक शुरू होने से पहले कैप्चर किए गए स्थिर कैलिब्रेशन से बनी निजी कंकाल प्रतियों पर काम करती है। बाद की क्लिप अनुरोध उसी संदर्भ का पुनः उपयोग करते हैं और समवर्ती अनुरोधों के लिए अलग हड्डियाँ होती हैं। एक रिग्रेशन परीक्षण डिलीवर की गई क्लिपों के बीच लाइव कूल्हों को जानबूझकर खिसकाता और घुमाता है; जनरेट किए गए ट्रैक साफ़ रन के समान बने रहने चाहिए और सॉल्विंग के बाद लाइव मुद्रा अछूती रहनी चाहिए। हर दिखाई देने वाली हरकत बग नहीं थी। Climb Idle के सोर्स लूप में पेल्विस का हल्का-सा ऊपर-नीचे हिलना है, जबकि रूट स्थिर रहता है। और नए Crawl Idle सॉल्व में पूरे लूप के दौरान चूहे के हाथ उसके सिर के नीचे रहे; हाथ ऊपर उठे होने वाला स्क्रीनशॉट इस बात का प्रमाण नहीं था कि सोर्स ऐनिमेशन वही पोज़ चाहता है, बल्कि वह पहले की किसी दूषित क्लिप के अनुरूप था। सोर्स, नए सॉल्व और चलते हुए परिणाम की तुलना करने से हम कैलिब्रेशन की त्रुटि छिपाने के लिए जानबूझकर रखी गई गति को सपाट करने से बच सके।

अब हम क्या जाँचते हैं ​

जाँचों में अलग-अलग लंबाई वाली चेन पर कूल्हों के तेज़ घुमाव, पास-पास के जोड़ों का अधिक सहज मुड़ना, बाएँ/दाएँ समान प्रतिक्रिया, बाइंड पोज़ की पुनर्प्राप्ति, बिना हेल्पर के घुमी हुई अंतिम बोन और वार्म-अप के बाद लूप का ठीक से बंद होना शामिल है। फ़्लोर टेस्ट में झुककर बैठना, ऊपर उठे हुए फ़्लोर प्लेन, स्थिर होना और कूल्हे ऊपर उठने पर मुक्त होना शामिल हैं। अलग रिग्रेशन जाँचें सत्यापित करती हैं कि पूँछ का संपर्क कभी शरीर को न हिलाए और पूँछ की स्किन कभी पेल्विस को ऊपर उठाने का अनुरोध न कर सके।

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

इससे आपके लिए क्या बदलता है ​

अगर आप cinevva.com/tools/rigger पर पूँछ वाले किसी कैरेक्टर को रिग करते हैं, तो पूँछ अपनी अलग बोन चेन पर वापस आती है, जॉब स्टेटस में एक appendages एंट्री होती है जो बताती है कि क्या मिला, और प्रीव्यू उसे झुलाता है। प्लेटफ़ॉर्म API के ज़रिए रिग किए गए मॉडल को भी वही फ़ाइल मिलती है। rt/1.1.12 के मूल इंटीग्रेशन ने createAnimator को बिना किसी अतिरिक्त कोड के Tail_* बोन खोजने और चलाने की क्षमता दी थी; अगर आप अधिक भारी या सुस्त पूँछ चाहते हैं, तो स्प्रिंग की फ़्रीक्वेंसी, डैम्पिंग, ग्रैविटी और कैरी एंगल विकल्प के रूप में उपलब्ध हैं। पूँछ की चेन के बिना बनी पुरानी फ़ाइलों को दोबारा रिग करके फिर से इस पास से चलाया जा सकता है। ऊपर बताए गए 11 सितंबर के बदलाव अब Cinevva के वेब प्रीव्यू में लाइव हैं। पुराने रनटाइम वर्शन पर पिन किए गए गेम और पहले एक्सपोर्ट की गई क्लिप अपने-आप अपडेट नहीं होतीं। सुधारों को शामिल करने के लिए मौजूदा बेक की गई क्लिप को फिर से जनरेट करना होगा।

Blender में। ऐड-ऑन आर्मेचर बनाने से पहले रिग टेबल पर यही पास चलाता है, इसलिए आपकी अपनी मशीन पर रिग की गई पूँछ को उन्हीं नामों के तहत वही चेन मिलती है। Fingers के पास Tail चेकबॉक्स है और परिणाम कार्ड बताता है कि उसे क्या मिला।

हमारे रनटाइम के बाहर। किसी गेम में मौजूद स्प्रिंग उस व्यक्ति के किसी काम की नहीं जो फ़ाइल को Blender, Unity या Unreal में खोलता है, जहाँ पूँछ स्थिर रहती। इसलिए अब एक्सपोर्ट करते समय इसे बेक किया जाता है: हर चुनी हुई क्लिप सिम्युलेट होती है और पूँछ के रोटेशन वास्तविक कीफ़्रेम में सैंपल किए जाते हैं। एक्सपोर्टर क्लिप को बिना दिखाए तब तक चलाता है, जब तक पूँछ उस स्थिति पर वापस नहीं आ जाती जहाँ से पास शुरू हुआ था, और फिर रिकॉर्ड करता है; ऐसा इसलिए है क्योंकि कोल्ड स्टार्ट से बेक किया गया साइकल ठीक से बंद नहीं होता और लूप होने पर पूँछ झटके से उछलती है। जानबूझकर पूँछ का सिरा सबसे नरम लिंक रखा गया है, इसलिए उसकी क्षणिक गति स्थिर होने में सबसे अधिक समय लेती है और एक वार्म-अप पास हमेशा पर्याप्त नहीं होता।

यह पास जानबूझकर सावधानी बरतता है। यह केवल पेल्विस से लटकने वाले लंबे हिस्से के लिए चेन बढ़ाता है। कान, बाल और आस्तीन अछूते रहते हैं, और धड़ पर मौजूद किसी भी चौड़ी चीज़ के साथ भी ऐसा ही होता है: पहले के एक वर्शन ने केप या स्कर्ट को कठोरता से उसकी धड़ की बोन को सौंप दिया था, लेकिन असली अपलोड पर उसे चलते हुए देखने के बाद हमने अपना विचार बदल दिया। उनमें से एक कमर पर मौजूद 6,540-वर्टेक्स वाला परिधान था, जिसे रिगर ने समझदारी से कूल्हों और दोनों जाँघों पर फैलाया था; एक ही बोन उसे पैरों के साथ चलने से पूरी तरह रोक देती। किसी परिधान को एक ही बोन को सौंपना, उस हिस्से के बारे में अनुमान के आधार पर किसी के कैरेक्टर में किया गया बड़ा बदलाव है, इसलिए अब यह अपने-आप होने के बजाय आपके अनुरोध पर होता है। आगे वाले प्लेन से परे पैरों के साथ कोई कोलिज़न नहीं होता और कैरेक्टर के स्थिर खड़े रहने पर कोई आइडल झूलना भी नहीं होता, इसलिए खड़ी हुई लोमड़ी की पूँछ अपने निर्धारित पोज़ में शांति से लटकी रहती है। सूची में अगली दो चीज़ें यही हैं, साथ ही पंखों के लिए भी ऐसा ही ट्रीटमेंट है, जिन्हें एक अलग रेस्ट पोज़ और अलग स्प्रिंग चाहिए।