حالت های blend در گیم میکر 2 قسمت اول


حالت های blend در گیم میکر 2 قسمت اول


اگر از گیم میکر استدیو 2 استفاده می کنید حتما به حالت های blend بر خواهید خورد. حالت های blend در گیم میکر راه خوبی برای دادن افکت های گرافیکی خاص و جالب هنگام رسم هستند. در این مقاله ما عملکرد blend را در گیم میکر برای شما شرح می دهیم.

نگاه کلی

به طور کلی حالت های blend در بازی باعث رسم چیز های مخلوط به همراه چیز هایی که از قبل در حال رسم هستند می شود. هر چیزی که شما در صفحه رسم می کنید از چهار عنصر تشکیل شده است: قرمز، سبز، آبی و آلفا. این عناصر به صورت پیشفرض و یا با استفاده از bm_normal رسم می شوند. این حالت blend همه پیکسل های صفحه را به همراه رنگ هایشان و مقادیر آلفا را بدون تغییر رسم می کند. در گیم میکر 2 ما چندین حالت پیش ساخته blend داریم که باعث می شود رفتار رسم چیزها دچار تغییر شود.

در گیم میکر استدیو 2 هنگامی که یک پیکسل رسم می شود رنگ منبع و رنگ مقصد وجود دارد. رنگ مبدا، رنگی است که قرار است رسم شود و رنگ مقصد، رنگی است که از قبل در پیکسلی که قصد رسم آن را داریم وجود دارد.

زمانی که رنگ جدیدی برای یک پیکسل تعیین می کنید، گیم میکر رنگ مقصد و مبدا را با توجه به رفتار blend ترکیب می کند. چهار عنصر نامبرده در بالا هر کدام در یک متغیر نوع float با مقادیر بین 0 تا 1 ذخیره می شوند. مقادیر جدید این عناصر با ضرب هر عنصر در مقدار رنگ عنصر مبدا و ضرب کردن هر عنصر مقصد و لحاظ کردن چند فاکتور و جمع زدن همه آنها به دست می آید.

حالت های اولیه blend

گیم میکر استدیو 2 از تابع gpu_set_blendmode() برای تغییر حالت blend مورد استفاده در بازی شما استفاده می کند. برای استفاده از حالت های blend باید قبل از رسم چیزی که قصد تغییر رنگش را دارید ابتدا از این تابع استفاده کنید و پس از پایان رسم دوباره blend را به حالت عادی بازگردانید. به مثال زیر دقت کنید

gpu_set_blendmode(bm_add);
draw_self();
gpu_set_blendmode(bm_normal);

کد بالا اسپرایت یک instance را در حالت additive رسم می کند. این حالت یکی از چهار حالت اولیه blend در گیم میکر است: حالت های اولیه blend به شرح زیر هستند:

bm_normal

bm_add

bm_subtract

bm_max

همه ما میدانیم در حالت bm_normal چیز ها همانطور که هستند رسم می شوند بنابراین نگاهی به سایر حالت های اولیه blend در گیم میکر استدیو 2 می اندازیم.

حالت bm_add

این حالت رنگ های منبع و مقصد پیکسل ها را با هم جمع می کند(اما تغییری در مقادیر الفا اعمال نمی کند). به عنوان مثال، اگر تصویر پس زمینه یک رنگ جامد(یکپاچه یک رنگ) است و از ترکیب رنگ RGB (120،25،35) استفاده می کند، پس از اعمال bm_add مقدار نهایی RGB برای هر رنگ پیکسل چیزی شبیه به (220،20،100) خواهد بود. به خاطر داشته باشید در ترکیب رنگ RGB مقادیر بین 0 تا 255 هستند، از این رو این مقدار بالاتر از 255 یا کمتر از 0 نخواهد شد.

استفاده از این حالت blend برای ایجاد درخشش نئون مناسب است، اغلب از این حالت برای افکت های نوری یا لیزر استفاده می شود. به طور کلی برای هر چیزی که نیاز به درخشش یا نورانی بودن دارید این حالت blend مناسب است.

حالت bm_subtract

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

تصور کنید قصد دارید مقدار رنگ قرمز همه پیکسل هایی که در یک منطقه از اتاق رسم می شوند را به میزان 25% کاهش دهید. در اولین قدم باید مقدار 25% از 255 را محاسبه کنید و سپس آن را به مقدار RGB تبدیل و سپس آن را در حالت bm_subtract استفاده کنید. چیزی مثل کد های زیر:

 

var red = (25 / 100) * 255;
var col = make_colour_rgb(red, 0, 0);
gpu_set_blendmode(bm_subtract);
draw_rectangle_colour(0, 0, 128, 256, col, col, col, col, false);
gpu_set_blendmode(bm_normal);

با دنبال کردن همین قاعده، اگر بخواهید روشنایی پس زمینه را 50%درصد کاهش بدهید کافی است همه مقدار های RGB را کسر کنید. مثلا (255،255،255) به (128،128،128). از این حالت blend برای رسم سایه یا خلق افکت های fade out استفاده می شود.

حالت bm_max

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

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

نکته نهایی که باید در مورد حالت های blend بدانید این است که آن ها  vertex batch را می شکنند. از این رو شما نباید از آن ها به صورت مختلط و به صورت همزمان بر روی چندین instance استفاده کنید. روش بهینه این است که یک آبجکت controller ایجاد کنید حالت blend را تنظیم و سپس از with() یا روش های دیگر برای رسم تصاویر مورد نیاز در instance مقصد قبل از تنظیم مجدد حالت  blend به bm_normal استفاده شود.








ارسال نظر




رفتن به بالا