آموزش های جامع Rhina Devlogs
#1
سلام
در این تاپیک آموزش های کامل و جامع دوست خوبم عرفان نیکویی رو قرار میدم ؛ 

آموزش اول :
فیزیک در بازیسازی | قسمت اول 

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

*دنیای واقعی جذاب نیست.

اگر دنیای واقعی به اندازه کافی جذاب بود، چه نیازی به بازی داشتیم؟
3
استفاده از قوانین فیزیکی که در دنیا حاکم هستن توی بازی باعث میشه بازی خشک و بی جون یا حتی حوصله سر بر بشه.
برای مثال بازی های ماریو، از جاذبه 9.81 استفاده نمیکنن، جاذبه های این بازی ها (و اکثرا بازی های اکشن) معمولا چند برابر جاذبه زمینه
این جاذبه نسبتا زیاد، باعث میشه حس هیجان و دراماتیک بودن صحنه بیشتر منتقل بشه و در کل حس بهتری رو به پلیر میده.

ولی بالاخره استفاده کنیم یا نه؟
39

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

 

راستی لینک کانال ایشون در تلگرام : https://t.me/RhinaDevlogs

حتما در کانال تلگرام اش عضو بشین
  پاسخ


 سپاس شده توسط: ARKEYA ، mostafanastary ، Amirhesam.KH ، FARZAD BLACK ، oak ، MdSarli ، saman ، ᔕinaᗪehghani
#2
فیزیک در بازیسازی | قسمت دوم

خب قسمت پیش گفتیم که فیزیک محض در بازی ها استفاده نمیشه چون جذابیت بازی رو ازش میگیره.

ولی استفاده از فیزیک کاریه که انجامش لازمه، بالاخره بازی یه نوع فیزیک لازم داره واقعی یا نه!
17 ‌ ‌ (برای مثال استفاده از جاذبه توی اکثر بازی ها لازمه)

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

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

توی بازی که دارم روش کار میکنم، اول از همه برای حرکت کاراکتر از نیرو ها استفاده کردم، و در خلاف جهت این نیرو، نیروی اصطکاک رو در سطح های مختلف با جنس های مختلف با استفاده از ضریب اصطکاک مشخص اون سطح محاسبه و اعمال کردم.
مشکلم الان این بود که این نیروی اصطکاک برای هر سطح متفاوت بود (مشخصا 
3 ولی قبلش بهش فکر نکرده بودم.) ولی نیروی پیش ران کاراکتر یکسان بود این باعث می شد توی هر سطح شتاب متفاوتی داشته باشه.

بخوام مشکلم رو بهتر بیان کنم، مثلا کاراکتر توی نفت، با شتاب 0.1 شروع میکرد ولی از اونجایی که شتاب رو محاسبه میکردم و اعمال میکردم به سرعت روی یخ می رسید اما دیر تر و حد سرعتی هم وجود نداشت.
در آخر هم به این نتیجه رسیدم که بجای استفاده از نیرو و شتاب، سرعت رو مستقیما تغییر بدم.
احتمال اینکه چیزی رو در روش اولم در نظر نگرفته باشم زیاده اما روش دوم خیلی ساده تره.

توی قسمت های بعد در مورد تغییراتی که میشه توی قوانین فیزیک انجام داد که به نتیجه دلخواه رسید صحبت میکنیم
4
  پاسخ


 سپاس شده توسط: shazde ، Amirhesam.KH ، FARZAD BLACK ، oak ، saman
#3
فیزیک در بازیسازی | قسمت سوم

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

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

یه توضیحی بدم برای کسایی که نمیدونن چی به چیه، اصطکاک جنبشی وقتی اعمال میشه که جسم در حرکت باشه، اصطکاک ایستایی -که اکثرا از جنبشی بیشتره- موقعی اعمال میشه که جسم تازه حرکت خودش رو شروع بکنه. هر دو اصطکاک هم خلاف جهت حرکت اعمال میشن.
فرمول کلی اصطکاک اینه:
f = μf * N
یه توضیح کلی بدم روی فرمول:
f:
مخفف Friction به معنای اصطکاکه
μf یا μk:
ضریب اصطکاک مورد نظره، k جنبشی و f ایستایی(در ضمن k یا f باید به صورت اندیس گذاشته بشه که من نتونستم اینکارو بکنم 23 ‌)
N:
نیروی تکیه گاهه، نیرویی که اگر جسم روی سطح صاف باشه، زمین به اندازه وزن (نه جرم 15 ‌) جسم به بالا وارد میکنه. سطح میتونه زاویه داشته باشه که یه مقدار پیچیده میشه بهش نمیپردازیم فعلا...

