امروز : یکشنبه ۴ تیر ۱۳۹۶

شماره های تماس با ما

(10خط)     33333145 - 013



آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی


آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتیReviewed by هیات علمی پل گیلان on Jan 30Rating:

آموزش شیدر بارش برف در نرم افزار بازی سازی یونیتی موضوع دیگری از سری مقالات در حوضه آموزش طراحی و ساخت بازی از مجتمع آموزشی پل گیلان میباشد. مقاله و آموزش پیش رو توسط یکی از نویسندگان وبسایت The knights of unity نوشته شده است که توسط تیم مجتمع پل گیلان ترجمه شده و در اختیار شما بازی دوستان عزیز قرار می گیرد. امیدوارم این مقاله برای شما دوستداران عزیز عرصه بازیسازی مفید باشد.

آیا تابحال به این فکر کرده اید که بارش برف در زمینه بازی های انیمیشنی چه فرایندی دارد و برای انجام ان چه مدت زمانی صرف شده است؟ احتمالا بارها به این موضوع فکر کرده اید. در اینجا می خواهیم به شما نشان دهیم که  چگونه می توانید با ایجاد یک افکت تصویر، فصل صحنه خود در نرم افزار بازی سازی Unity را به سرعت تغییر دهید.

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

این کار چگونه انجام می شود؟

در بالا دو تصویر متفاوت از یک صحنه را میبینید. تنها تفاوت دو تصویر این است که برای تصویر دوم از افکت برف دوربین استفاده کردم. غیر از این هیچ چیز دیگری تغییر داده نشده است. این همه تغییر چگونه ممکن است؟

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

آماده سازی داده اولیه مورد نیاز

برای انجام این کار حداقل دو چیز لازم است:

    • Rendering path را در حالت deferred قرار دهید ( بنابه دلایلی نتوانستم روی حالت forward این افکت را پیاده کنم، زیرا سایه تصویر به خوبی رندرگیری نمی شد. اگر شما دلیل آن را می دانید، لطفا در قسمت نظرات پیام بگذارید.)

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

  • دوربین را از حالت Texture Mode به Depth Normal تغییر دهید.

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

تغییر حالت دوربین از Depth Normals به حالت Texture به ما اجازه می دهد که عمق صفحه (چگونگی قرارگیری پیکسل ها) و جهت آن ها را بررسی نماییم.

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

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

اما تمام این کارها فقط مراحل اولیه را شامل می شوند و هیچ افکت تولید نمی کنند. قسمت جذاب ماجرا تازه از اینجا شروع می شود…

شیدر

شیدر مورد نیاز ما باید یک شیدر تاریک (unlit) باشد، زیرا صفحه نور ندارد و ما هم نمی خواهیم نوری به آن اضافه نماییم. قالب عمومی این گونه است:

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

به این نکته توجه کنید که اگر یک شیدر تاریک (unlit) جدید ایجاد کنید (Create->Shader->Unlit Shader) همان کد قبل را دریافت خواهید کرد.

حالا بیاید فقط برروی قسمت اصلی تمرکز کنیم، یعنی شیدر تکه ای (fragment shader). در ابتدا باید تمام اطلاعاتی که توسط اسکریپت ScreenSpaceSnow تایید شده را دریافت کنیم.

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

اگر نمی دانید که چرا به تمام این اطلاعات نیاز داریم نگران نباشید. دلیل آن را با جزئیات برایتان توضیح می دهم.

برف را در کدام قسمت تصویر قرار دهیم

همانطور که قبلا گفتم، ما می خواهیم سطوحی را که به سمت بالا هستند پوشده از برف کنیم. از انجاییکه دوربین را در حالت Depth Normal تنظیم کرده ایم، پس کارمان آسان تر است. در اینجا کد ما این گونه است:

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

چرا این گونه است؟ می توانید پاسخ این سوال را در قسمت اسناد آموزشUnity به دست آورید:

بافت های عمقی برای نمونه برداری از شیدر ها، مثلا تنظیمات شیدرعمومی، استفاده می شوند. با کمک نمونه برداری به نام _CameraDepthTexture می توانید عمق بافت اصلی دوربین را نمونه برداری کنید.

