ورود

نسخه کامل مشاهده نسخه کامل : آموزش اصولی بازی سازی(پست اوّل خوانده شود)



Hotsun
23-02-2011, 16:41
سلام
اینجا قصد ندارم بازی سازی با انجین خاصی رو یاد بدم بلکه میخوام روش هایی رو برای داشتن فریم ریت بهتر,گرافیک بالاتر,گیم پلی جذاب تر و ... توضیح بدم.
اگر شما هم مواردی رو در این باره میدونید بذارین اینجا تا بلکه بعد از مدتی در قالب یک PDF جمع آوریشون کنم و با ذکر نامتون(در صورت تایید خودتون)قرار بدم.
فقط خواهشاً تاپیک رو به فنا نبرین.یعنی اینکه پست الکی ندین و اگر مطلب مهمی هست بگین.

در ضمن سعی کنین برای مطلبتون تیتر هم بذارین.
مثل اینی که من پایین گذاشتم.:10:

---------- Post added at 04:41 PM ---------- Previous post was at 04:36 PM ----------

نکاتی چند در مورد تکسچرها

در واقع باید بگم که شما باید با توجه به سایز مدلتون تکسچرتون رو انتخاب کنید,مثلاً فکر کنید که یه تاس کوچیک 6 وجهی که سطح روش رو باز کنیم کلاً 300 پیکسل مربع روش جا میشه در صورتی که شما از تسکچری با سایز 4096 پیکسل مربع استفاده کردین.
خب این جوری تنها اتفاقی که میوفته اینه که تکسچر میاد و سطح مدل رو میش پوشونه امّا چون باید فیت بشه مجبوره که به صورت مجازی کوچیک شه که این باعث فشردگی پیکسل ها و حتی بدتر شدن کیفیت میشه و در کنارش اوّلاً که CPU باید برای فیت کردن تکسچر به صورت مجازی تلاش بیشتری بکنه و از طرفی کارت گرافیک شما باید تکسچر با سایز بالا رو آنالیز کنه و در کنارش حجم بازیتون هم میره بالا(جایی که یه مرحله 100مگ بشه اینجوری کار کنید ممکته 500مگ هم بشه)و در نتیجه بازی با حجم زیاد,کیفیت پایین و سیستم مورد نیاز بالا ارائه دادین [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] تازه خروجی گرفتن از بازیتون هم زیادتر طول میکشه

یه سری موارد رو در این زمینه آماده کردم که به صورت زیر هستند:

اگر تکسچرتون سایز 256*256 باشه انجین کمترین تلاش رو برای آنالیزش انجام میده و با یه سیستم ضعیف هم راحت ساپورت داده میشه.
اگر 512*512 باشه انجین 4 برابر بیشتر باید رندر کنه و سیستم مورد نیازتون تا 60% بیشتر میشه(بسته به نسبت استفاده تکسچر در بازی).
اگر 1024*1024 باشه انجین تا 16 برابر باید بیشتر قدرت رندر داشته باشه و سیستمتون تا 100% ممکنه بیشتر بشه.
اگر 2048*2048 باشه 16 برابر قوی تر از حالتی که 512*512 بود میشه و سیستم مورد نیازتون تا 160% هم ممکنه افزایش پیدا کنه.

خب پیشنهاد من اینه که برای اشیای کوچیک از تکسچرهای 256*256,برای اشیای متوسط از 512*512 ,برای اشیای بزرگ تا 2048*2048 هم میتونین پیش برین و برای اشیای مهم هم تا یک درجه بهترش کنید اوضاء رو یعنی جایی که یه صندلی خیلی کیفیت بالا بسازین که گوشه ای بسیار کوچک از بازی رو اشغال کرده برای اشخاص که خیلی بیشتر تو چشم هستن کیفیت رو ببرین بالا و بسته به سایز شخصیت از 512 پیکسل مربع(برای شخصیت های کوچک)تا 4096 پیکسل مربع برای غول ها استفاده کنین.
ذکر این مورد هم مهم دونستم که بگم کارت گرافیک برای آنالیز و رندر بهتر تکسچرها باید تکسچر یونیت(Texture Unit)بالاتری داشته باشه پس اگر تکسچرها براتون مهم هستند دنبال کارتی برین که تکسچر یونیت بالاتری داشته باشه و اگر بازی رو نمیتونین خوب اجرا کنین پس از بررسی میتونین بفهمین که تکسچر یونیت VGAتون چقدره و اگر پایین بود تو تنظیمات بازی تکسچرها رو بیارین پایین.
در حال حاضر VGA های سطح بالا تکسچر یونیتی حدود 90 و بالاتر دارند که با داشتنشون میتونید هر بازی رو با بالاترین گرافیک اجرا کنید.(البته قیمتشون از 500 تومن تا 800 تومنه که ممکنه برای بعضی ها یه مقدار گرون باشه/برای مثال HD6970 تکسچر یونیتی معادل 96 داره که با قیمت حدود 600هزار تومن در تهران داره به فروش میرسه)


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

در ضمن امیدوارم مطالب بدردتون خورده باشه.

Hotsun
23-02-2011, 17:14
چگونگی بالا بردن سرعت اجرای بازی به وسیله تکسچرها:
خب همونطور که میدونید اگر برای دیوارها از تکسچرهای 256پیکسل مربع استفاده کنین کیفیت پایینی رو ارائه دادین ولی اگر هم 512 یا 1024 پیکسلی باشن سیستم های قویتری نیاز هست برای اجرا پس اگر حجم بازی براتون خیلی مهم نیست میتونید از تکسچر سایز بالایی که دارین یه کپی بگیرین و سایز تکسچر رو بیارین پایین اونوقت خیلی راحت با Paint یا هر نرم افزار دیگه سایزش رو نصف یا یک چهارم کنید.
حالا شما میتونید یه دیوار خیلی بلند تو بازیتون رو جایی که با یه تکسچر سایز بالا بسازین اون رو دو تیکه کنید و پایینش رو که تو چشم هست از سایز بالائه و قسمت بالاتر که خیلی واضح نیست رو از تکسچر پایین تر استفاده کنید.
توجه کنید که به خاطر نصف کردن دیوار تعداد پلی ها زیاد میشه ولی در عوض چون تکسچرتون خیلی کوچیک تر شده بازم سرعت بهتری بهتون میده.
در ضمن این قضیه رو نمیشه تو هر انجینی پیاده کرد و اگر انجینتون اتوماتیک تکسچرها رو پشت سر هم قرار میده اونوقت ناهماهنگی پیش میاد و مثلاً جای کم کیفیت شدن آجرهای بالایی فقط سایزشون کوچیک تر میشه و آجرها هر کدوم اندازه یه چوب کبریت میشن.

ehsan_wwe
23-02-2011, 17:41
ترفنداي خوبي رو داري ميگي خيلي خوبه ادامه بده :11:لطفا

عضر ميخام
مربع بودن مهم نيست مهم اينه كه طول و عرض بايد ضريب N^2 باشه

Hotsun
23-02-2011, 17:52
شیدر پنهان:
اینجا میخوام شیدرهایی رو معرفی کنم که وقتی ازشون استفاده میکنین در ظاهر هیچ تغییری نمیبینین ولی سرعت اجرا رو میبرن بالا!!!
خب شاید اوّل به نظرتون غیر منطقی برسه ولی واقعیت داره.
برای درک بهتر میتونید مثال پایین رو بخونید:
برای استفاده از شخصیت ها شما از استخوان بندی استفاده میکنید که اگر به شخصیتتون هیچ شیدری ندید تمام انیمیشن ها تحت استخوان بندی توسط CPU آنالیز میشه و از اونجایی که به عنوان پایه برای CPU شناخته نشده به سختی این کار رو باید انجام بده و سرعت بازی میاد پایین در صورتی که اگر استخوان بندی رو با استفاده از شیدرها برای انجین تعریف کنید خود انجین اون ها رو به صورت شیدر میبینه و مجبوره از قسمت Shaders که قسمتی از GPUوتون هست برای این کار کمک بگیره و چون از قبل برای قسمت Shaders تعریف شده به راحتی این کار رو براتون انجام میده و هم تقسیم کار ایجاد کرده و هم سرعت اجراتون رفته بالا.
حالا اگر شما زبون شیدر نویسی بلد باشین میتونید شیدر پنهانتون رو با شیدرهایی که تاثیر ظاهری میذارن مخلوط کنین.
البته اینم باید بگم که بعضی انجین های خیلی پیشرفته این نوع تقسیم کار رو اتوماتیک انجام میدهند.


-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
@ehsan_wwe ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]), بله شما درست میگین ولی تو مثالی که برای یاد دادن اصول هست این چیزها خیلی اهمیت ندارند.
در ضمن ممنون بابت یاد آوری.

Armin060
23-02-2011, 18:17
Mipmap

چند تا نکته رو در مورد Texture لازم میدونم که بگم.
اکثر موتور های بازی سازی که اصولی ساخته شدن مثل Unreal Engine یا Unity و .... خودشون Texture ها رو تغییر سایز میدن. شما وقتی از یه Texture چه با سایز 4096*4096 و چه با سایز 128*128 واسه یه تاس کوچیک استفاده کنید موتوری مثل Unreal Engine خودش اون Texture رو به بهترین اندازه ی ممکن تغییر اندازه میده. اگر تعدادی Object با اندازه های مختلف داشته باشید که از یه texture استفاده می کنند واسه هر اندازه ای بهترین texture رو از نظر سایز تولید می کنه. البته نه اینکه مثلا 1000 تا شی با یه texture داشته باشید بعد بیاد 1000 تا texture بسیازه. بلکه برای بازه ای از اندازه ها میسازه. مثلا 8 تا سایز مختلف که مورد نیاز هست رو میسازه و بعد نسبت به نیاز از این 8 تا یکی رو واسه هر شی انتخاب می کنه. بنابراین این کار چندان تو Runtime تاثیر نداره. البته شاید کمی از زمانی که طول می کشه تا بازی ساخته بشه رو کم کنه. ولی معمولا همین هم به چشم نمیاد.
در مورد دوری و نزدیکی اشیا هم موتوری مثل Unreal Engine خودش کار های لازم رو انجام میده. یه تکنیک هایی هست به اسم Level of Details یا LOD که این کار ها رو در مورد هر چیزی انجام میده. مثلا texture، تعداد مثلث ها و .... مثلا یه توپ تو فاصله ی 50 متری از دوربین با 10 تا مثلث رسم میشه و تو فاصله ی 1 متری با 100 تا مثلث. ولی اگر مثلا یه ساختمون موضوع فرق داره. این کاهش مثلث ها نسبت به اندازه ی شی هم هست.
یا مثلا وقتی که یه توپی تو فاصله ی 50 متری از دوربین قرار داره ممکنه اصلا نور ها روش تاثیر نزارن، یعنی عملیات نورپردازی رو واسه اون توپ انجام نمیده ولی وقتی تو 1 متری باشه اگر یک میلیون تا نور هم داشته باشیم چون دیده میشه مجبوره که اینکار رو بکنه. البته این به شرطی هست که اون نور ها به حد لازم به توپ نزدیک باشند.
و خیلی کار های دیگه. البته این چیز هایی که گفتم همشون مربوط به LOD نمیشه، تکنیک هایی دیگه ای هم وجود داره.
چیز هایی که گفتم ممکنه تو موتور هایی مثل 3D game studio و ... هم باشه ولی مطمئن نیستم. در مورد Unreal Engine هم بعیده که اینکار ها رو نکنه، چون این چیزا دیگه خیلی کار های خفنی نیست. موتوری مثل Unreal Engine خیلی کار های عجیب و غریب دیگه ای هم انجام میده.