خب الان میخوایم حداکثر سرعت کاراکتر رو با توجه به ضریب اصطکاک اون حساب کنیم.
اول از همه میدونیم که رابطه سرعت حداکثر باید با ضریب اصطکاک معکوس باشه تا بتونیم به نتیجه دلخواه برسیم.
معکوس رو میشه دو جور درست کرد، یک، در مخرج بزاریم که اینجا سودی نداره، دو، میتونیم میزان حداکثر ضریب اصطکاک رو از میزان ضریب اصطکاک کم کنیم (حداکثر ضریب اصطکاک یکه، در نتیجه اگر مثلا ضریب اصطکاک فعلیمون 0.3 باشه، وقتی از حداکثر کم بشه 0.7 رو بدست میاریم)

تا الان داریم:
Vmax = (1 - μk) * C
(اینجا یه عدد ثابت به اسم C  هم داریم ضرب میکنیم که الان توضیح میدم)
حالا میگیم مثلا برای ضریب اصطکاک 0.3 سرعت 3، سرعت مورد نظر ماست. پس سرعت 3 و ضریب اصطکاک رو توی فرمول بالا میزاریم و عدد ثابتمون © در میاد.

قدم آخر اینه که میخوایم این تغییر سرعت با توجه به ضریب اصطکاک نرم تر باشه، یه راه حل خوب، به توان دو رسوندن عبارت معکوس شده ضریب اصطکاکه:
Vmax = (1 - μk)^2 * C

یه نکته کوچیک برای کسایی که علاقه دارن، اگر سطح زاویه دار باشه، یه ضربدر کسینوس زاویه هم بهش اضافه میشه 41

خب اینم از این، نظرتون رو بنویسین برام، برای قسمت بعد تصمیم نگرفتم در مورد چی توضیح بدم ولی یه فکری میکنم براش 1 ‌ فعلا... 30

@RhinaDevlogs
  پاسخ


 سپاس شده توسط: Amirhesam.KH ، FARZAD BLACK ، oak
#4
سلام ببخشید یکم دیر شد
آموزش تابع یا همون اکسپرشن کلمپ


#ریاضی_در_بازیسازی
#قسمت_1 
#تابع کلمپ Clamp

خب اول از همه، یه عذرخواهی بهتون بدهکارم که یه مقدار فعالیتم کم بوده، سرم یه دفعه شلوغ شد و فرصت نشد پست کنم 18
ولی بریم سر اصل مطلب

تابع کلمپ یه تابع ضابطه داره که سه تا متغیر عددی میگیره، x min max (جلوتر توضیح میدم)
 کلمپ 3 ضابطه ایه به شکل زیر: (فارسی مینویسم 4 ‌)
Clamp (x, min, max);
1- x<min —> min;
2- min <= x <= max —> x;
3- x>max —> max;

کار این تابع، چک کردن مقدار x عه، به صورتی که اگر از مقدار مینیمم min کمتر بود مینیمم رو برگردونه، اگر از ماکسیمم max بیشتر بود ماکسیمم رو، اگرم بین مینیمم و ماکسیمم بود خود x رو برگردونه.
خب بریم سر کاربرد تابع، تابع کلمپ مقدار x رو بین یه بازه خاص نگه میداره، نه میذاره بیشتر شه، نه کمتر
مثال ها:
1- x = 0, min = 5, max = 10; => Clamp(x, min, max) = 5;
2- x = 7, min = 5, max = 10; => Clamp(x, min, max) = 7;
3- x = 15, min = 5; max = 10; => Clamp(x, min, max) = 10;

کل این تابع همینه، امیدوارم خوب فهمیده باشین، احتمالا قسمت ریاضی بعدی لرپ خواهد بود. فعلا 3
  پاسخ


 سپاس شده توسط: oak
#5
ریاضی_در_بازیسازی
قسمت_2
تابع لرپ Lerp

برای این قسمت، بهتره که تابع کلمپ رو بلد باشین، اگر نیستین، قسمت 1 این سری رو بخونین
لرپ (Lerp) مختصر شده Linear Interpolation به معنای درون یابی خطیه. همونجور که از اسمش معلومه کار تابع برگردوندن یه مقدار بین دو مقدار دیگه س
54 ‌نکته جالب، این مقدار میتونه عدد، مختصات دو بعدی و سه بعدی، حتی رنگ هم باشه

تابع لرپ خیلی شبیه به میانگین عمل میکنه، به طوری که دو تا مقدار جمع میشن و تقسیم بر 2 میشن تا نقطه وسط (50 درصد) بدست بیاد، اما چیزی که توی لرپ متفاوته اینه که به تابع درصد دلخواه میدیم تا یه مقداری از بین 2 نقطه (نقطه شروع و پایان) رو پیدا کنیم:
(این درصد باید بین 0 و 1 باشه)
به طور ساده، لرپ برای اعداد (و مختصات ها) این شکلی کار میکنه:
Lerp(a, b, t) => a * (1-t) + b * t;
که پس از ساده سازی، به این میرسیم:
Lerp(a, b, t) => a + (b - a) * t;

نقطه a نقطه شروع و نقطه b نقطه پایان ماست. t همون درصدیه که در حالت عادی بین 0 تا 1 وارد تابع میکنیم.
منظور از حالت عادی، t کلمپ شده است. در حالت غیر عادی ( 23 ‌) هر عددی میتونه باشه، اما تفاوتش اینه که بیشتر از نقطه پایان میره جلو. برای مثال اگر داریم بین 5 تا 10 یک عددی رو لرپ کلمپ نشده میکنیم، اگر t بیشتر از 1 باشه، عدد نهایی ما بیشتر از 10 خواهد بود.

لرپ اکثرا برای تویین و نرم و تدریجی کردن حرکت یه آبجکت (یا عدد، هر چیزی میتونه باشه) استفاده میشه.

خب الان باید یه فهم کلی از لرپ داشته باشین، بریم سر نحوه استفاده ش (که اکثرا اشتباه استفاده میشه 4 ‌)
نکته هایی که باید رعایت بشه، این 2 تاست:
1- نقطه شروع ما، نقطه ی ثابتی باید باشه و نباید تغییر کنه
2- درصد یا t که به تابع میدیم باید متغیر باشه
(اگر این نکته ها رعایت نشن، هم به احتمال زیاد تابع کار میکنه، فقط نحوه حرکتی که میگیرین کاملا متفاوته و حتی ممکنه عجیب باشه)
شاید براتون سوال پیش بیاد که چطوری t رو متغیر کنیم، که جوابش ساده ست. اگر حرکت قراره x ثانیه طول بکشه، از لحظه شروع لرپ یه متغیر عددی (اسمش رو اینجا n در نظر میگیریم) ایجاد کنین و هر لحظه به متغیر یه deltaTime اضافه کنین. اگر لرپ کلمپ شده باشه:
t= n/x;

5454 ‌نکته اضافی که خیلی هم جالبه:
میشه t رو هم یه تابع در نظر گرفت و این تابع رو به لرپ داد. (مثال میزارم جلوتر)
نحوه کلی این کار به این شکله که، مثلا بگیم تابع F قراره برامون درصد نهایی یا همون t رو حساب کنه. برای مثال اگر حرکت سهمی درجه 2 بخوایم به این شکل انجام میشه:
F(t) = t * t;
خلاصه این کار نهایت به خودش نمیشناسه، و هر کاری که بخواین توی تابع میتونین با t بکنین.

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

سوالی داشتین بپرسین ، روزتون خوش 354
  پاسخ


 سپاس شده توسط: MRleader.10 ، oak


موضوع‌های مشابه…
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش پروژه محور ساخت بازی مار و پله mohsen_nasri 6 3,807 1403/10/24، 09:38 عصر
آخرین ارسال: Tggi
Star مهم آموزش خروجی اندروید روی سیستم شخصی rezamms 128 86,462 1403/10/23، 04:58 عصر
آخرین ارسال: Tggi
  مهم آموزش تصویری خروجی مستقیم - یکبار برای همیشه! rezamms 33 20,911 1401/2/13، 09:39 عصر
آخرین ارسال: kamran_cn
  خروجی اندرید davinmstr1 2 2,601 1400/8/4، 10:23 عصر
آخرین ارسال: ᔕinaᗪehghani
  AAB (بسته برنامه اندروید) چيست؟ + نحوه خروجي گرفتن در كرودوا ᔕinaᗪehghani 15 8,600 1400/6/21، 01:55 صبح
آخرین ارسال: mehdi1100

پرش به انجمن: