Material / Material Instance
Material Instance Constant / Material Instance Time Varying
سلام دوستان
مدتیه سرم خیلی شلوغه. ولی خوشبختانه اساتید هوای بقیه رو دارن . خب خدارو شکر.:20:
فقط گفتم یه تایمی جور کنم بیام جواب عادل جان رو بدم که این طور که پیداست خیلی این در اون در زد و جواب نگرفت.
نقل قول:
Material
Material Instances (Constant)
Material Instance (Time Varying)
آقا کسی نمیتونه به صورت مختصر یه دید اجمالی از این ها به من بده تا بفهمم
مختصر همین جا (از این که کتاب ها و منابع خوبی رو به من پیشنهاد کردین ممنونم:11: ولی چی میشه یه کم این جا توضیح بدین!!)
تفاوت در کاربرد
خب عادل جان قبل این که شروع کنم، توی تاپیک حداقل 40 بار گفتم دوستانی که می خوان شروع کنن حتما حتما تاپیک رو بخونن. یادمه به خودتم اختصاصا یه بار گفتم، اگه بیشتر نگفته باشم. توی تاپیک مختصر توضیحی که می خوای هست. فقط نمی دونم چرا بعضی از دوستان فکر می کنن من باهاشون دشمنی چیزی دارم که به حرفم گوش نمی دن.
به هر حال... ببین، ما توی آنریل یه کلاسی داریم به نام MaterialInterface. همه ی این عناصری که شما اسم بردی فرزند این MaterialInterface هستن. حالا هر چیزی که شما متریال روش می ندازی، اعم از BSP، Terrain ، استاتیک مش، اسکلتال مش، Particle System، LensFlare و هر چیز دیگه، اون پروپرتی که متریال رو ازت می گیره از نوع Material یا حتی MaterialInstance نیست. بلکه از نوع MaterialInterface تعریف شده. این طوری آنریل به شما اجازه می ده، هر جا از هر کدوم که خواستی استفاده کنی، چون همگی فرزند MaterialInterface هستند.
حالا از تفاوت ها. کارت گرافیک فقط با شیدر سروکار داره و توی آنریل شیدر یعنی متریال، نه چیز دیگه. این به این معنیه که زمانی که شما یه متریال می ندازی روی یه مش، زمان رندر اون مش، این متریال کامل توی گرافیک لود میشه. یکی از مزایای MaterialInstance اینه که متریال جدیدی نمی سازه. همون متریالی که به عنوان Parent براش تعریف کردی توی گرافیک لود میشه.
یه مثال بخوام بزنم از تفاوتش توی عمل اینه که، زمانی که شما 20 تا مدل مختلف توی صحنه داری که متریال هاش توی یه مایس و فقط یه تکسچر یا یه پارامترشون متفاوته، اگه از Material براشون استفاده کرده باشی، موقع رندر گرافیک 20 تا شیدر رو پردازش می کنه، ولی اگه از MaterialInstance استفاده کرده باشی، فقط یه شیدر پردازش میشه و هر بار فقط یه سری پارامتراش عوض میشه. و این یعنی یه فریم ریت به مراتب بالاتر.:5:
در کل Material Editor فقط برای ساخت خود متریال استفاده میشه. متریال تنها موردیه که به صورت فیزیکی روی دیسک قرار می گیره. در مقابل MaterialInstance فقط میاد یه Reference به متریال اصلی نگهداری می کنه به علاوه ی پارامتر هایی که طراح تعیین کرده. در نتیجه یه مزیت دیگه که توی مثال قبل Material Instance ها دارن اینه که تو حالتی که 20 تا مدلت متریال دارن، باید برای هر تغییر کوچیکی توی متریال، 20 بار تغییر رو انجام بدی، ولی توی حالتی که از Material Instance استفاده کردی، فقط یه بار تغییر رو می دی اونم توی متریال اصلی.
به جاش Material Instance ها با ادیتور Unreal Material Instance Editor باز می شن که خب اگه بازش کنی می بینی در قیاس با Material Editor ، ادیتور خیلی کوچیک و ساده ای هست.
خب طرز استفادش. برای اینکه بتونی یه Material Instance بسازی لازمه توی متریال اصلیت یه سری Parameter دشته باشی. حالا این پارامتر می تونه یه تکسچر باشه، یا یه بردار(مثلا برای رنگ) و یا یه اسکالار (همون عدد). بعد از اینکه پارامترهای مورد نیاز رو ساختی متریالت رو سیو می کنی و توی Content Browser روش کلیک می کنی. دو تا گزینه ی Create New Material Instance برای همین کار هستن.
حالا می مونه تفاوت Constant و Time Varying. بیش از 98 در صد اوقات شما فقط با Constant کار داری، حتی ممکنه یه بازی کامل بدون استفاده از Time Varying بسازی. پس اصلش رو روی این توضیح می دم. توی Constant همون طور که از اسمش پیداست، پارامترهایی که داری رو یه بار و فقط یه بار مقدار دهی می کنی، یعنی بین بازی دیگه تغییری نمی کنه. مثال های زیادیشو توی Content Browser پیدا می کنی. برای Constant زمانی که از روشی که گفتم Material Instance Constant رو ساختی، بازش کن و پارامترهایی که می خوای توش تعیین کنی رو کنارش تیک بذار تا فعال بشن. الانه دیگه می تونی مقدار های دلخواهتو بهش بدی. (در صورتی که تیک رو نذاشته باشی، مقدار رو در نظر نمی گیره و مقداری که توی خود متریال تعیین شده رو استفاده می کنه)
Time Varying هم (دوباره همون طور که از اسمش پیداست) بسته به زمان تغییر می کنه، و در حقیقت وابسته به زمان هست. توی Content Browser هم 10 تایی بیشتر پیدا نمی کنی، کلا خیلی کم کاربرده. البته این به این معنی نیست، که به درد بخور نباشه، اتفاقا چنتا از کار ها هست که بدون استفاده از TimeVarying اصلا نمی شه انجامشون داد ولی خب از لحاظ تعداد کم کاربرده. بیشترین کاربردش هم توی ساخت Decal هست (دیگه اینو که می دونی چیه؟)
توی TimeVarying همون پارامترهای Constant رو داری، فقط با این تفاوت که می تونی به هر پارامتر چند مقدار بدی، مثلا به یه پارامتر عددی، عدد 5 رو می دی و تایمشو روی 3 ثانیه تنظیم می کنی، بعد دو باره تایمشو 2 می دی روی 2 ثانیه و یه دونه هم روی صفر تنظیم می کنی. این طوری موقع اجرا اول کار مقدار 5 رو میده به اون پارامتر، بعد از 3 ثانیه مقدارش میشه 2 و بعد از 2 ثانیه صفر میشه.
الانه شما فقط توی ادیتور ها می چرخی، قاعدتا تا 4-3 ماه دیگه هم همین طور می مونه. زمانی که به اسکریپت برسی، کاربرد Material Instance ها رو بیشتر درک می کنی، اونجا دیگه یه جزئ همیشگی از بازیت می شه این Material Instance.
سعی هم بکن تا جایی که می تونی ازش استفاده کنی. مثلا یه جا که یه مدل ساده میاری توی بازیت و می خوای به 3 رنگ مختلف ازش استفاده کنی، نیا و 3 متریال مختلف براش بساز، فقط یه متریال بساز و رنگ رو به عنوان پارامتر توش تعیین کن. دیگه از اینجا برای هر کدوم از رنگ ها فقط لازمه یه Material Instance بسازی. همون طور که گفتم Material Instance ها هم از لحاظ Performance خیلی خیلی مهمن و هم از نظر سادگی کار طراح.
یه نمونه ی پر کاربردشم اگه بخوای توی Content Browser پیدا کنی، میشه متریال دار و درخت ها. عموما چنتا متریال اصلی ساخته شده و بقیه همه Material Instance هایی هستن که از روی همین متریال ها ساخته شدن.
توی Material Instance هم اگه خواستی متریال اصلی رو پیدا کنی، پروپرتی Parent رو انتخاب کن و ذره بین کنارش رو بزن. تمام.
نقل قول:
خوب اگه بخوای به طور خیلی ساده بدونی این میشه که:
constant: به طور خیلی ساده میشه گفت این خاصیت برای اینه که مثلا شما میخوای از روی تکستچر یه متریال بسازی (مثلا متریال برای تنه ی درخت) شما اول تکستچر رو به add اضافه میکنی بعد ب add یه constant با رنگ سبز به مقدار کم بهش میدی تا این تکستچر یه جور حالت تار سبز به خودش بگیره(چه مثال مزخرفی زدم:13:) یا مثلا میخوای متریال یه آهن بسازی با با درون مایه ی زنگ زدگی که با یه رنگ حدود قهوه ای به متریال آهن اضافه میکنی تا حالت زنگ زدگی بگیره.
کد:
http://udn.epicgames.com/Three/MaterialsCompendium.html#Constant
برای تایم هم میتونی بری به آدرس زیر تا ببینی چکار میکنه (ماوس رو ببر رو عکس تا ببینی چی میشه). حالا کاربردشو خودت حدس بزن:
کد:
http://udn.epicgames.com/Three/MaterialsCompendium.html#Time
نینجا جان شما رفتی نود های Constant و Time رو که جزئی از خود متریال هستن توضیح دادی. منظور ایشون Material Instance ها بوده که اصلا یه Asset جدا هست.
خب دیگه واسه این هفتتون بسه، پر رو میشید.:31:
تا بعد که سرم خلوت شه بای.:8: