কোন চিত্রের ফর্ম্যাটটি আরও মেমরি-দক্ষ: পিএনজি, জেপিইজি, বা জিআইএফ?


70

কোন চিত্রের ফর্ম্যাট মেমরি বাঁচাতে আরও দক্ষ? পিএনজি, জেপিইজি, বা জিআইএফ?


4
টেক্সচার বা অবজেক্টগুলি নিষ্পত্তি করার সাথে ফাইলটির ফর্ম্যাটটির কোনও সম্পর্ক নেই।
কাইলোটান

উত্তর:


153

"মেমোরি" এবং "দক্ষতা" সাধারণত পদগুলির অপব্যবহার করা হয়, তাই আমি আপনাকে চারটি ভিন্ন উপাদানের জন্য একটি উত্তর দেব যা আপনার গেমটির কার্য সম্পাদনকে প্রভাবিত করতে পারে।

আমি এটিকে সংক্ষিপ্ত এবং সংক্ষিপ্ত রাখার জন্য অনেকগুলি বিষয়কে ওভারস্পিম্প্লাইফিং করব, তবে নীচে এই পাঠ্যে প্রচুর ভুলত্রুটি রয়েছে, তাই এটি একটি চিমটি নুন দিয়ে নিন। তবে মূল ধারণাগুলি বোধগম্য হওয়া উচিত।

সংগ্রহস্থল

আপনার চিত্রগুলি আপনার সফ্টওয়্যার বিতরণে এটি আকার নেয় size আপনার সংস্থানগুলি যত বেশি জায়গা ব্যবহার করবে তত বেশি ডাউনলোড (আপনার ওয়েবসাইট থেকে যেমন হবে) তত বেশি হবে। আপনি যদি শারীরিক মিডিয়ায় যেমন সিডি বা ডিভিডি বিতরণ করছেন তবে আপনাকে সম্ভবত এই ফ্রন্টে কিছু গুরুতর অপ্টিমাইজেশন করতে হবে।

সাধারণভাবে, জেপিইজি কোনও তীক্ষ্ণ সীমানা ছাড়াই ফটোগ্রাফ এবং চিত্রগুলির জন্য সেরাকে সংকুচিত করে। তবে আপনার চিত্রগুলির গুণমান হ্রাস পাবে কারণ জেপিইজি ক্ষতিকারক সংকোচনের ব্যবহার করে (আপনি জেপিইজি হিসাবে চিত্র রফতানির সময় সংকোচনের স্তর / অবক্ষয়কে সূক্ষ্ম করতে পারেন this এ সম্পর্কে আরও তথ্যের জন্য আপনার ইমেজিং সফ্টওয়্যারটির ডকুমেন্টেশন দেখুন)।

তবে, জেপিজি যতটা ভাল হোক, এটি স্বচ্ছতা সমর্থন করে না । আপনি যদি অন্যের মাধ্যমে প্রদর্শিত চিত্রগুলি রাখতে চান বা যদি আপনি অনিয়মিত আকারের চিত্র চান তবে এটি অত্যন্ত গুরুত্বপূর্ণ। জিআইএফ একটি ভাল পছন্দ, তবে এটি পিএনজি দ্বারা বেশিরভাগ ক্ষেত্রে ছাড়িয়ে গেছে (জিআইএফ সমর্থন করে যে কয়েকটি জিনিস পিএনজি সমর্থন করে না, তবে তারা গেম প্রোগ্রামিংয়ে বেশিরভাগ ক্ষেত্রে অপ্রাসঙ্গিক)।

পিএনজি স্বচ্ছতা (এবং সেমিট্রান্সপারেন্সি) সমর্থন করে, গুণমানের অবক্ষয় ছাড়াই ডেটা সংকোচিত করে (যেমন এটি লসলেস সংকোচন ব্যবহার করে), এবং মোটামুটিভাবে কমপ্রেস করে, তবে জেপিজির মতো নয়।

সমস্যাটি যখন আপনার ভাল সংকোচনের পাশাপাশি স্বচ্ছতার প্রয়োজন হয় তখন দেখা দেয়। আপনি সামান্য নিকৃষ্ট চিত্র কিছু মনে না করেন, তাহলে আপনি যেমন পিএনজি quantization প্রোগ্রাম ব্যবহার করতে পারেন pngquant , যা আপনি অনলাইনে পরীক্ষা করতে পারেন TinyPNG । মনে রাখবেন যে নিজের আকারে কোয়ান্টাইজেশন দ্বারা সম্পাদিত চিত্রের অবক্ষয় জেপিইগির চেয়ে পৃথক (যাতে কোয়ান্টাইজেশনের পাশাপাশি অন্যান্য আক্রমণাত্মক কৌশলও অন্তর্ভুক্ত), তাই বিভিন্ন সেটিংসের মাধ্যমে উভয়ই চেষ্টা করে দেখতে ভুলবেন না।