مربع بودن مهم نيست مهم اينه كه طول و عرض بايد ضريب N^2 باشه
ضریب N^2 نه، توانی از 2. مثل 128، 256، 512، 1024.
البته این مورد خیلی تاثیر داره، کارت های گرافیک قدیمی مثل اینکه اصلا اگر اندازه ی texture توانی از 2 نبود نمی تونستند اون رو حساب کنند. البته کارت های امروزی مشکلی ندارن ولی اگر توانی از 2 باشه بهتره. در این مورد نمی دونم خود موتور های گرافیکی کاری انجام میدن یا نه.

راستی Mipmap همون texture با اندازه های مختلف هست.

Hotsun
23-02-2011, 18:26
استفاده درست از اجسام دینامیک و استاتیک برای سرعت بهتر اجرای بازی(این تیکه رو میتونید نخونید چون در انجین های مختلف تا 180 درجه میتونه متفاوت باشه:41:):
خب باید بگم تقریباً تمام انجین های دنیا اجسام دینامیک رو که هر لحظه ممکنه رو بازی تاثیر بذارن رو همیشه در حال رندر کردن هستن ولی مثلاً دیواری که استاتیک هست رو شما نبینینش رندر نیمشه و اینجوری سرعت بالاتر میره.
خب پس باید بگم که وقتی دارین بازی میسازین سعی کنین از حداقل اجسام دینامیک استفاده کنین و مثلاً وقتی تو یه مرحله اونور یه دره که نمیتونید برید و تفنگ هم ندارید پس نمیتونید روی اجسام اونورش تاثیر بذارین پس تمام اجسام اونور رو استاتیک کنین که انجین هم رندرشون نکنه و هم هیچ گونه آنالیزی برای اجرای فیزیک روشون انجام نده.

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

Armin060
23-02-2011, 18:33
استفاده درست از اجسام دینامیک و استاتیک برای سرعت بهتر اجرای بازی:
خب باید بگم تقریباً تمام انجین های دنیا اجسام دینامیک رو که هر لحظه ممکنه رو بازی تاثیر بذارن رو همیشه در حال رندر کردن هستن ولی مثلاً دیواری که استاتیک هست رو شما نبینینش رندر نیمشه و اینجوری سرعت بالاتر میره.
خب پس باید بگم که وقتی دارین بازی میسازین سعی کنین از حداقل اجسام دینامیک استفاده کنین و مثلاً وقتی تو یه مرحله اونور یه دره که نمیتونید برید و تفنگ هم ندارید پس نمیتونید روی اجسام اونورش تاثیر بذارین پس تمام اجسام اونور رو استاتیک کنین که انجین هم رندرشون نکنه و هم هیچ گونه آنالیزی برای اجرای فیزیک روشون انجام نده.

اجسام دینامیکی که در هیچ جا حضور دارند:
همونطور که تو مبحث قبلی گفتم اجسام دینامیک در هرجا در حال رندر و آنالیز از لحاظ فیزیکی هستن پس چرا وقتی مثلاً بازیتون از دو قسمت جدا تشکیل شده باید انجین همه چیز رو رندر کنه؟
مثلاً وقتی تا یه جای بازی تو محیط شهریه ولی یه جا میپرین تو یه چاه طوری که دیگه نمیتونین برگردین بهترین کار اینه که قبل از ورود به چاه تمام اشیای دینامیک مخصوصاً شخصیت ها وجود نداشته باشن و وقتی میپرین پایین اجسام بالای چاه غیب شن.
خب این کار رو میتونید با گذاشتن Triggerی که دم چاه گذاشتین برنامه بدین که اشیای فلان و فلان و ... که مخصوص زیر چاه هستن ظاهر شن و به همین ترتیب اشیای بالای چاه غیب شن.
تازه میتونید این کار رو برای مسیرهای برگشت پذیر مثل آسانسور هم انجام بدین یعنی اینکه هر سری که بالا میرین اجسام پایین غیب شن و اجسام بالا ظاهر شن و همینطور هم وقتی برعکس پایین میرین.
با این کار مقداری زیادی تکسچر و پلیگن رو از دست رندر شدن نجات دادین و به طور باورنکردنی سرعت بازی بالا میره طوری که ممکنه حتی در مراحل شلوغ تا بالای 10 فریم به فریم ریتتون اضافه بشه.
شرمنده که پارازیت میندازم ولی این کار ها رو هم خود انجین انجام میده. گمونم اسمش Scene Manager هست.
نمی دونم خود کارت گرافیک بود یا API های مثل Direct3D و OpenGL که یه سری کار ها در این مورد انجام میدادند. مثلا وقتی یه کره داره هیچ تمام کره رسم نمیشه، چون هیچ جوری نمیشه همه طرفش رو یکجا دید. یعنی در واقع شی ای مثل کره (توپ و ...) معمولا فقط به اندازه ی یه نیم کره رسم میشن. یعنی نیمه ی دگشون که دیده نمیشه رسم نمیشه. منظورم به اینه که نه تنها شی هایی که دیده نمیشن رندر نمی شند بلکه قسمت هایی از یک شی که دیده نمیشه هم رندر نمیشه.
در مورد فیزیک هم موتور های فیزیکی ای مثل Havok و Physx در مورد فیزیک کلی Optimization دیگه هم انجام میدن.

