ناگفته هاي DirectX10 از ديدگاه سخت افزاري
DirectX10 وWindows Graphic Foundation 2.0 اسامي هستند كه ميتوانند انقلاب جديدي را در گرافيك هاي سه بعدي و بازي هاي پيشرفته كامپيوتري نويد دهند. هنگام عرضه Windows Vista در ابتداي سال جاري ميلادي ما شاهد حضور API جديد شركت Microsoft يعني DirectX 10 بوديم كه استانداردهاي موجود براي پردازش سه بعدي و تجربه چند رسانه اي كاربران را به سطح جديدي ارتقأ داده است.هرچند زمان زيادي از معرفي DirectX 10 مي گذرد، اما ناگفته هاي زيادي در رابطه با اين API بنيادي وجود دارد كه در اين مقاله به بررسي آنها پرداخته شده است.
حافظه مجازي در DirectX 10
API يا واسط نرم افزاري DirectX از مجموعه اي از اينترفيس ها تشكيل شده است كه مشخص ميكنند توسعه دهندگان بازي ها و نرم افزارهاي مختلف چگونه بايد با سخت افزار به صحبت بپردازند. نوشتن يك برنامه براي يك API استاندارد بسيار ساده تر از نوشتن و بهينه سازي همان برنامه براي اجرا بر روي سخت افزارهاي خاص است. به منظور هرچه يكپارچه تر كردن سخت افزار و نرم افزار، مايكروسافت يك بازنگري كلي را بر روي DirectX اعمال كرده است. از آنجايي كه اين API در طول زمان حياط Windows Vista به عنوان پايه و اساس توسعه و اجراي هر نرم افزار و يا سخت افزار جديدي مورد استفاده قرار خواهد گرفت، Microsoft سعي كرده است با ارايه برخي از مشخصات پيشرو و كاملا جديد و علاوه بر آن ساده سازي اين API به برنامه نويسان امكان دهد تا با سرعت و سهولت بتوانند با دريافت حداكثر كارايي از سخت افزارهاي PC ،نرم افزارها و بازي هايي با كيفيت و كارايي بالا را طراحي كنند.
Direct3D قسمتي از DirectX است كه مستقيما بر اجرا و عملكردهاي نرم افزارهاي سه بعدي نظارت دارد. در حقيقت مهمترين بخش DirectX ، Direct3D است. بزرگترين تحولات صورت گرفته در DirectX10 نيز مستقيما به Direct3D مربوط مي شود. Direct3D10 با يكپارچه كردن دستورالعمل ها و استاندارد نمودن مشخصات سايه زن هاي قابل برنامه نويسي، برنامه نويسان را از شر سايه زن هايي كه هر سازنده به صورت اختصاصي طراحي و روانه بازار ميكرد رها ميسازد. بعلاوه مايكروسافت در مدل درايورهاي مربوط به كارت هاي گرافيك و نمايشگرها نيز تجديد نظر كرده است.
به اين خاطر كه در Windows Vista تمام دسك تاپ به صورت سه بعدي به نمايش در مي آيد، كارت گرافيك ديگر تنها براي بازي كردن مورد استفاده قرار نمي گيرد. هنگامي كه شما يك صفحه نمايش سه بعدي داريد و هر برنامه را در صفحه سه بعدي مربوط به خودش اجرا مي كنيد، درايورها كارت گرافيك بايد به اندازه كافي با ثبات و انعطاف پذير باشد تا بتواند نقش پردازنده گرافيكي را افزايش دهد. به همين منظور مايكروسافت تصميم گرفته است تا درايورها را به دو بخش مجزا تقسيم نمايد. يك بخش براي اجراي دسك تاپ و بخش ديگر براي اجراي نرم افزارها و بازي هاي سه بعدي. اين تقسيم بندي براي افزايش ثبات زير سيستم گرافيكي طراحي شده است و به سيستم عامل امكان ميدهد حتي در صورتي كه يك برنامه كاربردي و يا بازي سه بعدي به علت خطاهاي نرم افزاري و يا سخت افزاري متوقف ميشود، همچنان و با وجود يك دسك تاپ كاملا سه بعدي قابل استفاده و با ثبات باقي بماند. وجود چنين نوآوري هايي همچنين به اين معني است كه مايكروسافت DirectX10 را براي Windows XP ارايه نخواهد كرد، به خاطر اينكه بسياري از پيشرفت هاي صورت گرفته در Direct3D10 مستقيما به مشخصات مدل جديد درايور كارت گرافيك Windows Vista نياز خواهد داشت.
استفاده وسيع تر از توانايي هاي كارت گرافيكي براي اجراي كاربردهاي مختلف، نياز به اختصاص منابع سيستمي بيشتر از سوي سيستم عامل به آن را دارد. سيستم عامل بايد به كاربردها امكان دهد تا بتوانند سخت افزار را به نحو موثرتري به اشتراك بگذارند. بزرگترين تغيير در اين زمينه در Windows Vista تكنولوژيي است كه با نام Virtualized Memory و يا حافظه مجازي شناخته مي شود. از اين پس كارت گرافيك فضاي حافظه اختصاصي خود را در حافظه سيستم خواهد داشت. اين حافظه اختصاصي ميتواند براي ذخيره داده هايي كه داراي اندازه بزرگتر از حافظه محلي كارت گرافيك هستند مورد استفاده قرار گيرد. هم اكنون كارت هاي گرافيكي گران قيمت و سطح بالا معمولا با حافظه هايي به ميزان 256 يا 512 مگابايت عرضه ميشوند. اما بازي ها ميتوانند به سادگي تمامي حافظه موجود را براي ذخيره قطعات بسيار بزرگ داده، مانند بافت هاي با وضوح بسيار بالا، مورد استفاده قرار دهند.
تصویری ساخته شده توسط Unreal Engine 3 برپایه DirectX 10
مدير عامل شركت Epic Games كه به تازگي موتور بسيار قدرتمند Unreal Engine 3.0 را معرفي كرده و در حال توسعه عناوين معروفي چون UT2007 و Gears Of War ميباشد، در اين باره ميگويد:
«تكنولوژي هايي مانند بافت گذاري مجازي (Virtual Texturing) ميتواند گلوگاه هاي مرتبط با اندازه بافت ها را در حافظه هاي گرافيكي بر طرف نمايد. اندازه بافت هايي را كه ما در DirectX9.0 ميتوانستيم با حفظ كارايي كامل استفاده كنيم به وسيله حجم حافظه محلي كارت گرافيكي محدود شده بود، اما در DirectX10 حجم آنها تنها توسط اندازه حافظه سيستم محدود خواهد شد. او توضيح ميدهد كه با در اختيار داشتن چنين امكاناتي، سطح استفاده از بافت ها در بازي ها و نرم افزارهاي سه بعدي بين 2 تا 4 برابر افزايش خواهد يافت كه اين براي كساني كه از موتور Unreal Engine 3.0 براي توسعه بازي هاي خود استفاده ميكنند بسيار عالي است. هرجا كه طراح بخواهد ميتواند از بافت هايي با كيفيت و وضوح بالا، براي مثال در وضوح 2048x2048 پيكسل، استفاده كند و سپس آنها را براي اجرا بر روي سيستم هاي با قدرت پايين تر به اندازه هاي كوچكتري مقياس دهي كند.»
كارت هاي گرافيكي براي تطابق با استدانداردهاي DirectX 10 و افزايش كارايي نياز به رعايت نكات دقيقي دارند. كارت هاي گرافيك بايد داراي مجموعه كاملي از مشخصات باشند تا بتوانند تاييديه هاي DirectX 10 را بدست آورند. البته اين استاندارها به طور كامل با آنچه كه در نسل فعلي كارت هاي گرافيكي شاهد ان هستيم متفاوت نخواهند بود. براي مثال كارت هايي كه از DirectX 9.0c و يا سايه زن هاي نسخه 2 پشتيباني كنند ميتوانند از بسياري از توابع موجود در DirectX 10 نيز پشتيباني كنند. اما Microsoft مشخصه هاي كاملا دقيقي را اعلام كرده است تا سازندگان مختلف پردازنده هاي گرافيكي مجبور به ساخت سخت افزارهاي سازگار با يكديگر شوند. براي مثال تفاوت هاي موجود در واحد هاي مميز شناور پردازنده هاي گرافيكي مختلف شركت هاي ATI و nVIDIA توسعه دهندگان بازي را براي سازگار كردن موتور بازي با هر دو نوع پردازنده گرافيكي تحت فشار قرار ميداد، اما مشخصه هاي تعريف شده در DirectX 10 كمك بزرگي به حذف اينگونه ناسازگاري ها در سخت افزارهاي مختلف و در نتيجه كاهش هزينه و زمان توسعه نرم افزار براي كار با آنها خواهد كرد.
ديگر ويژگي هاي DirectX10
مايكروسافت مشخصه هاي لازم براي طراحي پردازنده هاي سازگار با Direct3D 10 را سريع اعلام كرد و تا سازندگان پردازنده هاي گرافيك بتوانند هرچه زودتر كارت هاي گرافيكي مطابق با آن را ارائه دهند. با توجه به نكات گفته شده توسعه دهندگان نرم افزار ديگر مجبور نخواهند بود تا هنگام عرضه هر پردازنده گرافيكي جديدي، محصولات خود را با آن منطبق كنند. طبق گفته هاي مايكروسافت تنها هنگام ارايه DirectX 11 آنها نياز به ايجاد تغييرات در نرم افزارهاي خود را خواهند داشت و تا پيش از آن هر نرم افزاري كه براي كار با DirectX 10 طراحي شده باشد ميتواند بدون اعمال هيچگونه تغييري از تمامي مشخصه هاي آن پشتيباني نمايد. البته شايد هرگز نتوان جلوي نوشتن كدهاي بهينه شده براي يك پردازنده گرافيكي خاص را گرفت و ممكن است همچنان شاهد مشخصه هاي اضافي عرضه شده از طرف شركتهاي مخلف سازنده سخت افزار باشيم كه توسعه دهندگان مختلف ممكن است تمايل به پشتيباني از آنها را داشته باشند. اما بي شك نسل آينده نرم افزارها و سخت افزارهاي سه بعدي بيش از پيش يكپارچه خواهند شد و رقابت آنها در ارائه ويژگي ها و قابليت هاي فراتر از ملزومات DirectX10 خواهد بود.
طبق اظهارات Microsoft، DirectX10 ميتواند با مديريت هوشمندتر منابع، افزايش بازده API و انتقال بيشتر بار كاري از CPU به پردازنده گرافيك، كارايي را در بازي هاي مختلف از 6 تا 8 برابر افزايش دهد. البته اين امر اندكي اغراق آميز به نظر ميرسد اما مسلما شاهد افزايش زيادي در كارايي خواهيم بود. براي اين منظورDirectX 10 و معماري خط لوله هاي پردازشي در داخل پردازنده گرافيك براي به حداقل رساندن بار كاري بر روي CPU و زير سيستم حافظه، مجددا از ابتدا طراحي شده اند. مهمترين موضوعي كه در اين زمينه مد نظر طراحان قرار داشته است، افزيش كارهايي بوده كه پردازنده گرافيكي قادر است بدون نياز به گفتگو با CPU انجام دهد. به همين دليل هنگامي كه نياز به استفاده از CPU داشته باشيم، خواهيم توانست به شكلي بسيار سريع و موثر از آن استفاده كنيم.
در ادامه مواردي را كه سبب افزايش كارايي هنگام استفاده از DirectX 10 ميشود را ذكر ميكنيم:
• با استفاده از بافرهاي جديد براي مقادير، بازده عملياتي سايه زن ها هنگام ارسال و دريافت داده هاي مورد نياز مانند مكان نورها، مشخصات مواد و غيره، افزايش خواهد يافت. علاوه بر اين با حذف داده هاي زايد، حجم عظيمي از نقل انتقال هاي موجود بين API و درايور حذف خواهد گرديد. اين امر به ميزان قابل توجهي باعث كاهش فراخوان داده ها توسط API و از بين بردن بار اضافي بر روي پهناي باند حافظه شده و اجازه خواهد داد تا اعمالي كه قبلا نياز به گفتگو ميان API و درايور داشتند، در سطح درايور انجام شوند.
• با استفاده از آرايه هاي جديد بافت گذاري، پردازنده گرافيك خواهد توانست تا به طور شناور موارد استفاده از بافت را تغيير داده و بدون نياز به فراخواني و يا ذخيره، آن را مجددا مورد استفاده قرار دهد.
• با بررسي داده هاي مربوط به هر فريم، داده هاي نالازم بدون هيچ فعل و انفعالي با پردازنده حذف خواهد شد. تكنيك فوق از تكنيك هاي بررسي مختصات عمق به صورت سلسله مراتبي براي تشخيص و حذف اشيايي كه توسط اشيا ديگر پوشانده شده و قابل ديد نيستند استفاده مينمايد. اين تكنيك قبلا نيز در پردازنده هاي گرافيكي مختلف مورد استفاده قرار گرفته بود اما مهمترين تفاوت تكنيك فوق با تكنيك هاي قبلي، بررسي اطلاعات فريم قبلي براي يافت و حذف اين اشيا است كه نياز به محاسبات جداگانه براي هر فريم را از بين برده و سربار عمليات را تا حد زيادي كاهش ميدهد.
• Direct3D 10 داراي مشخصات منحصر به فردي است كه به كاربردها اجازه ميدهد آن را با توجه به نياز خود تنظيم و بهينه كرده و در نتيجه كارايي را در تمام شرايط در سطح بالايي نگه دارند.
• با پشتيباني از سايه زن هاي نسخه 4 (Shader Model 4.0)، پردازنده گرافيكي قادرخواهد بود تا تعداد بسيار بيشتري از دستورالعمل ها را در هر سيكل كلاك انجام دهد. علاوه بر اين با استفاده از تعداد زيادي دستور العمل جديد ميتوان كار بسيار بيشتري را از CPU به پردازنده گرافيكي منتقل كرد. در جدول زير ميتوانيد تفاوت هاي موجود ميان نسخه هاي قبلي سايه زن ها را با سايه زن هاي جديد نسخه 4 مشاهده كنيد:
جدول مقایسه Shader Model های نسخه 1 الی 4
سايه زن هندسي در DirectX 10
Direct3D 10 يك مرحله سايه زن جديد را به خط لوله هاي گرافيكي اضافه كرده است. سايه زن هندسي (Geometric Shader) واحد جديدي است كه ميان سايه زن راس (Vertex Shader) و سايه زن پيكسل (Pixel Shader) واقع شده است. يك سايه زن راس سنتي تنها قادر به دريافت يك ورودي است و در نتيجه ميتواند تنها يك خروجي را ايجاد كند. توليد و يا حذف مثلث ها براي سايه زن راس غير ممكن است زيرا اين سايه زن هميشه مجبور به توليد خروجي در ازاي هر ورودي دريافت شده ميباشد. سايه زن هندسي به نرم افزار اجازه ميدهد تا به تمامي مختصات هندسي قبلي، خطوط، مثلث ها و نقاط در واحد هاي مجاور هم دسترسي داشته باشد. اين سايه زن قادر است تا تغييراتي را در قطعات پيشين اعمال كرده و مثلث ها و نقاط جديدي را قبل از ارسال اشياي مختلف صحنه به سايه زن پيكسل به آنها اضافه يا حذف نمايد.
علاوه بر اين سايه زن هندسي قادر است تا نتايج محاسباتي را مستقيما به حافظه ارسال نموده و به آنها اجازه دهد تا در صورت نياز بدون دخالت CPU به جريان پردازش بازگردند. اين تغييرات اجازه خواهد داد تا جلوه هايي مانند ذرات، دود و يا انفجارها كه هميشه توسط CPU شبيه سازي ميشدند توسط پردازنده گرافيكي پردازش شوند. همچنين بازي ها ميتوانند از سايه زن هندسي در تركيب با آرايه بافت ها براي شتاب دهي افكت هايي مانند Cube Mapping استفاده كنند. بازي ها از Cube Mapping براي ايجاد انعكاس محيط اطراف بر روي يك شي استفاده ميكنند. مثلا انعكاس تصوير محيط آشپزخانه بر روي يك قوري شفاف را در نظر بگيريد، شما ميتوانيد با توجه به اجزا محيطي كه قوري داخل ان قرار دارد، تصوير انعكاسي مناسب را محاسبه كرده و سپس آن را بر روي قوري پياده سازي كنيد. انجام اين عمليات با استفاده از امكانات موجود حداقل به 6 عبور (Pass) نياز خواهد داشت، اما سايه زن هندسي ميتواند با پردازش نمودار گرافيكي، يك Cube Map را تنها در يك عبور پردازش نمايد.
در تصوير زير ميتوانيد شماتيكي از خط لوله گرافيكي DirextX 10 موسوم به Windows Graphics Foundation 2.0را مشاهده كنيد كه كليه پردازنده هاي گرافيكي سازگار با آن بايد از اين ساختار تبعيت كنند.
شماتیک Windows Graphic Fundation 2.0
نویسنده:
بهزاد فرخي
منبع: سخت افزار