सामान्य मैपिंग वास्तव में कैसे काम करती है?


10

मैं सामान्य मानचित्रण की अवधारणा को समझने की कोशिश कर रहा हूं, लेकिन मैं कुछ चीजों से भ्रमित हूं। संक्षेप में, मुझे यकीन नहीं है कि एक सामान्य नक्शा देखने के लिए निर्भर है या नहीं (यानी क्या आपको उसी वस्तु का एक अलग सामान्य नक्शा मिलेगा जब आप उसके चारों ओर घूमते हैं)। दूसरे, मुझे यह नहीं मिलता कि नीले रंग का रंग सामान्य मानचित्रों में प्रमुख रंग क्यों होता है।

मैं मानदंडों के बारे में कैसे सोचता हूं, और आरजीबी रंगों के बारे में उनका संबंध इस प्रकार है। इकाई क्षेत्र सामान्य रूप से किसी भी इकाई का प्रतिनिधित्व करता है - दूसरे शब्दों में, -1 से 1. तक एक इकाई सामान्य वेक्टर श्रेणी के एक्स, वाई और जेड घटक, 0 से 255 तक एक आरजीबी रंग के घटक होते हैं। इसलिए, यह समझ में आता है मानचित्र -1 (सामान्य घटक) से 0 (रंग घटक), 0 से 127 या 128, और 1 से 255। बीच में कोई भी मान सिर्फ रैखिक रूप से प्रक्षेपित है।

इस मानचित्रण को एक मनमाने ढंग से 3D वस्तु के मानदंड पर लागू करने से बहुत रंगीन चित्र उत्पन्न होता है, मुख्यतः नीले रंग में नहीं। उदाहरण के लिए, जब एक घन लेते हैं, तो सभी छह चेहरों में एक अलग, लेकिन एक समान रंग होगा। उदाहरण के लिए, सामान्य चेहरा (1,0,0) (255,128,128) होगा, चेहरा सामान्य (0,0, -1) होगा (128,128,0) और इसी तरह।

हालाँकि, किसी कारण से मुझे मिले घन के सामान्य नक्शे पूरी तरह से नीले रंग के हैं, अर्थात (128,128,255)। लेकिन स्पष्ट रूप से, मानदंड सभी सकारात्मक जेड-दिशा में नहीं हैं, अर्थात (0,0,1)। यह कैसे काम करता है?

[संपादित करें]

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

[संपादित करें 2]

मुझे शायद यह उल्लेख करना चाहिए कि मैं टुकड़ों की पैरामीट्रिक सतहों के साथ काम कर रहा हूं। इन सतहों में सतह पैच का एक सेट होता है , जहां प्रत्येक पैच अपने स्वयं के पैरामीट्रिक स्थान (यू, वी) = [0,1] x [0,1] से जुड़ा होता है। सतह पर किसी भी बिंदु पर, सामान्य की गणना बिल्कुल की जा सकती है। जाहिरा तौर पर, वैक्टर टी ( स्पर्शरेखा ) और बी ( द्वि-स्पर्शरेखा ) - स्पर्शरेखा स्थान की आवश्यकता के लिए - केवल यू और वी की दिशा में सतह पैच के आंशिक डेरिवेटिव नहीं हैं ...


क्या आपने कभी फोंग को लागू करने की कोशिश की है या कम से कम फैलाना छायांकन है? क्या आप इकाई वैक्टर a, b के लिए dot (a, b) = cos (कोण (a, b)) जैसे मूल सूत्र जानते हैं? लागू करने के कुछ घंटे आपको संघर्ष के वर्षों को बचाएंगे।
इवान कुकिर

@ ऑलुरस: इलाके की वस्तुओं / ऊंचाई वाले क्षेत्रों के लिए एक ही समस्या से निपटने के तरीके पर मेरी टिप्पणी / उत्तर देखें। यह अन्य वस्तुओं के लिए अधिक जटिल है, लेकिन अवधारणाओं को अलग नहीं होना चाहिए।
तियोड्रोन

इलाके के सामान्य मैप्पिंग का विशेष मामला: gamedev.stackexchange.com/questions/43894/…
teodron

