ভক্সেল ফেস ক্রলিং (জাল সরলীকরণ, সম্ভবত লোভী ব্যবহার করে)


9

সম্পাদনা: এটি কেবল আমার নিজের শেখার অভিজ্ঞতার জন্য, এটি সম্পাদনের কারণে নয় যে আমি এই প্রশ্নটি জিজ্ঞাসা করি।

এটি একটি মাইনক্রাফ্টের মতো টেরিন ইঞ্জিনের সাথে সম্পর্কিত। আমি খণ্ডগুলিতে ব্লকগুলি সঞ্চয় করি (একটি অংশে 16x256x16 ব্লক)। আমি যখন একটি খণ্ড উত্পন্ন করি, তখন অঞ্চল এবং স্থান নির্ধারণের জন্য আমি একাধিক পদ্ধতিগত কৌশল ব্যবহার করি। উত্পাদনের সময়, আমি সম্পূর্ণ খণ্ডের জন্য এক 1D অ্যারে রাখি (কঠিন বা না) এবং শক্ত ব্লকের পৃথক 1D অ্যারে রাখি।

প্রজন্মের পরে, আমি তাদের শক্তিশালী প্রতিবেশীদের চেক করতে শক্ত ব্লকগুলি দিয়ে পুনরাবৃত্তি করি যাতে আমি কেবল এমন ব্লক ফেস উত্পন্ন করি যার শক্ত প্রতিবেশী না থাকে। আমি কোন মুখগুলি তাদের নিজস্ব তালিকায় উত্পন্ন করতে সঞ্চয় করি (এটি lists টি তালিকাগুলি, সম্ভাব্য প্রতিটি মুখ / সাধারণ হিসাবে একটি)। কোনও খণ্ড রেন্ডার করার সময়, আমি ক্যামেরার বর্তমান খণ্ডের সমস্ত তালিকা এবং কেবলমাত্র সমস্ত তালিকাতে ক্যামেরার মুখোমুখি তালিকাগুলি রেন্ডার করি। আমি একটি বাফারে সমস্ত 6 টি তালিকা সংরক্ষণ করে এটি করি, তারপরে আমি কেবল যে রেঞ্জগুলি আঁকব তা কেবল পরিবর্তন করি।

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

আমার অনুমান 6 টি তালিকাগুলির প্রত্যেকটির অক্ষর অনুসারে বাছাই করা তাদের প্রত্যেকের অক্ষর অনুসারে বাছাই করা হবে, তারপরে অন্য দুটি অক্ষ দ্বারা (কোনও ব্লকের শীর্ষের জন্য তালিকাটি তার Y মান, তারপরে এক্স, তারপরে জেড অনুসারে বাছাই করা হবে)।

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

সুতরাং, আমার প্রশ্ন: বর্ণিত হিসাবে মুখগুলি মার্জ করা (গতিশীল অঞ্চল / আলোকপাতের জন্য এটি কোনও খারাপ ধারণা কিনা তা উপেক্ষা করে), সম্ভবত এমন কোনও অ্যালগোরিদম রয়েছে যা কার্যকর করা সহজ? আমি খুব খুশিভাবে এমন একটি উত্তর গ্রহণ করব যা লোভী অ্যালগরিদমের মধ্য দিয়ে আমাকে অনেক সহজ উপায়ে নিয়ে যায় (একটি লিঙ্ক বা ব্যাখ্যা)।

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

PS: আমি ইতিমধ্যে খণ্ড প্রতি কুল হতাশ এবং বর্ণিত হিসাবে, আমি শক্ত ব্লক মধ্যে মুখ খুলি। আমি এখনও এলোমেশন কুল না এবং কখনও হতে পারে না।

* সম্পাদনা করুন: আমি নিজের নিজস্ব প্রযুক্তিটি বাস্তবায়িত করেছি, যার সম্ভবত একটি নাম রয়েছে, তবে আমি কেবল আমার 6 টি তালিকাগুলি দিয়ে যাচ্ছি যার দ্বারা অক্ষরে অক্ষরে সাজানো থাকে, তার পরে ব্লকের ধরণ এবং তারপরে আলোক স্তর। আমি তাদের মাধ্যমে পুনরাবৃত্তি করছি, আমি যেতে যেতে নতুন আয়তক্ষেত্র তৈরি করে একযোগে সেগুলি বাড়িয়েছি (একটি নির্দিষ্ট অক্ষের দিকে ভারী পক্ষপাত নিয়ে)। এটি অবশ্যই সর্বোত্তম নয়, তবে এটি সত্যিই বেশ দ্রুত এবং এটি আমার মেরুবৃত্তির গণনা গড়ে প্রায় 50% কমিয়ে দেয়। বাইট 55 এর মন্তব্যটি একটি আসল উত্তরের জন্য আমি মনে করি এমন কক্ষটি, তবে উত্তর / অনুগ্রহের জন্য আমি এটি নির্বাচন করতে পারি না।

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


আপনার সমস্ত অপ্টিমাইজেশনের পরেও, আপনি এখনও কর্মক্ষমতা সমস্যার মধ্যে চলেছেন? সমস্যাগুলি কোথায় রয়েছে আপনি কোডটি কোড করার চেষ্টা করেছেন?
মাইকেলহাউস

