ساخت تکسچر اطلس در بلندر

ساخت تکسچر اطلس (Texture Atlas) : همان طورکه در پست قبلی توضیح دادم استفاده از تکسچر اطلس در بهینه سازی مدل های سه بعدی برای استفاده در توسعه ی بازی ها، به طور قابل توجهی تاثیر گذاره.

ساخت تکسچر اطلس در بلندر: 

من از این مدل و از بلندر نسخه ی ۲٫۷۹ برای اینکار استفاده کرده ام.

ساخت تکسچر اطلس در بلندر

۱- اول اینکه دو شی پنگوئن و سخره رو با هم انتخاب میکنیم بعد در پنجره ی properties گزینه ی رندر رو انتخاب میکنیم {همان که در تصویر پایین با عدد دو مشخص شده و آیکون دوربین داره}. و از قمست تکسچر اطلس روی علامت بعلاوه کلیک میکنیم {نکتش اینه که  ابزار ساخت تکسچر اطلس فقط زمانی قابل استفاده و فعال است که از موتور Blender Render  استفاده کنید}. بعد یک اسم براش تعیین و تایید میکنیم ، این نام برای تصویر و uv-map هم استفاده میشه. بعد گزینه ی No_Unwrap  رو انتخاب میکنیم (جایی که روی تصویر با شماره ۴ مشخص کردم ) و بعد روی کلید (StartManualUnwrap) کلیک میکنیم.

ساخت تکسچر اطلس در بلندر

 

۲-صفحه رو به دو نیم افقی یا عمودی تقسیم میکنیم و یک قسمت رو ابزار UV map رو باز میکنیم و در طرف دیگه هر دو شکل که از قسمت قبل انتخاب شده اند رو به ادیت مد (Edit Mode) تغییر وضعیت میدیم. و با انتخاب همه و زدن کلید U روی صفحه کلید یک منو کنار موس باز میشه و گزینه اول رو انتخاب میکنیم و شکل باز شده در سمت ابزار UV Map  باز میشه مثل شکل زیر {یک شی توسط همین ابزار به لیست اشیاء اضافه میشه به نام TexureAtlas_mergedObject که کاری باهاش نداریم}.

ساخت تکسچر اطلس در بلندر

 

۳- بعد کلید های کنترل و A و بعد کنترل p رو وقتی موس داخل قسمت UV map و در سمت راست وجود داره میزنیم تا به ترتیب جزیره ها به اندازه میانگین تنظیم و داخل تصویر پک(محدود) شوند {بعضی وقت ها این کافی نیست و لازمه یکم اندازه ها رو تغییر بدیم تا با بزرگ تر کردن قسمت های مهم اندازه تصویر تکسچر بزرگتر و در نتیجه کیفیت بهتری داشته باشه اون قسمت ها}.

ساخت تکسچر اطلس در بلندر

۴-  رو دکمه ی (FinishManualUnwrap) کلیک میکنیم. و همون طور که در تصویر زیر با اعداد ۲-۳ مشخصه، اشیاء پنگوئن و سخره باقی مانده اند و آن شی ای که به صورت خودکار توسط ابزار تکسچر اطلس ساخته شده بود پاک شده است.

ساخت تکسچر اطلس در بلندر

۵- لازمه تکسچر های فعلی روی یک تصویر به صورت اطلس bake شود، پس در همان تب رندر گزینه ی Bake را انتخاب میکنیم و برای Bake mode گزینه ی تکسچر رو انتخاب میکنیم و یک شئ رو از لیست مثلا پنگوئن رو انتخاب میکنیم و روی دکمه ی پختن کلیک میکنیم {بسته به رزولوشنی که انتخاب کرده ایم مقداری طول میکشه تا تصویر ساخته بشه} .تیک Clear رو من یک بار و فقط برای اولین شی استفاده میکنم تا اون صفحه ی شطرنجی به رنگ مشکی تغییر کنه. وبعد شئ دوم رو انتخاب میکنیم و تیک Clear رو برمیداریم و دوباره کلید پختن رو می فشاریم.
ساخت تکسچر اطلس در بلندر

۶-بعد از اینکه تصویر به طور کامل پخته شداز منوی پایین صفحه گزینه ی image و بعد ذخیره روی دیسک رو انتخاب میکنیم.
ساخت تکسچر اطلس در بلندر

۷- از تب تکسچر اطلس گزینه ی selectGroup و بعد حذف بقیه ی UV ها رو میزنیم.
ساخت تکسچر اطلس در بلندر

۸- در آخر تکسچر های قبلی رو حذف میکنیم و از فایل تکسچر اطلس بجاش استفاده میکنیم و UV-mapping  رو هم یو وی مپِ تکسچر اطلس و انتخاب مکنیم و تمام.
ساخت تکسچر اطلس در بلندر

