X
تبلیغات
رایتل
پشم سنگ عایق الاستومری
پنج‌شنبه 22 بهمن‌ماه سال 1388
توسط: آلفا پک

آشنایی با گیم انجین ها و موتورهای سه بعدی



مقدمه:


Game engine در حقیقت مولفه نرم افزاری و اصلی هر بازی کامپیوتری و ویدئویی و هر برنامه اینتر اکتیوی است که محتوای گرافیکی بلادرنگ تولید کند. گیم انجین یکسری از تکنولوژی های اساسی را مهیا میسازد همچنین فرایند توسعه را تسهیل میکند و در بعضی مواقع بازی را قادر میسازد تا بگونه ای ساخته شود که بصورت مالتی پلتفرم و بر روی کنسول های بازی و کامپیوترهای رومیزی اجرا شود. توانایی ها و قابلیت های اساسی که توسط گیم انجین در اختار قرار میگیرد شامل یک رندر کننده برای گرافیکهای دو بعدی و سه بعدی و موتور فیزیک و کاشف برخورد(Collision Detection)و صدا و پردازشگر اسکریپت و انیمیشن و هوش مصنوعی و قابلیتهای شبکه ای و یک نمودار صحنه میباشد.



اغلب گیم انجین های معروف و بزرگ مانند Unreal Engine 3 و Doom 3 engine و CryENGINE2 و RenderWare و Gamebryoمجموعه ای از ابزارهای توسعه بصری بعلاوهء مولفه های نرم افزاری با قابلیت استفاده مجدد را مهیا میکنند. معمولا تمام این ابزارها در یک محیط توسعه مجتمع گردآورده می شوند تا توسعه تند و آسان بازیهای کامپیوتری را ممکن سازند. گیم انجین ها را بعضی اوقات با نام "میان افزار بازی" یا "Game Middle Ware"نیز میشناسند.

همچون دیگر راه حل های میان افزاری گیم انجین ها اغلب انتزاع پلتفرم را مهیا میسازند که اجازه میدهد بازیها بر روی طیف وسیعی از پلتفرم ها اجرا شود. میان افزار بازی اغلب بصورت معماری مولفه گرا طراحی میشوند که این امر باعث میشود بتوان بسیاری از قابلیتهای آنها را کنار گذاشت و یا با مولفه های میان افزار ویژه گسترش داد مانند Hovak برای فیزیک و F MOD برای صدا و Speed Tree برای رندرکردن. بعضی از انجین ها مانند Render Ware بصورت مجموعه ای از مولفه های ابزار متصل بهم طراحی شده است. مزیت این روش اینست که میتوان با آن موتورهای سفارشی تولید کرد که اجزایش به صورت انتخابی با یکدیگر ترکیب شده باشند.



بعضی از گیم انجین ها به جای کلیه قابلیتهایی که مورد نیاز یک بازی کامپیوتری است تنها قابلیت رندرینگ بلادرنگ سه بعدی را مهیا میسازند. این انجین ها به توسعه دهنده بازی اجازه میدهند که بقیه توانایی ها و قابلیت های مورد نیاز را فراهم نموده و مجموعه را تکمیل نماید که میتوان آنها را از بین اجزا میان افزار بازی های دیگر انتخاب نمود. این نوع از موتور ها اغلب با نامهای دیگری مانند موتور گرافیکی "Graphics Engine" یا موتور رندرسازی "Rendering Engine" و یا موتور سه بعدی "3D Engine" نیز شناخته می شوند.




Axiom , Ogre , Power Rende , Crystal Space , and Genesis3Dاز جمله موتورهای گرافیک هستند. گیم انجین ها و موتور های گرافیکی جدید قابلیتی دارند که به نمودار صحنه Scene Graph معروف است که یک نمایش سه بعدی شی گرا از دنیای سه بعدی بازی میباشد و اغلب طراحی بازی را تسهیل میکند و میتواند برای رندر موثر و با کیفیت دنیای بصری سه بعدی بکار گرفته شود.



انتزاع سخت افزار :




اغلب اوقات موتور سه بعدی یا سیستم رندرکننده یک گیم انجین بر اساس API های گرافیکی همچون Direct 3Dو یاOpenGLساخته میشود که باعث استقلال نرم افزاری از GPU یا همان کارت گرافیکی میشود. از کتابخانه های سطح پایین "Low-Level" دیگری نیز همچونDirectX و SDL و OpenAL نیز بطور معمول در ساختن گیم انجین ها استفاده میشود چون آنها دسترسی مستقل از سخت افزار به دیگر سخت افزار کامپیوتر را همچون کارت صوتی و کارت شبکه و کیبورد و موس و ... را فراهم میسازند.



