এইচএলএসএল বনাম জিএলএসএল বনাম সিজি এর কী কী উপকারিতা রয়েছে? [বন্ধ]


61

তিনটির উপকার / বিভক্তি কী কী?


2
দেখে মনে হচ্ছে আপনি প্রথমে কোন এপিআই (ওজিএল বা ডিএক্স) যাচ্ছেন এবং কোন শেডার ভাষা ঠিক করার আগে কোন প্ল্যাটফর্মের বিষয়ে সিদ্ধান্ত নেওয়া উচিত to
টেট্রাড

1
আমি মনে করি এই প্রশ্ন উজ্জ্বল। একটি সম্প্রদায় উইকি সম্পর্কে? আমি এই সমস্ত কিছুর জন্য নতুন এবং ছায়াময়ীদের মধ্যে পার্থক্যগুলির একটি প্রশ্ন আমার জানা দরকার is
ম্লাদেন মিহাজলভিক

3
সংশোধন: "গঠনমূলক না হিসাবে বন্ধ" বলতে "ডিম্বিট নীতি লঙ্ঘন হিসাবে বন্ধ" বলা উচিত, কারণ এটি আইএস গঠনমূলক।
লেনার্ট রোল্যান্ড

উত্তর:


42

কোডরেঞ্জার ডাইরেক্টএক্সএল, এইচএলএসএল টার্গেটিং ডাইরেক্টএক্স, জিএলএসএল ওপেনজিএল এবং সিজি উভয় ইন্টারফেসের সাথে উপলভ্য সম্পর্কে সঠিক।

তবে অন্যান্য বিষয় বিবেচনা করার জন্য রয়েছে (ওজিআরই ফোরামে শিখেছি):

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

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

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

আমার ছায়াময় ভাষা চয়ন করার সময় আমি এই সমস্ত তথ্য সংগ্রহ করেছি (আমি এখনও আমার সিদ্ধান্ত নিইনি)।


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


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


2
হ্যাঁ । এনভিআইডিএ এটিআই কার্ডগুলির সাথে সমস্যা নিয়ে চিন্তা করে না বলে মনে হয়।
bobobobo

4
"উইন্ডোজ প্ল্যাটফর্মের ডাইরেক্টএক্সের তুলনায় ওপেনজিএল কিছুটা ধীর গতির বলে মনে হচ্ছে।" বেশিরভাগ ক্ষেত্রে এটি ওপেনজিএলযুক্ত ড্রাইভারদের জন্য বিক্রেতাদের সহায়তার কারণে উইন্ডোজ যেমন ডাইরেক্টএক্সের মতো হয় তেমন ভাল নয়।
ক্রিসি

1
দ্রষ্টব্য: সাম্প্রতিক উন্নতি এবং আমার গেমটি কিছু নন-এমএস ট্যাবলেটগুলিতে কাজ করে তা নিশ্চিত করার প্রয়োজনীয়তার কারণে আমি শেষ পর্যন্ত ওপেনগিএল / জিএলএসএল বেছে নিয়েছি।
ক্লাইম

2
@ সম্প্রদায়: সিজি সমর্থন বন্ধ করার জন্য আপনার কি কোনও লিঙ্ক আছে?
নিকল বোলাস


15

আমি কেবল সিজি বনাম এইচএলএসএল সম্পর্কে কথা বলতে পারি কারণ এগুলি আমি এখনও অবধি ব্যবহার করেছি।

সিজি এইচএলএসএল এর মতো নয়

সিজি-তে, এনভিআইডিআইএ খুব পরিষ্কার শেডার সিনট্যাক্স তৈরিতে দুর্দান্ত কাজ করেছে। এটি এইচএলএসএল এর সাথে খুব মিল।

তবে , 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 সিজি

সব মিলিয়ে আমি সিজিকে প্রাধান্য দিয়েছি। এর শেডার কোড সিনট্যাক্স এবং নামকরণ পরিষ্কার, মিষ্টি এবং পরিপাটি। খুব খারাপ এটি অন্যান্য সমস্যাগুলি পেয়েছে।


10

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


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

আমি ওগ্রিকে ব্যবহার করছি এবং এভাবে তিনটিই আমার কাছে উপলভ্য, তবে আমি যদি ডাইরেক্টএক্স এবং ওপেনজিএল উভয়ই পেতে চাই তবে আমাকে হয় এইচএলএসএল এবং জিএলএসএল বা কেবল সিজি উভয়ই শেডার লিখতে হবে? এটা কি সঠিক?
জেড_গুই 21

14
-1। এটি একটি অত্যন্ত প্রাথমিক উত্তর এবং কেউ এই সাইটে আরও বিস্তৃত তথ্য খুঁজে পেতে আশা করবে।
ববোবোবো

2
-1: আমি বোবোবোবো সাথে একমত
নিকল বোলাস

1
দুর্ভাগ্যক্রমে বোবোবোর মতো একই কারণে আমাকে -1 করতে হবে।
জোনাথন ডিকিনসন

8

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

এর উভয় পক্ষেই সুবিধা এবং অসুবিধা রয়েছে।

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

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

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


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

আমি এমনকি এতদূর যেতে পেরেছি যে এটিআই / এএমডি তে বিকাশ ঘটানো, বা খুব কমপক্ষে এটিআই / এএমডি-র নিয়মিত ভিত্তিতে ক্রস-চেক করা এখনও একটি পরম প্রয়োজন। সেখানে একটির দামের জন্য আপনি দুটি কিল পান কারণ আপনি ওপেনজিএল ড্রাইভারটিতেও বাগগুলি ধরবেন।
ম্যাক্সিমাস মিনিমাস

যখন ভুলকানকে লক্ষ্য করে বা এসপিআইআর-ভি সমর্থন করে ওপেনজিএল বাস্তবায়ন, তখন জিএলএসএল শেডারগুলি এসপিআইআর-ভিতে প্রাক-সংকলন করা যায়।
অ্যান্ড্রিয়া

@ আন্ড্রেয়া - হ্যাঁ, এটি সঠিক; প্রশ্নটি জিজ্ঞাসা করার সময় (এবং অ্যাসওয়্যারটি লেখা হয়েছিল) তখন অবশ্যই ভলকান বা এসপিআইআর-ভি বিদ্যমান ছিল না।
ম্যাক্সিমাস মিনিমাস

1

আমি উভয়ই ব্যবহার করে আসছি, আমি glsl দিয়ে শুরু করেছিলাম এবং কেবলমাত্র প্রকল্পটির দাবি করার কারণে hlsl এ চলে এসেছি। পছন্দটি দেওয়া হয়েছে, এটি সমস্তভাবে glsl। glsl খুব চতুর মনে হয় এবং এইচএসএসএল মনে হয় এটি কোনও ইঞ্জিনিয়ার শখের বেঞ্চের বাইরে এসেছিল।


1

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

শেডার লেখার পাশাপাশি ওগ্রে উইকিতে একটি বিশাল টিউটোরিয়াল এখানে রয়েছে। http://www.ogre3d.org/tikiwiki/JaJDoo+Shader+Guide

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

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