আপনি যদি আপনার বিতরণ আকারটি আগ্রাসীভাবে ছোট করতে চান তবে আপনি প্রতিটি চিত্রটিকে ম্যানুয়ালি এইভাবে প্রক্রিয়া করতে পারেন:

if the image has transparency then
    try pngquant on the image
    if the results are not satisfactory then
        revert to the non-quantized image
    end
    store as PNG
else
    try storing it as JPG with different quality settings
    if no single setting yields an image of an acceptable quality then
        try pngquant on the image
        if the results are not satisfactory then
            revert to the non-quantized image
        end
        store as PNG
    else
        store as JPG
    end
end

পরামর্শ: কিছু চিত্র এক ফর্ম্যাটে সংরক্ষণ করা ঠিক আছে, এবং অন্যগুলি অন্য ফর্ম্যাটে।

ডিএক্সটি, ইটিসি এবং পিভিআরটিসি এর মতো অন্যান্য বিশেষায়িত ফর্ম্যাট রয়েছে। তারা সংকোচন সমর্থন করে, এবং মেমোরিতে সংক্ষেপিত লোডও করা যায়, তবে এগুলি কেবলমাত্র নির্দিষ্ট জিপিইউ দ্বারা সমর্থিত হয় এবং এই জিপিইউগুলির বেশিরভাগই কেবল তার মধ্যে একটিকে সমর্থন করে, যদি না আপনি আপনার টার্গেট হার্ডওয়্যারটির সঠিক হার্ডওয়্যার স্পেসিফিকেশনগুলি না জানেন (একটি উল্লেখযোগ্য কেসটি হ'ল আইফোন / আইপ্যাড, যা পিভিআরটিসি টেক্সচার সমর্থন করে), আপনার এই ফর্ম্যাটগুলি এড়ানো উচিত।

প্রোগ্রাম স্মৃতি

আমি এটি এখানে অন্তর্ভুক্ত করেছি, কারণ এটি যা সাধারণত "স্মৃতি" দ্বারা পরিচিত। তবে, যদি আপনার গেমটি গ্রাফিক্স ত্বরণ ব্যবহার করে (এবং আপনি যদি 1998 এর পরে কোনও গেম তৈরি করেন তবে সম্ভবত আপনি হচ্ছেন), তবে মেমরিটি কেবলমাত্র আপনার টেক্সচারের বর্ণনাকারী (চিত্র প্রতি কয়েক বাইট) ব্যবহার করবে যা কেবলমাত্র চিত্রগুলির পরিমাণ দ্বারা প্রভাবিত , এবং তাদের আকার বা বিন্যাস নয় (এটিতে কয়েকটি ক্যাভেট রয়েছে তবে বেশিরভাগ ক্ষেত্রে অপ্রাসঙ্গিক)।

যদি আপনার প্ল্যাটফর্মটিতে ডেডিকেটেড ভিডিও মেমরি না থাকে, হার্ডওয়্যারটি ত্বরান্বিত না হয়, বা অন্য কোনও অস্বাভাবিক ঘটনা না ঘটে তবে ভিআরএএম সম্পর্কিত পরবর্তী বিভাগটি সম্পূর্ণ বা আংশিকভাবে র‌্যামে ঘটবে, তবে মূল নীতিগুলি একই হবে।

ভিডিও স্মৃতি

আপনার প্রোগ্রামটি একবার চলার পরে আপনার চিত্রগুলি এখানে সংরক্ষণ করা হবে। সাধারণভাবে, আপনি যে বিন্যাসে সেগুলি সংরক্ষণ করেছেন তা এখানে কোনও পার্থক্য করবে না, কারণ সমস্ত চিত্রগুলি ভিডিও মেমোরিতে লোড করার আগে সেগুলি সঙ্কুচিত করা হয়।

এখন, আপনার চিত্রগুলি গ্রাহক করা ভিআরএ্যাম মোটামুটি ভিআরএমে লোড হওয়া width * height * bitdepth প্রতিটি চিত্রের জন্য হবে । এখানে কয়েকটি বিষয় লক্ষণীয়:

  1. আপনার চিত্রগুলি যে চিত্রের প্রস্থ এবং উচ্চতায় ভিআরএমে সংরক্ষিত রয়েছে তা অবশ্যই আপনার মূল চিত্রের সাথে মেলে না। কিছু জিপিইউ কেবলমাত্র 2 টি আকারের মাপের সাথে টেক্সচারগুলি পরিচালনা করতে পারে, তাই আপনার 320x240 চিত্রটি অব্যবহৃত স্মৃতি কার্যকরভাবে নষ্ট হয়ে গেলে ভিআরএমে একটি 512x256 স্পেসে প্রকৃতপক্ষে সংরক্ষণ করা যেতে পারে। কিছু সময় আপনাকে এমন মাপের সাহায্যে টেক্সচার লোড করারও অনুমতি দেওয়া হয় না যা 2 এর পাওয়ার নয় (যেমন GLES 1.1 তে থাকে)।

    সুতরাং আপনি যদি ভিআরএএম ব্যবহারটি হ্রাস করতে চান তবে আপনি নিজের চিত্রগুলি আটলাইং করে এবং ২ টির ক্ষমতার সাথে এগুলি আকার দেওয়ার বিষয়ে বিবেচনা করতে চাইতে পারেন , যা রেন্ডারিংয়ের সময় কম রেন্ডার রাষ্ট্র পরিবর্তনগুলিরও সুবিধা পাবে। এই সম্পর্কে আরও পরে।

  2. বিটডেপথ খুব গুরুত্বপূর্ণ। সাধারণত টেক্সচারগুলি 32-বিট এআরজিবি বা 32-বিট এক্সআরজিবিতে ভিআরএমে লোড করা হয়, তবে যদি আপনার হার্ডওয়্যারটি 16-বিট গভীরতা সমর্থন করতে পারে এবং আপনি যদি কম বিটডেপথ না পেয়ে আপত্তি করেন তবে আপনি প্রতিটি চিত্রের দ্বারা অর্ধেক পরিমাণ ভিআরএএম খরচ করতে পারবেন , যা বিবেচনা আকর্ষণীয় কিছু হতে পারে।

  3. তবে আপনি যা করেন না কেন আপনার গেমটি কতটা ভিআরএএম ব্যবহার করে তা বিবেচনা করার সময় সবচেয়ে গুরুত্বপূর্ণ বিষয়টি হ'ল কোনও নির্দিষ্ট সময়ে আপনি ভিআরএমে থাকা চিত্রের পরিমাণ । আপনি যদি একটি ভাল পারফরম্যান্স গেম চান তবে এটি সম্ভবত আপনি যতটা সম্ভব কম রাখতে চান। ভিআরএমে টেক্সচার লোড এবং আনলোড করা ব্যয়বহুল, সুতরাং আপনি যখনই প্রতিটি চিত্র ব্যবহার করতে যাচ্ছেন ঠিক তখনই আপনি লোড করতে পারবেন না। আপনি সম্ভবত যে চিত্রগুলি ব্যবহার করবেন সেগুলি প্রিললোড করার মধ্যে আপনার অবশ্যই একটি ভারসাম্য খুঁজে পাওয়া উচিত এবং যখন আপনি নিশ্চিত হন যে আপনি সেগুলি আর ব্যবহার করবেন না তখন এগুলি আনলোড করুন। এই অধিকারটি করা তুচ্ছ নয় এবং আপনাকে আপনার নির্দিষ্ট গেমের জন্য নিজের কৌশল সম্পর্কে ভাবতে হবে।

কার্যকর করার গতি

"মেমরি" না হলেও এটি গেমসের পারফরম্যান্সের সাথে খুব সম্পর্কিত। চিত্র অঙ্কন ব্যয়বহুল, এবং আপনি নিশ্চিত করতে চান যে আপনার রেন্ডারিং যত দ্রুত সম্ভব চলমান। অবশ্যই, এখানে, ফর্ম্যাটটি কোনও ব্যাপার নয়, তবে অন্যান্য জিনিসগুলি করুন:

  1. চিত্রের আকার (আসলে এটি "নমুনা আকার" হবে): আপনি যে চিত্রটি আঁকতে চলেছেন তার বৃহত্তম অঞ্চল, এটি আঁকতে আরও বেশি সময় লাগবে। স্ক্রিনের একটি ছোট অংশে একটি বিশাল চিত্র রেন্ডারিং খুব কার্যকর নয়, সুতরাং মাইপম্যাপিং নামে একটি কৌশল রয়েছে যা রেন্ডারিং গতির জন্য ভিআরএএম- এর ব্যবসায়ের সমন্বিত থাকে, বিভিন্ন চিত্রগুলিতে বেশ কয়েকটি বার আপনার চিত্রগুলি সঞ্চয় করে এবং সবচেয়ে ছোট চিত্রটি দিয়ে দেয় যা দিতে পারে আপনি যে কোনও সময় প্রয়োজনীয় মানের। চিত্রগুলি লোড হওয়ার সাথে সাথে ম্যাপম্যাপিং করা যেতে পারে, যা লোডিং গতি এবং ভিআরএএম ব্যবহারের উপর প্রভাব ফেলবে, বা প্রিপ্রোসেসিংয়ে (একই চিত্রের বিভিন্ন সংস্করণে ম্যানুয়ালি স্টোর করে, বা ডিডিএসের মতো স্থানীয়ভাবে মাইপম্যাপিং সমর্থন করে এমন ফর্ম্যাট ব্যবহার করে) যা স্টোরেজকে প্রভাবিত করবে এবং ভিআরএএম ব্যবহার, তবে লোডিং গতির উপর খুব কম প্রভাব ফেলবে।

  2. রাজ্যের পরিবর্তনগুলি রেন্ডার করুন। আপনি সম্ভবত একই সাথে পর্দায় বিভিন্ন আলাদা চিত্র আঁকতে চাইবেন। তবে, জিপিইউ যে কোনও সময় কেবলমাত্র একক উত্স চিত্র ব্যবহার করতে পারে (এটি সত্য নয়, তবে দয়া করে এখানে আমার সাথে রাখুন)। রেন্ডারিংয়ের জন্য বর্তমানে ব্যবহৃত চিত্রটি অনেক রেন্ডার রাজ্যের মধ্যে একটি এবং এটি ব্যয়বহুল। সুতরাং আপনি যদি একই চিত্রটি বেশ কয়েকবার ব্যবহার করতে যাচ্ছেন (মনে রাখবেন কখন আমি টেক্সচার অ্যাটলাসগুলি উল্লেখ করেছি ?), আপনি রেন্ডার অবস্থা পরিবর্তন করার আগে কোনও চিত্রকে যতটা ব্যবহার করতে পারেন এবং পুনরায় ব্যবহার শুরু করলে আপনি একটি বিশাল পারফরম্যান্স লাভ লক্ষ্য করবেন will বিভিন্ন চিত্র (এগুলি ছাড়াও অন্যান্য রেন্ডার রাজ্যগুলি রয়েছে, এবং রাষ্ট্রের পরিবর্তনগুলি রেন্ডার করতে আপনি আপনার স্টাফ আঁকেন এমন ক্রমটি ঠিকঠাক করা কোনও গেমের পারফরম্যান্সকে বাড়ানোর সময় খুব সাধারণ ক্রিয়াকলাপ হয়)

তবে চিত্র ব্যবহারের অপ্টিমাইজেশন একটি অত্যন্ত জটিল বিষয় এবং আমি এখানে যা লিখেছি তা একটি গেম লেখার সময় আপনাকে বিবেচনা করতে হবে এমন কয়েকটি কারণগুলির একটি খুব বিস্তৃত এবং ওভারসিম্প্লিফাইভড ওভারভিউ, সুতরাং আমার মনে হয় আপনি এটিকে সহজ রাখলে অবশ্যই এটাই সেরা, এবং যখনই আপনার সত্যিই এটি করা দরকার কেবলমাত্র অনুকূলিত করুন। বেশিরভাগ সময়, অকালে অপ্টিমাইজ করা অপ্রয়োজনীয় (এবং কখনও কখনও ক্ষতিকারকও) তাই সহজেই নিন।


25
+1 টি। এটি একটি অত্যন্ত বিস্তৃত উত্তর যা ভয়াবহ জমিটি coversেকে দেয়। আমি নিশ্চিত নই যে টেক্সচার ডিসক্রিপটরগুলির আকারটি যতটা পেয়েছে তার জন্য যথেষ্ট পরিমাণে স্থান প্রয়োজন, এবং ডিএক্সটি / ইসি / পিভিআরটিসির উল্লেখটিতে সত্যিই অন্তর্ভুক্ত হওয়া উচিত যে এগুলির প্রত্যেকটি কিছু প্ল্যাটফর্মগুলিতে কাজ করে - তারা ক্রস-প্ল্যাটফর্ম উন্মুক্ত নয় মানকগুলি যা সর্বত্র ব্যবহারযোগ্য, জেপিইজি, পিএনজি এবং জিআইএফ যেভাবে। তবে সামগ্রিকভাবে, খুব মুগ্ধ। এটি আমার উত্তরের উপরে "একটি ছোটখাট টীকা" এর চেয়ে অনেক বেশি! : ডি
ট্রেভর পাওয়েল

9
@ পান্ডপাজামা: নাও হতে পারে, তবে এই প্রশ্নের উত্তর পাওয়ার চেয়ে এটি আশ্চর্যজনকভাবে উত্তম উত্তর।
টমাসকে

1
+1, এবং আরও যদি আমি পারতাম। এটি একটি দুর্দান্ত উত্তর, এবং "স্মৃতিশক্তির দক্ষতা" সম্পর্কে যে কোনও প্রশ্নের জন্য একটি আদর্শ রেফারেন্স হওয়া উচিত কারণ এটি সাধারণ প্রচলিত মিথটিকে এত কার্যকরভাবে অস্বীকার করে যে কম মেমরি ব্যবহার করা সর্বদা সর্বোত্তম পন্থা, কেবল চিত্রগুলির জন্য নয়। আমি একটি আইটেম যোগ করার পরামর্শ দিচ্ছি তা হ'ল অ-ত্বরিত ক্ষেত্রে, অঙ্কন করার সময় যদি কোনও অন-দ্য ফ্লাই ডিকম্প্রেশন প্রয়োজন হয় তবে এটি অগ্রহণযোগ্য পারফরম্যান্সের ওভারহেডের পরিমাণ হতে পারে।
ম্যাক্সিমাস মিনিমাস

2
আমি পিএনজি গন্টলেট পরামর্শ দিতে চাই । এটা তোলে বৃহদায়তন কি করতে পারেন অবচয়হীন PNG ফাইল মাপ জন্য অপ্টিমাইজেশন, যে পর্যন্ত যোগ করতে পারেন আপনি অনেক sprites থাকতে বিশেষ করে যখন। দুঃখজনকভাবে এটি শুধুমাত্র উইন্ডোজ, তবে বিকল্পগুলি অন্য ওএসের হোমপেজে তালিকাভুক্ত রয়েছে।
orlp

1
@ ডেভিডডিমালান্টা আমার কাছে লিবিজিডিএক্সের অভিজ্ঞতা নেই তবে আমি নথির ডকুমেন্টেশন থেকে দেখতে পাচ্ছি setEnforcePotImages, এটি ওপেনগ্লেস 1.0 এর জন্য 2 আকারের টেক্সচারের পাওয়ার প্রয়োগ করতে অক্ষম করে। এটি কোনও ভাল ধারণা নয়, কারণ সমস্ত হার্ডওয়্যার 2-নন-পাওয়ার-টেক্সচারকে সমর্থন করে না। ওপেনজিএলএস ২.০-এর নন-পাওয়ার-অফ টেক্সচারের জন্য সমর্থন প্রয়োজন, সুতরাং আপনি যদি ২.০ লক্ষ্য করে থাকেন তবে আপনি যে কোনও আকারের টেক্সচার ব্যবহার করতে পারেন। আরও তথ্যের জন্য libgdx ডকুমেন্টেশন পড়ুন।
পান্ডা পাজামা

26

একবার কোনও চিত্র ডিস্ক থেকে লোড হয়ে যায় এবং রেন্ডারিংয়ের জন্য ফর্ম্যাট করা হয়, এটি পিএনজি, জেপিইজি, বা জিআইএফ ব্যবহার করে সেই চিত্রটি ডিস্কে সংরক্ষণ করা হয়েছিল কিনা তা বিবেচনা না করে সমান পরিমাণ মেমরি ব্যবহার করবে।

থাম্বের সাধারণ নিয়ম: জেপিইজি একটি ক্ষতির ফর্ম্যাট, এবং ডিস্কে ছবিটি আরও ছোট করার জন্য চিত্রের মানকে হ্রাস করবে। অন্যদিকে, পিএনজি হ'ল একটি চিত্রবিহীন চিত্র বিন্যাস, এবং এর ফলে সাধারণত ডিস্কে বড় আকারের ফাইল আকারের ফলস্বরূপ। জিআইএফ প্রযুক্তিগতভাবেও একটি ক্ষতিহীন ফর্ম্যাট, তবে কেবল প্রতি চিত্রে সর্বাধিক 256 টি রঙ সমর্থন করে এবং তাই একটি জিআইএফ হিসাবে সংরক্ষণ করা হলে একটি উচ্চ-বর্ণের চিত্রটি প্রায়শই একটি ভারী গুণমানের ক্ষতি করতে পারে।

যদিও এটি কেবল তাদের অন ডিস্ক উপস্থাপনার জন্য। মেমোরিতে, তারা উভয়ই একই টেক্সচার ফর্ম্যাটে প্রসারিত হবে, আপনি তাদের পিএনজি, বা জেপিজি, বা জিআইএফ হিসাবে ডিস্কে সংরক্ষণ করেছেন কিনা তা নির্বিশেষে একই পরিমাণ মেমরি ব্যবহার করে।


সুতরাং এটি ফাইল এক্সটেনশন নয় যা মেমরির আকারের পরিবর্তে ফাইল আকারের হয়?
ট্রেডেসিজে নকটুর্ন

আমরাও। মেমরির আকার চিত্রের মাত্রা এবং বিটডেপথের উপর ভিত্তি করে। চিত্রটি স্ক্রিনে আঁকতে যখন মেমরিতে লোড করা হয় তখন চিত্র ফাইলের যে কোনও সংকোচনতা মুছে ফেলা হয়। (কারণ জিপিইউগুলি পিএনজি বা জেপিজি বা রেন্ডার করতে পারে না The চিত্রগুলি জেনেরিক পিক্স্যাপে প্রসারিত করা হয়েছে যাতে জিপিইউগুলি তাদের সাথে ডিল করতে পারে))
ট্রেভর পাওয়েল

