তিনটির উপকার / বিভক্তি কী কী?
তিনটির উপকার / বিভক্তি কী কী?
উত্তর:
কোডরেঞ্জার ডাইরেক্টএক্সএল, এইচএলএসএল টার্গেটিং ডাইরেক্টএক্স, জিএলএসএল ওপেনজিএল এবং সিজি উভয় ইন্টারফেসের সাথে উপলভ্য সম্পর্কে সঠিক।
তবে অন্যান্য বিষয় বিবেচনা করার জন্য রয়েছে (ওজিআরই ফোরামে শিখেছি):
সুতরাং, আপনি যদি সর্বশেষতম শেডার বৈশিষ্ট্যগুলি ব্যবহার না করেন, সিজি একটি ভাল পছন্দ বলে মনে হচ্ছে। আপনি যদি পুরো ওপেনগিএল করে যাচ্ছেন তবে জিএলএসএল একটি বীর মনে হচ্ছে। আপনি যদি মাইক্রোসফ্ট প্ল্যাটফর্মে একচেটিয়াভাবে যাচ্ছেন তবে এইচএলএসএল।
ডাইরেক্টএক্স ব্যবহারের জন্য উইন্ডোজের জন্য প্রথমে এইচএলএসএল বিকাশ করা এবং তারপরে লিনাক্স এবং ম্যাকের জন্য জিএলএসএল রূপান্তর করা কার্যকারিতা সম্পর্কে নিশ্চিত হওয়ার এবং শেডার বৈশিষ্ট্যগুলির বৃহত্তর সেট উপলব্ধ করার জন্য আরও ভাল সমাধান হতে পারে। এটি যদিও অনেক কাজ হতে পারে (এটি নিজে করেননি তাই আমি বলতে পারি না)। ওজিআরই গ্রাফিক্স ইঞ্জিন (এবং অন্যান্য ইঞ্জিনগুলি) কোনও এপিআই (ডাইরেক্টএক্স বা ওপেনজিএল বা অন্য) ব্যবহার করার অনুমতি দেয় যাতে এটি সহায়তা করে, তবে আপনি যদি এই পথে যান তবে রূপান্তর করতে এখনও শেডার কোড রয়েছে।
আমার ছায়াময় ভাষা চয়ন করার সময় আমি এই সমস্ত তথ্য সংগ্রহ করেছি (আমি এখনও আমার সিদ্ধান্ত নিইনি)।
আপডেট: ভালভ ওপেনগিএলে তাদের একটি খেলায় রূপান্তর করেছিল এবং ডাইরেক্টএক্স সংস্করণটিকে ওজিএল এর চেয়ে দ্রুততর করার কোনও উপায় খুঁজে পায় না । সুতরাং মনে রাখবেন যে ড্রাইভার বাস্তবায়ন, এপিআই গুণমান ইত্যাদির পরিস্থিতি, প্রতি বছর যে কোনও একটি বা অন্যটিকে বেছে নেওয়ার যুক্তি হিসাবে কাঁচা পারফরম্যান্সের উপর সম্পূর্ণ নির্ভর করার জন্য আপনার সমস্ত কিছু খুব বেশি পরিবর্তিত হয়। এটি মাথায় রেখে, উইন্ডোজ ব্যতীত অন্য প্ল্যাটফর্মগুলির সাথে কাজ করার সময় (বা পরিকল্পনা করার বা কাজ করার আশা করা) আপনার জীবনকে সহজ করার জন্য ওপেনজিএল / জিএলএসএল চয়ন করুন, আপনি যদি কেবলমাত্র মাইক্রোসফ্ট প্ল্যাটফর্ম এবং ফোকাস ব্যবহার করতে চান তবে ডাইরেক্টএক্স / এইচএলএসএল ব্যবহার করুন এবং সম্ভবত কিছু ভাল থাকতে পারে ওপেনজিএল এর চেয়ে এপিআই দ্রুত (এটি এখন বিপরীত হচ্ছে, সুতরাং এটিতে বিশ্বাস করবেন না); আপনি যদি ব্যবহারকারীকে উভয় সম্ভাবনা সরবরাহ করতে চান তবে সিজি ব্যবহার করুন, তবে এটি করার জন্য যদি আপনার কাছে কর্মশক্তি (এবং সরঞ্জাম) থাকে তবে জিএলএসএল এবং এইচএলএসএল উভয়ই ব্যবহার করা একটি কার্যকর সমাধান হতে পারে।
আপডেট (২০১২): সিজি বন্ধ করে দেওয়া হয়েছে এবং এনভিডিয়া আর সমর্থন বা সক্রিয়ভাবে কাজ করছে না তা লক্ষ করা জরুরী। এনভিডিয়া সুপারিশ করে যে সমস্ত ব্যবহারকারীরা জিএলএসএল এবং এইচএলএসএল, অথবা একটি এনভিএফএক্স (গিথুব) এর মতো একটি নতুন লাইব্রেরিটিতে স্যুইচ করুন। এটি হ'ল জিএলএসএল এবং এইচএলএসএল এর মধ্যে বৈশিষ্ট্য-সামঞ্জস্যতা বজায় রাখা খুব কঠিন ছিল।
আমি কেবল সিজি বনাম এইচএলএসএল সম্পর্কে কথা বলতে পারি কারণ এগুলি আমি এখনও অবধি ব্যবহার করেছি।
সিজি এইচএলএসএল এর মতো নয় ।
সিজি-তে, এনভিআইডিআইএ খুব পরিষ্কার শেডার সিনট্যাক্স তৈরিতে দুর্দান্ত কাজ করেছে। এটি এইচএলএসএল এর সাথে খুব মিল।
তবে , D3D9 / D3D11 (init কোড, শেডার সংকলন কোড) এর সাথে টাই-একসাথে সিগির চেয়ে এইচএলএসএল- তে অনেক ক্লিনার । -1 সিজি সিগিতে স্টার্ট আপ কোডের একটি বাজে বিট রয়েছে যা আপনার এমনকি ডি 3 ডি এর চেয়ে এইচএলএসএল এর জন্যও লাগবে না।
সিজি-তে, প্রতিটি uniform
শেডার ভেরিয়েবল আপনি সেট / পরিবর্তন করতে চান তার জন্য আপনাকে "সিজিগেটনমেডপ্যারামিটার" রাখতে হবে। এবং আপনাকে CGparameter
সেই ভেরিয়েবলের জন্য আপনার কোডে একটি রেফারেন্স বজায় রাখতে হবে
// C++ code to interact with Cg shader variable (shader language independent)
CGparameter mvp = cgGetNamedParameter( vs, "modelViewProj" );
CG::getLastError("Getting modelViewProj parameter"); // check for errors
cgSetMatrixParameterdr( mvp, &modelViewProj._11 ) ; // setting the matrix values
এইচএলএসএলে, এটি অনেকটা পরিষ্কার-পরিচ্ছন্ন হওয়া শেষ করে - কেবল একটি লাইন, এবং আপনাকে সেই CGparameter
পরিবর্তনশীল বজায় রাখতে হবে না ।
// D3D9 C++ code to interact with HLSL shader variable
DX_CHECK( id3dxEffect->SetMatrix("modelViewProj", &mvp._11 ), "Set matrix" ) ;
উপরের দিকে, DX_CHECK
কেবলমাত্র একটি সাধারণ ফাংশন যা এইচআরআইসিলিট পরীক্ষা করে যা SetMatrix
কল থেকে ফিরে আসে । উপরের কোডটি d3d9 । ডি 3 ডি 10 এবং 11 অবশ্যই অবশ্যই অনেক বেশি বেদনাদায়ক (যেহেতু কোনও আইডি 3 ডিএক্স 11 এফেক্ট অবজেক্ট নেই)।
আমি এইচএলএসএল ব্যবহার শুরু করার আগে, আমি এই কোডটি দেখতাম এবং আসলে হিংসা করতাম ।
যদিও এনভিডিয়া যেমন OpenGL মধ্যে CG / D3D জন্য একটি সাধারণ ইন্টারফেস করতে, কার্যত তার ভাষী তাদের সেরা করেনি না এই ভাবে, এবং আপনি cgGL*
, cgD3D9
, cgD3D10
,cgD3D11
ফাংশন গ্রুপ সাথে তর্ক করে। সুতরাং যে পুরো ওপেনজিএল এবং ডি 3 ডি জন্য কাজ করে !! দাবি কেবল এতদূর যায়। #ifdef
এটিকে বিভিন্ন প্ল্যাটফর্মগুলিতে কাজ করার জন্য আপনাকে এখনও সব কিছু ওপেনজিএল / ডি 3 ডি টাইপ গোষ্ঠীতে গুটিয়ে রাখতে হবে। -2 সিজি
আরও সম্প্রতি সিজি / এটিআই কার্ডগুলির সাথে আমার একটি খারাপ অভিজ্ঞতা হয়েছে , যা আমি নিশ্চিত যে আমার খারাপ নয়। (অন্য কেউ চেষ্টা করে দেখুন?)। আমি মনে করি এটি সত্য হতে পারে যে এনভিআইডিএ পুরোপুরি এটিআই কার্ড পরীক্ষা করে না, যেমন ক্লাইমের দাবি। অথবা এটিআই সিজি-তে পরীক্ষা করে না। এক উপায় বা অন্যভাবে, সেখানে একটি মিল নেই এবং কিছু ধরণের স্বার্থের দ্বন্দ্ব রয়েছে। -3 সিজি
সব মিলিয়ে আমি সিজিকে প্রাধান্য দিয়েছি। এর শেডার কোড সিনট্যাক্স এবং নামকরণ পরিষ্কার, মিষ্টি এবং পরিপাটি। খুব খারাপ এটি অন্যান্য সমস্যাগুলি পেয়েছে।
আমার খুব প্রাথমিক ধারণাটি এইচএলএসএল কেবল ডাইরেক্টএক্সের জন্য এবং জিএলএসএল কেবল ওপেনগিএলের জন্য। সিজি মূলত এইচএলএসএল হিসাবে একই ভাষা, তবে ডাইরেক্টএক্স বা ওপেনজিএল (যদিও বিভিন্ন রানটাইম কোডের মাধ্যমে) ব্যবহার করা যেতে পারে।
এইচএলএসএল এবং জিএলএসএল এর মধ্যে আরেকটি গুরুত্বপূর্ণ পার্থক্য (আমি সিজি জানি না তাই আমি এর জন্য কথা বলতে পারি না) হ'ল এইচএলএসএল মাইক্রোসফ্ট D3D রানটাইমের অংশ হিসাবে শেডার সংকলক সরবরাহ করে যেখানে জিএলএসএল এর সাথে আপনার হার্ডওয়্যার বিক্রেতা তাদের অংশ হিসাবে তাদের সরবরাহ করে ড্রাইভার।
এর উভয় পক্ষেই সুবিধা এবং অসুবিধা রয়েছে।
জিএলএসএল পদ্ধতির সাহায্যে বিক্রেতা তাদের হার্ডওয়্যারটির দক্ষতার সাথে সংকলকটি টিউন করতে পারে। তারা তাদের নিজের হার্ডওয়্যারকে সবচেয়ে ভাল জানে, তারা কী করতে হবে এবং কী করবে না তা তারা জানে। অন্যদিকে অসুবিধাটি হ'ল - এমন এক বিশ্বে যেখানে একাধিক হার্ডওয়্যার বিক্রেতারা রয়েছেন - আপনার এমন পরিস্থিতি রয়েছে যেখানে শেডার সংকলকগুলির মধ্যে অসঙ্গতি থাকতে পারে এবং বিক্রেতার কাছেও এলোমেলো হওয়ার জন্য সম্পূর্ণ অবাধ রাজত্ব রয়েছে।
এইচএলএসএল পদ্ধতিতে মাইক্রোসফ্ট সংকলকটি নিয়ন্ত্রণ করে। প্রত্যেকে একটি সামঞ্জস্যপূর্ণ টেক বেসে রয়েছে এবং যদি শেডার যদি এক জায়গায় সফলভাবে সংকলন করে তবে তা যুক্তিযুক্তভাবে সর্বত্রই সংকলন করার কথা বলে মনে করা যেতে পারে। একই শেডার বিক্রেতার নির্বিশেষে একই সংকলিত আউটপুট উত্পাদন করবে (অন্যান্য সমস্ত জিনিস অবশ্যই সমান হবে)। অন্যদিকে এইচএলএসএল সংকলকটি "সমস্ত কিছুর সাথে ধারাবাহিকভাবে কাজ করে" হতে হবে, তাই ট্যাঙ্ক থেকে শেষ কয়েক ফোঁটা রস বের করার জন্য এটি কোনও বিশেষ বিক্রেতার-নির্দিষ্ট কৌশলগুলি টানতে সক্ষম নয়।
এটি যদি আমার সামনে আসে তবে বিশ্বের এইচএলএসএল দৃষ্টিভঙ্গির পক্ষে আমার কাছে অগ্রাধিকার রয়েছে কারণ এটি আমি করি। বিভিন্ন প্ল্যাটফর্মগুলিতে বুনোহীনভাবে বেমানান আচরণের আগে আমাকে খারাপভাবে দংশিত হয়েছিল, এবং একটি ক্ষেত্রে এমনকি ঠিক কাজ করা একটি বেসলাইন পেতে এআরবি এএসএম-তে ফিরে GLSL এর বোঝা রোল করতে হয়েছিল। এনভিআইডিআইএর জিএলএসএল সংকলকটি এখানে বিশেষভাবে কুখ্যাত হিসাবে দেখা যেতে পারে - এটি এমনকি এইচএলএসএল বাক্য গঠন এবং কীওয়ার্ড গ্রহণ করবে, এর অর্থ যদি আপনি সতর্ক না হন তবে আপনি শেডারের উত্পাদন শেষ করতে পারবেন যা কেবলমাত্র এনভিআইডিএতে কাজ করবে এবং অন্য কিছু নয়। এটি সেখানে একটি জঙ্গল।
আপনি আরটিএসএস (রান টাইম শেডার সিস্টেম) যা ওগরের সাথে আসে তাও দেখতে চাইতে পারেন। এটি মোটামুটি নতুন তবে আপনি মূলত বাহ্যিক ফাইলগুলির চেয়ে কোডে শেডারগুলি লিখেন। আমি এটি এখনও বাস্তবায়ন করি নি, তবে সময় আসার সাথে অবশ্যই এটি ব্যবহারের পরিকল্পনা করছি।
শেডার লেখার পাশাপাশি ওগ্রে উইকিতে একটি বিশাল টিউটোরিয়াল এখানে রয়েছে। http://www.ogre3d.org/tikiwiki/JaJDoo+Shader+Guide
আপনার মূল প্রশ্ন হিসাবে, যেমন প্রেটর বলেছিলেন, এটি আসলে কোনও উপকার / বিবেকের বিষয় নয়, আপনি কোন রেন্ডারিং সিস্টেমটি ব্যবহার করতে চান তা বিষয়। যেহেতু ওগ্রির সাথে ডিএক্স / ওপেনজিএল ব্যবহার করা প্লাগইন লোড করার বিষয়, তাই আপনি সম্ভবত .cg ফর্ম্যাটটি ব্যবহার করতে চাইবেন।