_CameraDepthTexture عمق بافت اصلی دوربین است.

حالا باید کارمان را با نرمال های تصویر آغاز کنیم:

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

قسمت اسناد آموزشی Unity به ما نشان می دهد که عمق و نرمال های صفحه در فضاهای ۱۶ بیتی قرار گرفته اند. همانطور که در بالا نشان دادیم برای باز کردن هرکدام از آن ها باید از DecodeDepthNormal استفاده کنیم.

نرمال هایی که به این طریق به دست می آیند، نرمال های دوربین (camera-space) هستند؛ به این معنا که اگر دوربین را بچرخانیم نرمال ها هم تغییر خواهند کرد. اما ما نمی خواهیم که نرمال ها تغییر کنند بنابراین مجبوریم که آن را در ماتریس _CamToWorld که در اسکریپت قبل دیدید، ضرب کنیم. بااین کار نرمال های دوربین دیگر به زاویه دوربین وابسته نیستند، به جای آن با مختصات کلی تغییر می کنند.

دستورالعمل بالا برای این تنظیم شد که شیدر بتواند از این تغییرات استفاده کند. برای بررسی  درستیمحاسباتمان بهتر است که نتایج را دوباره مرور نماییم.

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

این رندرگیری را RGB می نامیم. در Unity مختصات Y به طور پیش فرض در بالاترین نقطه قرار دارد. به این معنا که رنگ سبز آستانه مختصات Y را نشان می دهد. تا این جا کارمان خوب پیش رفته است.

حالا بیایید آن را به فاکتور میزان برف تبدیل کنیم.

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

ما باید از کانال G استفاده کنیم، و استفاده از آن کافیست اما می خواهم پارا فراتر بگذارم تا بتوانیم آستانه بالا و پایین سطوح برفی را اندازه گیری کنیم. این کار به ما کمک می کند تا میزان برف موجود در صفحه را تعیین کنیم.

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

تکسچر برف

بدون وجود بافت اصلی، برف حالت طبیعی نخواهد داشت. دشوارترین قسمت زمانیست که باید یک بافت را روی اشیای ۳ بعدی پیاده کنید، در حالی که فقط یک تصویر ۲ بعدی دارید (یادتان هست که روی یک تصویر صفحه کار می کنیم؟). یک راه این است که موقعیت پیکسل ها را پیدا کنیم. سپس می توانیم از مختصات X و Z به عنوان مختصات بافت استفاده نماییم.

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

حالا یک سری محاسبات ریاضی انجام می شود که توصیف آن از حوصله این مقاله خارج است. تمام چیزی که باید بدانید این است ک vpos موقعیت دید، و wpos موقعیت کلیست که حاصلضرب ماتریس _CamToWorld در موقعیت دید است و با تقسیم بر سطوح دور (_ProjectionParams.z) به موقعیت کلی معتبر تبدیل می شود. درنهایت مختصات XZ را در پارامترتنظیمات _SnowTexScale  و سطوح دور ضرب می کنیم تا میزان مناسب رنگ برف را به دست آوریم.

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

تمام نتایج را ادغام کنید!

حالا وقت ان رسیده که تمام نتایج را باهم ادغام کنید!

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

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

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

درآخر آستانه بالا (set _TopThreshold) را به ۰٫۶ تغییر دهیم:

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

خلاصه مطالب

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

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

آموزش ایجاد شیدر بارش برف صحنه در نرم افزار بازی سازی یونیتی

 

در اینجا می توانید این افکت را به طور رایگان دانلود کرده و در پروژه خود استفاده کنید.

با تشکر از همراهی شما دوستان عزیز. امیدواریم که این مقاله مثمر ثمر بوده باشد.

 

منبع

تعداد مشاهده مطلب : 307 بار

لینک کوتاه مطلب : https://poulgilan.com/?p=17935


نام و نام خانوادگی ( الزامی)

ایمیل (الزامی)

وبسایت / وبلاگ (اختیاری)