सर्वश्रेष्ठ (सबसे लोकप्रिय?) बनावट के लिए छवि प्रारूप [बंद]


13

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

जवाबों:


15

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

यह देखते हुए कि कुछ हद तक असामान्य आवश्यकता है, टीजीए शायद आपकी सबसे अच्छी शर्त है। TGA 2.0 में एक अल्फा चैनल है और PNG की तुलना में अपेक्षाकृत सरल है।


3
TGA के लिए +1 यदि ओपी स्वयं लिखना चाहता है। मैंने अपना TGA लोडर एक बार लिखा था। इतनी जल्दी और दर्द रहित।
कम्युनिस्ट डक

4
@ टक: जब तक आप संपीड़न या किसी भी फैंसी विशेषताओं के बिना सरल टीजीए कर रहे हैं, तब तक दर्द रहित रहें। यदि आप एक पूरी तरह से आज्ञाकारी TGA लोडर चाहते हैं तो मैंने पाया है कि यह थोड़ा दर्द है। यह एक अजीब प्रारूप की तरह है।
ज़ोरबहुत

1
@Zorba, कंप्रेशन काफी आसान है। यह सिर्फ आप एक्सटेंशन के लिए परवाह है या नहीं।
deceleratedcaviar

10

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

एक बनावट 1024 * 1024 पर विचार करें:

  • RGB या RGBA (16 बिट्स): 2Mo (.5s एसजीएस पर लोड करने के लिए)
  • RGBA (32 बिट्स): 4Mo (एसजीएस पर लोड करने के लिए 1s)
  • PVRT (4bpp): 512ko (.125 एसजीएस पर लोड करने के लिए)
  • ETC1 + अल्फा: 1.5Mo (एसजीएस पर लोड करने के लिए .4s)

हमारे खेलों में, हमारे पास कई स्वरूपों में संपत्ति (बनावट) हैं:

  • DXTC बनावट के लिए DDS प्रारूप (डेस्कटॉप प्लेटफ़ॉर्म: OS X, Linux, Windows और Tegra)
  • एटीसी बनावट के लिए डीडीएस प्रारूप (एंड्रेनो जीपीयू)
  • PVRT प्रारूप के लिए PVR प्रारूप (PowerVR GPUs)
  • ETC1 बनावट के लिए PKM प्रारूप (सभी OGLES 2.0 डिवाइस कंपेटिबल्स)

अंत में, हम संगतता के लिए कच्चे प्रारूप का उपयोग करते हैं लेकिन यह संगतता या GUI तत्वों के लिए है

  • कच्ची बनावट के लिए पीएनजी प्रारूप। यह RGBA 16, 24 या 32बिट टेक्सचर के लिए है (हम MIT लाइसेंस प्राप्त लोडर का उपयोग करते हैं)। यह असम्बद्ध बनावट है।

ETC1 बनावट का कोई अल्फा चैनल नहीं है, इसलिए हम दो बनावट (आरजीबी बनावट और अल्फा बनावट) के साथ एक विशेष शेडर का उपयोग करते हैं। संपीड़ित प्रारूप लोड करने के लिए बहुत आसान है (100 या 200 लोको)।

डेस्कटॉप पर, DXTC (S3TC) कई कार्डों पर मौजूद है। तो, आप इसे इस्तेमाल करते हैं।

संपीड़ित बनावट

समर्थक

  • बनावट भराव में सुधार हुआ
  • बनावट लोड हो रहा है (4x या अधिक)
  • लोड करने में आसान

चोर

  • सभी प्लेटफार्मों पर समर्थित नहीं है
  • कलाकृतियों

6
बनावट के बीच एक बड़ा अंतर है जो वीडियोकोर्ड (जैसे। DXTC) पर संपीड़ित है और बनावट जो केवल संग्रहीत होते समय संपीड़ित होती है और लोडिंग के दौरान विघटित होनी चाहिए (जैसे। पीएनजी)। PNG एक असम्पीडित बनावट से लोड करने के लिए धीमा होगा क्योंकि इसे पहले विघटित होना चाहिए। वे एक छोटी फाइल हैं, हां, लेकिन ग्राफिक्स मेमोरी की मात्रा समान है।
झॉकिंग

8

बनावट एक या अधिक छवियों का संग्रह है। इसका मतलब यह है कि एक बनावट को टीजीए या पीएनजी द्वारा दर्शाया जा सकता है, लेकिन न तो प्रारूप बनावट के सभी संभावित विशेषताओं का प्रतिनिधित्व करने में सक्षम है। क्यों?

क्योंकि प्रत्येक व्यक्ति केवल एक ही छवि धारण कर सकता है । कोई मम्मप नहीं हैं। 3 डी बनावट संभव नहीं हैं। कोई सरणी बनावट नहीं। कोई क्यूबैप्स नहीं। उन फ़ाइलों में से प्रत्येक सिर्फ एक 2 डी छवि है। वे एक बनावट का हिस्सा हो सकते हैं, लेकिन जब तक आप mipmapping का उपयोग नहीं कर रहे हैं (और जब तक कि आपकी विशिष्ट आवश्यकताएं नहीं हैं, मैं mipmaps का उपयोग नहीं करने के खिलाफ दृढ़ता से सलाह देता हूं), इन स्वरूपों में एक भी छवि फ़ाइल एक बनावट नहीं हो सकती।

