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

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