টেক্সচার প্যাকিং অ্যালগরিদম


52

একটি ভাল টেক্সচার প্যাকিং অ্যালগরিদম কী? প্রযুক্তিগতভাবে, বিন প্যাকিং হ'ল এনপি-হার্ড , সুতরাং একটি হিউরিস্টিক হ'ল আমি সত্যই পরে আছি।


আমি ধরে নিচ্ছিলাম যে আপনি এটি ইউভি মানচিত্রের অনুকূলকরণের জন্য ব্যবহার করছেন তবে অ্যাপ্লিকেশনটি কী তা জানতে আগ্রহী।
জোনাথন ফিশফফ

ftgles হ'ল লাইব্রেরি যা ফন্টগুলি রেন্ডার করতে ওপেনগল এবং ফ্রিটাইপ ব্যবহার করে। তবে প্রতিটি গ্লাইফ তার নিজস্ব জমিনে সঞ্চিত থাকে। আমি তাদের একটি টেক্সচারে প্যাক করতে চাই।
deft_code

উত্তর:


58

আমি একটি চাকরিতে কয়েক মাস অতিবাহিত করেছি একটি ভাল টেক্সচার প্যাকিং অ্যালগরিদম নিয়ে এসেছি।

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

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

সুতরাং, আমাদের সেই অ্যালগরিদম ছিল এবং আমি এটি উন্নত করার সিদ্ধান্ত নিয়েছি। আমি একগুচ্ছ অদম্য হিউরিস্টিকস চেষ্টা করেছি - এমন বস্তুগুলিকে একসাথে ফিট করার চেষ্টা করার চেষ্টা করেছি, কাঙ্ক্ষিত স্পেস প্যাকিংয়ের বৈশিষ্ট্যগুলির একগুচ্ছ উপর কিছুটা ওজন করা, ঘোরানো এবং উল্টানো। আমার সমস্ত কাজ শেষে, আক্ষরিকভাবে তিন মাস কাজ করার পরে, আমি 3% স্থান সঞ্চয় করে শেষ করেছি।

হ্যাঁ। 3%।

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

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

বিকল্প পাঠ

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

এর জন্য সমস্ত কোড বিএসডি-লাইসেন্সযুক্ত এবং গিথুবে উপলভ্য ।


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

@ জেসনডি, আমি আপনার অ্যালগরিদম কী করে তা জানতে আগ্রহী, যদি এটি আরও ভাল আউটপুট পায় :) এমনকি যদি এটি অন্যভাবে মোটামুটি সমতুল্য আউটপুট পায়।
জোর্বাথুত

1
আলগো বর্ণনার জন্য ধন্যবাদ + অনুমোদিত ব্যর্থ + উত্স কোড। দুর্দান্ত পোস্ট।
Calvin1602

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

1
জোর্বাথুতের প্যাকিং কোড (font_baker.cpp) এর সর্বশেষ সংস্করণটি কীভাবে সন্ধান করতে পারেন তা আপনি এখানে পাবেন: github.com/zorbathut/glorp/blob/…
মেমস ২

20

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

52 পৃষ্ঠা থেকে উদ্ধৃতি:

স্পর্শ প্যারিমিটার (টিপিআরএফ) নামে অ্যালগরিদমটি আইটেমকে নন-ক্রেসিংয়ের অঞ্চল অনুসারে বাছাই করে শুরু করা হয় (নন-ক্রেইজিং মিন j wj, hj} মান দ্বারা সম্পর্কগুলি ভেঙে) এবং অনুভূমিকভাবে ওরিয়েন্টিং করে। অনুকূল সমাধানের মানটির উপর একটি নিম্ন সীমাবদ্ধ এলকে গণনা করা হয় এবং এল খালি বিনগুলি আরম্ভ করা হয়। (পূর্ববর্তী বিভাগে অবিচ্ছিন্ন নিম্নগামী এল 0 ডি fi এনড স্পষ্টতই 2BP | আর | এফের জন্যও বৈধ; ডেল'অ্যামিকো, মার্তেলো এবং ভিগো [better 56] দ্বারা আরও ভাল সীমানা প্রস্তাব করা হয়েছে)) অ্যালগরিদম একবারে একটি আইটেম প্যাক করে একটি বিদ্যমান বাক্সে, বা একটি নতুন শুরু করে। একটি বিন মধ্যে প্যাক প্রথম আইটেম সর্বদা নীচে বাম কোণে স্থাপন করা হয়। পরবর্তী প্রতিটি আইটেম তথাকথিত স্বাভাবিক অবস্থানে ভরপুর থাকে (দেখুন ক্রিস্টোসেস এবং হুইটলক [41]),
বিন এবং প্যাকিং অবস্থানের পছন্দটি স্কোরকে মূল্যায়নের মাধ্যমে করা হয়, বিন এবং ইতিমধ্যে প্যাক হওয়া অন্যান্য আইটেমগুলির স্পর্শকৃত আইটেমের ঘেরের শতাংশ হিসাবে fi এই কৌশলটি এমন নিদর্শনগুলির পক্ষে রয়েছে যেখানে প্যাক করা আইটেমগুলি ছোট ছোট অঞ্চলগুলিকে "ফাঁদ" দেয় না, যা আরও স্থানের জন্য ব্যবহার করা কঠিন হতে পারে। প্রতিটি পরীক্ষার্থী প্যাকিং পজিশনের জন্য দুটি আইটেমের অভিমুখীকরণের জন্য স্কোর দুটিবার মূল্যায়ন করা হয় (যদি উভয়ই সম্ভব হয়) এবং সর্বোচ্চ মান নির্বাচন করা হয়। স্কোরের সম্পর্কগুলি সর্বাধিক প্যাকড ক্ষেত্রযুক্ত বিনটি চয়ন করে ভেঙে যায়। সামগ্রিক অ্যালগরিদম নিম্নরূপ।

touching_perimeter:
  sort the items by nonincreaseing w,h values, and horizontally orient them;
  comment: Phase 1;
  compute a lower bound L on the optimal solution value, and open L empty bins;
  comment: Phase 2;
  for j := 1 to n do
     score := 0;
     for each normal packing position in an open bin do
        let score1 and score2 be scores with tow orientations;
        score := max{score,score1,score2};
     end for;
     if score > 0 then
        pack item j in the bin, position and orientation corresponding to score;
     else
        open a new bin and horizontally pack item j into i;
     end if;
  end for;
end;

আগ্রহের পাশাপাশি, কাগজটি একটি অনুকূল প্যাকযুক্ত টেক্সচার মানচিত্রের আকার নির্ধারণ করতে একটি অ্যালগরিদম বর্ণনা করে। এটি একটি 1024x1024 অ্যাটলাসে সমস্ত টেক্সচারের মাপসই করা সম্ভব কিনা তা নির্ধারণে এটি কার্যকর হবে।


এই অ্যালগরিদম ধরেছে যে টেক্সচারগুলি আয়তক্ষেত্রাকার আকারের, এটি কি ঠিক?
ব্যবহারকারী 1767754

17

যদি এখনও কেউ আগ্রহী হন তবে আমি সম্পূর্ণরূপে রেকটপ্যাক 2 ডি লাইব্রেরিটি আবার লিখলাম যাতে এটি আরও দক্ষ হয়।

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

পারফরম্যান্স ব্রেকথ্রুটি পুরো গাছটিকে রাখার পরিবর্তে কেবল একটি ভেক্টর ব্যবহার করে তৈরি হয়েছিল, যেমনটি আগে করা হয়েছিল।

প্রক্রিয়াটি বিস্তারিতভাবে README তে বর্ণিত হয়েছে

লাইব্রেরিটি এমআইটির অধীনে রয়েছে, সুতরাং আপনি যদি এটি দরকারী মনে করেন তবে আমি আপনার জন্য খুশি!

উদাহরণ ফলাফল:

3.50GHz @ ইন্টেল (আর) কোর (টিএম) i7-4770K সিপিইউতে পরীক্ষা করা হয়েছিল। বাইনারিটি -03 স্যুইচ ব্যবহার করে ঝনঝন 6.0.0 দিয়ে নির্মিত হয়েছিল।

নির্বিচারে গেম স্প্রিটস + জাপানি গ্লাইফস: মোট 3232 বিষয়।

রানটাইম: 4 মিলিসেকেন্ডগুলি নষ্ট
পিক্সেল: 15538 (0.31% - 125 x 125 বর্গের সমতুল্য)

আউটপুট (2116 x 2382):

3

রঙে:
(কালো স্থান নষ্ট)

4

জাপানি গ্লিফস + কিছু জিইউআই স্প্রিট: 3122 বিষয়।

রানটাইম: 3.5 - 7 এমএস নষ্ট
পিক্সেল: 9288 (1.23% - একটি 96 x 96 বর্গের সমতুল্য)

আউটপুট (866 x 871):

5

রঙে:
(কালো স্থান নষ্ট)

6


2
আমি আপনার কোড ডাউনলোড করেছি। কেবল স্ট্রাক্ট সংজ্ঞাগুলি পড়ছেন: এই মনস্ট্রোসটি কী ?! এটি দেখতে গল্ফের মতো দেখাচ্ছে।
একলতার

3
তবুও, এটি কাজ করে, এবং এটি সাহায্য করেছে, তাই ধন্যবাদ। আমি অভদ্র হতে চাইনি।
একলতার

নিশ্চিত না কেন আমি এই উত্তরটি এড়িয়ে গেছি কারণ এটি আমার নিজের অ্যালগোরিদম ও-ও-এর চেয়ে আরও দ্রুত এবং আরও ভাল প্যাকার
গেমডেপলবার

@ কল্টার আমি কল্পনা করতে পারি যে, আমি তখনও ভাষাটি শিখছিলাম :)
প্যাট্রিক জাজাচুরস্কি