2
এটি 100% সত্য নয়। এমবেডেড বিশ্বে ডিএক্সটি, ইটিসি এবং পিভিআরটিসি-র মতো ফর্ম্যাটগুলির সাথে সর্বাধিক আধুনিক জিপিইউগুলি (এম্বেডযুক্তগুলি সহ) গ্রাফিক্স মেমরিতে সংকুচিত টেক্সচার লোডিং এবং সঞ্চয় করতে সমর্থন করে। অবশ্যই, আপনাকে এই বিন্যাসগুলিতে আপনার টেক্সচারগুলি পিএনজি / জেপিজি / জিআইএফের পরিবর্তে প্রথম স্থানে সংরক্ষণ করতে হবে।
পান্ডা পাইজামা

6
প্রশ্নটি পিএনজি / জেপিজি / জিআইএফ-এর মধ্যে একটি স্পষ্ট পছন্দ ছিল, যার কোনটিই আমি জাগ্রত নই এমন কোনও জিপিইউতে স্থানীয়ভাবে সমর্থিত নয়। মূল প্রশ্নকর্তা ডিস্কে ফাইলের আকার এবং র‌্যামে স্থান গ্রহণের জায়গার মধ্যে পার্থক্য নিয়ে যথেষ্ট সমস্যা পেয়েছিলেন যে আমি অনুভব করেছি যে আরও ফাইল ফর্ম্যাট যুক্ত করা কেবলমাত্র মৌলিক সমস্যাটিকে বিভ্রান্ত করবে। আপনার নিজের উত্তর দিতে নির্দ্বিধায়, যদিও।
ট্রেভর পাওয়েল

