चर लाइन चौड़ाई के साथ तून / सीएल छायांकन?


15

मुझे वहाँ कुछ व्यापक दृष्टिकोण करने के लिए सीएल छायांकन करना है:

  1. प्रतिमानों के साथ मॉडल का दोहराव और इज़ाफ़ा (मेरे लिए कोई विकल्प नहीं)
  2. किनारे का पता लगाने के लिए Sobel फ़िल्टर / टुकड़ा shader दृष्टिकोण
  3. स्टेंसिल बफर किनारे का पता लगाने के लिए दृष्टिकोण
  4. ज्योमेट्री (या वर्टेक्स) shader दृष्टिकोण जो चेहरे और किनारे के मानदंडों की गणना करता है

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

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

अंत में, क्या यह संभव है कि एक ज्यामिति shader का उपयोग करके फ़्लिप-मानदंडों के दृष्टिकोण का सस्ते में अनुकरण किया जाए? इस के साथ मेरी चिंता यह है कि मैं निश्चित रूप से हर एक शीर्ष को डुप्लिकेट कर सकता हूं और इन के अनुसार स्केल कर सकता हूं, लेकिन मैं फ़्लिपिंग मानदंड, और टुकड़े टुकड़े करने वाले रंग में अलग-अलग रंग कैसे लाऊंगा?

मुझे क्या चाहिए - सिल्हूट के अंदर घुसपैठ की रेखाओं के साथ अलग-अलग लाइन की मोटाई ...

यहाँ छवि विवरण दर्ज करें

जो मैं नहीं चाहता ...

यहाँ छवि विवरण दर्ज करें


संपादित करें: आगे के शोध में निम्नलिखित बदलाव हुए हैं ...

चूंकि मेरे पास भू-भाग पर एक विशाल वर्टिकल गिनती है, यहां तक ​​कि दूरी-आधारित LoD पर विचार करते हुए, न तो फ़्लिप-मानदंड और न ही एक ज्यामिति shader आधारित दृष्टिकोण (यहां तक ​​कि फ्रम कलिंग के साथ) दोहराव और स्केलिंग में शामिल सरासर कम्प्यूटेशनल जटिलता के कारण एक समझदार विकल्प होगा। अपलोड किए गए कोने।

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

स्टैंसिल बफ़र कुछ ऐसे हैं जिनसे मैं बचना चाहता हूँ क्योंकि मैं सभी काम शेड में करना पसंद करता हूँ। (लाल रूपरेखा के साथ उपरोक्त उदाहरण एक स्टैंसिल बफर - पुराने स्कूल के साथ किया गया था।)

यह टुकड़ा shader छवि-अंतरिक्ष दृष्टिकोण छोड़ देता है। कम्प्यूटेशनल जटिलता वर्टीकल की संख्या के बजाय टुकड़े की संख्या में कम हो जाती है (मेरे मामले में, यह 10-100x कम संचालन है जितना कि मुझे ज्यामिति की छाया में करना होगा)। इसके लिए एक जी-बफ़र (एक सामान्य बफ़र और वैकल्पिक रूप से एक गहराई बफ़र से मिलकर) उत्पन्न करने के लिए एक से अधिक रेंडर पास की आवश्यकता होती है, जिसमें हम डिसकंटिनिटी फ़िल्टर (जैसे। सोबेल ऑपरेटर) लगा सकते हैं। गहराई असंतोष वह है जो विचारोत्तेजक अंतर्विरोधों और क्रेज को सक्षम बनाता है। इस दृष्टिकोण के साथ मेरी एकमात्र वक्रोक्ति, कांटेदार किनारे की चौड़ाई पर महीन नियंत्रण प्रदान करने में असमर्थता है, हालांकि टुकड़े टुकड़े में सही एल्गोरिथ्म के साथ, मुझे यकीन है कि यह संभव होगा।

तो सवाल अब और अधिक विशिष्ट हो जाता है: मैं बिल्कुल वैरिएबल किनारे पर, विशेष रूप से बाहरी सिल्हूट पर चर बढ़त चौड़ाई प्राप्त करने के बारे में कैसे जाऊंगा?


वैरिंग लाइन की मोटाई ज्यामितीय दृष्टिकोण की एक विशेषता है। कुशलता से इसे किसी अन्य तरीके से प्राप्त नहीं किया जा सकता है। जब से आप चाहते हैं कि, मैं पिक्सेल शेड्स को "अधिक कुशल विधि" के रूप में नहीं देखता हूं: खोजे जाने वाले पिक्सेल की संख्या = (लाइन_थिकनेस * 2 + 1) ^ 2 - 1. इसका मूल रूप से मतलब यह होगा कि आपकी पोस्ट-प्रोसेस shader बहुत होगा (अधिकतम: 10x) धीमी अगर अधिकतम। लाइन की चौड़ाई बराबर होती है 2. बस प्री-जजिंग को ड्रॉप करें और ज्योमेट्री शेडर अप्रोच की कोशिश करें।
सांप