و این مدل (https://jgeek.ir/disk/post2/PenguinBaseMesh-completed.zip) بعد از تغییرات است.

بهینه سازی مدل با ساخت تکسچر اطلس (Texture Atlas)

بهینه سازی مدل با ساخت تکسچر اطلس (Texture Atlas) :

بهینه سازی مدل با ساخت تکسچر اطلس (Texture Atlas)

مدلی بهینه است که در زمان رندر نیاز به ساخت اشیاء کمتری داشته باشد، استفاده از روش تکسچر اطلس با پَک کردن همه ی تصاویر در یک تصویر و استفاده از یک متریال برای همه ی اشیاء باعث میشه بتونیم مدل رو در sdk با دسته بندی(batching) بهینه کنیم و تمام اشیاء را در یک شی ترکیب (combine) کنیم {من از jme استفاده میکنم و combine بعد از تبدیل به فرمت (j3o) قابل انجام است}. دسته بندی و ترکیب باعث میشه تعداد کمتری شی ساخته بشه و همچنین استفاده از تکسچر اطلس باعث میشه GPU در زمان رندر فقط از یک متریال استفاده کنه و با مرتفع کردن نیاز به تغییر وضعیت  (state change) برای هر شی از همان مدل، در نهایت باعث میشه GPU عملکرد بسیار بهتری داشته باشد.

به طور خلاصه کاری که تکسچر اطلس انجام میده اینه که :

۱- امکان ترکیب اشیاء مربوط به حجم هندسی مدل رو فراهم میکنه و در نتیجه تعداد شی ها کمتر میشه، هر یک حجم هندسی (geometry) برای نمایش یک draw call لازم داره و هر چه تعداد این draw call ها کمتر باشه نتیجه ی بهینه تری خواهیم داشت.

۲- یک متریال و یک تصویر برای تمام اشیاء یک مدل باعث میشه با حذف نیاز به تغییر وضعیت، پردازش کمتری به GPU برای رندر مدل تحمیل بشه.

به عنوان یک مثال:

فرض کنیم مدلی از یک خانه داریم که از دو شکل مکعب و هرم و یک pane برای ساختن حجم مدل و برای سقف یک تصویر و برای بدنه یک تصویر و برای کف یک تصویر را به عنوان تکسچر استفاده کرده ایم. پس سه تصویر داریم و سه متریال و سه uv-map و سه شی برای حجم هندسی مدل (geometry).

این در حالت عادی و به تنهایی مشکل قابل لمسی ایجاد نمیکنه ولی وقتی از این مدل ۱۰۰ نمونه در محیط بازی بسازیم، میشه ۳۰۰ شی و ۳۰۰ بار فراخوانی متد draw برای هر یو وی مپ و سه تصویر{احتمالا کش میشه در حافظه ولی مطمئن نیستم}. اگر این مدل رو با ساخت تکسچر اطلس به پروژه ایمپورت کنیم و بعد از تبدیل به فرمت بومی  دسته بندی (batching) کنیم وبا هم ترکیب کنیم در نتیجه برای ساخت صد نمونه و رندر آن ۱۰۰ شی ساخته میشه و به دلیل استفاده از یک uv-map برای هر سه شی ۱۰۰ draw call اتفاق می افته و نتیجه بسیار بهتری خواهیم داشت.

مراحل ساخت تکسچر اطلس در بلندر رو در این پست توضیح دادم.

بهینه سازی مدل های سه بعدی با استفاده از اصلاح کننده ی decimate در بلندر

بهینه سازی مدل های سه بعدی با استفاده از اصلاح کننده ی decimate در بلندر: مدلی بهینه است که بدون تغییر در ظاهر با چند ضلعی های کمتری ساخته شده باشه یا اصطلاحاً (low poly) باشه. گاهی اوقات لازمه برای کم کردن وقت و هزینه از مدل های آماده در وب استفاده کنیم که خب بعضی هایشان (high poly) هستند و برای استفاده در محیط بازی بهنیه نیستند و پردازش بسیار بیشتری به سیستم کاربر تحمیل میشه.

یک از راه های بهنیه کردن مدل های سه بعدی استفاده از اصلاح کننده (modifier) {“اصلاح کننده” با توجه به ترجمه ی مترجم گوگل} است که در حالت (object Mode) انجام میشه.

برای اینکار لازم است :

۱- از مدل Audi R8 برای اینکار استفاده میکنم و بلندر نسخه ی ۲٫۷۹ .

بهینه سازی مدل های سه بعدی با استفاده از اصلاح کننده ی decimate در بلندر

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

۲-پس در حالت (object Mode) و در قسمت (properties) {برای من در سمت راست و پایین صفحه قرار داره} روی آیکون آچارفرانسه کلیک کنید و بعد از لیست گزینه ی decimate رو انتخاب کنید:

بهینه سازی مدل های سه بعدی با استفاده از اصلاح کننده ی decimate در بلندر

۳- با تغییر مقدار نسبت (Ratio) که عددی اعشاری و بین ۰ تا یک است به همان نسبت تعدادی از ضلع ها ی اضافه حذف میشه و باعث میشه وجه های کمتری داشته باشیم که در نهایت روی تعداد راس ها هم تاثیر میذاره و مدل چندین برابر بهینه تر میشه.

بهینه سازی مدل های سه بعدی با استفاده از اصلاح کننده ی decimate در بلندر

۴- در اینجا من اون رو به یک دهم تغییر میدم و تعداد وجه ها تغییر میکنه:

بهینه سازی مدل های سه بعدی با استفاده از اصلاح کننده ی decimate در بلندر

۵-و در آخر لازمه کلید (Apply) رو بزنید تا تغییرات اعمال بشه. و اگر در حالت (Edit Mode) دو مدل رو پیش و پس از اینکار مقایسه کنیم به وضوح تغییرات قابل تشخیص است:

بهینه سازی مدل های سه بعدی با استفاده از اصلاح کننده ی decimate در بلندر
بهینه سازی مدل های سه بعدی با استفاده از اصلاح کننده ی decimate در بلندر