Hotsun
23-02-2011, 18:40
@Armin060,خب باید بگم که اینجا هرچی به کار کمک میکنه بدون توجه به انجین بازی گفته میشه و ممکنه Scene Manager رو 4تا انجین داشته باشه ولی 10 تا دیگه نداشته باشه.
در ضمن وقتی شما یه دشمن که دینامیک هست رو یه جایی پشت دیوار میذازین و قرار وقتی شما به نزدیکیاش رسیدین از دیوار بیاد بالا و بپره اونور و به شما حمله کنه پس انجین مدام در حال بررسی هست که به محض رسیدن شما به جای مناسب بلافاصله شروع کنه انیمیشن بالا اومدن رو انجام بده در صورتی که با یه محدودیت اونو میتونید حذف کنید تا اصلاً خود انجین هم نفهمه چی رو باید بررسی کنه و غیر فعال میشه و سرعتتون میره بالا.

Armin060
23-02-2011, 18:47
راستش Scene Manager تو موتور های بزرگ، اونقدر Optimize شده هست که حتی اگر شما اون کار رو بکنید ممکنه کند تر بشه. یعنی کاری که موتور انجام میده سریع تر از روش شما هست، چون خود چیزی مثل Trigger هم باید هر لحظه چک بشه. ولی Scene Manager اینجوری عمل نمیکنه. با یسری استدلال های ریاضی و هندسی کار میکنه که سرعتشون نسبت به Trigger خیلی بیشتره. البته رو خود Trigger هم Optimization های زیادی انجام میشه.
البته با توجه به اینکه بدون توجه به موتور بازی گفته میشه، خب اره حق با شماست. فقط گفتم که اگه کسی از Unreal Engine یا Unity یا اینجور موتور های بزرگ استفاده می کنه، لازم نیست زیاد وقت خودش رو صرف تغییر اندازه ی Texture و ... بکنه. وگرنه این چیزا در گرافیک کامپیوتری از موارد مهم هستند که باید رعایت بشند. مثلا همون تغییر اندازه ی Texture اگر بخوایم realtime این کار رو انجام بدیم، نه تنها کیفیت به طور شگرفی کم میشه بلکه فریم ریت هم به طور عجیبی میاد پایین. کیفیت به این دلیل کم میشه که از یه الگوریتم سریع و در عین حال ضعیف واسه تغییر اندازه استفاده می کنه. اگر بخواد از یه الگوریتم ردیف مثل کاری که فوتوشاپ انجام میده یا موتور های خفن موقع ساخت بازی ممکنه فریم ریت 100 بشه 20 :18:.
دلایل دیگه هم هست، مثلا اگر یه عکس راه راه قرمز و سبز داشته باشید موقع کوچیک شدن با یه روش سریع ممکنه یکی از راه هاش کلا حذف بشه و مثلا دیگه کلا بشه قرمز و سبزه بپره که مربوط میشه به مشکلات کوچیک و بزرگ کردن تصویر.

Hotsun
23-02-2011, 19:08
حفظ پلیگن:
وقتی شما دارین یه بازی در محیط های باز میسازین طوری که به یه جاهایی اصلاً نمیشه رسید یه کار خیلی خوبی که میتونین بکنین اینه که بیاین و دوردست ها رو به جای انکه پر کنین مدل مثل درخت از بیلبورد استفاده کنین که فقط چند پلی دارن و از دور نمیشه تشخیصشون داد.
در واقع شاید انجین هایی باشن که وقتی از مدل ها دور میشین پلی ها رو کم کنن ولی باز هم پلی های باقی مونده بیشتر از پلی های بیلبورد هستن و تازه خود عمل کم کردن پلی ها هم اندکی سرعت بازی رو میاره پایین.
تازه اگر نمیخواین از بیلبورد استفاده کنین چون به هر حال مدل های دور باید کیفیت پایین تری داشته باشن پس باید مدلشون جدا ساخته بشه پس میتونید مدل ها رو نصفه درست کنید که هم کمتر کار کرده باشین روشون که در زمان صرفه جویی کنین و هم پلی کمتری ارائه بدین(البته الان دیگه تقریباً هر انجینی پلی های پشت مدل که دیده نمشن رو حذف میکنه ولی بازم بد نبود دونستنش)

