پروژه بازی Deep in the Darkness

Mahdi_Rashed

Well-Known Member
Deep in the Darkness یک پروژه شخصی هست که میخوام به عنوان اصلیترین منبع برای تست موتور طراحی بازی گروه خودم یعنی Main Core Game Engine برای نسخه 1.2 که در پایان تابستان سال 1390 منتشر میشه طراحی کنم. اول قرار بود تا این بازی به صورت Full Real-Time Strategic طراحی بشه ولی برای این که همه خصوصیات موتور در یک تست واحد وجود داشته باشه سبک بازی رو به Less Real-Time Strategic یا بازیهایی نسبتاً شبیه RPG یا Role-playing game طراحی کنیم که کاربر در استفاده در بازی محدودیت هایی رو داشته باشه که به دو دلیل برای من مهم هست . اول این که خوب در دنیا واقعی وجود ارتش چنیدن و چندصد هزار تایی از یک وسیله جنگی غیر ممکنه بنابراین شرط محدودیت باعث میشه که کاربر نبوته هر چقدر که دوست داشت نیرو تولید کنه و دویم دلیل محدودیت رایانه های نسل جاری هست. با اضافه شدن هر شی 3بعدی در محیط رئال تایم یک درصدی به پردازش CPU اضافه میشه ومقداری هم از فضای قابل استفاده ی RAM کاسته میشه و وقتی قرار باشه همه خصوصیات گرافیکی Main Core یا کلاً خصوصیات High resolution در بازیهای استراتژیک اعمال بشه این حجم پردازش چنیدن برابر میشه ولی با اعمال محدودیت از مشکلاتی شبیه کاهش FPS یا سرعت بر حسب فریم در بازی و اجرا نشدن درست کد های گرافیکی و سیستمی جلو گیری بشه .


این لوگوی اصلی و رسمی بازی Deep in the Darkness هست.


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


این هم که لوگوی پروژه یا بهتر بگم مهمترین پروژه من یعنی موتور طراحی بازی Main Core و استودیوی طراحی Main Core Technology هست که با همکاری چند نفر از دوستان که خیلی در راه طراحی این موتور به من کمک کردن ایجاد شد و تا حالا خیلی از پروژه ی خودمون راضی بودیم. :green:

در پستهای آینده درباره خصوصیات و داستان بازی صحبت خواهم کرد .

موفق باشید
 

AMIR_REZAs

New Member
سلام
کارتون واقعا درسته ...:oops:
من در ضمینه ی انجین های آماده تجربه ی تقریبا زیادی دارم ، اگر خواستید میتونم تو ساخت بازی کمکتون کنم....
 

Mahdi_Rashed

Well-Known Member
من در ضمینه ی انجین های آماده تجربه ی تقریبا زیادی دارم ، اگر خواستید میتونم تو ساخت بازی کمکتون کنم

با تشکر از شما ولی پروژه Main Core مال خودمون هست و چون نسخه 1.2 اون در مرحله طراحی هست نمیتونیم از افراد خارج از تیم خودمون استفاده کنیم. البته این کار رو به صورت شخصی و تنهایی طراحی میکنم ولی خوب کار روی پروژه موتور طراحی بازیمون به صورت تیمی هست.
 

Mahdi_Rashed

Well-Known Member
خصوصیات بازی Deep in the Darkness به سه دسته تقسیم میشن. خصوصیات درون بازی و خصویات گرافیکی و خصوصیات کلی بازی. منظور از خصوصیات بازی، روند کلی بازی و Gameplay بازی هست. خصوصیات گرافیکی هم که معلومه چی هست و خصوصیات کلی بازی هم شامل سیستم های به وجود آورنده داده های تصادفی برای طراحی مراحل بازی، سیستم هوش مصنوعی و مواردی از این قبیل هست.

الان تقریباً حدود 1 ماه هست که دارم روی یک نسخه معمولی از موتور طراحی بازی خودم یعنی Main Core کار میکنم تا هسته موتور رو برای استفاده از کل حجم پردازشی گرافیک برای بازی استراتژی آماده کنم. کلاً میشه گفت:

استفاده از کل حجم پردازشی GPU = بازی استراتژی با بالا ترین گرافیک ممکن ( تقریباً در حد بازیهای اول یا سوم شخص )

شاید فکر کنید که داشتن گرافیک بالا در حد یک بازی اول یا سوم شخص برای بازی ها استراتژیک چیز غیر ممکنی باشه ولی با کار دقیق روی محدودیتها در بازی و برنامه نویسی دوباره هسته با قواعد دقیق System Optimization میشه محیط یک بازی رئال-تایم استراتژیک رو به محیطی شبیه بازیهای اول یا سوم شخص یعنی گرافیک بالا و نور پردازی و رندر دقیق تبدیل کرد. یکی از قواعد محدود سازی سیستم های گرافیک یا بهتر بخوام بگم یکی از اصول و تئوری های گرافیک، تئوری همکاری موقتی یا Temporary Working یکی از تئوری های گرافیک هست که از نسخه 10 DirectX در سال 2009 ارائه شد. (Advanced DirectX 10 Programming - صفحه 140 و خورده ای). این تئوری همنطور که از معنی فارسی اون پیداست از اشیا خواهش میکنه که همکاری موقتی داشته باشن و وقتی که نیاز به نمایش اونها نیست کلاً از صفحه بازی حذف بشن. شاید بخواین بگین که فرق این تئوری با کلاس برنامه نویسی culling در طراحی بازی چیه. خوب دو دقه صبر کنید تا بگم. کلاس Culling یکی از قواعد Optimization در برنامه نویسی بازی ها و سیستم های گرایم رئال تایم هست که میتونه به کل یک شی 3بعدی یا به face های اون به صورت جداگانه اعمال بشه و وقتی که دید بازیکن در صحنه بازی فاصله زیادی نسبت به شی دارای کلاس Culling باشه، کلاس توابع حذف موقت رو اعمال میکنن. حالا یا روی کل شی یا روی Face های دارای کلاس. این کلاس در DirectX 9 یکی از مهم ترین کلاسهای بحث فشرده سازی و مدیریت حجم پردازش یک بازی به حساب میاد ولی مشکلاتی هم داره . در مراحلی که پیچیدگی طراحی زیاد هست حتی حذف موقت و نمایش دادن دوباره اون حجم پردازشی زیادی رو اشغال میکنه و باعث کاهش سرعت بازی میشه. همچنین این کلاس به Face های یک شی دارای Polygon های زیاد اعمال میشد ولی اجرا نمیشد و علت اون Overload شدن هسته پردازشی زبان برنامه نویسی در بازیها بود که به دلیل بالا رفتن حجم پردازش از اجرای اون جلوگیری میکرد. تئوری همکاری موقت یا به صورت Syntax اون رو به صورت tempwork در برنامه نویسی استفاده میکنن (گاهی هم به صورت tempobj) برای ضعف سیستم های گرافیک در توابع Culling و کلاسهای متعدد با کاربر Cull ارائه شد. فرق tempwork با culling اینجا بود که در تئوری و تابع tempwork به جای حذف یک آبجکت ( شامل همه خصوصیات ) از محیط بازی که دور از دید بازیکن یا پشت سر بازیکن قرار داره، اون آبجکت رو به صورت Temp نگه داری میکنه ولی مقدار متغیر render اون رو 0 میکنه تا سیستم رندر اون رو مجای به نمایش در محیط بازی نشناسه . وقتی یک داده به صورت temp در جایی ذخیره میشه حجم پردازش برای حذف و نمایش دوباره اون بسیار بسیار کمتر از تابع Cull هست. البته این خصوصیت میتونه از طریق Option های بازی فعال یا غیر فعال بشه. به همین دلیل هست که موقع نصب یک بازی که از DirectX 10 و 11 پشتیبانی میکنه، به شما میگه که بازی (مثلاً) 10 گیگابایت فضای ثابت و دو گیگابایت فضای دینامیک نیاز داره. این دو گیگابایت فضای دینامیک همون temp مربوط به کلاس و تئوری همکاری موقت یا temporary working هست. معمولاً این فضای دینامیک از قبل محاسبه میشه ولی اگر باز هم حالتی پیش اومد که این فضای دینامیک پر شد یا مثلاً حافظه شما بیشتر از حد بود، سیستم DirectX و کلاس tempwork به صورت خودکار اشیای سنگین تر رو از طریق temp در بازی حذف و نمایش میده و اشیای سبک تر رو از تکنیک کلاس Culling حذف و نمایش میده.​
 

Mahdi_Rashed

Well-Known Member
مهمترین ویژگیهای گرافیکی بازی:




  1. نورپردازی کاملاً دینامیک و پیشرفته + Real-Time Global illumination
  2. برخی از جلوه های ویژه محیطی شبیه Bloom و Glow و Lens Effect
  3. سایه زنی دینامیک Soft و Hard
  4. سیستمهای Timing برای شبیه سازی روز و شب و زوایای تابش نور خورشید
  5. سیستمهای شبیه سازی اب و هوا و سیستم دینامیک شبیه سازی باد
  6. سیستم رندر پیشرفته متریالها + تکنیکهای HLSL و Global Language برای متریال
  7. سیستم Animated Level of Detail و تئوری Temporary Working
  8. تکنیک های Morph و Animated Morph
  9. توابع شبیه سازی عناصر طبیعیت + ساخت داده های تصادفی ( درخت، گیاه، کوه و دشت و ... )
  10. شبیه سازی چمن از طریق متریال مخصوص DirectX 10 (متریال Real-Time Fur Rendering)
  11. سیستم پیشرفته رندر سیستم های ذره ای + سایه زنی دینامیک سیستم ذره ای
  12. تکنیکهای Deferred Rendering و سیستم Rapid Fire Engine + متریال ( سیستم پیشفرض DirectX 10 و کلاس های اون )
  13. چندتا خصوصیت دیگه که مهم نیست
 
آخرین ویرایش:

Mahdi_Rashed