2
আমার মন্তব্যটি কেবল একটি টীকা। আমি যদি কোনও উত্তর সরবরাহ করতে চাই, তবে সম্ভবত আপনি যেমনটি লিখেছিলেন তেমনটিই আমি লিখতে পারি এবং চূড়ান্ত সমাপনী বিবৃতি হিসাবে আমার মন্তব্যও। আমার আর কিছু যোগ করার নেই, তাই আমি আমার নিজের উত্তর সরবরাহ করে পুনরাবৃত্তি এড়াতে চাই।
পান্ডা পাইজামা

3

এটা নির্ভর করে.

ফটোগ্রাফের জন্য জেপিগ সবচেয়ে দক্ষ। এটি ক্ষতিহীন নয়, তবে সংক্ষেপণ দ্বারা প্রবর্তিত শিল্পকর্মগুলি এই ব্যবহারের ক্ষেত্রে কমপক্ষে দৃশ্যমান।

তীক্ষ্ণ রেখা এবং কয়েকটি রঙ সহ পিক্সেল আর্টের জন্য পিএনজি হ্রাসহীন এবং সবচেয়ে দক্ষ। এটি আলফা স্বচ্ছতা সমর্থন করে।

জিএনএফ অ্যানিমেশনগুলি সঞ্চয় করার ক্ষমতা ব্যতীত পিএনজি আরও ভাল কিছু করতে পারে না। তবে এটি কেবল ওয়েব অ্যাপ্লিকেশনগুলির প্রসঙ্গে প্রাসঙ্গিক। গেম বিকাশে আপনি সাধারণত স্প্রিটশিট ব্যবহার করে অ্যানিমেশন তৈরি করেন।

