बेज़ियर सतहों को कैसे स्थानांतरित करें?


18

मैंने गणित पर इस प्रश्न की कोशिश की। आश्चर्यजनक रूप से, जवाब था "समीकरण बहुत खराब हैं, बस फ़ंक्शन को एक संख्यात्मक रूट- फ़ाइंडर को खिलाएं "। लेकिन अगर आप खुद को मेरी तरह "एक ग्राफिक्स आदमी" मानते हैं, और डिजाइन के काम के लिए बेजियर कर्व्स के साथ बड़े पैमाने पर खेला है, तो मुझे विश्वास है कि बेहतर किया जा सकता है। काजिया द्वारा एक प्रकाशित एल्गोरिथ्म है कि मेरे पास समझने के लिए पृष्ठभूमि नहीं है (सिल्वेस्टर मैट्रिसेस), लेकिन math.SE पर संबंधित सलाह यह थी कि परिणाम टी में एक डिग्री -18 बहुपद है, और आपको अभी भी इसे हल करने की आवश्यकता है संख्यानुसार। मुझे इसी तरह के परिणाम के साथ एक और विचार था

तो, क्या रे / बेजियर-सतह चौराहे को बीजगणित से हल करने की उम्मीद करना कुल पाइप सपना है, इस प्रकार यह स्पष्ट रूप से कोड करना संभव है और सुपर-फास्ट सुपर-स्मूथनेस है?

इसे छोड़कर, इस गणना को करने के लिए सबसे तेज़ तरीका क्या है? क्या आप पुनरावर्ती उपखंड के लिए एक तंग बाध्य (और लक्ष्य) प्राप्त करने के लिए "विगल्स ढूंढ सकते हैं"? यदि आपको संख्यात्मक रूट-फाइंडर (आह) का उपयोग करना है, तो इसके लिए कौन से गुणों की आवश्यकता है और गति के लिए सबसे अच्छा विकल्प है?

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


क्या आप एक सामान्य विधि की तलाश कर रहे हैं जिसे आप एक बेजियर सतह पर लागू कर सकते हैं, या एक विशिष्ट सतह के लिए एक तेज़ विधि तैयार करने का एक तरीका है? क्या रनटाइम से पहले आपकी सतह का आकार ठीक हो जाएगा?
ट्राइकोप्लाक्स

1
ध्यान दें कि आप किरणों को संशोधित करने की तुलना में बहुत आसान सतहों को किरण कर सकते हैं। आप अन्य प्रकार की तुलना में बहुत आसान सतहों को रेमिट्रेस या रेमार्च यूनिवेरेट कर सकते हैं! blog.demofox.org/2015/07/28/rectangular-bezier-patches
एलन वोल्फ

जवाबों:


14

सबसे पहले, यहाँ काजिया तरीका मुझे लगता है कि आप सोच रहे हैं: काजिया, रे ट्रेसिंग पैरामीट्रिक पैच , SIGGRAPH 82। तकनीकी रिपोर्ट संस्करण अधिक जानकारीपूर्ण हो सकता है।

मुझे आशा है कि आप इससे प्राप्त करेंगे कि यह असंभव नहीं है और यह वैचारिक रूप से कठिन नहीं है यदि आप अपने हाथों को कुछ बीजीय ज्यामिति और जटिल संख्याओं के साथ गंदे होने में बुरा नहीं मानते हैं। हालाँकि, ऐसा करना सीधे तौर पर महंगा है।

"रियल" रे ट्रेसर दो चीजों के कुछ संयोजन को करते हैं:

  • एक अंकन जड़ रूट के लिए एक अच्छा "प्रारंभिक मूल्य" प्राप्त करने के लिए पैच पर एक बाउंडिंग पदानुक्रम (जैसे AABBs) रखना। यदि आप इसे अच्छी तरह से करते हैं, तो आप "शिकन" समस्या से बच सकते हैं।
  • डीडीजी के गोले और किरणों में पैच को पिघलाकर उन्हें बहुभुज की तरह ट्रेस करना।

वह अंतिम बिंदु ऐसा लगता है जैसे यह "सुपर-स्मूथनेस" आवश्यकता को मारता है, लेकिन यह लगभग उतना बुरा नहीं है जितना कि आप रे अंतर का उपयोग कर रहे हैं । किरण के स्तर को "आकार" से मेल खाने से त्रुटि अच्छी तरह से बंध जाती है। इसके अलावा, आपको शायद बनावट के निर्देशांक के लिए किसी भी तरह के अंतर की आवश्यकता होती है, इसलिए आप इसका उपयोग चौराहे के परीक्षण की सटीकता को नियंत्रित करने के लिए भी कर सकते हैं।

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


9

यह रे / बेज़ियर-सतह चौराहे को बीजगणित से हल करने की उम्मीद करने के लिए कुल पाइप सपना है

हाँ, यह एक पाइप सपना है। एक बाइसिक्यूबिक बेज़ियर पैच, डिग्री 18 की एक बीजीय सतह है। इस सतह के साथ एक किरण को अंतर करने के लिए, आपको 18 डिग्री की बहुपद की जड़ों को ढूंढना होगा। इन जड़ों के लिए कोई सूत्र नहीं है - आपको उन्हें संख्यात्मक तरीकों से खोजना होगा। । वास्तव में, गणितीय परिणाम हैं ( एबेल-रफ़िनी प्रमेय ) हमें बता रहे हैं कि डिग्री से परे समीकरणों की जड़ों के लिए सूत्र कभी नहीं हो सकते हैं। गणित यह नहीं कहता है कि सूत्र अभी तक नहीं मिले हैं; यह कहता है कि वे कभी नहीं मिलेंगे, क्योंकि वे मौजूद नहीं हो सकते।

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