Well-Known Member
مهم ترین ویژگی های کلی بازی:



  1. دینامیک کامل در محیط بازی برای همه عناصر ( اشیا، سیستم ذره ای، کاراکتر ها )
  2. سیستم متغیر دینامیکی ( برای شبیه سازی خرابی های و آسیب ها به صورت دینامیکی ( فرو ریختن دیوار و یا آسیب به وسایل )
  3. سیستم کامل Rag-Doll برای کاراکترها در بازی
  4. سیستم هوش مصنوعی مخصوص Main Core که کار گروه خودمون هست ( Mass AI calculation, Goal Driven, Crowd و چند نمونه دیگه )
  5. تکنیک هوش مصنوعی Web AI Calculation برای جلوگیری از انجام اعمال تکراری توسط کاراکتر و عناصر تبعیت کننده از سیستم هوش مصنوعی
  6. تکنیک Sub AI برای شبیه سازی منطق و کلاسهای Logic برای طبیعی تر شدن اعمال انجام شده توسط تبعیت کننده های سیستم هوش مصنوعی
  7. سیستم ساخت مناظر طبیعی به صورت تصادفی ( ساخت کوه و صخره و ... با روش lindermayer و روشهای Displacement map )
  8. تکنیکهای rigid body و soft body برای دینامیک بهتر
  9. تکنیک on surface dynamic از سیستم DirectX 10 برای دینامیک بهتر آب ( حرکت کشتی ها روی آب و یا برخورد گلوله ها در آب )
  10. چند نمونه دیگه که مهم نیستن
 

Mahdi_Rashed

Well-Known Member
داستان بازی:

توجه داشته باشید که گفتن داستان بازی به صورت کامل و جزییات ممکن نیست

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

دوره اول: اوج قدرت خورشید
دوره ای که باید با گروه خاص بجنگید و از شهر خودتون ( که از شهرهای خیلی بزرگ روی زمین هست ) دفاع کنید. در همین دوره هست که نوری که از خورشید به زمین میرسه به تدریج کم میشه و در آخرین مرحله این دوره کلاً خورشید خاموش میشه.
دوره دوم: خاموشی سراسری، نابودی سراسری
موجودات فضایی که باعث تاریک شدن نور خورشید شدن به زمین حمله میکنن و در عین حال وضعیت شهرها هم خوب نیست. در نبود انرژی برق و درنیتجه نبود دارو و غذا مردم هرج و مرج میکنن و بین شهرها و کشورها جنگ اتفاق میفته. شما در این دوره اول باید وضعیت شهر خودتون رو با تقسیم درست منابع باقی مونده به حالت اول برگردونید و در حمله دشمن جلوگیری کنید و بعد یک عده رو برای مذاکره به پایگاه گروه ذکر شده ( که به دلیل داشتن منابع فسیلی ) بفرستید تا برای نابود کردن بیگانگان متحد بشید. قابل ذکر هست چون انرژی برق حاصل از خورشید دیگه وجود نداره هیچ وسیله نقلیه جنگی هم کار نمیکنه و حالا این گروه قوی ترین ارتش رو داره چون به جای برق در وسایل نقلیه از بنزین و سوخت فسیلی استفاده میکنه.
دوره سوم: بازگشت به تکنولوژیهای گذشته
در این دوره بسیاری از شهرها و کشورهای روی زمین به دلیل حمله بیگانگان یا جنگها داخلی از بین رفته. شما باید با استفاده از نیروهای خودتون که دیگه دارای وسایل جنگی هم هستید از مرزهای شهر خودتون دفاع کنید و از شهر های اطرافتون که هنوز نابود نشدن دفاع کنید. به دنبال منابع غذایی و سوختی برید و مناطقی که بیگانگان حضور دارند رو نابود و بازپس گیری کیند.
دوره چهارم: افشاء
در پی پیدا کردن مردم در شهرهای مختلف، در یکی از شهرهای بزرگ به مدارکی میرسید که اطلاعات بسیار مهمی رو داره و از شناسایی سفینه های فضایی و فعالیتهای غیر طبیعی روی زمین خبر میده و اطلاعات بسیار مهمی در مورد سلاحها و ادوات جنگی بیگانگان در اختیار شما قرار میگیره.
دوره پنجم: انقلاب صنعتی
در این دوره به تکنولوژی هایی دست پیدا میکنید که باعث میشه تا سلاحها و منابع سوختی جدیدی رو اختراع و کشف کنید و برای حمله نهایی و نابودی کامل بیگانگان فضایی آماده بشید. همچنین با استفاده از اطلاعات به دست اومده از دوره چهارم میتونید سلاح بزرگی رو بسازید تا دوباره خورشید رو روشن کنه.
دوره ششم: اخراج بیگانگان
همه چیز برای یک حمله اساسی به بیگانگان آماده هست ولی اول باید استراتژی درستی رو اتخاب کنید و بعد با کمک متحدانتون که در دوره های قبل با اونها متحد شدین بیگانگان رو اخراج کنید و بازی رو به پایان برسونید.

داستان این بازی که خیلی ساده و پیش پا افتاده هست توسط من، امیر تهرانی ( دوستم ) و جواد ( یکی دیگه از دوستان ) نوشته شده.
 

Mahdi_Rashed

Well-Known Member
تقریباً از 3 روز پیش در تلاش حل همه مشکلات نسخه آزمایشی 1.2 موتور طراحی بازی بودیم که خوشبختانه حدود 2 ساعت پیش با موفقیت انجام شد و نسخه آزمایشی 1.2 موتور طراحی بازی Main Core با موفقیت به ساختار هسته و سیستمهای نسخه 1.1.4.00 متصل شد . البته این نسخه آزمایشی هست و نسخه اصلی در September سال 2011 منتشر میشه. توی این دوره دو سه روزه من هم هسته موتور رو مطابق همون چیزی که خودم لازم داشتم تا باهاش یک بازی با مشخصات ذکر شده بسازم تغییر دادم. و از یکی دو روز آینده شروع به طراحی سیستم Terrain generator و Texture placement برای صفحه و فضای بازی میکنم. اگه این دو مورد که الان گفتم خوب از آب در بیاد در نسخه 1.2 هم به صورت رسمی قرار خواهد گرفت. حالا چطوره یکم از موتور خودم تعریف کنم ؟ :spam::snap:

13029855540.png


عکسی که میبینید در طی یک هفته گذشته مدام به صورت کد در command console سرور موتور Main Core وارد شد. یک سیستم کد خوانی ساده که توسط یکی از دوستان به صورت یک پنل کنترل سرور از طریق کد نویسی طراحی شده و همون اوایل که سرور خوریداری شد روی سرور پیاده شد. این کنترل پنل کلید دسترسی به کلیه فایلها و عناصری هست که روی سیستم عامل سرور (ویندوز) قرار داره. شامل کلیه فایلهای کامپایل شده و سورسهای موتور Main Core و سیستم مدیریت کاربری موتور که خودش شامل اطلاعات کاربرای فعلی و فایلهای log سرور و کاربرا هست. این سیستم تماماً توسط خودمون طراحی شده و بر پایه برنامه نویسی های Sharp Coding ( من نمیدونم چیه ) و زبان C++ نوشته شده. سیستم امنیتی اون هم از یکی از قوی ترین کامپوننتهای متن باز امنیت نرم افزاری استفاده شده که نمیتونم اسمشو بگم چون نمیدونم اسمش چیه فقط میدونم توی سورس فورج برای دانلود هست و اگه پیداش کردین دانلود کنید و در پروژه های خودتون استفاده کنید. ( قسمت سرور و برنامه نویسی این سیستم توسط امیر تهرانی صورت گرفته و من زیاد در مورد ساختار برنامه نویسیش اطلاع ندارم ) .

میخوام با چندتا از کدهای ساختار سیستم مدیریت سرور Main Core آشناتون کنم. البته مهمها رو نمیتونم بگم چون از نظر امنیتی ممکنه تعدادی باگ داشته باشه هنوز که از طریق برخی کدها قابل نفوذ هست.

پنل مدیریت Main Core بر روی سرور دارای سه سری دستور ساده هست که ساختار برنامه نویسی دارن. به جز سه سری دستور 1 سری دستور اجرایی هم داره که زیاد مهم نیست.

سری اول و دوم دستورات متصل شدن به بخش مدیریت سرور و مدیریت پنل و محتوای پایگاه داده سرور هست که نمتونم در موردش صحبت کنم.
سری سوم شامل کلیه دستورات مدیریت محتوای سرور هست که یک سری از اونها رو در بالا مشاهده میکنید. مثل دستور load که با جستجوی فایلی که فراخوانی کردیم اون رو به یک لیست اضافه میکنه که ما اسمش رو لیست دستور جاری یا Current Program list گذاشتیم. این لیست بعد از هر دستور اجرا کننده و اجرای صحیح اون خالی میشه ( از نظر امنیتی مهم میباشد ) . با دستور load یک فایل در لیست قرار میگیره که دارای تگها مختلف هست که هر تگ مجموعه دستورات برنامه نویسی شده رو داره. این تگ ها هم با load شدن فایل آماده استفاده میشن. بعد از Load دستور run رو میبینید که اون تگها رو فراخوانی میکنه و در صورت نیاز اجرا و یا به زیر شاخه های برنامه نویسی متصل میشه . به صورت کلی در برنامه نویسی های موتور main core تگها به این صورت طبقه بندی میشن.

پیشوند mc : از اصلیترین پیشوندهای برنامه نویسی در سیستم موتور طراحی بازی ما هست و فرمت اصلی فایلهای موتور هم mc یا مخفف Main Core نامگذاری شده.

پیشوند i و s : در برنامه نویسی های ما مخصوصاً در بخش سرور S موتاه شده System یا set هست و I بسته به محل قرار گیریش به برای Input و Interface نقش ایفا میکنه. اگر از I به تنهایی استفاده بشه به یعنی inject یا install کردن یک دستور در جاهای مختلف ولی اگر i قبل از s قرار بگیریه input خونده میشه و از یک تابع میخواد تا input مورد نظر در System مورد نظر رو شناسایی و فراخوانی کنه. شبیه core_i_s_update_link_12 که میگه از تابع core که اینجا تگ مجموعه برنامه نویسی core موتور طراحی بازی هست input دستور link رو دریافت کن و دستور update رو با مقدار 12 روی اون اعمال کن. 12 یا 1.2 یک فایل هست که برای نسخه 1.2 روی سرور آپلود شده و دارای همه دستورات و زیر مجموعه های مورد نیاز به روز رسانی هسته و ساختار موتور هست. این دستور از مجموعه ی Core داده ی link رو میگیره و با گرفتن دستور update همون داده های رو از مجموعه دستورات فایل 12 پیدا میکنه و مقادیر دستورات قبلی رو مطابق فایل 12 تغییر میده . یا دستور core_i_s_emulate_core_12 هم میگه که از مجموعه سیستم core برو و input به اسم core رو پیدا کن از از طریق emulate یا همسان سازی مقادیر رو با فایل 12 مقایسه و تصحیح کن. در ساختار موتور وقتی input همون مجموعه دستورات بشه تابع update عمل نمیکنه چون باید یک بخش عظیمی از دستورات به روز بشن و این کار از طریق همسان سازی انجام میشه تا فقط بخشهایی که تغییر کردن به روز رسانی بشن. اگر i بعد از s مورد استفاده قرار بگیره interface خونده میشه و کل رابط یک دستور با کاربر رو به داخل حافظه فراخوانی میکنه. رابط استفاده از دستور شامل قواعد تغییر دادن مقادیر و اجرای زیر مجوعه های دستوری به صورت جداگانه هست. در دستور run mc_s_i_core_develop_kit از دستورات اصلی که با پیوند mc مشخص شدن خواسته میشه تا با مراجعه به سیستم core همه ی inteface های kit زیر مجموعه develop رو فراخوانی و آماده کنه. اگر هم s به صورت تنها به معنای set هست که تغییر دو مقدار به هم یا تغییر داده ها در مجموعه دستورات هست.

پیشوند m : پیشوند m در بعضی جاها به معنای master یا اصلی هست که جاکننده نوع دستور یا مجموعه دستور در یک فایل load شده میباشد. وقتی نوشته شده compiler_m منظور اصلی ترین کامپایلری هست که بقیه کامپایلرها زیر مجموعه اون هستن. این دستور در زبان C# به صورت _all نوشته میشه.

دستور get : این دستور هم که معرف حضور برنامه نویسهای هست. دستوری رو دریافت میکنه و مطابق خواسته برنامه تغییر میده. در دستور core_get_i_s_dll_s_12 از سیستم خواسته شده تا input تابع dll رو از سیستم core در فایل 12 بگیره. اینجا چون قصد ما گرفتن یک دستور از یک فایل هست از get استفاده کردیم . s اینجا مخفف یکی از دستورات امنیتی هست که از ذکرش صرفه نظر میکنم.

متصل کننده to : دستور to دو تا تابع رو به هم متصل میکنه یا ارتباط بین اونها رو با توجه به یک دستور قبلی برقرار میکنه. البته توی عکس دستوراتی بود که نمیشد نشون داد ولی خوب دو دستور امنیتی یا بعضی مواقع دستورات اجرایی رو به هم تبدیل یا نسبت به دستورات داده شده تغییر میده.

در آخر هم سری دستورات اجرایی هست که شامل دستورات execute و launch و دستورات دیگه ای هست که در اکثر زبانهای برنامه نویسی وجود داره. این دستورات به دو دسته تقسیم میشن که یک دسته شبیه execute زیر مجموعه های دستوری و برنامه های داخلی رو اجرا یا آماده اجرا میکنن و بعضی دستورات هم شبیه launch در آخر نوشته میشه تا کل برنامه ی نوشته شده اجرا بشه.

میدونم اطلاعات به درد نخوری بود ولی خوب گفتم گفتش ضرر نداره :green:
 

Mahdi_Rashed

Well-Known Member
تقریباً بخش engine سیستم terrain generator رو تموم کردم . کلی سیستم با زبان اسکریپت Main Core یا MCscript نوشته میشه که بخشی از موتور طراحی خودمون هست. ترکیب زبانی C# و جاوا هست و یک زبان اسکریپت نویسی توی موتور طراحی بازی Main Core رو ارائه داده. در حالت کلی زبان اسکریپت نویسی Main Core به سه دسته تقسیم میشه . یکی اسکریپت نویسی تحت Listener هست که در command console موتور طراحی بازی استفاده میشه . یکی single-file script هست که شامل اسکریپتهای خیلی سبک با ساختار و کارایی ساده هستن و معمولاً 50 یا 60 خط بیشتر نمیشن. و آخر packaged script که شامل یک بسته حاوی چندین فایل اسکریپت هستن که توسط یک فایل مخصوص در موتور فراخوانی و اجرا میشن و اسکریپتهای سنگین و پیچیده رو با اینها مینویسیم. اسکریپتهای سنگین در فایلهای mcz یا main core zip نگه داری میشن و اگر یک نرم افزار شبیه winrar داشته باشید میتونید اسکریپتها رو مشاهده و تغییر بدین .

13032866150.png


در بخش engine سیستم terrain generator چند بخش define یا تعریف میشن . و در تعریف از طریق داده های قبلی یا تعریف شده یک تابع جدید تولید میشه. شبیه lodmorph توی عکس که توسط تابع movement تعریف شده و از تابع های پیشفرض دیتابیس main core شبیه transfer و مقادیر پیشفرض شبیه directly استفاده شده.

در اسکریپت بالا vertex ها که چهار تاشون به صورت مقابل هم تعریف شدن به عنوان یک دسته object تعریف شدن و در تعریف مشخص شده که a1 همون vertex هست که در سطح بعدی lod ورتکس b2 نام داره و با تغییر اونها به هم فرآیند تغییر لایه های lod دارای حرکت و morph هست . مقادیر سرعت و دقت و خطا و ... توسط مقدار directly تعریف میشه که برای تغییر باید به بخش مربوط به خودش در database موتور طراحی مراجعه بشه . ,در ساختار mcs سعی شده تا از ساختار زبانهای اسکریپت نویسی شبیه max script و unreal script استفاده بشه و معمولاً ساختار همه شبیه هم هست. یعنی توابعی که استفاده میشه . keyword ها و ... شبیه هم هست. یعنی اگر کسی max script رو یاد داشته باشه به راحتی میتونه unreal script یا همین mcs رو یاد بگیره .
 

Mahdi_Rashed

Well-Known Member
تقریباً اسکریپت نویسی terrain generator تموم شده. البته هنوز یک بخشهای جزیی از L-System ( که قبلاً توضیح داده بودم ) مونده. آخرین مرحله هم متصل کردن فایلها توسط یک فایل اصلی و چندتا Dll به هم هست. و بعد تست و رفع اشکالات احتمالی. سیستم terrain generator میتونه روی صفحات چهار گوش و دایره ایجاد بشه و فعلاً براش محدودیتی در ایجاد کردن Face ها اعمال نکردم . نوع پردازش Terrain ها هم از طریق سیستم Mask Rendering و LOD Layer Rendering هست که توضیحاتش رو در پستهای آینده خواهم داد.
 

Mahdi_Rashed

Well-Known Member
تست اولیه سیستم Terrain Generator بر پایه L-System در محیط Real-Time


روی عکس کلیک کنید!

هنوز باید روی این سیستم کار کنم تا Terrain های طبیعی تری رو ایجاد کنه. منتظر تستهای بعدی باشید.

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

Mahdi_Rashed

Well-Known Member
خوب، بلاخره امتحانات تموم شد و وقت من آزاد شد و حالا میتونم یک کم به پروژه هام برسم. تقریباً کد نویسی سیستم Terrain تموم شده. تکنولوژی Terrain ها رو از L-System معمولی به L-System Node تغییر دادم تا هم حجم پردازشی کم بشه هم پذیرش تکسچر و Shader بهتر بشه و فرم گیری Terrain ها موقع Paint کردم راحتتر و بدون اشتباه بشه. همین روزا یک تست هم انجام میدم. البته یک کم کار هنوز روی سیستم Optimizer هست که برای موتور رندر مشخص میکنه چطور و چه وقت چه بخشی از Terrain رو رندر کنه. بخشی از Terrain که باید رندر بشه همون بخشی که بازیکن روی صفحه نمایشگر میبینه. باید توی دو سه روز آینده کد نویسی این هم تموم بشه. بعد هم میرم سراغ طراحی عناصر صحنه و Actor ها.:)
 