মনে রাখবেন আপনি যখন Libgdx এর মতো কোনও গ্রাফিক ইঞ্জিন ব্যবহার করেন তখন এটি সম্ভবত লোড করার পরে চিত্রগুলি সঙ্কুচিত করে এবং পরে তাকে সঙ্কুচিত আরজিবিএ মান হিসাবে মেমোরিতে রাখে। সুতরাং চিত্রের ফর্ম্যাটটি কেবল লোডিং গতির জন্য গুরুত্বপূর্ণ এবং এতে ড্রাইভের স্থান ছিল (বা আপনি যখন নেট থেকে প্রেরণ করবেন তখন ব্যান্ডউইথ ব্যবহার)।


2

আমি libgdx সম্পর্কে খুব বেশি জানি না, তবে চিত্রের ফর্ম্যাট এবং গ্রাফিক্স সম্পর্কে:

রিয়েল ওয়ার্ল্ড ফোটোগুলির ক্ষেত্রে জেপিইজি খুব ভাল। এগুলি ক্ষতিকারক তবে আপনি স্পষ্ট রঙিন স্পেসগুলির সাথে ধারালো প্রান্তের ছবি না তুললে আপনি ফটোতে নিদর্শনগুলি দেখতে পাবেন না যেমন উদাহরণস্বরূপ লিখিত পাঠ্য বা কমিকস। বড় ব্যাকগ্রাউন্ড গ্রাফিক্সের জন্য এগুলি ব্যবহার করুন।

জিআইএফ অপ্রচলিত, এটি সম্পূর্ণ স্বচ্ছতার জন্য একটি নিবেদিত রঙের সাথে প্যালেটযুক্ত রঙগুলি (পিক্সেল প্রতি 8 বিট পর্যন্ত) সঞ্চয় করতে পারে। এটি ফ্রেমের উপর ভিত্তি করে ছোট অ্যানিমেশনগুলিকে অনুমতি দেয়। একবার এর প্যাকিং অ্যালগরিদমের পেটেন্ট ছিল যাতে এটি আইনীভাবে সর্বত্র ব্যবহার করা যায় না। সেই পেটেন্টের কারণে, পিএনজি বিকশিত হয়েছিল।

পিএনজি কম-বেশি এমন একটি জিপযুক্ত বিটম্যাপ যা আরজিবি + আলফা (32 বিট অবধি) এবং অন্যান্য পিক্সেল ফর্ম্যাটগুলি সঞ্চয় করতে পারে। এটি সেই চিত্রের ছোট অংশগুলির গতি-আনজিপিংয়ের জন্য বিশেষী, যা খুব ছোট এবং ধীর ডিভাইসের জন্য সুবিধাজনক (যেমন 10 বছরের পুরনো সেলফোন), তবে আজকের লাইব্রেরিগুলি লোড হয়ে গেলে কেবল বিটম্যাপে আনপ্যাক করে।