@ स्नेक 5 आप ईमानदारी से सुझाव दे रहे हैं कि मैं जीएसटी में 150 मिलियन वर्टिकल प्रति रेंडर अपडेट (लगभग 25 मिलियन व्यूइंग के साथ) चला रहा हूं? मैं वास्तव में वह नहीं खरीद रहा हूं, लेकिन इनपुट के लिए धन्यवाद। मैंने जो कुछ शीर्ष कथनों और जटिलता के बारे में बताया है, उसका संदर्भ लें। यहां तक ​​कि आपके 10x के फिगर के साथ, टुकड़े टुकड़े करने वाला कम से कम भी आकर्षित करेगा, और शायद बहुत बेहतर नरक कर सकता है।
इंजीनियर

25 मिलियन कोने (रेखीय पढ़ता / लिखता है) बनाम 23 मिलियन बनावट के नमूने (बल्कि खराब कैश्ड मेमोरी रीड्स + टारगेट डेटा के अपघटन) @ 1280x720। वर्टेक्स की गिनती सीमित / कम करना बहुत आसान है। विशेष रूप से इन दिनों, जब बड़े मॉनिटर (1920x1080 +) और मल्टीमोनिटर सेटअप बहुत लोकप्रिय हो रहे हैं।
स्नेक

एक के रूप में एक ही एल्गोरिथ्म का उपयोग करने के बारे में जो लाल रंग की रूपरेखा उत्पन्न करता है, और फिर उनकी गहराई के आधार पर लाइनों को पतला / बढ़ रहा है?
अली

@ गजु, जैसा कि मैं सवाल में कह रहा था, यह सिल्हूट के बारे में नहीं है। पहली छवि में लड़की के कंधे के पीछे घुसपैठ की रेखाओं पर ध्यान दें। वे फ़्लिप-मानदंड दृष्टिकोण का एक कार्य हैं, और विचारोत्तेजक आकृति / क्रीज़ के रूप में कार्य करते हैं। मुझे वही चाहिए।
इंजीनियर

जवाबों:


4

मैं गहराई बफर के discontinuity छानने के माध्यम से एक टुकड़ा shader दृष्टिकोण के साथ जाने का फैसला किया है। इसके कारण हैं:

  1. वर्ल्ड वर्टेक्स की गिनती बहुत अधिक है, यहां तक ​​कि अत्यधिक दृश्य दूरी के कारण, यहां तक ​​कि मेष LoD के साथ भी;
  2. मैं कई अन्य टुकड़ा shader संचालन कर रहा हूं, जैसे कि DoF कलंक जो एक ही पास में एक ही संरचना (बॉक्स या गाऊसी नमूना / छानने) द्वारा लाभ उठा सकता है।

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


मुझे लगता है कि मानक मानदंडों के साथ जाने से आपको फ्लैट मानदंड मिलने की स्थिति में बेहतर परिणाम मिलेंगे। आप नमूनों को अलग करके रेखा की चौड़ाई अलग-अलग कर सकते हैं।
ग्रिवरहार्ट

@Grieverheart यह स्वीकृत उत्तर है, क्योंकि मैं जिस विधि का उपयोग कर रहा हूं वह ठीक है। धन्यवाद।
इंजीनियर

0

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

मैंने 2000/2001 में toonShader एल्गोरिथ्म का आविष्कार किया, इससे पहले भी फ्रांसीसी दोस्त, जिन्होंने यह समाधान बनाया था। मेरा वास्तविक सामग्री ज्यामिति पर आधारित था। फिर मूल रूप से इसे करने के दो तरीके हैं: 1. मानदंडों को देखें, यदि मानदंड दो रेखाओं से जुड़े हैं, तो दूर और कैमरे की ओर हैं, उस रेखा को प्रस्तुत करें, फिर आप गहराई, प्रकाश व्यवस्था आदि का उपयोग पंक्तिबद्ध के लिए cues के रूप में कर सकते हैं। 2. प्रस्तुत ज्यामिति पर नजर डालें (इसलिए परिप्रेक्ष्य परिवर्तन के बाद) प्रत्येक लिंचिंग लें, यदि कनेक्टिंग विमानों के कोने इस लैनिनेरेशन के एक ही तरफ हैं, तो आप लाइन को प्रस्तुत करते हैं .. आप लाइन-मोटाई के लिए भी ऐसा ही कर सकते हैं विधि 1. 3. आप इन तीन तकनीकों का संयोजन बना सकते हैं, लेकिन मैंने पहला उल्लेख किया है, क्योंकि आपने एक बड़ी पाली-गणना का संकेत दिया है।

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