AMIR_REZAs

New Member
سلام

عالیه ... میشه چند تا شات از ادیتور هم بذارید( نسخه ی free هم بذارید ممنون میشم:))
 

Mahdi_Rashed

Well-Known Member
ادیتور Main Core همون نرم افزار 3D Max هست که توسط یک Agent Plugin با هسته موتور Main Core ارتباط برقرار میکنه و هسته نرم افزار مکس رو به یک موتور طراحی بازی تغییر میده. این کار توسط SDK های مکس قابل اجراست.

13962522211535732426.png


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

2069469325031642462.png


اینم کنسول موتور هست، همه داده ها و دستورات اینجا ثبت میشه و بعد از طریق اینترنت برای سرور مرکزی Main Core به صورت خودکار ارسال میشه. همچنین از طریق چند دستور خطی میشه یک سری از تنظیمات هسته موتور رو تغییر یا فعال و غیر فعال کرد.

در حال حاظر نسخه رایگانی از طرف ما عرضه نمیشه چون محدودیت های زیادی داریم ولی امیدواریم که بتونیم این محدودیت ها رو کمتر و نسخه های رایگان و سند باکس هم ارائه بدیم.
 

Mahdi_Rashed

Well-Known Member
خوب سیستم Terrain تموم شد. یک کم دیتر از موقع مقرر شده چون تعدادی باگ و اشکال داشت که باید حلشون میکردم. این ها نمونه ها هستن. شما فقط به ساختار Terrain نگاه کنین و تکسچر ها رو در نظر نگیرین چون با عجله تکسچر کردم و شبیه کار فانتزی شده. پذیرش تکسچرها توسط تکنیک Vertex Paint هست. سایز تکسچر ها هم 1024 پیکسله که شاید به نظر شما در بازی استراتژیک زیاد به نظر برسه ولی کل Terrain که شما مشاهده میکنید در واقع 12 قسمت کوچک هست که به هم متصل شده ولی همه به صورت یک دست تکسچر خورده. در این حالت پردازش هم تکسچر و هم آبجکت Terrain کمتر میشه. به عنوان مثال وقتی که من دارم بالای نقشه رو نگاه میکنم بخشهای پایینی که در ناحیه دید من نیست از لیست پردازش حذف میشن . البته این حذف خود آبجت Terrain هست ولی کامپوننتهایی شبیه Collision و Blocker که برای فیزیک مورد نیسازه باقی میمونه و کارشو انجام میده. در حالتی که کل Terrain به چند بخش تقسیم شده هر بخش از UV های کوچکتر و Vertex Channel های مختلفی استفاده میکنه که بار محاسبه تکچر رو کمتر میکنه. برای همین میشه از تکسچرهای 1024 پیکسل استفاده کرد. این کار رو با 2048 هم انجام دادم ولی در سطح وسیع پردازش رو 50 درصد بیشتر میکنه.