পিএনজি আকার এবং গতি এবং বৈশিষ্ট্যগুলিতে জিআইএফের চেয়ে ভাল তবে আপনি যদি বিটম্যাপগুলি দক্ষতার সাথে সঞ্চয় করতে চান তবে আমি পরামর্শ দেব: .PNM.BZ2 ([সম্পাদনা] বিভিন্ন প্যাকিং পদ্ধতির কারণে, .PNM.BZ2 সবসময় বেশি কার্যকর হয় না .PNG। [/ সম্পাদনা] এর চেয়ে)

পিএনএম / পিবিএম / পিজিএম / পিএএম সরল পাঠ্যে KISS- শিরোনাম সহ বিটম্যাপ ফর্ম্যাট। এগুলিতে জিজিপ ব্যবহারের ফলে পিএনজির মতো ফাইল আকারের ফলস্বরূপ ফলস্বরূপ ফলাফল পাওয়া যায়, তাই এর জন্য বিজিপ 2 আরও ভাল সমাধান। আপনি যদি আপনার প্রোগ্রামে অভ্যন্তরীণভাবে বিটম্যাপ ব্যবহার করতে চলেছেন তবে আপনি .zar বা .zip ধারক মধ্যে bzip2 সংক্ষিপ্ত বিটম্যাপ ব্যবহার করতে চাইতে পারেন। আপনার কাছে বিজিপ 2 না থাকলে জিপ পাত্রে পিএনএম ব্যবহার করা (সর্বাধিক সংক্ষেপণের সাথে জিপ) পিএনজি ব্যবহারের অনুরূপ হতে পারে। - সুতরাং, একটি জিপ ফাইলে পিএনজি সঞ্চয় করতে কেবল সামান্য বা কোনও সুবিধা থাকতে পারে - এটি সম্ভবত চিত্রটি লোড করার সময় বাড়িয়ে তুলবে।

তদ্ব্যতীত, এক বিটম্যাপে বেশ কয়েকটি ছোট স্প্রিট / ছবি সংরক্ষণ করা ভাল পছন্দ, বিশেষত যখন আপনার একই পরিস্থিতিতে একইসাথে সমস্ত প্রয়োজন হয়।


পিএনএম ফাইলটি কি সমস্ত স্মার্টফোন ওএস এবং ডেস্কটপ কম্পিউটার ওএস এর জন্য পঠনযোগ্য এবং পাঠযোগ্য?
ডেভিড ডিমালান্ট

1
@ ডেভিড ডিমাল্যান্টা: আমি জানি না এটি কোথায় সমর্থিত এবং কোথায় নেই। আপনি যদি পিএনএম নিয়ে প্রোগ্রাম করতে চান, তবে আপনি খুব কমই কোনও লাইব্রেরি ব্যবহার করতে চান, কারণ যে ফর্ম্যাটটি কোনও এপিআই চয়ন করতে খুব সহজ। এর কারণে, এটি বিদ্যমান সমস্ত প্রোগ্রামিং ভাষার সাথে পাঠযোগ্য এবং লিখনযোগ্য যা বাইনারি ফাইলগুলি পড়া / লেখার পক্ষে সমর্থন করে। অবশ্যই আপনি ইউনিক্স নয়, যে কোনও ওএসে নেটপবিএম ব্যবহার করতে পারেন। অন্যদিকে, আমি জানি না কোন সাধারণ চিত্র গ্রন্থাগারগুলি এটি সমর্থন করে না। এটি কোনও সংকোচিত বিন্যাস নয়, সুতরাং এটি ডিস্কে ছবিগুলি সংরক্ষণ করার জন্য খুব কমই ব্যবহৃত হয়। দেখতে en.wikipedia.org/wiki/Netpbm_format
comonad

1

স্টোরেজ ফর্ম্যাট হিসাবে জেপিইজি সম্ভবত ঘাস বা দেয়ালের মতো কিছু টেক্সচারের জন্য সেরা পছন্দ, যেখানে তথ্যের ক্ষতি সম্ভবত অন্বেষণযোগ্য। পিএনজি অনুসরণ করুন যখন আপনার স্বচ্ছতার প্রয়োজন হবে বা যখন আপনি তথ্য ক্ষতির সাথে অর্থ প্রদান করতে পারবেন না, উদাহরণস্বরূপ 2 ডি গেমের স্প্রাইটস (প্লেয়ার, শত্রু, একটি ট্রেজারি বুক), আপনি সম্ভবত সেই চিত্রগুলির জন্য পিএনজি ব্যবহার করতে চান।

