

تحلیل و نقد بازیهای کامپیوتری
راهنمای مراحل بازیها
ترینر
مراحل ذخیره شده بازی
عکس وپوستر
اخبار بازیها
دانلود بازی کم حجم
براي جستجو در تمام مطالب سايت واژه كليدي مورد نظرتان را وارد کنيد :
اگه درخواست ترینر والپر و ... داشتین در قسمت نظر بنویسید حتما براتون میزارم

اطلاعيه هاي سايت :
به شما كاربر گرامي سلام عرض مي كنم . اميدوارم
در اين وبلاگ دقايقي خوبي را سپري كنيد . براي آگاهي از امكانات اين وبلاگ
خواهشمندم كه تا آخر صفحه اين وبلاگ را مشاهده نماييد .
ساخت بازی های رایانه ای
از جمله بارزترین و پرکاربردترین خصوصیات کامپیوترها، توانایی آنها برای نمایش تصاویر و صحنه های گرافیکی میباشد. این قابلیت امروزه به حدی اهمیت یافته است که تقریبا تمام تلاشهایی که برای ارتقاء تکنولوژی کامپیوترها صورت میگیرد به نوعی جهت افزایش توان و سرعت گرافیکی آنها انجام میپذیرد. بطور کلی برنامه های گرافیکی به سه دسته تقسیم میشوند: نرم افزارهای گرافیکی مثل 3D MAX، Auto CAD و PhotoShop، شبیه سازیها و نرم افزارهای چند رسانه ای، بازیها. اصولا هر برنامه ای که به نوعی به گرافیک مربوط شود به توان محاسباتی بالا نیاز دارد. به همین دلیل امروزه دیگر کارتهای گرافیکی مجهز به یک پردازنده مخصوص به خود هستند. این پردازنده که GPU نام دارد به میزان زیادی بار محاسبات گرافیکی را از دوش CPU برمیدارد. ما میخواهیم امروز کمی راجع به بازیها و مولفه های سازنده آنها بحث کنیم. این روزها با عرضه سیستمهای جدیدی همچون Play Station و Game Box رقابت سازندگان بازی به مرحله ای جدید پانهاده و این شرکتها هر روز علاقمندان به بازیها را با محصولات جدید خود شگفت زده میکنند. پس در این مقاله سعی میکنیم کمی در مورد بازیها صحبت کنیم و ببینیم چطور میتوان یک بازی سه بعدی ساده نوشت.
درست است که بحث خود را با مقدمه ای بر گرافیک کامپیوتری آغاز کردیم، ولی قطعا گرافیک تنها قسمت یک بازی نیست (هر چند که مهمترین مولفه یک بازی است). یک بازی علاوه بر تصاویر ثابت و متحرک، به جلوه های صوتی، موزیک، دریافت ورودی (و احیانا ارسال خروجی) و حتی قابلیت کار بر روی شبکه نیاز دارد. در واقع مجموعه ای از همه تکنیکها و رشته های مرتبط با کامپیوتر و ریاضیات با هم جمع میشوند تا یک بازی ساخته شود. درست همانطوری که برای ساخت یک اتومبیل، از تقریبا همه دانشهای بشری استفاده میشود. به هر صورت، برای اینکه یک بازی را تحلیل کنیم، ابتدا باید بخشهای گرافیکی آن را بشناسیم. از آنجاییکه امروزه اکثر بازیها در قالب سه بعدی ساخته میشوند، ما هم بیشتر بر روی گرافیک سه بعدی تمرکز میکنیم.
بحث را با مثالی شروع میکنیم که برای همه شما بسیار ملموس خواهد بود. شما ریاضیات را چطور فراگرفتید؟ از کجا شروع کردید؟ حتما همه شما یک پاسخ میدهید. بله اعداد. مبنای ریاضیات اعداد است و هر پیشرفتی در این علم در نهایت به همین اعداد به ظاهر ساده مرتبط میشود. در گرافیک کامپیوتری هم چنین مبنایی وجود دارد. در اینجا بردارها و بهتر بگوییم نقاطی که با بردارها مشخص میشوند حکم پایه و زیربنای گرافیک سه بعدی را دارند. این نقاط فضایی که دارای سه مولفه x، y و z هستند، در اصطلاح گره (vertex) خوانده میشوند. هر شیئی که در فضای سه بعدی ساخته میشود مجموعه ای از چندین گره است. مثلا یک مکعب، دارای 8 گوشه (کنج) و در نتیجه 8 گره میباشد. ترتیب قرارگیری این گره ها هم در تعیین شکل نهایی جسم موثر است. ممکن است هر سه گره متوالی با هم تشکیل یک مثلث را بدهند، یا گره ها دو به دو به هم وصل شده و یک خط را ایجاد کنند. حتی با روشهای خاصی میتوان سطوح چند ضلعی را هم ایجاد کرد. ولی بطور کلی سخت افزارهای گرافیکی تنها میتوانند مثلث را رسم کنند. چون مثلث یک چند ضلعی هم صفحه (co-planar) است. به بیان دیگر، کلیه اشیائی که در بازیها میبینید، از یک جعبه ساده گرفته تا یک تانک، همگی از مثلثهای کوچک و بزرگ ساخته شده اند.
نحوه کار در فرآیند ساخت یک بازی بدین صورت است که پس از طراحی داستان بازی و خلق اشیاء و کاراکترها و پیدا کردن دید کلی بر اشیاء، گرافیستهای سه بعدی و انیماتورها به کمک برنامه هایی چون 3D MAX، True Space یا بعضا MAYA مدلهای مورد نیاز بازی را میسازند. در همین محیطها، حرکات مورد نیاز کاراکترها و اشیاء ثابت بازی هم پیاده سازی میشود. مثلا حرکات تیر اندازی، پرش، دویدن یا مشت زدن برای یک انسان طراحی میشوند و در فریمهای گوناگون ذخیره میگردند. سپس اشیاء، محیطها و کاراکترهای ساخته شده در فرمتهای مخصوصی ذخیره میشوند و توسط فایلهای کوچکی به محیط برنامه نویسی انتقال داده میشوند. از فرمتهای معروف فایلهای سه بعدی میتوان به MD2، MD3، MDL یا X اشاره کرد که در بازیهای معروفی چون Doom، Quake II-III، Half Life و Tomb Raider استفاده شده اند. البته تیم گرافیست وظایف دیگری هم دارد که بعدا به آنها اشاره خواهد شد. ولی حالا بهتر است به بعد فنی کار یعنی برنامه نویسی نگاهی بیاندازیم. امروزه رایج ترین محیط برنامه نویسی بازیها، Visual Studio است که ترجیحا از نسخه 6.0 آن استفاده میشود. زبان مورد استفاده برای اکثر بازیها هم C++ میباشد که خصوصیات شیء گرایی و مولفه ای آن، علاوه بر امکانات قوی برای دیباگ (اشکالزدایی) برنامه ها، این محیط را به فضایی ایده آل برای سازندگان بازی تبدیل کرده است. از دیگر ملزومات ساخت بازی در محیطهای جدید (که بر سیستم عامل ویندوز متکی هستند)، یک کتابخانه رابط میباشد که وظیفه تبادل اطلاعات بین سخت افزار و نرم افزار را بر عهده خواهد داشت.
حدود یک دهه پیش، یعنی زمانی که هنوز DOS میزبان اکثر بازیهای PC بود و از کنسولهای بازی امروزی هم خبری نبود، برنامه نویسان مجبور بودند با بسیاری از جزئیات پیچیده سخت افزاری سر و کله بزنند.
همچنین باید برای هر سیستم سخت افزاری، کد مجزایی مینوشتند و علی رغم همه این موارد، به اجرای برنامه شان بر روی همه سیستمها اطمینان کافی نداشتند. مثلا برای رسم یک دایره، میبایستی شماره وقفه رسم کننده پیکسل روی صفحه را می یافتند (که ممکن بود در هر کارت گرافیکی متفاوت باشد)، سپس پورت حافظه خروجی که اطلاعات را بر روی مانیتور ثبت میکرد پیدا مینمودند. در این فرآیند، احتمال بروز هر خطایی وجود داشت، ولی کم کم سیستمهایی مثل WinG، Glide و OpenGL وارد صحنه شدند و این مشکلات تا حدی برطرف شد. هیچ یک از این برنامه ها، محصول مستقیم مایکروسافت نبودند و به همین جهت مورد استقبال چندانی از طرف برنامه نویسان بازی قرار نگرفتند. مایکروسافت هم که نمیخواست بازار پر سود بازیها را از دست دهد، سیستم کتابخانه ای معروف خود DirectX را روانه بازار کرد و پس از مدتی کوتاه توانست DirectX (که بر مبنای مدل مولفه ای اشیاء یا تکنولوژی COM ساخته شده است) را بعنوان سیستم اصلی برنامه نویسی بازیها مطرح کند. یکی از مزایایی که DirectX نسبت به محصولاتی چون OpenGL داشت، پشتیبانی از انواع ادوات ورودی و خروجی و صوتی و تصویری علاوه بر سخت افزارهای گرافیکی بود. همچنین این محصول، مستقیما زیر نظر مایکروسافت ساخته میشد، و در نتیجه همه از آینده آن مطمئن بودند. در حال حاضر بخشی از DirectX که Direct3D نام دارد، مسئول نمایش کلیه اشیاء سه بعدی در صحنه ها میباشد. این سیستم همچنین میتواند بسیاری از امور دو بعدی – همچون نمایش تصاویر و متن – را انجام دهد. معمولا به فرآیند نمایش تصاویر دو بعدی از اجسام سه بعدی بر روی صفحه، رندر (render) گفته میشود. (این فرآیند خود شامل عملیاتهای مختلف از قبیل شکستن سطوح، پردازش داده ها و رسم میباشد)
گفتیم که مدلهای ساخته شده توسط برنامه های گرافیکی در قالب فایل ذخیره شده و در اختیار برنامه نویس قرار میگیرد. در واقع این فایلها حاوی مختصات گره های سازنده اشیاء هستند. وقتی فایلها در محیط برنامه باز شدند، در تکه های خاصی از حافظه به نام بافر گره (Vertex Buffer) قرار میگیرند و توسط دستورات ویژه ای (که در اصطلاح دستورات DrawPrimitive نامیده میشوند) رندر میگردند. به همین ترتیب کلیه اشیاء و کاراکترهای بازی در صفحه نمایش داده میشوند. سپس توسط دستورات دیگری، دوربینهای بازی تنظیم شده و کلیه اشیاء در موقعیتهای مورد نظر قرار میگرند. این کارها توسط یک سری ماتریسها پیاده سازی میشوند. در اینجا همچنین میتوان انواع نورهای صحنه (از جمله نورهای نقطه ای مثل لامپ، نورهای پروژکتوری یا نورهای موازی مثل خورشید) را به نحوی تنظیم کرد که صحنه به شکل واقعی جلوه کند. از دیگر کارهایی که باید انجام شود، عملیات بافت زنی میباشد. در اصطلاح، بافت به تصاویری گفته میشود که بر روی اشیاء سه بعدی رسم میشوند، مثلا برای ایجاد یک دیوار آجری کافی است یک مستطیل را به اندازه دیوار مورد نظر رسم کنیم؛ سپس عکسی از دیوار آجری (که میتواند بصورت یک فایل bmp یا jpeg باشد) را بر روی این مستطیل رسم میکنیم. بدین ترتیب یک دیوار آجری در صحنه نمایش داده میشود. تصویری که مورد استفاده قرار دادیم در اصطلاح بافت (texture) خوانده میشود و این فرآیند بافت زنی (texture mapping) نام دارد. با این روش میتوانید لباس و حتی صورت کاراکترها، کوه های دوردست، ابرهای آسمان، طرح یک فرش، تابلوی دیواری و خیلی چیزهای دیگر را در بازی نمایش دهید. ساخت این تصاویر هم بر عهده گرافیستهای تیم میباشد. البته این مرحله معمولا همزمان با ساخت اشیاء سه بعدی بازی انجام میگیرد.
از دیگر ویژگی های یک بازی مدرن، میتوان به وجود سایه در صحنه اشاره کرد. سایه ها به چند روش قابل پیاده سازی هستند، از جمله روش نگاشت نور (light map) که روشی سریع و در عین حال بسیار محدود میباشد. روش دیگر که به توان محاسباتی بالا نیاز دارد ولی میتواند سایه اشیاء گوناگون (حتی متحرک) را بر روی کلیه سطوح (از جمله سطوح غیرتخت) بنگارد، روش سایه حجمی (shadow volume) است.
خیلی اوقات نیاز است تا در صحنه ای از بازی، پدیده های طبیعی همچون آتشفشان، بارش برف و باران و یا آتش، نشان داده شود. میتوان این جلوه های تصویری را هم به کمک سیستمهای ذره ای (particle system) پیاده سازی کرد. برای نمایش چنین اشیائی، امروزه از دوایر کوچک و شفافی بنام point sprite و تکنیکهایی همچون تست آلفا، ترکیب رنگ (blending) و بیلبُرد (billboard) استفاده میشود. این دوایر شفاف و کوچک که میتوانند دارای یک تصویر (بعنوان بافت) هم باشند، به تنهایی توسط کارتهای گرافیکی مدرن قابل رندر هستند. البته به کمک تکنیکهای مذکور، میتوان جلوه های تصویری ویژه ای زیادی را ایجاد کرد. مثلا میتوانیم دو تصویر را در هم ترکیب نماییم یا یک شیء را در پس زمینه محو کنیم و یک شیء نازک را به شکلی شفاف کنیم که حالت یک شیشه را داشته باشد.
یکی از کارهایی که باید در ابتدای ساخت بازی به آن توجه شود، ایجاد بافرهای مورد نیاز جهت رندر بازی است. بطور کلی بافر به صفحاتی از حافظه گفته میشود که اطلاعات مربوط به پیکسلهای صفحه در آنها ذخیره میشود. بافرهای رنگی (که خود شامل دو بافر پشتی و جلویی میشوند) تصاویر رنگی را در صفحه نشان میدهند و بافر عمق (depth buffer) که گاهی بافر z هم نامیده میشود مسئول تعیین رنگ نهایی هر
پیکسل در نواحی است که اشیاء هم پوشانی میکنند. بطور خیلی ساده میتوان گفت، بافر جلویی بافری است که در هر لحظه تصاویر را در صفحه نشان میدهد، و در همین حال برنامه شما مشغول تغییر محتویات صفحه در بافر پشتی است؛ هنگامی که صحنه جدید در بافر پشتی رسم شد، جای این دو بافر عوض شده و این فرآیند تا پایان اجرای بازی ادامه خواهد داشت. یکی دیگر از بافرهایی که از آن بیشتر در ساخت جلوه های ویژه استفاده میشود، بافر استنسیل (stencil buffer) نام دارد. این بافر میتواند جهت ساخت آینه، لنزهای چشمی ویژه، سایه حجمی، ماسک تصاویر و... استفاده شود.
یکی از نکاتی که باید در حین ساخت مدلهای یک بازی به آن توجه شود، تعداد گره ها و چند ضلعی های سازنده اشیاء (معمولا مثلث) میباشد. بر اساس یک قاعده کلی، هر چه گره های یک شیء بیشتر باشد، رندر کردن آن زمان بیشتری را طلب خواهد کرد. در واقع همواره باید نوعی تعادل بین کیفیت صحنه ها و سرعت اجرای بازی وجود داشته باشد. به همین منظور، کارتهای گرافیکی مدرن، از قابلیتهای زیادی برای تعیین خودکار دقت و وضوح اشیاء صحنه بهره مند میباشند. یعنی بر حسب فاصله شیء تا بیننده دقت آن (یعنی میزان گره های سازنده) را کم و زیاد میکنند. چنین اصلی در مورد بافتها هم صدق میکند. یعنی غالبا بافتهای کوچکتر سریعتر رسم میشوند. ولی نباید برای پوشاندن یک سطح از تعداد زیادی بافتهای خیلی کوچک استفاده نمود. معمولا تصاویر با اندازه 256x256 پیکسل بهترین گزینه برای بافت زنی سطوح و اشیاء میباشند. از تکنیکهای رایج برای تنظیم وضوح بافتها، روش mipmap میباشد. شما چند تصویر از بافت مورد نظر را با دقتهای مختلف (مثلا با اندازه های 512x512، 256x256، 128x128 و 64x64) به برنامه میدهید. سپس با صادر کردن دستوراتی، برنامه بر حسب فاصله بیننده تا شیئی که بافت مورد نظر را دارد، یکی از تصاویر را برای اعمال بر روی سطح استفاده میکند. (هر چه فاصله بیشتر باشد میتوان از تصویر کوچکتری بهره برد)
از جمله دیگر تکنیکهای ویژه ای که میتوانند باعث زیباتر شدن یک بازی شوند، میتوان به مه، نورهای رنگی، بافتهای حجمی، منحنی ها، زمینهای ناهموار (که در اصطلاح terrain نامیده میشوند) اشاره کرد. این موارد اگرچه ممکن است در طول یک بازی تنها در یک صحنه استفاده شوند، ولی از آنجاییکه میتوانند میزان واقع گرایی صحنه ها را بالا ببرند، از اهمیت بالایی برخوردار هستند.
در ابتدای بحث، به GPUها اشاره کردیم، بهتر است بدانید که زبان برنامه نویسی این پردازنده های گرافیکی، زبان سایه زنی (shader) میباشد. این روزها شرکتهای بزرگی چون nVidia، ATI و Microsoft هر یک کامپایلری مجزا را برای برنامه نویسی پردازنده های گرافیکی ابداع کرده اند. Render Monkey، CG و HLSL محصول این رقابت شدید میباشند. از این پس با عرضه سایه زنهای گره، پیکسل، بافت و حتی نور هر لحظه باید منتظر شکسته شدن مرزهای گرافیک سه بعدی باشیم.
البته مبحث گرافیک یک بازی سه بعدی بسیار مفصلتر از این میباشد، ولی بهتر است اندکی هم به سایر مولفه های بازی بپردازیم. گفتیم که DirectX قابلیت ساخت یک بازی کامل را دارد، پس باید بتواند صوت و موزیک هم پخش کند. DirectSound و DirectMusic دو بخش کوچک این مجموعه بزرگ هستند که به ترتیب مسئول پخش جلوه های صوتی و موزیک در یک بازی میباشند. شما میتوانید توسط این بخشها، انواع زیادی از فایلهای صوتی را با جلوه های مورد نظر در بازی پخش کنید. مثلا فایلهای wav، mp3، dat، voc، mp4، mid، jif از فرمتهای پر استفاده در بازیها میباشند که همگی بطور مستقیم توسط DirectX قابل پخش هستند. شما میتوانید انواع جلوه های صوتی را هم بر روی صداهای خود اعمال کنید، مثلا فرکانس اصوات را تغییر دهید، آنها را به شکل غیریکنواخت بین بلندگوها تقسیم کنید، بلندی و سرعت پخش را کم و زیاد کنید و... همچنین میتوانید صداهای سه بعدی ایجاد کنید. یعنی میتوانید یک نقطه را در فضای سه بعدی به عنوان منبع صدا معرفی کرده و حتی موقعیت و جهت گیری شنونده را هم در فضای سه بعدی مشخص کنید. بدین ترتیب انواع پدیده های فیزیکی همچون دوپلر، اکو، فرکانس دوبل و غیره بر روی صداها قابل اعمال میباشند.
همچنین قسمتی بعنوان DirectShow وجود دارد که توسط آن میتوانید فرمت دلخواه خود را ایجاد کرده و در آن انواع اصوات و موزیکها یا فیلمها را ذخیره کنید.
DirectInput هم بخش کوچکی است که به کمک آن میتوانید ورودی را به اشکال گوناگون از انواع ادوات ورودی دریافت کنید. عدم دخالت ویندوز در فرآیند دریافت ورودی در یک بازی همواره از آرزوهای برنامه نویسان بوده است، و اینک بواسطه این کتابخانه کوچک به همگان عرضه شده است. بطور کلی در یک بازی میتوان به دو شکل ورودی را از کاربر دریافت کرد، یک راه استفاده از اطلاعاتی است که در هر لحظه وارد میشوند؛ این روش حالت بلادرنگ نام دارد. روش دیگر استفاده از یک بافر کوچک میباشد که به اندازه مشخصی اطلاعات ورودی را در خود ذخیره کرده و در هنگام نیاز آنها را برای پردازش به برنامه ارسال میکند. همچنین با استفاده از تکنیک جدیدی بنام Action Mapping (نگاشت وقایع) میتوانید در هنگام اجرای برنامه، بهترین وسیله ورودی و سپس بهترین دکمه ها و جهتها را برای انجام بازی بطور خودکار انتخاب
کنید. بدین ترتیب بازی شما میتواند از ادوات ورودی که چندین سال بعد عرضه خواهند شد هم استفاده کند. در ضمن میتوانید خروجی های متناسب با حالت بازی را هم برای ادواتی همچون Feedback ایجاد کنید. مثلا در حین بازی رانندگی، وقتی ماشین شما تصادف میکند، این وسیله ضربه شدیدی را به بدن شما وارد می آورد.
از جمله مراحلی که وقت زیادی را به خود اختصاص خواهد داد، فرآیند اشکالزدایی یک برنامه میباشد؛ معمولا در این مرحله سعی میشود کلیه اشکالات بازی نمایان گردد، هر چند که هیچ بازی نمیتواند ادعا کند از هر گونه اشکالی تهی میباشد.
در این فرصت کوتاه سعی کردیم تا در مورد اجزاء سازنده یک بازی، و کتابخانه DirectX بحث کنیم. مبحث بازیها از پیچیده ترین بخشهای صنعت نرم افزار میباشد؛ و امیدواریم که روزی جوانان کشور ما هم بتوانند فرهنگ غنی این مرز و بوم را در قالب بازی به همه عرضه کنند.