13089928131.jpg


13089928130.jpg


13089928330.jpg


13089928132.jpg


نکته : این دریاچه ای که مشاهده میکنید فقط یک شی Plane هست که متریال Reflection به همراه Specular بسیار زیاد دریافت کرده با یک کمی Distortion map که همون normal map هست بدون کانال رنگی آبی. چون Shader خوبی نیست زیاد به آب شبیه نشده. نخندید :lol:

آسمون هم تکنیک Sky Box پیشفرض Direct X هست با یک تکسچر ساخته شده در Photoshop ( افکت Cloud )
 

Mahdi_Rashed

Well-Known Member
Main Core Game Engine پروژه من هست و تمام بخشهای اون توسط من و دوستانم طراحی و برنامه نویسی شده و در حال حاظر برنامه ای برای عرضه رایگان و قرار دادن اون برای دانلود نداریم.
 

Mahdi_Rashed

Well-Known Member
تقریباً همه کارای مربوط به سیستم گرافیک برای حجم بالا و سیستم Terrain و دینامیک تموم شده و الان رفتم سراغ طراحی کردن عناصر گرافیکی که از دیروز شروع شده :green:
سیستم گرافیکی که برای بازی در نظر گرفتم نوشته خودم هست البته برای Main Core که این عکسا نشون دهنده سطح رندر رئالتایم کامل برای یک سیستم لپ تاپ ساده دو هسته ای با 4 گیگ رم و گرافیک سری 9000 nVIDIA Geforce