Hotsun
23-02-2011, 19:21
استفاده از مدل های مشابه:
یک سیستم تقریباً قدیمی هست به نام Clone که در بالای 99% انجین ها موجوده طوری که دیگه ممکنه حتی اصلاً در قسمت مشخصات انجین هم بهش اشاره نشه و اونم اینه که خود انجین وقتی ببینه از یه مدل 100 تا استفاده شده میاد اوّلیش رو میذاره و از روی اون مشابه سازی میکنه و 90 تای دیگه رو زودتر میسازه که این بیشتر در سریع تر Build شدن بازی تاثیر داره و اندکی هم در اجرای خود بازی تاثیر میذاره.

مدل های چند منظوره بسازید:
شما ممکنه تو هر بازی که میسازین حداقل یه مدل داشته باشین که چسبیده به دیوار و چون اینو میدونین دیگه روی پشت مدلتون تکسچر قرار نمیدین ولی این میتونه خودش اشتباه باشه.
شما میتونید خیلی راحت فکر کنین ببینین چه جای دیگری مدلی با همون اندازه چسبیده به دیوار بسازین,خب اون مدل رو نسازین و پشت همون مدل قبلیه رو با تکسچر مخصوص مدل دوم رو بذارین و اینجوری اگر یه مدل رو نود درجه بچرخونین میشه یه مدل دیگه و همونطور که در قسمت "استفاده از مدل های مشابه"گفتم این میتونه سرعت بازی و Build رو بالا ببره و در عین حال سرعت مدل سازیتون هم بیشتر شده و اگر دارین به مدل ساز پول میدین با این کار با پول یه مدل شما 2 تا مدل دارین.

Armin060
23-02-2011, 19:42
یک سیستم تقریباً قدیمی هست به نام Clone که در بالای 99% انجین ها موجوده طوری که دیگه ممکنه حتی اصلاً در قسمت مشخصات انجین هم بهش اشاره نشه و اونم اینه که خود انجین وقتی ببینه از یه مدل 100 تا استفاده شده میاد اوّلیش رو میذاره و از روی اون مشابه سازی میکنه و 90 تای دیگه رو زودتر میسازه که این بیشتر در سریع تر Build شدن بازی تاثیر داره و اندکی هم در اجرای خود بازی تاثیر میذاره.
گمونم اسمش instancing بودا!؟!؟ البته این مورد رو Runtime هم خیلی تاثیر داره. Nvidia یه سمپلی واسه این مورد داره که اگر از این تکنیک استفاده نکنی مثلا فریم ریت میشه 10 ولی اگر استفاده کنی میشه 60. فک کنید 9000 تا آدم، نه یه شی معمولی رو با فریم ریت 60 رسم می کرد :18:
در واقع فرض کنید که می خواید تماشاچی ها رو تو یه استادیوم رسم کنید. تعدادشون خیلی زیاده، نمیشه واسه این کار فریم ریت خوب گرفت الا با instancing.

saeed_cpu_full
23-02-2011, 21:10
شرمنده که پارازیت میندازم ولی این کار ها رو هم خود انجین انجام میده. گمونم اسمش Scene Manager هست.
نمی دونم خود کارت گرافیک بود یا API های مثل Direct3D و OpenGL که یه سری کار ها در این مورد انجام میدادند. مثلا وقتی یه کره داره هیچ تمام کره رسم نمیشه، چون هیچ جوری نمیشه همه طرفش رو یکجا دید. یعنی در واقع شی ای مثل کره (توپ و ...) معمولا فقط به اندازه ی یه نیم کره رسم میشن. یعنی نیمه ی دگشون که دیده نمیشه رسم نمیشه. منظورم به اینه که نه تنها شی هایی که دیده نمیشن رندر نمی شند بلکه قسمت هایی از یک شی که دیده نمیشه هم رندر نمیشه.
در مورد فیزیک هم موتور های فیزیکی ای مثل Havok و Physx در مورد فیزیک کلی Optimization دیگه هم انجام میدن.

اسم نوع پیشرفته ی این سیستم Occulution Culling هست .

Armin060
24-02-2011, 12:49
Occulution Culling با Scene Managing فرق داره. Occulution Culling همون حذف قسمت هایی از شی هست که دیده نمیشند.

Hotsun
24-02-2011, 14:58
ابتدا باید بگم اسمش Occlusion Culling هست و با s مینویسن(البته قصد غلط گرفتن ندارم فقط میخواستم خواننده ها به اشتباه نیوفتن)
بعدشم Occlusion Culling همون hidden surface removal که از اسمش معلومه چکار میکنه.
برای اطلاعات بیشتر میتونید این صفحه رو بخونید:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید یا این یکی:
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید در ضمن الان خیلی از انجین ها این کار رو میکنن ولی ممکنه ضعیف یا قوی که مثلاً انجین 3DGS به صورت ضعیف انجام میده ولی مثلاً UDK انقدر قوی انجام میده که سرعت بازی چند برابره.این کار رو میتونید با مدل های مشابه در دو انجین ببینید.
البته بعضی انجین ها هم به کاربران اجازه میدن خودشون اگر خواستن بتونن با توجه به مرحلشون تغییراتی رو انجام بدن که میتونه رنج تعیین کردن به صورت کلی یا جزئی یا غیر فعال کردن برای یک مدل باشه.

Hotsun
24-02-2011, 15:54
وقتی اسکای باکس بی معنی میشود:
آیا دارین بازی میسازین که تماماً در محیط های بسته هست؟
پس اصلاً از اسکای باکس استفاده نکنین.
آیا مرحلتون فقط یک پنجره داره برای دیدن بیرون؟
پس بازم اسکای باکس نذارین و فقط با یه بیلبورد محیط بیرون رو پوشش بدین.
آیا بازی میسازین که زمین کاملاً توش پوشیدست؟
پس اصلاً کف برای اسکای باکستون نذارین یا اگر انجین گیر میده فقط یه عکس 1*1 پیکسل سیاه یا سفید رنگ براش بذارین.

