کامپیوتر و اُپن سورس(Computer & Open Source)

آموزش دروس رشته کامپیوتر - نرمافزار اشنایی باسخت افزار سیستم عامل لینوکس شبکه برنامه نویسی معرفی نرم افزار

کامپیوتر و اُپن سورس(Computer & Open Source)

آموزش دروس رشته کامپیوتر - نرمافزار اشنایی باسخت افزار سیستم عامل لینوکس شبکه برنامه نویسی معرفی نرم افزار

دو کتاب برای آموزش هسته لینوکس

 

Linux Kernel Development

Understanding the Linux Kernel

 

 

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

مقدمه:

 

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

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

 

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

 

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

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

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

 

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

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

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

 

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

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

 

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

 

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

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

 

گیم انجین ها در مقابل موتورهای واقعیت مجازی :

 

اگر خوب به پروسه ساخت گیم انجین ها در گذشته و حال بنگرید میبینید که اساسا گیم انجین ها همیشه جهت کار بر  روی کامپیوترهای خانگی و کنسول های  بازی ساخته می شدند در صورتی که  موتورهای  واقعیت مجازی Engines) (VR جهت کار بر روی سوپر کامپیوترها و ابر کامپیوترها طراحی میشدند. سیستم ورودی نیز در موتورهای واقعیت مجازی مقداری پیشرفته تر از گیم انجین هاست. همچنین از لحاظ قیمت نیز تفاوت چشمگیری بین این دو وجود دارد.

هارددیسک

هارددیسک در سال 1950 اختراع شد . هارددیسک های اولیه شامل دیسکهای بزرگ به قطر 20 اینچ ( تقریبا 8.5 سانتی متر ) بوده و توان ذخیره سازی فقط چند مگابایت را داشتند .

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

برای اندازه گیری کارآئی یک هارددیسک از دو روش عمده استفاده می گردد :

1- میزان داده (Data Rate ) : تعداد بایت های ارسالی در هر ثانیه برای پردازنده است . اندازه ی فوق بین 5 تا 50 مگابایت در ثانیه می باشد .

2- زمان جستجو ( Seek Time ) : مدت زمان بین درخواست یک فایل توسط پردازنده تا ارسال اولین بایت فایل مورد نظر برای پردازنده را گویند .

 

به صورت خیلی ساده هاردها از یک یا چند صفحه ی دایره ای شکل تشکیل شده اند و هدهایی هم وجود دارند که عملیات خواندن / نوشتن اطلاعات را روی این صفحات انجام می دهند . اطلاعات روی دوایر متحدالمرکزی که به آنها شیار گفته می شود ، قرار داده می شوند . اندازه ی صفحات در مدل های جدید برابر با 3.5 اینچ است .

از زمانی که کامپیوتر را روشن می کنید تا زمانی که آن را خاموش می کنید ، هارد کامپیوتر شما مشغول کارکردن است و با سرعت بسیار بالایی در حال چرخش است ( این سرعت در مدل های گوناگون هاردهامتغیر است از 5400 دور در دقیقه گرفته تا 10000 دور در دقیقه ) . این سرعت بسیار بالا قاعدتا دارای استهلاک بسیار بالایی می باشد و در نتیجه این امر باعث می شود که هارد شما روزی ( دور یا نزدیک ) از کار بیفتد . به همین دلیل است که اینقدر روی پشتیبان گیری از اطلاعات کامپیوتر تاکید می شود .

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

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

یکی دیگر از خرابی های رایج در هارددیسک ها ، بدسکتور ( Bad Sector ) است . بد سکتور بخشی از صفحات است که نتوان عملیات خواندن یا نوشتن اطلاعات را بر روی آن انجام داد.

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

نرم افزارهایی توسط شرکت های تولید کننده ی هارددیسک ارائه می شود که می توانند در بعضی مواقع بدسکتورها را ترمیم کنند . به این کار اصطلاحا Low Level Format گفته می شود .