जवाबों:


14

एक बनावट मानचित्रण 3D सतह पर बिंदुओं और एक बनावट छवि पर उनके संबंधित बिंदुओं के बीच मानचित्रण है। यदि आपके पास 1: 1 बनावट की मैपिंग है, तो बनावट की छवि में एक विशिष्ट और अद्वितीय बिंदु के लिए 3 डी सतह के नक्शे पर हर बिंदु (हालांकि रिवर्स को सही होने की आवश्यकता नहीं होगी। बनावट में कुछ स्थानों को आवश्यक रूप से स्थानों पर मैप नहीं करना होगा। सतह पर)।

इस तरह के मानचित्रण के साथ, आप 3 डी सतह के माध्यम से जा सकते हैं और बनावट में संबंधित स्थान में प्रत्येक विशिष्ट सामान्य स्टोर कर सकते हैं।

ठीक है, चलो ठीक है। हम एक 3D सतह से गुजरेंगे और मैप किए गए स्थानों पर ऑब्जेक्ट-स्पेस नॉर्म्स उत्पन्न करेंगे, और फिर उन्हें बनावट में चिपका देंगे। इसलिए जब हम रेंडर करना चाहते हैं, तो हम बस बनावट से ऑब्जेक्ट-स्पेस को सामान्य करते हैं और हम काम करते हैं। सही?

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

इसलिए आम तौर पर, जो लोग उपयोग करते हैं वे सामान्य नक्शे हैं जहां मानदंड "स्पर्शरेखा-स्थान" में हैं। स्पर्शरेखा-स्थान 3 डी सतह पर मैप किए गए बिंदु के सापेक्ष स्थान है, जहां असमानित सामान्य + Z दिशा में है, और X और Y अक्ष सतह के सापेक्ष U और V अक्षों के साथ इंगित करते हैं।

स्पर्शरेखा-स्थान अनिवार्य रूप से मानदंडों को नियमित करता है। स्पर्श-स्थान में, सामान्य (0, 0, 1) का अर्थ हमेशा "अनमॉडिफाइड" होता है; यह सामान्य है जो आपको वर्टेक्स को सामान्य से प्रक्षेपित करने से मिलता है। इससे कई उपयोगी चीजें हो सकती हैं , जिनमें से एक सबसे महत्वपूर्ण है जो उन्हें कम डेटा में संग्रहीत करना है।

चूंकि जेड हमेशा सकारात्मक होगा, इसलिए आप इसे एक्स और वाई घटकों से अपने shader में गणना कर सकते हैं। चूँकि आपको केवल 2 मानों की आवश्यकता है, इसलिए आप ( OpenGL छवि प्रारूप नामकरण में ) का उपयोग कर सकते हैं GL_RG8, 2-बाइट-प्रति-पिक्सेल प्रारूप के बजाय GL_RGBA8, एक 4-बाइट-प्रति-पिक्सेल ( GL_RGB8अभी भी 4-बाइट्स-प्रति-पिक्सेल होगा) , क्योंकि जीपीयू प्रत्येक पिक्सेल को 4 बाइट्स तक पैड कर देगा)। इससे भी बेहतर, आप उन दो मूल्यों को संकुचित कर सकते हैं , जो 1-बाइट-प्रति-पिक्सेल प्रारूप के लिए अग्रणी हैं। इसलिए आपने अपनी बनावट का आकार ऑब्जेक्ट-स्पेस सामान्य नक्शे के 75% तक कम कर दिया है।

इससे पहले कि आप किसी भी तरह के सामान्य नक्शे के बारे में बात कर सकें, आपको पहले यह जानना होगा कि यह क्या स्टोर करता है। क्या यह एक ऑब्जेक्ट-स्पेस नॉर्मल मैप, एक टैंगेंट-स्पेस नॉर्मल मैप, या कुछ और है?


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