वे ठीक छवि प्रारूप हैं, लेकिन वे खराब बनावट प्रारूप बनाते हैं ।

DDS बनावट प्रारूपों का सबसे आगे चलने वाला है क्योंकि यह वास्तव में चीजों की बनावट का समर्थन करता है। यह mipmaps और cubemaps का समर्थन करता है। यह 3 डी बनावट का समर्थन करता है। DDSv10 समर्थन सरणी बनावट। आप एक डीडीएस के भीतर एक ही बनावट को इस तरह से पैकेज कर सकते हैं जैसा कि आप पीएनजी या टीजीए के साथ नहीं कर सकते।

DDS असम्पीडित और संकुचित बनावट डेटा का समर्थन करता है। जब तक संकुचित बनावट प्रारूप DXT / BC बनावट स्वरूपों में से एक है।

PKM ETC1-संकुचित चित्रों की पैकेजिंग के लिए उपयोगी है, लेकिन PNG की तरह, यह वास्तविक बनावट सुविधाओं का समर्थन नहीं करता है।

PVR फाइलें DDS के मोबाइल के बराबर लगती हैं (हालांकि वे सिर्फ DDS का उपयोग क्यों नहीं कर सकते, मुझे नहीं पता)। वे विभिन्न संपीड़न तकनीकों का समर्थन करते हैं, लेकिन उनके पास सरणी बनावट जैसे उन्नत डीडीएसवी 10 सुविधाओं के साथ-साथ 3 डी बनावट समर्थन का अभाव है।

तो DDS व्यापक बनावट समर्थन के संदर्भ में जीतता है।


2
विशुद्ध रूप से सुविधाओं के लिए बोलते हुए, टीडीएफ उन सभी चीजों का समर्थन करता है जो डीडीएस करता है और बहुत कुछ। अल्फा के अलावा आईआर, आर-पास, आर, जी, बी और यूवी चैनलों के साथ एक बनावट चाहते हैं? प्रति चैनल 64 बिट IEEE फ़्लोटिंग पॉइंट में? चैनल के लिए उपयुक्त एल्गोरिदम (JPEG और JPEG2000 सहित) के किसी भी संख्या से प्रभावित है? प्रति फ़ाइल कई छवियों के साथ और उनमें से हर एक के लिए समृद्ध मेटाडेटा? यह यह सब कर सकता है, और बहुत कुछ। यह कुछ समय से फ़ोटोशॉप का "मूल" प्रारूप भी है। अब, जैसा कि इसके लिए एक लोडर लिखने के लिए ...
मार्टिन सोजका

मुझे DDS कंटेनर के तहत केवल DXT / BC बनावट प्रारूप का उपयोग करने की आवश्यकता के बारे में अधिक जानकारी जोड़ने की अनुमति दें; ऐसा लगता है कि यह मामला नहीं है। मैंने विभिन्न संपीड़न प्रारूपों और आउटपुट का उपयोग करते हुए कंप्रेशर देखा है। सभी के लिए। (इस संकेत को निष्पादित करते समय मदद आउटपुट से इस संकेत को देख सकते हैं) और एसओ पर [यह] (उत्तर) यह कहते हुए कि आप किसी भी संपीड़न प्रारूप का उपयोग कर सकते हैं (विभिन्न फोरसीसी सेटिंग) फिर खुद को संभालो)।
10

1
@haxpor: आप एक फ़ाइल में जो चाहें हटा सकते हैं और इसे DDS कह सकते हैं। सवाल यह है कि क्या कोई ऐसा एप्लिकेशन जो सामान्य DDS फाइल को पढ़ सकता है, वह आपको पढ़ सकता है या ऐसा करने के लिए उसे विशेष रूप से कोडित करना होगा? DDS प्रारूप केवल DXT / BC संपीड़न प्रारूप निर्दिष्ट करता है (और मुझे आजकल ASTC लगता है)। यदि आप किसी अन्य प्रारूप का उपयोग करते हैं तो प्रोग्राम लिखने और उसे पढ़ने वाले प्रोग्राम के बीच क्या होता है। लेकिन यह बहुत ज्यादा किसी भी छवि प्रारूप का सच है ।
निकोल बोलस

@NicolBolas इसे संक्षिप्त करने के लिए धन्यवाद। मुझे लगता है कि यह ऐसा है।
१३

5

ख्रोनोस समूह ओपन और ओपनजीएस ईएस अनुप्रयोगों के लिए बनावट के भंडारण के लिए केटीएक्स फ़ाइल प्रारूप की सिफारिश करता है। आप इस प्रारूप के साथ काम करने के लिए libktx का उपयोग कर सकते हैं ।