Hotsun
24-02-2011, 18:11
خورشید و ماه:
خب برای داشتن نور خورشید باید بازی رو تست کنید ببینید خورشیدتون کجای اسکای باکسه بعد برید و یک نور خیلی قوی در سطحی خیلی بالاتری از زمین بذارین و رنگش رو زرد کنید.
برای داشتن ماه فقط نور آبی یا سفید یا مخلوط و یا هر جور دیگه ای نمیتونه خیلی خوب باشه چون نور ماه کاملاً آبی نیست و کاملاً سفید هم نیست و مخلوطش هم ممکنه بد به نظر بیاد پس یا باید افکتی طراحی کنید که مرحله رو تحت تاثیر بذاره و یا با فتو شاپ یا نرم افزار های مشابهش بیاین و افکت رو به تک تک تکسچرها بدین بعد با نور آبی کمرنگ اون رو تکمیل کنید ولی توجه داشته باشین که انجین هایی هستند که میتونید تو تنظیماتشون ساعت بدین و نور مناسب تحویل بگیرین و یا اینکه به صورت Real-time خورشید و ماه رو جا به جا کنید و در این جور انجین ها نورها طوری طراحی شدند که دیگر به دست کاری تکسچرها نیاز ندارید.

3Dmajid
24-02-2011, 18:53
خیلی ممنون ... تاپیک خیلی مفیدیه :10:
تو قسمت تکسچرها بهتر بود به استفاده از فرمت هم یه اشاره ای میکردی.
مثلا من با یونیتی کار میکنم وقتی دقت میکنم میبینم فرمتای .jpg نسبت به فرمتای دیگه ای مثل .tga یا .tif زمان بیشتری رو برای لود شدن میگیرن. آبا بهتره از این فرمتا استفاده کنیم ؟ یا مهم حجم تکسچره ... یعنی از .jpg هم با حجم کم استفاده کنیم :11:
اگه همچین بحثی رو برای مدلینگ و استفاده از مدل ها برای بازی داشته باشیم میتونه مفید باشه.
این که واسه ساخت بازی مدلا چقدر Poly داشته باشن مناسبه، و اینکه آیا از مدل های High Poly استفاده کنیم یا نه ؟!
چه فرمتایی بهتره استفاده شه ... :20:
فکر کنم بهترینش FBX باشه.
کلا در مورد Optimize کردن بازی اگه بازم روشی بود بگید :46:
یه چی دیگه خواستم بگم که یادم رفت :31:

3Dmajid
24-02-2011, 21:39
درباره ی تکنیک lightmapping توی بازی اگه میشه توضیح بدید.
البته خودم یه چیزایی میدونم ولی میخوام بیشتر آشنا شم.
در کل برای چی ازش استفاده میشه و چه مزایایی داره.

Hotsun
25-02-2011, 13:09
انتخاب فرمت تکسچر:
آیا شما میخواین یک بازی با سرعت بالا ارائه بدین و کیفیت براتون خیلی مهم نیست یا میخواین با کیفیت بالا ارائه بدین و سرعت براتون مهم نیست؟
قطعاً هیچ کدام چون هر کسی دوست داره سرعت بالا رو در کنار کیفیت بالا ارائه بده.
البته اگر میخواین یک بازی مجانی ارائه بدین قطعاً باید بیشتر به فکر حجم باشین یا مردم راحت بتونن دانلود کنن.
الان در بیشتر بازی های تجاری از DDS استفاده میکنن ولی عجیب است که چرا انجین UDK اون رو ساپورت نمیکنه.
پس باید همه جانبه پاسخ داد که برای هر کسی همین جا جواب درستی بتونه پیدا شه پس فرمت های باب رو بررسی میکنیم و انتخاب رو به عهده خودتون میذاریم.
BMP:که به معنای Bitmap هست کیفیت بالایی رو ارائه میده و در عین حال حجم بالایی هم داره و به همین دلیل مدت لود شدنش اندکی زیاده.در ضمن به اصطلاح به این فرمت یک فرمت چند لایه میگن.
JPG:این فرمت خیلی کیفیت خوبی رو ارائه نمیده ولی حجمش فوق العاده پایینه یعنی وقتی یک BMP رو به JPG تبدیل میکنید ممکنه 30% افت کیفیت داشته باشین ولی حجمتون ممکنه حتی به زیر یک دهم هم برسه.امّا موقع لود شدن نفوذ زیادی از سیستم میخواد و به همین دلیل هم خیلی توصیه نمیشه و فقط برای کم حجم کردن کارها خوبه.
DDS:در این فرمت نسبت کیفیت به سرعت و حجم تقریباً یکسانه و از هر لحاظ ایده آل هست چون کیفیت خوبی رو هم ارائه میده.
PNG:کیفیت این فرمت خیلی به BMP نزدیکه طوری که ممکنه اصلاً تغییر کیفیت رو نبینید.در ضمن حجم از BMP کمتره ولی از JPG بالاتره و لود شدن این فرمت هم اندکی از JPG بیشتره.پس این فرمت میتونه یک فرمت ایده آل باشه.
Tiff:این فرمت هم تقریباً مثل PNG عمل میکنه.
TGA:این فرمت هم تقریباً مثل DDS عمل میکنه.
این هم جدولی هست که هر چند کامل نیست ولی بازم میتونه کمک کنه.

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