কার্যকর করার জন্য দ্রুত এবং ভাল ফলাফল পেয়েছে এমন মোটামুটি সহজ পদ্ধতির জন্য ধন্যবাদ :)
ফ্লিন্টজএ

5

একটি ভাল হিউরিস্টিক অ্যালগরিদম এখানে পাওয়া যাবে । যখন আমি সম্প্রতি কিছু অনুরূপ চেষ্টা করছিলাম, আমি বেশিরভাগ বাস্তবায়নের জন্য এটি প্রাথমিক সূচনা পয়েন্ট হিসাবে উল্লেখ করেছি।

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

আমার ওয়েবসাইট ইমেজ ডাম্প ডিরেক্টরি থেকে র্যান্ডম সেটগুলিতে আমার প্যাকারের জন্য আউটপুটটির নমুনা ভিজ্যুয়ালাইজেশন এখানে রয়েছে: প্যাকার আউটপুট

স্কোয়ারের সংখ্যাগুলি গাছের ধারণকৃত ব্লকের আইডি এর ফলে আপনাকে সন্নিবেশের ক্রমটি ধারণা দেয়। প্রথমটি আইডি "3" কারণ এটি প্রথম পাতার নোড (কেবল পাতাগুলিতে চিত্র থাকে) এবং ফলস্বরূপ 2 জন বাবা-মা থাকে)।

        Root[0]
       /      \
   Child[1]  Child[2]
      |
    Leaf[3]

3

ব্যক্তিগতভাবে, আমি কেবল একটি লোভী বৃহত্তম-ব্লক-যে-ফিট প্রথম সিস্টেমটি ব্যবহার করি। এটি সর্বোত্তম নয়, তবে এটি কৌশলটি ঠিক আছে।

মনে রাখবেন, আপনার কাছে যদি যুক্তিযুক্ত পরিমাণে টেক্সচার ব্লক থাকে তবে সমস্যাটি নিজেই এনপি হ'ল এমনকি আপনি সর্বোত্তম ক্রমটি সন্ধান করতে পারেন।


3

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

আপনি যদি আবার পুনরুক্ত করতে পারেন যে বেশ কয়েকটি হিউরিস্টিক্স চেষ্টা করে, এবং / অথবা ক্রমটি বেছে নেওয়ার এলোমেলো ফ্যাক্টর প্রয়োগ করে এবং কিছু সময়সীমা শেষ না হওয়া পর্যন্ত পুনরাবৃত্তি করতে পারে।

এই স্কিমের সাহায্যে আপনি ছোট UV দ্বীপগুলি বৃহত্তর দ্বারা তৈরি শূন্যস্থানগুলিতে প্যাক করে পাবেন এবং এমনকি একক UV প্যাচগুলির মধ্যে থাকা গর্তগুলিতেও।