विशेषताएं:

  • एक KTX फ़ाइल से एक OpenGL बनावट को तुरंत
  • जब हार्डवेयर में ETC1 सपोर्ट न हो तो ईटीसी 1 कंप्रेस्ड टेक्सचर इमेज को डिकम्प्रेस करें।
  • बनावट लोड होने के रूप में KTX फ़ाइल से की-वैल्यू जोड़े के हैश टेबल का निर्माण करें
  • स्रोत छवियों की एक सरणी और मुख्य-मूल्य जोड़े के वैकल्पिक हैश तालिका से एक KTX फ़ाइल लिखें।
  • कुंजी-मूल्य जोड़े की हैश तालिका का निर्माण और आबाद करें।

3

ऐसा लगता है कि DDS (DirectDraw Surface) इस समय बनावट के लिए सबसे लोकप्रिय विकल्प है। अलग पिक्सेल प्रारूप, पारदर्शिता और संपीड़न है। यह GL_ARB_texture_compression एक्सटेंशन के माध्यम से OpenGL में समर्थित है।

उदाहरण के लिए, यहां एक ओएनजीसी लोडर है


आपके उत्तर को थोड़ा भ्रमित किया गया है। यह कहने का कोई मतलब नहीं है कि OpenGL में DDS समर्थित है। OpenGL छवि स्वरूपों के साथ सौदा नहीं करता है।
rdb

3

यहाँ कई विचार हैं:

  1. कितनी तेजी से आप डिस्क और सिस्टम मेमोरी में बनावट को प्राप्त कर सकते हैं।
  2. कितनी तेजी से आप सिस्टम मेमोरी से जीपीयू तक पहुंच सकते हैं (आपके मामले में glTexImage2D के माध्यम से)।
  3. आपके बजट में डिस्क स्पेस और वीडियो रैम स्टोरेज कितना है।
  4. प्रदर्शन और गुणवत्ता।

TGA एक अच्छा विकल्प है क्योंकि 24 और 32 बिट असम्पीडित मामलों में आप डेटा को एक ही फ़्रेड / जो कुछ भी पढ़ सकते हैं और परिणाम को आगे की प्रक्रिया के बिना सीधे glTexImage2D के माध्यम से भेज सकते हैं। यह एक बुरा विकल्प है क्योंकि इसमें फ़ाइल का आकार सबसे बड़ा हो सकता है और यदि डिस्क I / O एक अड़चन है तो आपकी रीड धीमी होगी।

पीएनजी एक अच्छा विकल्प है क्योंकि यह एक छोटे फ़ाइल आकार के साथ छवियों की गुणवत्ता को संरक्षित करता है। यह एक बुरा विकल्प है क्योंकि PNGs को विघटित करने के लिए धीमा हो सकता है - अगर यह आपकी अड़चन है - तो ठीक है, आप जानते हैं।

JPG एक अच्छा विकल्प है क्योंकि इसमें आम तौर पर सबसे छोटी फ़ाइल का आकार होता है और यह डिस्क से वास्तव में तेज़ी से आएगा (यदि आपको नेटवर्क पर फ़ाइल भेजने की आवश्यकता है तो दोगुना अच्छा है)। इंटरमीडिएट सॉफ्टवेयर डीकंप्रेसन स्टेप्स और क्वालिटी लॉस के कारण यह एक बुरा विकल्प है (हालांकि आप इसे कम करने के लिए क्वालिटी सेटिंग्स को ट्यून कर सकते हैं)। कोई अल्फा चैनल भी नहीं।

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

यदि यह मैं था, तो मैं इन सभी प्रारूपों के लिए समर्थन का निर्माण करूँगा (TGA और DDS लोडर्स को लिखने के लिए काफी तुच्छ हैं, JPG और PNG के साथ मैं एक छवि पुस्तकालय का उपयोग करूंगा) ताकि सामग्री निर्माता सबसे उपयुक्त प्रारूप चुन सकें प्रति-बनावट आधार।


1
"DDS मूल रूप से अधिकांश उपभोक्ता पीसी हार्डवेयर पर समर्थित है" DDS विभिन्न प्रारूपों के लिए एक कंटेनर है। आप एक डीडीएस फ़ाइल को एक GPU में पारित नहीं करते हैं, लेकिन इसकी सामग्री!
तारा

0

और निश्चित रूप से आप हमेशा पुराने 32 बिट्स बीएमपी के साथ जा सकते हैं जो लोड करना वास्तव में आसान है (विशेषकर यदि आकार 2 की शक्ति है (वास्तव में, 8 बाइट्स IIRC का एक गुणक))।

अन्यथा यह अजीब लगता है कि आप केवल एक प्रारूप चाहते हैं, jpg वास्तव में अच्छे रियल-वर्ल्ड हाय रेस टेक्सचर के लिए अच्छा है (जेपी डिस्कस्पेस और डाउन लोड-टाइम के साथ चमत्कार करता है), पारदर्शिता के लिए पीएनजी और कॉन्ट्रो-टेक्सचर के लिए अवसर 32 बिट जीएमपी (एक स्क्रिप्ट या एक 'त्वरित और गंदे' उपकरण से बनाना आसान है)।

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