اگر فرمتی رو جا انداختم بهم بگین که به همین جا یه * قبلش اضافه کنم.

در ضمن تکنیک های ارتقای کیفیت مثل Anti-Aliasing و Anisotropic و Lightmapping رو بعداً میگم.
برای اینکه تاپیک اصولی بره جلو باید چگونگی در آوردن بازی خوب با سرعت بالا,کیفیت مناسب و حجم کم رو یاد داد بعد هم تکنیک های ویژه رو گفت.
مثلاً اگر الان من بیام یاد بدم Tessellation چیه که دیگه همه میرن تو کفش بازی دیگه کسی نمیسازه(ترجیحاً خودتون هیچ گونه تحقیق در این مورد نکنید چون همینجوری تاپیک پیش بره حداکثر یه هفته دیگه میرسیم بهش).

3Dmajid
25-02-2011, 14:06
لان در بیشتر بازی های تجاری از DDS استفاده میکنن ولی عجیب است که چرا انجین UDK اون رو ساپورت نمیکنه.ولی یونیتی ساپورت میکنه :31:

ممنون :11:

با این حساب فکر میکنم بهترین فرمت .tga باشه.

iload
25-02-2011, 18:21
انتخاب فرمت تکسچر:
الان در بیشتر بازی های تجاری از DDS استفاده میکنن ولی عجیب است که چرا انجین UDK اون رو ساپورت نمیکنه.



سلام

تا اون جایی که من میدونم فرمت DDS عکس رو به اندازه های مختلف تبدیل میکنه و تو خدش داره ( اگه DDS رو کانورت کرده باشید میبینید که به جای 1 فایل به شما 8 فال با اندازه های گوناگون میده ) خوب این کار رو آنریل خودش تو متورش میکنه حالا شما هر فرمتی که بدید .

Hotsun
13-03-2011, 13:49
پلیگن:
بعضی از سازندگان بازی ها واقعاً نمیدونن مدل هاشون چند تا پلیگن داشته باشه خوبه پس اگه از اون دسته بازی سازها هستین به لیست زیر نگاه کنین:
توجه:با توجه به نوع مدل ها ممکن هست این لیست مناسب نباشد و ارقام تماماً بر اساس یک بازی Real-time و حدودی گفته شده اند و ممکن است برای یک غول بزرگ در یک بازی تخیلی بسیار بیشتر از چیزی باشد که ذکر شده.
بازی با کیفیت بالا:
شخصیت اصلی:10000-5000پلیگن
شخصیت ها:5000-3500پلیگن
تفنگ ها در بازی اوّل شخص:1200-4500پلیگن
مدل های کم اهمیت یا دور:150-500پلیگن
مدل های مهم یا نزدیک:500-1500پلیگن
مدل های اساسی:1500 به بالا.
بازی با کیفیت متوسط:
شخصیت اصلی:5000-3500پلیگن
شخصیت ها:3500-1500پلیگن
تفنگ ها در بازی اوّل شخص:1000-2500پلیگن
مدل های کم اهمیت یا دور:100-350پلیگن
مدل های مهم یا نزدیک:350-1000پلیگن
مدل های اساسی:1000 به بالا.
بازی با کیفیت پایین:
شخصیت اصلی:3000-2000پلیگن
شخصیت ها:2500-1000پلیگن
تفنگ ها در بازی اوّل شخص:700-1800پلیگن
مدل های کم اهمیت یا دور:100-350پلیگن
مدل های مهم یا نزدیک:350-800پلیگن
مدل های اساسی:800 به بالا.

Hotsun
15-03-2011, 11:26
خب حالا میخوام تکنیک ها رو شروع کنم(من خودم در مورد تکنیک ها چیزهایی میدونم که قول میدم تو هیچ انجمن یا سایت فارسی دیگه شبیهش رو نمیتونید پیدا کنید پس با من همراه باشید).
Anti-Aliasing(خوش نمایی):
خب اوّل باید بگم که خیلی ها به اشتباه تلفظ میکنند اَنتی اَلیَسینگ که درستش اَنتی اِلایزینگ هست.
خب حالا این تکنیک چه کار میکنه؟
طوری عمل میکنه که شکستگی هایی که به علت کمبود پیکسل ها و پایین بودن رزولوشن به وجود میان رو بر طرف میکنه.
به تصویر زیر نگاه کنین:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]
البته خودم هم قبول دارم که یکم تصویر مات میشه ولی در نهایت سودش بیشتر از ضررشه.
حالا این کار رو چجوری انجام میده؟
خیلی راحت سطوح متفاوت از هم رو پیدا میکنه,مثلاً میاد میبینه دایره سیاهه ولی کنارش سفیده پس پیکسل های بین این دو رو با رنگی بین سیاه و سفید که خاکستری باشه پر میکنه که این رنگ ها در جاهای مختلف متفاوت هستند و البته وقتی شدت خوش نمایی بالا میره دوباره بین سطوح مابین رو پر میکنه یعنی تو مثال سفید و سیاه میاد بین خاکستری و سیاه و یک بار هم بین خاکستری و سفید رو پر میکنه و همینجوری ادامه میده طوری که الان در بعضی بازی ها این عمل تا 8X میتونه بالا بره.
به تصویر بزرگ شده خط بالا نگاه کنید خودتون متوجه میشید:
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

