ঘনত্বের ফাংশনের ভিত্তিতে ভলিউম্যাট্রিক ডেটা রেন্ডার করতে আমি কীভাবে গ্রাফিক্স পাইপলাইন ব্যবহার করতে পারি?


12

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

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

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

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


'ফাংশন ডেনসিটি ফাংশন' কি টাউটোলজি?
ফারাপ

@ ফারাপ, এটি টাইপো ছিল। এটি কেবল "ডেটিটি ফান্টন" যা স্থানটিতে "পদার্থ" উপস্থিতি উপস্থাপন করে।
হালকা স্পার্ক

2
দেখে মনে হচ্ছে আপনি কেবল একটি আইসোফেরাস তৈরি করতে চান, এটি একটি ভাল পড়াশোনা করা সমস্যা। আপনি কি http.developer.nvidia.com/GPUGems3/gpugems3_ch07.html দেখেছেন বা মেটাবলগুলি, পয়েন্ট ক্লাউড ভিজ্যুয়ালাইজেশন, আইসোফেরাস এক্সট্রাকশন বা ভলিউম রেন্ডারিংয়ে অনুসন্ধান করেছেন? এছাড়াও, আপনার কী ধরণের পারফরম্যান্স প্রয়োজন, এটি আপনার গণনার জটিলতার সাথে একত্রিত হওয়ার সময় আপনি যে কৌশলটি অনুসন্ধান করেছেন তা পছন্দ করার ক্ষেত্রে একটি বিশাল পার্থক্য আনবে। আমি মনে করি যে আপনি যখন পিক্সেলটিও পাবেন তখন ক্যামেরাটি চলাফেরা করে, এবং উপ-পিক্সেলের প্রয়োজন হবে sh
প্যাট্রিক হিউজ

উত্তর:


18

ভলিউম্যাট্রিক ডেটা রেন্ডার করতে আপনি জিপিইউটি একেবারে ব্যবহার করতে পারেন।

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

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

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

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


সুতরাং পিক্সেল শেডার কি সালিশী ইনপুটগুলি গ্রহণ করে (যেমন স্ট্রিং বা ব্যবহারকারীর সংজ্ঞায়িত অন্য ধরণের সামগ্রীর মতো) যাতে আমি আমার ফাংশনগুলিতে পাস করতে পারি?
হালকা স্পার্ক

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

@ দ্য লাইটস্পার্ক রাইট, আপনি শ্যাডারে স্ট্রিংগুলি পাস করবেন না (শেডিং ভাষার একটি স্ট্রিং টাইপও নেই), আপনি আপনার পছন্দসই ফাংশনগুলির জন্য শেডার কোড তৈরি করতে এবং সংকলন করতে চান। প্রয়োজনে রানটাইমে এটি করা যেতে পারে।
নাথান রিড

আপনার উত্তরটি পড়া শুরু করে, আমি একটি ত্রিভুজ আকারের মনিটর কল্পনা করেছি;) পিক্সেল ছাড়াই স্ক্রিনটি কভার করে দুটিয়ের পরিবর্তে কেবল একটি একক ত্রিভুজ ব্যবহার করার কি সুবিধা আছে?
দানিজার

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

6

রে ট্রেসিং এবং অন্যান্য কৌশলগুলি সাধারণত কম্পিউটারের শ্যাডারগুলির সাথে সম্পন্ন হয়, যা ডি 3 ডি 11 প্রকাশের পর থেকে ডাইরেক্ট 3 ডি সমর্থন করেছে এবং ওপেনজিএল 4.3 সাল থেকে সমর্থন করেছে (এবং ওপেনসিএল এবং কিছু সংযোজন ব্যবহারের মাধ্যমে দীর্ঘতর)।


5

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

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

http://community.arm.com/groups/arm-mali-graphics/blog/2014/04/17/get-started-with-compute-shaders

যদি এটি আপনাকে সঠিক দিকে নির্দেশ না করে তবে আপনি কী আপনার ধারণাটি প্রান্তিক / খণ্ডের দৃষ্টান্তের সাথে খাপ খায় না এমনটি প্রসারিত করতে আপত্তি করবেন?


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