কীভাবে দক্ষতার সাথে একটি বড় ভূখণ্ডের জাল রেন্ডার করবেন?


10

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

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

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

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

যে কোনও ধরণের ভুলের জন্য দুঃখিত, আমি এই অঞ্চলে খুব শিক্ষিত।

উত্তর:


12

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

আপনার ডেটা উপর নির্ভর করে, আপনি হয় পুরো উচ্চতা বিস্তৃত একটি বিমানের উপরের স্তম্ভগুলিতে স্তম্ভগুলিতে বিভক্ত করতে পারেন, বা স্থানের কিউবগুলিতে যেতে পারেন। কোডটি সম্পূর্ণ নয় (fmod, ভেক্টর সূচনা, সূচকগুলি ...) তবে আপনাকে একটি শুরু দেওয়া উচিত।

// Load vertices from disk
struct point { double x, y, z; };    
vector<point> vertices;

// Create container for chunks
typedef pair<int, int> key;
unordered_map<key, vector<point>> chunks;
const int chunksize = 10;

// For each vertex
for (int i = 0; i < vertices.size(); ++i) {
    // Fetch global coordinates
    int x = vertices[i].x,
        y = vertices[i].y,
        z = vertices[i].z;

    // Find containing chunk
    key k;
    k.first  = x / chunksize;
    k.second = z / chunksize;

    // Calculate local coordinates
    point p;
    p.x = x % chunksize;
    p.y = y;
    p.z = z % chunksize;

    // Add to chunk
    chunks[k].push_back(p);
}

// Create separate buffers for each chunk
// ...

যেহেতু আপনি এখন জাল বিভক্ত হয়ে গেছেন, তাই আপনি লুকানো খণ্ডগুলি উপস্থাপনা এড়ানোর জন্য এটিতে LOD এবং কুলিং কৌশলগুলি সম্পাদন করতে পারেন।

  • আপনি যেখানে শুরু করেছেন দুরত্ব দেখুন । আপনি কেবল নির্দিষ্ট দূরত্বের মধ্যে খণ্ডগুলি সরবরাহ করবেন, উদাহরণস্বরূপ আপনার ক্যামেরার দেখার দুরত্ব। ভূখণ্ডের কম অংশগুলি যেহেতু দেখার দূরত্ব যত কম হবে, তত বেশি পারফরম্যান্স আপনি পাবেন।

  • ফ্রাস্টাম কুলিং কেবলমাত্র মেসকে রেন্ডার করার একটি সাধারণ কৌশল যা ক্যামেরার ভিউ হতাশার সাথে ছেদ করে। এটি সম্ভবত আপনাকে সবচেয়ে বড় কর্মক্ষমতা অর্জন করবে give

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

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

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

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