مدتها پیش از ایجاد شتاب دهنده های سخت افزاری در گرافیک سه بعدی از رندرکننده های نرم افزاری استفاده می شد. البته هنوز هم در بسیاری از برنامه های مدل ساز سه بعدی یا در جاهایی که کیفیت بصری بر کارایی بلادرنگ ارجحیت داشته باشد از رندرکننده های نرم افزاری استفاده می شود. یکی دیگر از موارد استفاده از رندرکننده های نرم افزاری مواقعی است که سیستم بصورت سخت افزاری از قابلیتی پشتیبانی نمیکند بطور مثال سیستم قابلیت ساپورت شیدرها را نداشته باشد.




تاریخچه گیم انجین ها :

اصطلاح گیم انجین در میانه سالهای دهه 90 و مخصوصا در ارتباط با بازیهای FPS ایجاد شد. و شرکت id-software با بازیهایی همچون Doom و Quack آغازگر این راه بود. بعد ها نیز بازیهایی دیگری همچون Quack III و Unreal 1998 نیز با چنین فلسفه ای ایجاد شدند. بسیاری از شرکت ها میتوانستند با فروش موتور بازیهایشان یک سود مازاد و کمکی برای خود ایجاد کنند. امروزه موتورهای بازی سازی با قیمت های از ده هزار دلار تا سه ملیون و هفتصد و پنجاه هزار دلار (موتور بازی Warcraft III ) وجود دارند. کمترین مزیت و فایده ای که گیم انجین ها داشتند این بود که توسعه بازیهای کامپیوتری را آسان و سریع نمودند چیزی که در صنعت پر از رقابت بازیهای کامپیوتری یک منفعت بزرگ به شمار می آمد. امروزه بسیار بر روی گیم انجین ها و اجزا سازنده آنها کار میشود و این امر باعث شده تا بین قسمت های مانند کارهای هنری و طراحی مراحل و رندرینگ و اسکریپ نویسی شکاف عمیقی ایجاد شود به زبان ساده این امر باعث شده تا کارها تخصصی تر شود. امروزه در تیم های بزرگ توسعه بازیهای کامپیوتری و ویدئویی نسبت هنرمندان به برنامه نویسان 4 به 1 میباشد و این یک امر عادی محسوب میشود.

گیم انجین بازیهای FPS امروزه عمومی ترین نوع موتورهای رایج میباشند اما امروزه دیگر تقریبا از آنها در ساخت انواع بازیهای کامپیوتری در ژانرهای مختلف استفاده میشود. همیشه اولین جهش ها و نوآوری های ابتدا در این دسته از انجین ها اجرا میشود.

RPG Morrowind و MMORPG Dark Age of Camelot دو بازی هستند که بر اساس موتور NetImmerse طراحی شده اند. همچنین بازی Lineage IIبر اساس موتور آنریل Unreal Engine

طراحی شده است. گیم انجین هایی بزرگی که امروزه طراحی میشوند بگونه ای هستند که کنسول های بازی خانگی را نیز به خوبی پشتیبانی نمایند. بطور مثال دو بازی GrandTheftAutoو Burnout بر اساس موتور معروف RenderWare ساخته شده اند. امروزه گیم انجین ها در زمره پیچیده ترین برنامه های کامپیوتری هستند که تابحال ایجاد شده است.



میان افزارها :



امروزه بسیاری از کمپانی ها در ساخت و تولید مجموعه های نرم افزاری که با نام میان افزار "Middle Ware" شناخته میشوند محارت و تجربه ویژه ای کسب کرده اند. توسعه دهندگان میان افزار ها تلاش دارند تا مجموعه های نرم افزاری قدرتمندی تولید کنند که شامل تمام ملزومات مورد نیاز ساخت یک بازی کامپیوتری باشد. بسیاری از میان افزار ها قابلیت هایی مانند توابع گرافیک و صوت و فیزیک و هوش مصنوعی را تدارک میبینند که توسعه بازیها را تسهیل می نماید.Gamebryo و RenderWare دو نمونه از میان افزار های معروفی هستند که بطور بسیاری مورد استفاده قرار میگیرند.