মেমরির ব্যয় সম্পর্কে কথা বলার সময়, ফাইল সিস্টেমে গেম গ্রাফিকগুলি সংরক্ষণ করতে ব্যবহৃত ফর্ম্যাটটি মোটেই প্রাসঙ্গিক নয়। হয় যদি আপনি ভিআরএএম, বা র‌্যাম (সফ্টওয়্যার রেন্ডারার) এ পিক্সেল বাফারগুলি সঞ্চয় করেন তবে আপনি সম্ভবত সেগুলি সঙ্কুচিতভাবে সংরক্ষণ করেছেন, কারণ গেমগুলি প্রতিটি পিক্সেল বাফার দ্বারা ব্যবহৃত পিক্সেল বনাম মেমরির দ্রুত পড়ার পক্ষে।

স্মৃতিতে সঞ্চিত সংকোচিত ডেটাগুলির কোনও বুদ্ধি নেই, কেবল আপনি ডিস্কের পঠনগুলি সংরক্ষণ করার জন্য কিছু ধরণের ক্যাশে বজায় রাখেন তবে আপনার খেলায় একটি নির্দিষ্ট সময় ব্যবহারের জন্য চিত্রগুলি ব্যবহারের জন্য আপনাকে সম্ভবত সেই ক্যাশে থেকে কোনও সঙ্কুচিত অবস্থায় পড়তে হবে।

দ্রুত হার্ডওয়্যার ডিকোডিং করা সম্ভব হলে সংকুচিত চিত্রের ডেটা কিছুটা বেশি বোধগম্য হয়। কমপক্ষে সাধারণ ম্যাপিংয়ের জন্য আমার এই http://en.wikedia.org/wiki/3Dc মনে আছে । এটির সাহায্যে আপনি কিছু ভিআরএএম সংরক্ষণ করতে পারেন। আমি এখনও হার্ডওয়্যার ডিকোডিংয়ের অন্যান্য উদাহরণগুলি সম্পর্কে অবগত নই।

পুনঃসূচনা: আপনার গেমের জন্য অবিচ্ছিন্ন স্টোরেজে গ্রাফিক্স সংরক্ষণের জন্য যে ফর্ম্যাটগুলি ব্যবহার করা হোক না কেন, আপনাকে এটি ডিকোড করতে হবে এবং গতিশীল মেমরি, ভিডিও মেমরি বা উভয় ক্ষেত্রেই একটি সঙ্কোচিত সংস্করণ বজায় রাখতে হবে, প্রয়োজনে দ্রুত রেন্ডার করতে সক্ষম হতে হবে।

পরিশেষে: আমি একটি ডেস্কটপ লোক। যখন আমি "স্মৃতি" বলি আমি সর্বদা গতিশীল মেমরির উল্লেখ করি। আমি যখন "ডিস্ক", "ফাইল সিস্টেম" বা "ধ্রুবক স্টোরেজ" বলি তখন আমি সর্বদা আপনার ডিভাইস অবিরাম স্টোরেজ হিসাবে যা ব্যবহার করি তা উল্লেখ করি, সাধারণত আমি হার্ড ডিস্কে ভাবি। আপনি যখন "স্মৃতিশক্তি-দক্ষতা" বলেছেন তখন আমি এটিকে "গতিশীল মেমরির" জন্য "ধ্রুবক স্টোরেজ" নয় took ইদানীং, আমি প্রচুর লোককে "ধ্রুবক স্টোরেজ" (সম্ভবত এটি মোবাইল ডিভাইসের পরিভাষা?) বোঝাতে "মেমরি" শব্দটি ব্যবহার করে দেখছি।


এটিও কি সম্ভব যে এটি জেপিইজি নয় বা পিএনজি মেমরিকে প্রভাবিত করে না তবে ফাইল আকার?
ট্রেডেসিজে নকটুর্ন

হ্যাঁ. আপনি ডিস্কের স্থান বা ব্যান্ডউইথ সেভ ভাবতে আলোচিত যে কোনও বিন্যাস নির্বাচন করবেন choose গেমটিতে চিত্রগুলি লোড করার সময়, আমি জানি যে কোনও গ্রন্থাগার / ইঞ্জিন সেগুলি সঙ্কুচিত পিক্সেল বাফারগুলিতে ডিকোড করবে (পিক্সেল বাফারগুলিকে আরজিবি বা আরজিবিএ মানগুলির একটি বিন্যাস হিসাবে মনে করুন, যেখানে প্রতিটি চ্যানেল সাধারণত র্যাম / ভিআরএমে 1 বাইট দখল করে থাকে যদি প্রতি 32 টি বিট ব্যবহার করে তবে পিক্সেল, এটি সম্ভবত সবাই করছেন)।
হেটোরু হ্যানসু
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.