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

ساخت تکسچر اطلس (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 اتفاق می افته و نتیجه بسیار بهتری خواهیم داشت.

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