ठीक है, इसलिए सतह पर एक बिंदु का स्पर्शरेखा स्थान बस उस बिंदु के सभी स्पर्शरेखा वैक्टर का स्थान है। हालाँकि, उस मामले में मैं यह नहीं देखता कि स्पर्शरेखा स्थान से दिखने वाला सामान्य (0,0,1) के अलावा और कुछ कैसे हो सकता है ? दूसरे शब्दों में, मैं हमेशा सामान्य नक्शा समान रूप से नीला (128,128,255) होने की उम्मीद करूंगा। फिर भी, विकिपीडिया पृष्ठ ( en.wikipedia.org/wiki/Normal_mapping#How_it_works ) पर दिखाए गए उदाहरण में अन्य रंग शामिल हैं। मैं समझता हूं कि इस नक्शे का उपयोग मानदंडों को बदलने के लिए कैसे किया जा सकता है, लेकिन यह नहीं कि वास्तव में इसकी गणना कैसे की जाती है।
अनिलुरस

@ आयलुरस: " ठीक है, इसलिए सतह पर एक बिंदु का स्पर्शरेखा स्थान बस उस बिंदु के सभी स्पर्शरेखा वैक्टर का स्थान है। " नहीं, यह नहीं है। यह (unmodified) सामान्य द्वारा परिभाषित स्थान है और बनावट की दिशा सतह पर उस बिंदु पर समन्वय करती है। यह बनावट मैपिंग के सापेक्ष बनावट में सामान्य जमा और संशोधनों से पहले वर्तमान सामान्य को नियमित करता है।
निकोल बोलस

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

@ निकोलबोलस आह, मैं भ्रमित हो गया क्योंकि कुछ स्रोतों का दावा है कि वैक्टर टी, बी और एन एक असामान्य आधार बनाते हैं, जबकि अन्य उल्लेख करते हैं कि यह जरूरी नहीं है कि यह सच है।
अनिलुरस

3

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

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


यह स्पष्ट करने के लिए धन्यवाद! हालांकि, मैं सतह के रूप में एक बहुभुज जाल का उपयोग नहीं कर रहा हूं , लेकिन एक टुकड़ेदार चिकनी पैरामीट्रिक सतह । इसलिए, सभी मानदंडों को (0,0,1) दिशा में इंगित करते हुए बचाया जाएगा, है ना?
अनिलुरस

1

इस पृष्ठ में नीचे स्क्रॉल करें

डेटासेट्स के नीचे दाएं हाथ B / W ड्राइंग को देखें - यह एक हेजहोग ड्राइंग के रूप में जाना जाता है (या कम से कम उपयोग किया जाता है), इसके प्रत्येक मानदंड के साथ एक सतह का प्रतिपादन

इसलिए, एक पारंपरिक सामान्य मानचित्र को समझने के लिए, एक परेशान हाथी के बारे में सोचें, जिसके सभी रीढ़ बाहर चिपके हुए हैं - उन रीढ़ों में से प्रत्येक उसके नीचे स्थित हाथी की सतह के लिए सामान्य है -

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

अब, यह उदाहरण एक OBJECT सामान्य मानचित्र पर केंद्रित है - यह ऑब्जेक्ट के संबंध में मानदंडों को परिभाषित कर रहा है, और यह किसी भी रोटेशन, अनुवाद, या स्केलिंग के तहत अपरिवर्तनीय है - या तो ऑब्जेक्ट या कैमरा या कुछ और - जैसा कि पहले उल्लेख किया गया है, यह केवल एक तरह का सामान्य नक्शा लेकिन यह सबसे आम है


0

मुझे लगता है कि सामान्य नक्शे क्या हैं, इस पर आपको कुछ गलतफहमी हो सकती है। असल में, यह एक ऐसी चीज़ है जो किसी चीज़ की नज़र का अनुकरण करती है जब वास्तव में ज्यामिति पूरी तरह से सपाट होती है।

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

यह बेशक एक भ्रम है, लेकिन यह जटिल ज्यामिति होने की तुलना में बहुत सस्ता है। और नहीं, सामान्य नक्शे के रंग नहीं बदलते हैं। वे वास्तव में सिर्फ shader में तुलना करने के लिए मूल्यों का प्रतिनिधित्व करते हैं। मुझे यकीन है कि यहाँ कोई आपको और अधिक विस्तार से भरने में सक्षम होगा।


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