গ্রহ রেন্ডারিংয়ের জন্য সেরা এলওডি পদ্ধতি কোনটি?


23

আমি বর্তমানে আমার থিসিস নিয়ে কাজ করছি, এটি গ্রহের আকারের অঞ্চলগুলিকে রেন্ডার করার জন্য একটি ইঞ্জিন।

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

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

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

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

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

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

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


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

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

vterrain.org/LOD তে টেরেন রেন্ডারিংয়ের বিষয়ে প্রচুর তথ্য রয়েছে। বিভাগটি লিঙ্ক করা কাগজপত্র এবং বিশদ অ্যালগরিদমের স্তরের জন্য অন্যান্য উত্সগুলিকে তালিকাবদ্ধ করে। vterrain.org/LOD/spherical.html গোলাকার গ্রিডগুলি (যেমন গ্রহ) নিয়ে কাজ করে।
এক্সিলিথ

@ সারাহম আমি জানি, আমি যেখানেই শুরু করেছি, সেগুলি আমি লাল করে দিয়েছি ... কোনটি প্রয়োগ করে তা বেছে নেওয়ার জন্য আমার কিছু এলওডির পদ্ধতির মধ্যে তুলনা করা দরকার, আমি সত্যিই এগুলি সব করতে পারি তবে আমার হাতে সময় নেই ... যাইহোক , আমি টেসলেসেশন শেডারের সাহায্যে পদ্ধতিটি নিয়ে যাচ্ছি, এটি নতুন কিছু এবং গোলাকার উপরিভাগে কোনও বাস্তবায়ন হয়নি :)
nosmirck

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

উত্তর:


17

অবশেষে, অনেক গবেষণা করার পরে আমি এই সিদ্ধান্তে পৌঁছাতে পারি যে, কেউ কেউ আগে বলেছিল, সর্বজনীন "সেরা" পদ্ধতি নেই। তবে আমার গবেষণা আমাকে নিম্নলিখিত বিষয়গুলির জ্ঞানের দিকে পরিচালিত করেছে:

জাল উপর নির্ভর করে আপনি অবশেষে ব্যবহার করবেন:

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

অনেকগুলি LOD পদ্ধতি রয়েছে যা ভালভাবে ফিট করতে পারে তবে আমার ব্যক্তিগত শীর্ষ 5 টি হ'ল:

  1. অবিচ্ছিন্ন দূরত্ব-নির্ভরশীল এলওডি (সিডিএলওডি)
  2. জিপিইউ ভিত্তিক জিওমিটি ক্লিপম্যাপস (জিপিইউজিসিএম)
  3. ছিটেড এলওডি
  4. ওপেনজিএল জিপিইউ টেসেললেশন সহ রেন্ডারিং টেরেইনস (বই: ওপেনজিএল অন্তর্দৃষ্টি, অধ্যায় 10)
  5. জ্যামিতিক মিপম্যাপিং

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

এছাড়াও বুনিয়াদি জ্যামিতিক ক্লিপম্যাপ পদ্ধতিতে গোলকীয় প্রসার উপস্থিত রয়েছে তবে কিছু সমস্যা আছে কারণ উচ্চতা ম্যাপের পরিকল্পনাকারী নমুনাগুলিকে গোলাকার স্থানাঙ্কগুলি ব্যবহার করে প্যারামিট্রাইজ করতে হবে।

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

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

আপনি যদি না চান কেবল আপনার সূক্ষ্মতাটি উল্লম্বের মধ্যে 1 কিলোমিটার হতে হবে তবে টেসলেসেশন শেডারে যান। এই পদ্ধতির সাথে সত্যই বড় ভূখণ্ডের সমস্যাটি হ'ল জিটারটি সমাধান করা একরকম কঠিন (বা কমপক্ষে আমার জন্য, যেহেতু আমি টেসলেসেশন শেডারে নতুন)।

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

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

সমস্যা:

  • জিটার : আজকের বেশিরভাগ জিপিইউ কেবল 32-বিট ভাসমান-পয়েন্টের মানগুলিকে সমর্থন করে, যা গ্রহীয় অঞ্চলে বড় অবস্থানগুলিতে হেরফের করার জন্য পর্যাপ্ত নির্ভুলতা সরবরাহ করে না। জিটারটি ঘটে যখন দর্শক জুম করে এবং ঘোরানো বা সরে যায়, তখন বহুভুজগুলি পিছনে পিছনে বাউন্স শুরু করে।

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

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

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

    জেড-বাফার যেমন ফ্লোট পয়েন্টের বিরতিতে নির্ভর করে এবং এটি লিনিয়ার (যদিও দৃষ্টিভঙ্গি প্রজেকশন নন লিনিয়ার) চোখের কাছাকাছি মানগুলি জেড-ফাইটিংয়ে ভুগছে কারণ নির্ভুলতার অভাব 32-বিট ফ্লোট রয়েছে।

    এই সমস্যাটি সমাধানের সর্বোত্তম উপায় হ'ল "লোগারিদমিক ডিপথ বাফার" ব্যবহার করা http://outerra.blogspot.com/2012/11/maximizing-depth-buffer-range-and.html

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

কিছু গুরুত্বপূর্ণ বিষয় উল্লেখযোগ্য হ'ল চতুর্ভুজ বেসের কারণে পদার্থবিজ্ঞান (বেশিরভাগ সংঘর্ষ) করার সময় তালিকাভুক্ত সমস্ত পদ্ধতি খুব ভাল (যদি আপনি কোনও গেম তৈরির পরিকল্পনা করেন তবে এটি বাধ্যতামূলক কিছু।

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

এলওডি সম্পর্কে আরও তথ্যের জন্য এই লিঙ্কটি পরীক্ষা করুন

একটি ঘনক্ষেত্রের স্পিরিফাইজিং সম্পর্কে সম্পূর্ণ ডিস্টোস্টের জন্য এই লিঙ্কটি দেখুন

জিটারিং এবং জেড-বাফার স্পষ্টতাগুলি সমাধান করার বিষয়ে আরও ভাল ব্যাখ্যার জন্য, এই বইটি দেখুন

আমি আশা করি আপনি এই সামান্য পর্যালোচনা দরকারী হবে।


1
আমি আপনার গবেষণা যাত্রা সম্পর্কে আরও জানতে চাই। আমি কি আপনার আপডেটগুলি অনুসরণ করতে পারি? ব্লগ নাকি কিছু?
সায়ফুল নিজাম ইয়াহইয়া

@ গণপরিষদ এখনই, আমি এখনও ইঞ্জিন বিকাশ করছি, আমি থামলাম কারণ আমি এক বছরের চাকরি পেয়েছি এবং আমার গবেষণাটি দাঁড়িয়ে ছিল, এক-দু'মাসের মধ্যে আমি গবেষণাটি আবার গ্রহণ করব এবং ইঞ্জিনটি শেষ করব। আমি যখন সেখানে পৌঁছে যাব তখন আমি আপনাকে এখানে জানাব যখন আমি ভ্রমণের সমস্ত আপডেট পোস্ট করব। আগ্রহের জন্য ধন্যবাদ।
নসিমার্ক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.