بعضی از میان افزار ها تنها یک کار را انجام میدهند و بطور متقاعد کننده ای آن کار را بسیار بهتر از میان افزار های چند منظوره انجام میدهند. برای نمونه SpeedTree برای رندر کردن درختان و مراتع و جنگلها در کنسول جدید مایکروسافت یعنی Xbox 360 و همچنین بازی TheElderScrollsIV:Oblivion متعلق به مایکروسافت استفاده میشود.

بعضی از میان افزار ها به همراه سورس کد کامل ارائه میشوند و بعضی دیگر تنها مرجع توابع API و کتابخانه کامپایل شده را در اختیار میگذارند که برای دستیابی به سورس کد کامل آنها میبایست مبلغ اضافه تری پرداخت نمود.



توسعه گیم انجین ها امروزه یکی از محبوب ترین پروژه ها در میان علوم کامپیوتری میباشد و افراد بسیاری از دانش جویان و علاقمندان و توسعه دهندگان بازیهای کامپیوتری به این موضوع میپردازند. از ملزومات توسعه گیم انجین ها داشتن دانش بسیار در طیف وسیعی از علوم مانند هندسه و تئوری رنگها و محاسبات میباشد. بسیاری از افراد بطور مشتاقانه و آماتوری به این رشته میپردازند و از این کار لذت میبرند ضمن اینکه محصول خود را بصورت اوپن سورس ( زنده باد اوپن سورس ) در اختیار بقیه میگذارند.Crystal Space یک گیم انجین رایگان میباشد که از محبوبیت خوبی نیز برخوردار است. این انجین رایگان بوده و در ضمن اوپن سورس میباشد و مولتی پلتفرم نیز هست.

یک محیط توسعه بازی بسیار محبوب و ارزان قیمت نیز در سال 1999 توسط MarcOvermars تولید شد که فرآیند توسعه بازیهای دوبعدی را بشدت آسان میکرد.

سخنی در مورد موتور های گرافیکی :



همانطور که پیشتر نیز عنوان شد موتور گرافیکی یکی از اجزای فوق العاده مهم هر گیم انجینی است. امروزه با یک سرچ کوچک در اینترنت میتوان موتور های گرافیکی بسیاری را پیدا کرد که اوپن سورس و رایگان هستند و قدرت های خوبی نیز داند و به صورت SDK عرضه میشوند.. از نمونه های خوب این انجین ها میتوان بهموتورهای سه بعدی OGRE 3D و irrlicht و Panda و Delta 3D و ... را نام برد. این موتورها غالبا بصورت کتابخانه های استاتیک یا دینامیک به همراه فایلهای هدر مورد نیاز و در اکثر مواقع به همراه سورس کامل عرضه میشوند. هر کدام از این انجین ها قادرند تا از یک یا چند زبان مختلف پشتیبانی نماید. بطور مثال موتور های OGRE و irrlicht را میتوان در زبان C/C++ استفاده کرد و از موتور Panda میتوان در زبان پایتون استفاده نمود. هر کدام از این موتورها با یکی از دو API گرافیکی رایج مانند OpenGL یا Direct3D نوشته شده اند و در بعضی موارد از هر دوی این API ها پشتیبانی میکنند مانند موتور OGRE که از هر دوی این API ها پشتیبانی میکند. در تعدادی دیگر از اینگونه موتور ها که پیشرفته تر هستند قابلیت Software Rendering نیز مهیا میباشد.

اگر طالب استفاده از این گونه موتورها هستید من موتور OGRE را به شما توصیه میکنم. که در فواصل زمانی کوتاه پیشرفت میکند و سریع اشکال زدایی میشود.



مثالی از چگونگی کاربرد موتوهای گرافیکی :



اگر بخواهم به زبان خیلی ساده و ابتدایی روش استفاده از یک موتور گرافیکی را برای دوستان شرح دهم باید از یک مثال استفاده کنم.

فرض کنید شما موتور گرافیکی OGRE را در اختیار دارید و مایلید تا از آن استفاده نمایید. خوب این موتور در اصل بصورت یکسری کتابخانه و فایلهای هدر میباشد که شما با Include نمودن فایل های هدر در ابتدای برنامه C++ خود و همچنین لینک کردن کتابخانه های مربوطه میتوانید از کلاسها و توابع این موتور استفاده نمایید. این کتابخانه کلاسهایی برای ساخت پنجره و لود کردن مدل ها و تکسچرها و نورپردازی و ... دارد.