कभी-कभी मैं वेक्टर ग्राफिक्स का उपयोग करता हूं, बस इसलिए कि वे कुछ मामलों में बस थोड़ा अच्छे लगते हैं , और अन्य समय में, मैं बिटमैप / रास्टर ग्राफिक्स का उपयोग करता हूं।
मैं सोच रहा था, क्या इन दो विकल्पों के बीच कोई महत्वपूर्ण प्रदर्शन अंतर हैं?
कभी-कभी मैं वेक्टर ग्राफिक्स का उपयोग करता हूं, बस इसलिए कि वे कुछ मामलों में बस थोड़ा अच्छे लगते हैं , और अन्य समय में, मैं बिटमैप / रास्टर ग्राफिक्स का उपयोग करता हूं।
मैं सोच रहा था, क्या इन दो विकल्पों के बीच कोई महत्वपूर्ण प्रदर्शन अंतर हैं?
जवाबों:
जैसा कि द बजज़सॉ ने कहा, यह बहुत सारी चीजों पर निर्भर करता है, जिसमें सदिश ग्राफिक्स बनाम रेखांकन ग्राफिक्स का कार्यान्वयन भी शामिल है।
यहां कुछ उच्च प्रदर्शन वेक्टर ग्राफिक्स विधियां हैं जो पारंपरिक रूप से रेखांकन विधियों का उपयोग करके प्रदान की जाती हैं।
लूप और ब्लिन एक एकल त्रिभुज को प्रस्तुत करके एक वेक्टर ग्राफिक्स द्विघात बेज़ियर वक्र को कैसे प्रस्तुत करते हैं, यह दिखाते हैं और एक पिक्सेल शेडर में टेक्सचर निर्देशांक का उपयोग करके कहते हैं कि क्या पिक्सेल वक्र के ऊपर या नीचे है: http: //www.msr-waypoint। शुद्ध / en-us / उम / लोग / cloop / LoopBlinn05.pdf
मूल विचार यह है कि आप अपने त्रिभुज कोने की स्थिति को 3 नियंत्रण बिंदु स्थिति बनाते हैं, और आप क्रमशः (0,0), (0.5,0) और (1,1) होने के लिए प्रत्येक कोने पर बनावट निर्देशांक सेट करते हैं। आपकी छाया में, यदि प्रक्षेपित बनावट समन्वय (x * xy) है <0, पिक्सेल वक्र के नीचे है, अन्यथा यह वक्र के ऊपर है।
आप shadertoy पर इसका एक गलत कार्यान्वयन देख सकते हैं: https://www.shadertoy.com/view/4tj3Dy
दूसरी विधि के रूप में, यहां वाल्व से एक विधि है, जहां पिक्सेल आकृति के बजाय एक आकृति की दूरी को बनावट में संग्रहीत किया जाता है, जिससे वेक्टर ग्राफिक्स को बनावट के नमूने का उपयोग करके तैयार किया जा सकता है। डिकोडिंग इतना सरल है, इसे केवल एक अल्फा परीक्षण का उपयोग करके फिक्स्ड फ़ंक्शन हार्डवेयर पर भी लागू किया जा सकता है! http://www.valvesoftware.com/publications/2007/SIGGRAPH2007_AlphaTestedMagnification.pdf
आपको यह पता लगाने के लिए कि दूसरी तकनीक कितनी अच्छी तरह काम करती है, यह 1024x768 मूंछों वाली छवि 64x32 स्रोत छवि से उत्पन्न हुई थी जिसमें एक ही रंग चैनल था! (उर्फ 2KB असम्पीडित)
मैंने अपने ब्लॉग पर इसके बारे में कुछ सामग्री भी लिखी है: http://blog.demofox.org/2014/06/30/distance-field-xtxtures//
यहाँ कुछ नमूना OpenCL कोड दिखाया गया है कि यह कितना सरल है:
float alpha = read_imagef(tex3dIn, g_textureSampler, textureCoords).w;
float3 color = (alpha < 0.5f) ? (float3)(1.0f) : (float3)(0.0f);
ये दोनों तकनीक सुपर फास्ट हैं, और वेक्टर और रैस्टराइज़्ड ग्राफिक्स के बीच की रेखा को थोड़ा धुंधला करते हैं। वे रेखापुंज तकनीकों का उपयोग करके प्रदान किए जाते हैं, लेकिन वेक्टर ग्राफिक्स तकनीकों की तरह ज़ूमिंग / स्केलिंग गुण हैं।
वहां हो सकता है।
कम तकनीकी उत्तर:
यदि आप एक वेबसाइट या कोई अन्य एप्लिकेशन बना रहे हैं, जहाँ आपको ग्राफिक्स प्रोग्रामिंग से कोई लेना-देना नहीं है, तो इसका उत्तर शायद हाँ है। अंतर्निहित API यह अनुमान लगाने की कोशिश करेंगे कि उन्हें कैसे रेंडर किया जाए और उन्हें कुशलता से कैश किया जाए। हालाँकि, जैसा कि आपका एप्लिकेशन चलता है और एपीआई कभी-कभी गलत अनुमान लगाता है कि उसे चीजों को फिर से प्रस्तुत करना और प्रदर्शन को प्रभावित करना पड़ सकता है।
अधिक तकनीकी:
ध्यान रखें कि जब तक आप GPU पर सदिश रास्तों को चित्रित करने के लिए नवीनतम GPU और पुस्तकालय में से एक का उपयोग नहीं कर रहे हैं, तब तक यह सभी बिटमैप पाठ GPU द्वारा प्रस्तुत किए जा रहे हैं।
मैं उस विशिष्ट मामले पर विचार करूंगा जहां वेक्टर ग्राफिक्स को बनावट में प्रस्तुत किया गया है। यहां प्रदर्शन आपके टूलकिन पर निर्भर करेगा, चाहे आपका एप्लिकेशन गतिशील रूप से वेक्टर परिसंपत्तियों से बनावट बना रहा हो, और क्या ग्राफिक्स विभिन्न ज़ूम स्तरों पर देखे जाते हैं। इसमें दो मुद्दे शामिल हैं: संसाधन और बनावट पीढ़ी। यदि आप केवल स्थैतिक आकार में ग्राफिक्स प्रदर्शित कर रहे हैं, तो मैं कहूंगा कि कोई अंतर नहीं है और शायद आपका टूलकिन संपत्तियों को रनटाइम से पहले बिटमैप ग्राफिक्स में परिवर्तित कर सकता है। हालाँकि, यदि वे विभिन्न आकारों में या एक 3D दुनिया में प्रदर्शित किए जा रहे हैं, तो आपको एमआईपी मैप किए गए बनावट की आवश्यकता होगी जो अधिक मेमोरी लेते हैं। यदि आप वास्तव में उनकी निष्ठा को एक बड़े बनावट के साथ 'करीब' देखना चाहते हैं, तो वे बहुत सारी स्मृति लेंगे।
आशा है कि ये आपकी मदद करेगा।
वेक्टर ग्राफिक्स को रेंडर करने के कुछ तरीके हैं। जैसा कि द बजज़सॉ का उल्लेख है, NVIDIA के पास एक विस्तार है जो सामान्य रास्तों को बहुत जल्दी प्रस्तुत कर सकता है (लेकिन निश्चित रूप से यह केवल NVIDIA GPU पर काम करता है)। और एलन वोल्फ ने निहित सतह के तरीकों (लूप-ब्लिन / डिस्टेंस फील्ड्स) का उल्लेख किया है, जो एक फ़ंक्शन को परिभाषित करता है जो कहता है कि क्या आप किसी आकृति के अंदर या बाहर हैं, और उस फ़ंक्शन के आधार पर पिक्सल को रंग दें। एक अन्य विधि स्टैंसिल-एंड-कवर है, जहां आप पथ को स्टैंसिल बफर में रेंडर करते हैं और यह निर्धारित करने के लिए सम-विषम गणना का उपयोग करते हैं कि क्या पथ एक पिक्सेल को कवर करता है।
सामान्य तौर पर, हालांकि, ट्रेडऑफ़ यह है कि रेंडरिंग रस्टर तेज़ होगा, लेकिन अलियासिंग के लिए अतिसंवेदनशील होता है (यहां तक कि दूरी के क्षेत्र कम और उच्च पैमाने पर टूट जाते हैं)। रेंडरिंग रास्तों के लिए बहुत अधिक सेटअप की आवश्यकता होती है, लेकिन सिद्धांत रूप में इसे किसी भी संकल्प के लिए बढ़ाया जा सकता है।