برای اینکه حجم polygon ها و حجم کلی پردازش بره بالا از پلاگین Greeble استفاده کردم که همه باهاش آشنا هستین و اگر هم نیستین گوگلش کنید بعد دانلودش کنین. رایگانه

screenshot1.jpg

screenshot3.jpg

screenshot2.jpg

حجم صحنه 1 ملیون و 486 هزار polygon هست که با سرعت 249 فریم در ثانیه از 250 در حال اجرای روال تایمه. Hard Shadow استفاده شده هم دینامیک و رئال تایمه و Ambient occlusion به صورت bake شده و FLM روی صحنه اعمال شده. به جای Global illumination هم یک sky Light اعمال شده تا صحنه رو از اعمال نور اضافه منع کنه. تکنیک sky Light شبیه سیستمهای bounce Lighting هست که Bouncing Light های محاسبه شده رو به صورت Light Map های کوچک ولی با قطعات زیاد روی صفحه اضافه میکنه.

از نظر طراحی هم از کلاً یک ساختمون طراحی کردم که اونم نیمه کارس و هنوز تموم نشده.
13104646530.jpg

13104646531.jpg


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

در این مدت داستان بازی تغییرات جزیی پیدا کرد ولی خوب base داستان همونی که قبلاً گفتم توی این تاپیک.
یکی از تغییرات نام گروههای حاظر در بازی هست که یکی Haab یا هاب که نام یکی از تقویم های باستانی قبیله ی مایان هاست. این گروه در بازی مرحله ای توسط شما یا کاربران هدایت میشن. Roken ها که نام گروه دوم هست که دشمن هاب ها به شمار میاد البته تا قبل از حمله Deeon ها یا موجودات فضایی. Roken نام یک فردی هست که در کتیبه های سومری ذکر شده و Deeon هم نام یکی از خدایان آسمان سومری هاست که همه رو از کتاب ارابه خدایان استخراج کردیم. البته اگر شما دوستان هم نامهای بهتری رو پیشنهاد کنید هنوز هم جای تغییر وجود داره.

منتظر پستهای بعدی باشید
ممنون :green:
 
سلام.اگه میشه ایمیلتو بده باهات کار دارم.یا اگه میتونی ای دی منو ادد کن تا با هم صحبت کنیم.
[email protected]
smoke_unity
چندتا sdk ناب و نایاب و گرون دارم.بگیر به موتورت وصل کن تا موتورت قول بشه.
 

جدیدترین ارسال ها

بالا