-----------------------------------------------------------------------------------------------------------
حالا یه مطلب که ربطی به تکنیک بالا نداره.
من میبینم که بعضی ها تشکر میکنن و بعضی ها هم مواردی رو میگن,اوّلاً که ازتون میخوام بیشتر مشارکت کنین دوماً میخوام بدونم واقعاً مطالب تا اینجا اونقدر ارزش داشتن که تشکر کردین یا همینجوری زدین برای دلخوشی من؟؟؟
میخوام ببینم اگه واقعاً مطالب مفید هستن ادامه بدم و اگر نه تا همینجا کافیه.

iload
15-03-2011, 12:12
حالا یه مطلب که ربطی به تکنیک بالا نداره.
من میبینم که بعضی ها تشکر میکنن و بعضی ها هم مواردی رو میگن,اوّلاً که ازتون میخوام بیشتر مشارکت کنین دوماً میخوام بدونم واقعاً مطالب تا اینجا اونقدر ارزش داشتن که تشکر کردین یا همینجوری زدین برای دلخوشی من؟؟؟
میخوام ببینم اگه واقعاً مطالب مفید هستن ادامه بدم و اگر نه تا همینجا کافیه.

سلام

چیو همینجا کافی من دارم چیز یاد میگیرم . :angry:

Hotsun
15-03-2011, 17:23
Vertical Sync:
بهش VSync هم میگن و کارش اینه که نمیگذاره فریم ریت بازی بالاتر از Refresh Rate مانیتور بره.
خب همونطور که میدونید بازی ها روی سیستم های مختلف با سرعت های مختلفی اجرا میشن که به تعداد فریم هایی که در هر ثانیه اون سیستم میتونه بگیره Frame Rate میگن و تعداد دفعاتی هم که مانیتور شما صفحه رو Refresh یا تازه سازی میکنه هم Refresh Rate نام داره و برای هر مانیتور ممکنه متفاوت باشه که معمولاً 30-45-60 هست که هر چی بیشتر باشه لرزش های مانیتور کمتر میشه و چشم کمتر ضعیف میشه و اگر فریم ریت بازی هم بالاتر باشه بازی روون تر اجرا میشه که اگر بین 30-60 باشه خوبه(توجه کنید که چشم انسان 25 فریم در ثانیه میبینه)حالا اگر مانیتورتون 60 تا بگیره ولی بازی 30 تا هیچ اتفاقی نمیوفته چون فوقش اینه که هر فریم رو مانیتور دو بار میگیره ولی اگر بازی 60 فریم و مانیتور 30 باشه به خاطر اینکه همه چیز رو نمیتونه خوب بگیره شما در بازی در حین چرخش یا حرکت ممکنه شکستگی هایی رو ببینید و این خیلی بده که VSync نمیگذاره بازی بیشتر از مانیتور فریم بگیره و همه چیز روون دیده میشه.
ولی باید تو تنظیمات بازی قابلیت برداشتن هم داشته باشه که اگر کسی خواست بنچ مارک بگیره و سیستمش رو تست کنه بتونه به فریم خیلی بالاتری هم برسه.

Hotsun
22-04-2011, 12:39
بعد مدت ها با ایده های جدید در زمینه نور پردازی در خدمتتون هستم:
نور در راهرو ها:
راهروهای بدون پنجره:
یه سیستم خیلی جالبی برای راهروها هست که میتونه خیلی کمکتون کنه و اونم اینه که میتونید مثلاً قسمت های مختلف راهروها رو که باید نور باشه نور قرار بدین و با رنج بزرگ تر از پهنای راهرو یه سری نور خاکستری هم بذارین که کل راهرو دیده بشه و با Ambience های خیلی پایین که معمولاً برای بازی های ترسناک استفاده میشه محیط دیده بشه و طبیعی تر به نظر بیاد.
راهروهای با پنجره:
روز:
نور های قوی و جهت دار در بیرون پنجره ها قرار بدین و اگر انجینتون پرتو نور رو ساپورت نمیکنه میتونید از Decal ها به عنوان پرتوی نور استفاده کنید.
فقط اگر دیدین که خیلی خوب محیط داخل راهرو دیده نمیشه میتونید از ترفند نورهای تاریک و خاکستری که بالاتر گفتم استفاده کنید.
شب:
اگر پنجره رو به ماه هست میتونید حتماً نورش رو لحاظ کنید و فقط با اسکای باکس نپیچونید قضیه رو,حتی میتونید جای استفاده از نور شبیه نور ماه در دوردست با رنج بزرگ از منبع های نور پشت هر پنجره استفاده کنید که رنج کمتری هم داشته باشن و سرعت بازی بره بالا.
اگر پنجرتون رو به ماه نیست حتماً از نورهایی که بیرون از پنجره هستن استفاده کنید تا طبیعی تر به نظر بیاد بازیتون.مثلاً وقتی نور یک مشعل یا نور لامپ یک اتاق دیگر یا نور چراغ برق خیابون روشنایی بیرون رو نشون داده اتمسفر بازی طوری خودش رو نشون میده که انگار همه جا عالیه و بازیکن شما توی موقعیت بد و در تاریکی گیر کرده و نورهای بیرون میخوان کمکش کنن و این خودش از لحاظ هنری میتونه پلیر رو برای تموم کردن بازی بیشتر متقاعد کنه.