1

আমরা সম্প্রতি একটি অজগর স্ক্রিপ্ট প্রকাশ করেছি যা একটি নির্দিষ্ট আকারের একাধিক চিত্র ফাইলে টেক্সচার প্যাক করবে।

আমাদের ব্লগ থেকে উদ্ধৃত:

"অনলাইনে পাওয়া যায় এমন অসংখ্য প্যাকার রয়েছে এমন সময়ে, আমাদের অসুবিধাটি ছিল একাধিক ডিরেক্টরিতে বিপুল সংখ্যক চিত্র হ্যান্ডেল করতে পারে এমন কোনও সমস্যা খুঁজে পাওয়া। সুতরাং আমাদের নিজস্ব আটলাস প্যাকার জন্মগ্রহণ করেছিল!

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

আপনি আটলাসের আকার (লাইন 65), প্যাক করতে চান এমন চিত্রগুলির বিন্যাস (লাইন 67), লোড ডিরেক্টরি (লাইন 10) এবং সেভ ডিরেক্টরিটি (লাইন 13) পাইথনের কোনও অভিজ্ঞতা ছাড়াই মোটামুটি সহজেই পরিবর্তন করতে পারবেন। একটি ছোট দাবি অস্বীকার হিসাবে, আমাদের ইঞ্জিনের সাথে বিশেষত কাজ করার জন্য কয়েক দিনের মধ্যে এটি একত্রে বেত্রাঘাত করা হয়েছিল। আমি আপনাকে বৈশিষ্ট্যগুলির অনুরোধ করতে, আপনার নিজস্ব প্রকরণের সাথে মন্তব্য করতে এবং কোনও ত্রুটির প্রতিবেদন করতে উত্সাহিত করছি, তবে আমার ফ্রি সময়ে স্ক্রিপ্টে কোনও পরিবর্তন ঘটবে। "

সম্পূর্ণ উত্স কোডটি এখানে নিখরচায় চেক করুন: http://www.retroaffect.com/blog/159/ ইমেজ_আ্যাটলাস_প্যাকার /# বি


1

ফন্টগুলি প্যাক করা বেশ সহজ কারণ গ্লাইফ টেক্সচারের সমস্ত (বা বিরাট সংখ্যাগরিষ্ঠ) প্রায় একই আকারের। আপনার কাছে ঘটে যাওয়া সবচেয়ে সহজ কাজটি করুন এবং এটি সর্বোত্তমের খুব কাছাকাছি থাকবে।

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

উন্নত অ্যালগোসের কোনওটিই যাদু নয়। এগুলি সরল আলগো চেয়ে 50% বেশি দক্ষ না হয়ে থাকে এবং আপনার কাছে টেক্সচার শিটগুলির অলস সংখ্যা না থাকলে আপনি তাদের কাছ থেকে ধারাবাহিক সুবিধা পাবেন না। এটি কারণ যে ভাল অ্যালগরিদমগুলি যে ছোট ছোট উন্নতি করে তা কেবল সামগ্রিকভাবে দেখা যায়।

সহজ হয়ে যান এবং এমন কিছুতে যান যেখানে আপনার প্রচেষ্টা আরও ভাল প্রতিদান পাবে


0

যদি এটি বিশেষত হরফ টেক্সচারের জন্য থাকে তবে আপনি সম্ভবত অপ-অনুকূল তবে সুন্দর এবং সাধারণ কিছু করুন:

উচ্চতা অনুসারে অক্ষর বাছাই করুন, সবচেয়ে দীর্ঘতম

0,0 থেকে শুরু করুন বর্তমান অক্ষরে প্রথম অক্ষর রাখুন, এক্স অগ্রিম, পরবর্তী একটি রাখুন, যতক্ষণ না আমরা অন্য ফিট করতে পারি না ততক্ষণ পুনরাবৃত্তি করুন

X থেকে 0 রিসেট করুন, সারির দীর্ঘতম চরিত্রের উচ্চতা দ্বারা Y এর নীচে অগ্রসর করুন এবং অন্য সারিটি পূরণ করুন

যতক্ষণ না আমরা অক্ষরের বাইরে থাকি বা অন্য সারিতে ফিট না করতে পারি তার পুনরাবৃত্তি করুন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.