@ বাইট 56 ওহ, এটি বর্তমানে কোনও পারফরম্যান্সের সমস্যা নয়। ভবিষ্যতে এটি একটি হতে পারে যখন আমি যা বাস্তবের জন্য ব্যবহার করতে শিখছি তা রাখার চেষ্টা করি। আপাতত যদিও, আমি কেবল শিখতে চাই। আমি এগুলির কোনও বিবরণ দিইনি কারণ আমি যদি কেবল জিনিসগুলি শেখার জন্য কেবল শিখতে চাই তবে কম সহায়তা পাব বলে মনে হয়।
পৌরাণিক গল্প

আমার মনে হচ্ছে আমারও এটি বলা উচিত যে আমি যদি এটির সাথে সত্যিকার অর্থে কোনও সঠিক খেলার চেষ্টা করতে পারি তবে আমি দৃশ্যমান বিশ্বটি বিশাল হতে চাই। আমি চাই না যে চরিত্রটি মাইক্রাফ্ট এবং আরও অনেকের মতো 2 ব্লক উচ্চ এবং 1 ব্লক প্রশস্ত হোক, তবে 3 টি ব্লক প্রশস্ত / দীর্ঘ এবং 6-9 উচ্চের মতো হবে। সম্ভবত স্থির ভূখণ্ড।
পৌরাণিক গল্প

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

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

উত্তর:


4

আপনি কেবল স্ট্রিপগুলি করতে চান বা খুব ভালভাবে আয়তক্ষেত্রগুলি করতে পারেন। অন্য কোন আকার নেই যা আপনার পক্ষে সমাধানযোগ্য বা কার্যকর হবে।

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

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

যদি আপনার একক অংশে পারফরম্যান্স সংক্রান্ত সমস্যা থাকে তবে এটি আমাকে অন্য কিছু ভেবে ভুল করে তোলে।

আমার প্রথম অনুমানটি হ'ল আপনি প্রায়শই একটি ড্র অপারেশন কল করছেন। আপনি কেবল গ্রাফিক্স কার্ডটি হার্ডওয়ারের উপর নির্ভর করে প্রতি সেকেন্ডে 50 থেকে 400 ~ বার আঁকতে বলতে পারেন। .SetData বা .ড্রের মধ্যে কতগুলি কল আছে ____ আপনি কি আদিম ডাক দিচ্ছেন?


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

আমার পারফরম্যান্সের সমস্যা নেই। আমি কেবল এই জিনিসগুলি শিখতে উপভোগ করি। আমি এটি বলতে আমার প্রশ্নটি সম্পাদনা করব, তবে আমি বাইট 56-কেও বলেছি, আমি যা করার চেষ্টা করছি তা আসলে কোনও সমস্যার সমাধান না করে থাকলে আমি কম সহায়তা পাই। আপনার প্রশ্নের উত্তর দিতে, আমি বর্তমানে প্রতি ফ্রেমে 200-260 অংশ রেন্ডার করি। এটি ফ্রেম প্রতি একটি দুর্দান্ত সাধারণ 500ish DraIIndexedPrimitives। আমি নিয়মিত ভিআইএনসিচ ছাড়াই 100-130 এফপিএস পাই, প্রতি সেকেন্ডে 65,000 কল করে। আমি অভদ্র হওয়ার চেষ্টা করছি না, তবে আপনি খুব সামান্য বলেছিলেন তা আমার কাছে বোধগম্য। আমি হয়ত বুঝতে পারছি না, তাই দয়া করে যদি আমি ভুল বুঝে থাকি তবে বিস্তারিত বলুন। এটি এক্সএনএর সাথে কি করতে পারে?
পৌরাণিক গল্প

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

আমি আপনার উত্তরটি +1 করেছি কারণ এটি আমাকে করতে পারে এমন কয়েকটি উন্নতির কথা ভাবতে বাধ্য করেছে, তবে প্রশ্নের সাথে কিছুই করার নেই। এছাড়াও, আমি ভেবেছিলাম সম্ভাব্য ড্র কল কল সীমা লিঙ্কের
পৌরাণিক কাহিনী

আমি যে নিবন্ধটি পড়েছিলাম তা সীমা হিসাবে 400-500 উদ্ধৃত করব। একটি দ্রুত গুগল আমাকে সাহায্য করে নি me
ফিল

0

আপনি যে নিবন্ধটির সাথে লিঙ্ক করেছেন সেটি জাল জেনারেশনের জন্য আসলে একটি অ্যালগরিদম দেয় না; এটি সম্ভাব্য সমাধানগুলি মূল্যায়নের জন্য একটি উপায় বলেছে।

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

আপনার প্রশ্নের চিত্রটিতে আপনি যে "সমাধান" বোঝাচ্ছেন সেটি হ'ল লোভী অ্যালগরিদম। আপনার প্রশ্নটি মনে হচ্ছে "আমি কি তার সমাধানটি সঠিকভাবে প্রয়োগ করেছি?" যার জবাব আমার অবশ্যই দিতে হবে "তিনি কোনও সমাধান দেননি; আপনি নিজেই এটিকে সমাধান করেছেন।"

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

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