5

एक अन्य विकल्प, जो मैंने कुछ दशक पहले (yikes!) का उपयोग किया था, 1985 से टोथ की योजना का उपयोग करना है जो खोज स्थान को संकीर्ण करने के लिए अंतराल अंकगणित को नियोजित करता है। IIRC, अंततः यह न्यूटन-रैप्सन का सहारा लेगा, लेकिन फिर से IIRC, मुझे लगता है कि एक अच्छा समाधान प्राप्त करने के लिए शायद ही कभी एक या दो से अधिक चरणों की आवश्यकता होती है।

हालांकि मैंने इसे नहीं देखा है (अच्छी तरह से, एक त्वरित नज़र के अलावा) मिशेल ने इंटर गणित के साथ किरण अनुरेखण पर कुछ और हालिया काम प्रकाशित किए हैं।

(मुझे यह जोड़ना चाहिए, यदि आप केवल बेजियर सतहों को कर रहे हैं, तो अंतराल विधि थोड़ी "ओवरकिल" हो सकती है क्योंकि आप सीमा और डेरिवेटिव प्राप्त करने के लिए खिलने जैसी चाल का उपयोग कर सकते हैं। यदि, हालांकि, आप अन्य कार्यों के लिए बेजियर घटता को जोड़ते हैं। जैसे किसी अक्ष के चारों ओर घूमना, फिर उसकी व्यापकता अधिक उपयोगी होती है।)


1

संगतता मुद्दों के मामले में https://www.shadertoy.com/results?query=bezier प्रकार:

, ... कई तख़्ती-सबसेट के कई समाधान दिखाता है, या तो एक 2d तख़्ता के लिए दूरी लौटाता है, या एक 3 डी पैच का पता लगाता है। स्प्लिन और पैच कई रूपों में आते हैं। बीज़ीन सरल, बेजियर सरल, नर्स अत्यधिक जटिल होने के कारण। अधिक अड़चन यो आपके तख्ते में जोड़ते हैं, जितना सरल हो जाता है। NURBS का विस्तार ओवरकिल है; - इसके गैर-यूनिफ़ॉर्म-नेस ऑफ़ वेट्स ("एनयू") में अधिक सममित विभाजन की तुलना में दक्षता कम हो जाती है - इसके राशन-अल-नेस (आर) सेगमेंट (राशनिंग) और पास के सेगमेंट के साथ मिश्रण के लिए कुछ जटिलता भी जोड़ता है। (पुनरावर्ती हल)।

बेज़ियर-पैच-ट्रेसिंग रूट-सॉल्विंग है और इसके साथ सटीक पर प्रासंगिक प्राथमिकता आती है; द्विघात समीकरण को हल करने के लिए किस क्रम में। घातीय जटिलता और सटीक हानि के कारण यह घन से उच्च घातांक पर अव्यावहारिक हो जाता है।

रे-मार्चिंग == क्षेत्र-ट्रैकिंग रूट-सॉल्यूशन के लिए सरल हेयुरिस्टिक दृष्टिकोण है, जो अधिकांश स्प्लिन पैच को प्रस्तुत करने का सरल और सबसे कुशल समाधान लगता है।

लैग्रेंज-प्रतिनिधित्व ट्रेसिंग / मार्चिंग को सरल करता है (जैसे कि L- पॉइंट्स स्पलाइन पर हैं, जबकि ControlVector-points (सटीक एक ही स्क्रिप के) शायद ही कभी स्पलाइन पर हों)

एक हेवी-स्पाइन का विशेष मामला, जहां स्टेट और अंत के पहले डेरिवेटिव == 0 हैं। निरंतरता को सरल करता है और इसमें कम अंतर (कम घटाव) शामिल होता है। एक हेवीनेस-पैच को एक ही पास में कुशलता से पता लगाया जा सकता है: https://www.shadertoy.com/view/4djfW3 जबकि अन्य क्यूबिक (या उच्चतर) स्प्लीन हेरास्टिक क्षेत्र-ट्रैकिंग / रे-मार्चिंग दृष्टिकोण को कुशल (और) बनाते हैं। सटीक रूप से पर्याप्त ") की तुलना में छोटी से छोटी पॉजिटिव रूट (प्रत्येक रूट के लिए सटीक रूप से सटीक त्रुटियों को जमा करने के लिए) को विश्लेषणात्मक रूप से गणना करने की हिम्मत है।


कंप्यूटर ग्राफिक्स में, स्प्लिन और पैच को 2006 तक z- ब्रशिंग द्वारा लगभग पूरी तरह से बदल दिया गया है। जेड-ब्रशिंग सजातीय मानचित्रों के साथ विस्थापन मानचित्रों का उपयोग करता है, या यहां तक ​​कि एक "प्रकार" का उपयोग करते हुए भी जो हमें गोले और लेनिंएशन का संघ है (लिनेग्यूलेशन का एक त्रिज्या है) 0, गोले की लंबाई 0 है, एक संघ सरल और उपयोगी है)। लुक-अप-टेबल के लिए अपेक्षाकृत कम मेमोरी लागत पर प्रदर्शन में एक बड़े लाभ के लिए सटीक रूप से मामूली नुकसान के लिए, यह एक जीपीयू पर आसानी से गतिशील बनाया जाता है।


कोई बात नहीं। सभी 3 डी पैच समाधान क्षेत्र पर नज़र रखने के द्वारा किया जाता है।
15

जब पैच सरल होता है तो यह केवल प्रदर्शन और सटीकता को बढ़ाता है। एक बिंदु पर जहां सीमलेस हेवीनेस का एक पैच आपको कुछ पुनरावृत्तियों में बहुत दूर मिलता है:
ollj

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.