post

برنامه نویسی برای موتور بازی – قسمت اول- امیرحسین فصیحی و یاسر ژیان

اساتید : امیرحسین فصیحی و  یاسر ژیان

تدوین گزارش : مریم ثابت قدم

برنامه نویسی برای موتور بازی – قسمت اول- امیرحسین فصیحی و یاسر ژیان

حقوق این گزارش برای سایت انیمیشن دیتا محفوظ است

 

Tools > Version Control
Version control ، یک سری تغییرات را روی کد ذخیره می کند. این در زمانی که خواهان یک نسخه stable از بازی باشیم ؛ مورد استفاده قرار می گیرد. اما از آنجا که یک سری تغییرات اعمال شده از حالت stable خارج می شود ؛ لذا برای دسترسی به realese از version control استفاده می کنیم.
در این مبحث ، از قابلیت Branching صحبت می شود که یکی از قابلیت های نرم افزار Version control بشمار می آید ؛ در این حالت وقتی روی بخشی از نرم افزار کار می کنید ؛ بدون هیچ تغییری روی اصل نرم افزار ، قادر به ایجاد یک شاخه یا یک branch از آن هستید.
ولی دلیل اصلی برای استفاده از version control ، در حقیقت write شدن تغییرات بروی این نرم افزار و امکان برنامه نویسی گروهی است. بدون شک ، کار همزمان چندین برنامه نویس روی یک فایل بطور دستی امکان پذیر نیست. در نرم افزار Version Control یک data base مرکزی وجود ندارد که همه برنامه نویسان روی آن کار کرده و اصطلاحاً کدهای خود را check in و یا  check out کنند.
صبح وقتی برنامه نویس بر سر کار حاضر می شود ؛ تغییرات کد را می گیرد و برای خود یک version local تشکیل می دهد و تا عصر چندین بار connect می شود تا تغییرات وارد data base شوند.
در ساخت بازی رایانه ای ، به دلیل وجود گروهی از افراد متخصص نظیر برنامه نویسان و آرتیست ها ، مدل سازان و غیره ، اطلاعات به طور مداوم در حال افزوده شدن است و لذا بدون وجود یک مکانیسم مشخص نظیر version control ، نمی توان یک پروژه را مدیریت کرد.

اقسام Version control:

•DCVS
decentralized and CVS-based
CVS is a version control system, an important component of Source Configuration Management (SCM). Using it, you can record the history of sources files, and documents. It fills a similar role to the free software RCS, PRCS, and Aegis packages.

 

•SVN

If you’re a Windows user, Tortoise SVN is a great file browser for viewing, editing and modifying your Subversion code base
• Mercurial

written in Python as an Open Source replacement to BitKeeper; decentralized and aims to be fast, lightweight, portable, and easy to use
The name “mercurial” is an adjective that means “Relating to or having characteristics (eloquence, swiftness, cleverness) attributed to the god Mercury.”

•Git

written in a collection of Perl, C, and various shell scripts, designed by Linus Torvalds based on the needs of the Linux kernel project; decentralized , and aims to be fast, flexible, and robust
Git is the new fast-rising star of version control systems.

• Perforce

Perforce is a commercial, proprietary, centralized revision control system developed by Perforce Software, Inc.
Perforce is a client/server system. The server manages a central database and a master repository of file versions. Users work on files in local client workspaces, and submit changed files together in changelists. Communication from client to the server is via any of a number of clients (user interfaces) (see below). Client and server communicate via TCP/IP using a proprietary RPC and streaming protocol.

• Alienbrain

Alienbrain is a digital asset management system for artists in the entertainment industry. It combines everything studios need to securely store, version, manage and share any kind of file, with an intuitive user interface that lets artists work visually.
به Mercurial اصطلاحاً distributed version control system نیز اطلاق می شود که در اینجا data لزوماً در یک جای مرکزی وجود ندارد و اندکی معماری آن متفاوت است.· جدیداً از Mercurial در پروژه های آنلاین نیز استفاده می شود .
نرم افزار Perforce در صنعت بازی سازی بسیار مورد استفاده قرار می گیرد ؛ زیرا هم برای آرت و هم برای کد کاربردی است. متاسفانه در ایران این نرم افزار نیست و ورژن کرک آن نیز در دسترس عموم قرار ندارد. این در حالی است که خیلی از شرکت های مطرح بازی سازی می خواهند شما از طریق perforce به سرورهایشان متصل شوید تا به اطلاعات سرور دسترسی یابید.
در یک پروژه بازی ، Source code ها مبحث جدی بشمار می آیند . سئوالی که در اینجا مطرح می شود این است که آیا از Version control می توان برای همه اینها استفاده کرد؟
بطور مثال CCVS و SVN برای Source code و Text عالی هستند ولی برای Binary چندان جالب نیست.
نرم افزاری که برای آرتیست ها تولید شده ، Alienbrain نام دارد که سیستمی Assert management است و برای فایل های art که در داخل مایا و یا استودیو مکس وجود دارند ؛ Integrate می شود.
Aleinbrain دارای هیچ فیچری نیست و بسیار ساده است. البته Perforce هم می تواند برای هر دو گروه برنامه نویسان و آرتیست ها مناسب باشد.
خیلی از Art ها دارای لایه بندی است ؛ زیرا از یک تکسچر شروع می شود که در واقع یک فایل فتوشاپ با فرمت .psd است . این فرمت هرگز مورد نیاز هیچ برنامه نویس یا انجینی به حالت real time نیست. لذا Source art نیازمند یک برنامه نویس نیست.
هنرمندان ما در پروژه گرشاسب نیز ار Alienbrain بطور مجزا استفاده کردند و برنامه نویس مان از SVN بهره برد. Art هایی که قرار بود نهایی شود ؛ در SVN قرار می گرفت . یعنی پس از export فرمت mesh. که OGRE از آن استفاده می کند ؛ وارد SVN می شد.
لذا وجود یک سیستم Asset management برای ساخت بازی بسیار حیاتی است.

 

Tools > Profiler
نرم افزارهایی هستند که اجازه تست Performance را می دهند. زیرا فاکتورهایی نظیر سرعت اجراء و حافظه ( مقدار مصرف منابع ) در performance بسیار مهم است. این نرم افزارها به شما اجازه می دهند که ببینید چه مدت زمان برای function ها صرف شده ؛ چند بار صدا زده شده و چه قدر حافظه مورد استفاده قرار گرفته است .
یکی از این نرم افزارها ، Intel Vtune است. وقتی برنامه نویسی گرافیکی جدی برای بازی خود انجام می دهید ؛ GPU نیز به اندازه CPU و Motherbord از اهمیت زیادی برخوردار می شود. کارت گرافیک نیز حافظه دارد و لذا یک سری ابزار وجود دارد تا به کارت گرافیکی شما کمک کند .ابزارهایی نظیر :
• Nvida PerfHUD ( رایگان )
NVIDIA PerfHUD is a powerful real-time performance analysis tool for Direct3D applications. PerfHUD is widely used by the world’s best game developers and was a 2007 Game Developer Magazine Frontline Award Finalist.

ویدئوی آموزشی  کاربرد PerfHUD6 در Texture Visualization

 

•ATI PerfStudio ( رایگان )

Microsoft PIX ( رایگان ) و مفید برای CPU و GPU

Intel GPA ( رایگان ) – وقتی از شیدرها استفاده می کنید ؛ اتفاقاتی که روی GPU و کارت گرافیک را نشان می دهد.
Tools > Bug Tracker
به معنی رد یابی باگ ها است.یکی از نمونه های آن Bugzilla است .
با نوشتن هر خط ، به تعداد باگ ها نیز افزوده می شود. در این صورت یا شما متوجه باگ ها می شوید و یا افرادی نظیر game designer و artist ها متوجه آن می شوند. برای اصلاح این قبیل باگ ها ، مسلماً نیازی نیست که به سراغ شما بیایند ؛ بلکه باید یک سیستم مدیریتی برای این باگ ها وجود باشد که مسلماً ابزار پیچیده ای هم نیست. در واقع یک data base است که معمولاً دارای چنین ساختاری است :

Bug
Number         Title          Description           Assigned       Date      State         Version

نهایتاً یک سیستم مدیریت و بانک اطلاعاتی از باگ ها فراهم می آید. فرضاً مشخص می کند که چه باگ هایی باز است ؟ چه باگ هایی نیاز به یک سری تغییرات دارند و اگر برنامه نویس ، اطلاعات بیشتری در مورد باگ بخواهد ؛ می تواند همانجا Status را تغییر دهد و آن را به tester ارجاع داده و حتی می تواند Screen shot بخواهد . لذا سیستمی ساده و در عین حال بسیار مهم است.
اقسام آن عبارتند از :

Mantis

MantisBT is a free popular web-based bugtracking system (feature list). It is written in the PHP scripting language and works with MySQL, MS SQL, and PostgreSQL databases and a webserver

Jira

JIRA provides issue tracking and project tracking for software development teams to improve code quality and the speed of development

Bugzilla

Bugzilla is server software designed to help you manage software development.Optimized database structure for increased performance and scalability.Advanced query tool that can remember your searches

 

Tools > Task Management

مدیریت حافظه ، در واقع مدیریت وظایف در بازی و ثبت آن ها است. اگر باگ موجود باشد ؛ آن را در bug tracker ثبت کرده و اگر درخواست تست و نظایر این باشد ؛ آن را در task ثبت می کند. نهایتاً ارتباط میان نفرات تیم در یک جا ثبت می شود. این ابزار با ثبت این قبیل وظایف ، کمک می کند تا همه چیز قابل پیگیری بوده و انواع گزارش ها را از روی آن یافت.
از جمله این ابزار ، Redmine است· که مشابه سیستم های اتوماسیون اداری عمل می کند.

این درحالی است که برای تیم های کوچک ، رابطه میان کاربر و اینگونه ابزار بسیار عجیب است. هم از آن استفاده می کنید· و دوستش دارید و هم از آن متنفر هستید ؛ زیرا مستلزم فرایندی است که ساعت ها وقت شما را به خود اختصاص می دهد تا یک باگ را پیگیری کنید.
برنامه نویسان تا حدی می توانند اینگونه پیچیدگی ها را بپذیرند و حتی از CCVS هم استفاده نکنند. ولی مسلماً نمی توان از یک game designer که حتی از visual studio استفاده نمی کند ؛ انتظار داشت که با این ابزار کار کند. البته نکته ای که باید حائز اهمیت قرار داد این است که ابزارهای خیلی بزرگ هم نمی توانند انعطاف پذیر باشند و حتی در صورت وجود این انعطاف ها ، چه بسا پیچیده تر هم بشوند. این در حالی است که آموزش آن نیز بسیار دشوار· است. ابزارهای غیر اپن سورسی نظیر ابزارهای مایکروسافت ، از· جمله ابزارهایی هستند که در صورت هرگونه تغییر ، امکان کار با ابزار دیگری فراهم نیست.
لذا تا جایی که امکان پذیر باشد ؛ این ابزارها باید سبک باشند و نباید فرایند را به شما دیکته کنند. بلکه این شما هستید که فرایند را باید پیاده سازی کنید. و این انعطاف پذیری را به حدی کوچک کنید که برای یک task خاص باشد ؛ نه اینکه چند وظیفه را به طور ضعیف پشتیبانی کند. به طور مثال ، Redmine ، سه یا چهار کوچک را به خوبی انجام می دهد.
Memory و ( Leak Detector)
اصولاً حافظه ای که دیگر به آن pointer اختصاص نمی یابد ؛ Leak گفته می شود. زیرا حافظه ای است که دیگر نمی توان به درستی از آن استفاده کرد. ایچنین بعنوان یک باگ شناخته می شود.
Memory leak بحث جدی بشمار می آید . زیرا بدین معنا است که کد شما دارای باگ بوده و این باگ در جایی است که شما از آن بی خبر هستید.
یک سری ابزارهای خیلی خوب برای memory leak detection وجود دارد و البته برنامه نویسان نیز برای تیم خود ، یک چنین برنامه هایی را بطور مجزا develop می کنند. البته نوشتن آن ، خیلی ساده و در عین حال بسیار کاربردی است. خیلی از profiler ها ، دارای حجم زیادی است. کتابخانه ای که شما استفاده می کنید ؛ عملکرد leak را برعهده دارد . بطور مثال در پروژه گرشاسب ، ما از فلش استفاده کردیم که در همه حال در پی memory leak است .

Automated Testing
از جنبه های مختلفی برخوردار است. در حالی که unit test را build· می کنید ؛ یک سری فایل های اجرایی که در طول زمان با تغییر و اجرای کد،· اجراء می شوند. فرضاً اگر کتابخانه ریاضی نوشته اید سعی می کند کد را تست کند، و جواب ها را با پاسخ هایی که از قبل می دانستید ؛ چک کند.
بازی ها ، application visual هستند. برخی از استودیو ها ، کار جدی تری روی آن می کنند. به طور مثال ، واسط گرافیکی UI خود را بطور اتوماتیک چک می کنند. برخی نیز screen shot های مختلفی از زوایای متفاوت گرفته و در نهایت پیکسل به پیکسل ، آن ها را مورد بررسی قرار می دهند. زیرا اندکی تفاوت، نشاندهنده این مطلب است که فرضاً رندرینگ شما تغییر یافته و یا اینکه کد شما دارای یک باگ است.

Continous Build System
در پروژه های کوچک ، به طور معمول کد های خود را می نویسید و build می کنید . ده ثانیه طول می کشد و سپس فایل exe به شما داده و اینجا اتمام کار است.
در پروژه های بزرگ ، پنج دقیقه این فرایند به طول می کشد. در یک بازی ، علاوه بر آن که باید کد را build کنید ؛ باید تکسچر را compress کنید و یا resource ها را سرجای خود بچینید ؛ یا باید نسخه نهایی را بیاورید ، فایل های level را به binary تبدیل کنید و بسیاری کارهای دیگر…

fable2_guide_1231374631

مشاهده تریلر بازی fable ii

 

بطور مثال ، FABLE II که بازی معروف برای کنسول ایکس باکس است ؛ دو هفته را به build اختصاص داد. پس build کردن بازی ، یک مورد ساده و از پیش افتاده ای نیست. خیلی از استودیو ها حتی برای نرم افزارهای عادی نیز چنین می کنند. آن ها از یک سری رایانه برخوردارند که کد را check out کرده و آن build می کند و نیم ساعت تا یک روز کامل به build بازی اختصاص می یابد .
لذا فرایند build آنچنان کار جدی و زمان بری بشمار می آید که حتی developer هم قادر نیست آن را بر روی رایانه خودش اجراء کند . زیرا فرضاً برای دو خط کد ، دو ساعت زمان صرف build آن می شود.

پایان قسمت اول سمینار آموزشی

©·Copyright 2009 – 2011/ Animationdata.org & Partners