بافت، بافت، بافت

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

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

بخش‌هایی از این مقاله بر اساس آثار ارائه‌شده و دارای حق چاپ توسط Arm Limited است.

ایجاد اطلس بافت

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

مش هایی که اطلس بافت مشترک دارند
شکل 1. هایلایت زرد در صحنه رندر شده (سمت چپ) مش هایی را مشخص می کند که اطلس بافت را به اشتراک می گذارند (راست).

به حداقل رساندن تعداد قرعه کشی های یک فریم بازی یک عنصر مهم در دستیابی به عملکرد رندر بهینه است. استفاده از بافت یکسان برای اشیاء مختلف یکی از عوامل ترکیب آنها در یک فراخوانی است. کاهش تماس‌های قرعه‌کشی به‌ویژه برای بازی‌هایی که محدود به CPU هستند، مهم است، زیرا هر تماس قرعه‌کشی هنگام پردازش توسط درایور گرافیک، سربار CPU را متحمل می‌شود. اطلس های بافت همچنین تعداد فایل های دارای بافت را در داده های زمان اجرا بازی شما کاهش می دهند. صدها یا حتی هزاران بافت را می توان در تعداد بسیار کمتری از فایل های اطلس بافت ادغام کرد.

هنگام ایجاد مش های سه بعدی باید طرح اطلس بافت خود را برنامه ریزی کنید. اگر اطلس قبل از ساخت دارایی مش تالیف شده باشد، دارایی مش باید به دنبال اطلس بافت باز شود. اگر اطلس پس از تألیف، با استفاده از ابزارهای ادغام یا ایجاد اطلس در نرم افزارهای نقاشی ایجاد شود، جزیره UV باید بر اساس بافت بازآرایی شود.

دسته بندی تماس قرعه کشی خاص موتور

موتور بازی Unity دارای ویژگی قرعه کشی تماس است که می تواند به طور خودکار اشیاء را ترکیب کند. برای واجد شرایط بودن برای دسته‌بندی خودکار، اشیا باید دارای یک ماده مشترک از جمله بافت‌ها باشند و ثابت علامت‌گذاری شوند.

Unreal Engine 4 برای دسته‌بندی به تنظیمات دستی نیاز دارد. می توانید اشیاء را قبل از وارد کردن آنها به Unreal در نرم افزار سه بعدی ادغام کنید. Unreal همچنین دارای ابزار UE4 Actor Merging است که می تواند مش ها را ترکیب کرده و فایل های اطلس بافت ایجاد کند.

Mipmaps را ایجاد کنید

Mipmaps نسخه هایی با وضوح پایین تر از یک بافت هستند. مجموعه ای از mipmap برای یک بافت معین، زنجیره mipmap نامیده می شود. هر سطح mipmap بعدی در یک زنجیره وضوح کمتری نسبت به سطح قبلی دارد. Mipmaps برای پیاده سازی بافت LOD (سطح جزئیات) در حین رندر استفاده می شود. هنگامی که یک بافت mipmapped به مرحله بافت متصل می شود، سخت افزار گرافیک از فضای بافت اشغال شده توسط یک قطعه برای انتخاب یک سطح از زنجیره mipmap استفاده می کند. هنگام رندر کردن یک صحنه سه‌بعدی، شیء دورتر از دوربین از نقشه تصویری با وضوح پایین‌تر نسبت به همان شیء نزدیک‌تر به دوربین استفاده می‌کند.

یک بافت mipmapped از حافظه بیشتری در مقایسه با بافت غیر mipmapped استفاده می کند. سطوح اضافی mipmap ردپای حافظه یک بافت را تا 33 درصد افزایش می دهد. اگر یک بافت در فاصله ثابتی از دوربین ترسیم شود، تولید mipmap استفاده غیر ضروری از حافظه است.

یک زنجیره mipmap با وضوح بافت پایه 512x512 پیکسل
شکل 2. یک زنجیره mipmap، وضوح پایه بافت 512x512 پیکسل است.

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

Mipmapping همچنین می تواند کیفیت بصری را با کاهش همخوانی بافت بهبود بخشد. همخوانی بافت را می توان به عنوان یک اثر سوسو زدن در مناطق دورتر از دوربین مشاهده کرد.

نمونه ای از aliasing بافت
شکل 3. نمونه ای از aliasing بافت. یک تصویر بدون mipmaps (سمت چپ) و تصویر دیگر با mipmaps (راست) ارائه می‌شود. همخوانی بافت را می توان در داخل مستطیل قرمز در تصویر سمت چپ مشاهده کرد.

جزئیات mipmap خاص موتور

Unreal Engine 4 برای استفاده از mipmapping به ابعاد بافتی نیاز دارد که توان دو (مثلاً 512x1024، 128x128) باشد. اگر یک یا هر دو بعد بافت قدرت دو نباشد، زنجیره‌های Mipmap تولید نمی‌شوند.

موتور Unity به‌طور خودکار بافت‌هایی را با ابعادی که قدرت دو نیستند، مقیاس‌بندی می‌کند تا mipmaps ایجاد کند. مطمئن شوید که فایل‌های بافت منبع شما دو بعدی هستند تا از این مقیاس‌گذاری جلوگیری کنید.

حالت های فیلتر بافت مناسب را انتخاب کنید

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

نزدیکترین

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

دو خطی

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

مقایسه بین فیلتر نزدیکترین و دوخطی
شکل 4. مقایسه نزدیکترین فیلتر بافت (چپ) و دوخطی (راست).

سه خطی

هنگامی که یک مش را رندر می کنید که در آن فاصله رئوس از دوربین متفاوت است، ممکن است چندین سطح mipmap در طول رندر انتخاب شوند. تغییرات بین دو سطح mipmap ممکن است منجر به برش شدید قابل توجه در نقطه انتقال شود. فیلتر سه خطی با انجام فیلترینگ دوخطی در دو سطح مختلف mipmap و درونیابی نتایج، این انتقال ها را نرم می کند. استفاده از چندین سطح mip و درون یابی، سه خطی را از لحاظ محاسباتی گرانتر از دوخطی می کند.

مقایسه فیلتر دو خطی و سه خطی
شکل 5. مقایسه فیلتر بافت دوخطی (چپ) و سه خطی (راست). منطقه بزرگنمایی شده تفاوت در رندر در طول انتقال mipmap را متضاد می کند.

ناهمسانگرد

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

مقایسه بین فیلتر ناهمسانگرد 1x و 2x
شکل 6. مقایسه فیلتر دوخطی/1x ناهمسانگرد (سمت چپ) و دوخطی/2x فیلتر ناهمسانگرد (راست)

استراتژی انتخاب حالت

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

فیلتر بافت ممکن است تا نیمی از کل انرژی مصرفی GPU را تشکیل دهد، انتخاب فیلترهای بافت ساده‌تر در صورت امکان، راهی عالی برای کاهش تقاضای انرژی بازی شما است.

اندازه های بافت را بهینه کنید

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

هنگام رندر کردن یک مش که از چندین بافت در متریال خود استفاده می کند، به طور انتخابی وضوح برخی بافت ها را کاهش دهید. به عنوان مثال، هنگام استفاده از بافت پراکنده 1024x1024، کاهش ناهمواری یا بافت نقشه فلزی به 512x512 ممکن است تنها با حداقل تأثیر بر کیفیت تصویر امکان پذیر باشد. تأثیر همه این آزمایش‌های تغییر اندازه را تأیید کنید تا مطمئن شوید که سطح کیفی مورد نظر را به خطر نمی‌اندازند.

از فضای رنگی مناسب استفاده کنید

بسیاری از بسته‌های نرم‌افزاری که برای نوشتن بافت استفاده می‌شوند، با استفاده از فضای رنگی sRGB کار می‌کنند و صادر می‌کنند. بافت های پراکنده که به صورت رنگ پردازش می شوند، ممکن است از فضای رنگی sRGB استفاده کنند. بافت‌هایی که به‌عنوان رنگ پردازش نمی‌شوند، مانند نقشه‌های فلزی، زبری یا معمولی، نباید در فضای رنگی sRGB صادر شوند.

تنظیمات بافت موتور بازی شامل پارامتری برای استفاده از فضای رنگی sRGB در بافت است.

تنظیمات بافت sRGB در Unity و Unreal Engine 4
شکل 7. تنظیمات بافت sRGB در Unity (سمت چپ) و Unreal Engine 4 (راست).

از آنجایی که داده‌های پیکسلی چنین بافت‌هایی به‌عنوان داده رنگی استفاده نمی‌شوند، استفاده از فضای رنگی sRGB تصاویری نادرست ایجاد می‌کند.

ارائه یک مرد متالیک زبری در فضای رنگی خطی در مقابل sRGB
شکل 8. نقشه فلزی زبری خطی (غیر sRGB) (سمت چپ) و نقشه فلزی زبری sRGB (راست). بازتاب های سمت راست نادرست به نظر می رسند.

از فشرده سازی بافت استفاده کنید

فشرده‌سازی بافت یک الگوریتم فشرده‌سازی تصویر است که بر روی داده‌های پیکسلی فشرده‌نشده اعمال می‌شود که منجر به بافتی می‌شود که می‌تواند به سرعت توسط سخت‌افزار گرافیک در حین رندر کردن از حالت فشرده خارج شود. استفاده موثر از فشرده سازی بافت می تواند استفاده از حافظه را کاهش دهد و عملکرد را با کمترین تأثیر بر کیفیت بصری افزایش دهد. سه الگوریتم فشرده سازی بافت در اندروید رایج ترین هستند: ETC1، ETC2 و ASTC . برای بازی های مدرن، ASTC به طور کلی بهترین گزینه اولیه است، در صورتی که بازی شما دستگاه هایی را هدف قرار دهد که از ASTC پشتیبانی نمی کنند، ETC2 یک گزینه بازگشتی است.

ETC1

ETC1 توسط تمام دستگاه های اندرویدی پشتیبانی می شود. ETC1 تنها از یک حالت چهار بیت در هر پیکسل از داده های رنگی RGB پشتیبانی می کند. ETC1 از کانال های آلفا پشتیبانی نمی کند. بسیاری از موتورهای بازی که از ETC1 پشتیبانی می‌کنند، اجازه می‌دهند از تعیین بافت ETC1 دوم برای نمایش داده‌های کانال آلفا استفاده شود.

ETC2

ETC2 توسط بیش از 90٪ از دستگاه های فعال اندروید پشتیبانی می شود. دستگاه های بسیار قدیمی که از OpenGL ES 3.0 API پشتیبانی نمی کنند، نمی توانند از ETC2 استفاده کنند. در مقایسه با ETC1، ETC2 اضافه می کند:

  • پشتیبانی از کانال آلفا، هر دو هشت بیت و تک بیت 'punchthrough'
  • نسخه‌های sRGB بافت‌های RGB و RGBA
  • یک و دو کانال، R11 و RG11، بافت

ASTC

ASTC توسط بیش از 75٪ از دستگاه های Android فعال پشتیبانی می شود. ASTC دارای اندازه‌های بلوک فشرده‌سازی قابل تنظیم است که به شما کنترل دقیقی می‌دهد تا نسبت فشرده‌سازی را در برابر کیفیت تصویر برای یک بافت معین متعادل کنید. ASTC اغلب قادر به دستیابی به کیفیت برتر در اندازه حافظه مشابه با ETC2 یا کمیت مشابه در اندازه حافظه کوچکتر از ETC2 است.

مقایسه بصری فرمت های فشرده سازی بافت با استفاده از همان تصویر منبع
شکل 9. مقایسه بین تصاویری که عبارتند از: فشرده نشده (سمت چپ، 17 مگابایت)، فشرده شده با ETC1 (مرکز، اندازه 3 مگابایت)، فشرده شده با ASTC (راست، اندازه 2.5 مگابایت).

سرعت فشرده سازی بافت

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

فشرده سازی بافت در موتورهای بازی

اگر از موتور بازی استفاده می‌کنید، ممکن است مجبور شوید قالب فشرده‌سازی بافت (ETC یا ASTC) خود را در سطح پروژه انتخاب کنید. برای پشتیبانی از چندین فرمت فشرده سازی برای حداکثر سازگاری، ممکن است به کار بیشتری نیاز باشد. ویژگی Texture Compression Format Targeting در Google Play Asset Delivery می‌تواند به گنجاندن فرمت‌های متعدد در بازی شما کمک کند و تنها بهینه‌ترین قالب را در زمان نصب به یک دستگاه خاص ارائه دهد.

UV ها را باز کنید

جزیره UV را تا حد امکان صاف نگه دارید. این به روش های زیر به بافت شما کمک می کند:

  • بسته بندی جزایر UV آسان تر است و منجر به هدر رفتن فضای کمتر می شود.
  • اشعه ماوراء بنفش مستقیم «اثر پلکانی» روی بافت ها را کاهش می دهد.
  • بسته بندی UV خوب، وضوح مطلوب را از بافت تضمین می کند.
  • بافت با کیفیت بهتر، حتی اگر اشعه ماوراء بنفش کمی از صاف شدن منحرف شده باشد.
یک جزیره UV بهینه نشده در مقابل یک جزیره UV بهینه شده
شکل 10. یک جزیره UV بهینه نشده (سمت چپ) و یک جزیره UV صاف/بازشده (راست).

درزهای بافت قابل مشاهده روی یک مدل بد به نظر می رسند. سعی کنید درزهای UV را در جاهایی قرار دهید که کمتر دیده شوند. برای کمک به ایجاد نقشه‌های معمولی بهتر، جزیره UV خود را در جایی که لبه‌ها تیز هستند تقسیم کنید و فضایی در اطراف جزیره باقی بگذارید.

از جزئیات نامحسوس اجتناب کنید

هنگام ایجاد آثار هنری، جزئیاتی را اضافه نکنید که دیده نمی شوند، به خصوص در بازی هایی که برای دستگاه هایی با صفحه نمایش کوچکتر طراحی شده اند. ساختن یک بافت 4096x4096 با جزئیات پیچیده در یک مدل صندلی کوچک که به سختی در گوشه اتاق قابل مشاهده است، تلف می شود. در موارد خاص، ممکن است لازم باشد لبه ها را اغراق کنید (اضافه کردن هایلایت اضافی) و سایه زدن برای بهبود درک شکل.

یک بافت کوچک در مدلی که در فاصله رندر شده است استفاده می شود
شکل 11. یک بافت کوچک 256x256 فاقد جزئیات بیش از حد در یک مدل سرباز ارائه شده در فاصله استفاده شده است.

جزئیات پخت

دستگاه های تلفن همراه دارای صفحه نمایش کوچکتر و سخت افزار گرافیکی کمتری نسبت به رایانه های شخصی یا کنسول های بازی هستند. به جای محاسبه افکت‌هایی مانند انسداد محیط یا برجسته‌سازی خاص در زمان اجرا، در صورت امکان، آن‌ها را در بافت منتشر در نظر بگیرید. این به عملکرد کمک می‌کند و نمایان بودن جزئیات شما را تضمین می‌کند.

هایلایت های پخت و انسداد محیط به یک بافت پراکنده
شکل 12. نقاط برجسته و انسداد محیط در بافت منتشر (سمت چپ) پخته شده و در بازی (راست) رندر شده است.

از رنگ آمیزی رنگ استفاده کنید

اگر توانایی ایجاد سایه‌زن‌های سفارشی را دارید و مش‌هایی دارید که رنگ‌بندی مشابه یا یکنواخت دارند، از رنگ‌های رنگی روی مش‌های قابل اجرا استفاده کنید. با رنگ آمیزی، از بافت خاکستری استفاده می شود که حافظه بافت کمتری نسبت به بافت RGB می گیرد. داده های رنگ هر رأس توسط سایه زن برای رنگی کردن مش اعمال می شود. یک روش رنگ آمیزی جایگزین استفاده از ماسک RGB و اعمال بافت بر اساس محدوده رنگ ماسک است.

بافتی در مقیاس خاکستری که در زمان اجرا رنگ آمیزی شده است
شکل 13. یک بافت خاکستری (چپ) که در زمان اجرا برای مدل ستون (راست) رنگ آمیزی شده است.

کانال های بافت را بسته بندی کنید

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

سه بافت تک کاناله در یک بافت چند کاناله ترکیب شده اند
شکل 14. سه بافت تک کانال (سمت چپ) در یک بافت چند کاناله (راست) ترکیب شده اند. داده‌های انسداد محیط به رنگ قرمز، نقشه زبری/صافی به سبز و نقشه فلزی به آبی اختصاص داده می‌شوند.

هنگام بسته بندی، داده ها را با بیشترین جزئیات به کانال سبز اختصاص دهید. از آنجایی که چشم انسان به رنگ سبز حساس تر است، سخت افزار گرافیک معمولا بیت های بیشتری را به کانال سبز اختصاص می دهد. به عنوان مثال، نقشه زبری/صافی معمولاً جزئیات بیشتری نسبت به نقشه فلزی دارد و انتخاب بهتری برای تخصیص به کانال سبز است.

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

یک کانال آلفا در یک بافت دیگر بسته بندی شده است
شکل 15. نقشه کدورت کانال آلفا در یک بافت همراه با یک نقشه زبری/صافی و یک نقشه فلزی بسته بندی شده است.

مطمئن شوید که بافت های بسته بندی شده شما روی فضای رنگی RGB خطی تنظیم شده اند و نه sRGB.

ایجاد نقشه های معمولی

نگاشت عادی تکنیکی است که بدون استفاده از هندسه اضافی به مدل سه بعدی ظاهر جزئیات می دهد. ویژگی‌هایی مانند چروک‌ها یا پیچ‌ها که ممکن است برای مدل‌سازی به مثلث‌های زیادی نیاز داشته باشند، می‌توانند با استفاده از یک نقشه معمولی شبیه‌سازی شوند. بسته به سبک هنری و جهت بازی ممکن است نقشه برداری معمولی مناسب باشد یا نباشد.

مدلی رندر شده با و بدون نقشه معمولی
شکل 16. مدلی که بدون نقشه معمولی رندر شده است (سمت چپ)، و همان مدل رندر شده با یک نقشه معمولی (مرکز)، و بافت نرمال نقشه (راست).

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

بهترین شیوه های نقشه معمولی

در زیر برخی از بهترین روش ها برای ایجاد نقشه معمولی آمده است:

از قفس استفاده کنید

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

قفسی که شبکه چند ضلعی کم را احاطه کرده است
شکل 17. قفسی که شبکه چند ضلعی کم را احاطه کرده است.
مدلی که با استفاده از یک نقشه معمولی با و بدون قفس رندر شده است
شکل 18. یک مدل رندر با استفاده از یک نقشه معمولی تولید شده با یک قفس (سمت چپ) در مقایسه با یک مدل ارائه شده با استفاده از یک نقشه معمولی تولید شده بدون قفس (سمت راست).

پخت مطابق با نام مش

اگر نرم افزار پخت شما از آن پشتیبانی می کند، مطابق با نام مش بپزید. این ویژگی مشکل پیش‌بینی نادرست نقشه معمولی را کاهش می‌دهد. هنگامی که اشیاء خیلی به هم نزدیک هستند، ممکن است به طور غیرمنتظره ای نقشه معمولی خود را روی چهره اشتباهی پخش کنند. مطابقت با نام مش تضمین می کند که پخت فقط روی سطح صحیح انجام می شود. برای اطلاعات بیشتر در مورد این ویژگی در Substance Painter، به این صفحه مراجعه کنید . برای اطلاعات بیشتر در مورد این ویژگی در Marmoset Toolbag، به این صفحه مراجعه کنید .

مش را منفجر کنید

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

توری منفجر شده برای پخت نقشه معمولی
شکل 19. توری منفجر شده برای پخت نقشه معمولی

درزها را به حداقل برسانید

اشعه ماوراء بنفش مداوم بر روی لبه های سخت باعث ایجاد درزهای قابل مشاهده می شود، UV را بر روی لبه های سخت تقسیم می کند تا این اثر به حداقل برسد. هنگام تنظیم گروه های صاف کننده، به عنوان یک قانون کلی، زاویه را کمتر از 90 درجه نگه دارید. درزهای UV باید گروه صاف کننده متفاوتی روی مثلث ها داشته باشند.

،

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

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

بخش‌هایی از این مقاله بر اساس آثار ارائه‌شده و دارای حق چاپ توسط Arm Limited است.

ایجاد اطلس بافت

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

مش هایی که اطلس بافت مشترک دارند
شکل 1. هایلایت زرد در صحنه رندر شده (سمت چپ) مش هایی را مشخص می کند که اطلس بافت را به اشتراک می گذارند (راست).

به حداقل رساندن تعداد قرعه کشی های یک فریم بازی یک عنصر مهم در دستیابی به عملکرد رندر بهینه است. استفاده از بافت یکسان برای اشیاء مختلف یکی از عوامل ترکیب آنها در یک فراخوانی است. کاهش تماس‌های قرعه‌کشی به‌ویژه برای بازی‌هایی که محدود به CPU هستند، مهم است، زیرا هر تماس قرعه‌کشی هنگام پردازش توسط درایور گرافیک، سربار CPU را متحمل می‌شود. اطلس های بافت همچنین تعداد فایل های دارای بافت را در داده های زمان اجرا بازی شما کاهش می دهند. صدها یا حتی هزاران بافت را می توان در تعداد بسیار کمتری از فایل های اطلس بافت ادغام کرد.

هنگام ایجاد مش های سه بعدی باید طرح اطلس بافت خود را برنامه ریزی کنید. اگر اطلس قبل از ساخت دارایی مش تالیف شده باشد، دارایی مش باید به دنبال اطلس بافت باز شود. اگر اطلس پس از تألیف، با استفاده از ابزارهای ادغام یا ایجاد اطلس در نرم افزارهای نقاشی ایجاد شود، جزیره UV باید بر اساس بافت بازآرایی شود.

دسته بندی تماس قرعه کشی خاص موتور

موتور بازی Unity دارای ویژگی قرعه کشی تماس است که می تواند به طور خودکار اشیاء را ترکیب کند. برای واجد شرایط بودن برای دسته‌بندی خودکار، اشیا باید دارای یک ماده مشترک از جمله بافت‌ها باشند و ثابت علامت‌گذاری شوند.

Unreal Engine 4 برای دسته‌بندی به تنظیمات دستی نیاز دارد. می توانید اشیاء را قبل از وارد کردن آنها به Unreal در نرم افزار سه بعدی ادغام کنید. Unreal همچنین دارای ابزار UE4 Actor Merging است که می تواند مش ها را ترکیب کرده و فایل های اطلس بافت ایجاد کند.

Mipmaps را ایجاد کنید

Mipmaps نسخه هایی با وضوح پایین تر از یک بافت هستند. مجموعه ای از mipmap برای یک بافت معین، زنجیره mipmap نامیده می شود. هر سطح mipmap بعدی در یک زنجیره وضوح کمتری نسبت به سطح قبلی دارد. Mipmaps برای پیاده سازی بافت LOD (سطح جزئیات) در حین رندر استفاده می شود. هنگامی که یک بافت mipmapped به مرحله بافت متصل می شود، سخت افزار گرافیک از فضای بافت اشغال شده توسط یک قطعه برای انتخاب یک سطح از زنجیره mipmap استفاده می کند. هنگام رندر کردن یک صحنه سه‌بعدی، شیء دورتر از دوربین از نقشه تصویری با وضوح پایین‌تر نسبت به همان شیء نزدیک‌تر به دوربین استفاده می‌کند.

یک بافت mipmapped از حافظه بیشتری در مقایسه با بافت غیر mipmapped استفاده می کند. سطوح اضافی mipmap ردپای حافظه یک بافت را تا 33 درصد افزایش می دهد. اگر یک بافت در فاصله ثابتی از دوربین ترسیم شود، تولید mipmap استفاده غیر ضروری از حافظه است.

یک زنجیره mipmap با وضوح بافت پایه 512x512 پیکسل
شکل 2. یک زنجیره mipmap، وضوح پایه بافت 512x512 پیکسل است.

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

Mipmapping همچنین می‌تواند کیفیت بصری را با کاهش همخوانی بافت بهبود بخشد. همخوانی بافت را می توان به عنوان یک اثر سوسو زدن در مناطق دورتر از دوربین مشاهده کرد.

نمونه ای از aliasing بافت
شکل 3. نمونه ای از aliasing بافت. یک تصویر بدون mipmaps (سمت چپ) و تصویر دیگر با mipmaps (راست) ارائه می‌شود. همخوانی بافت را می توان در داخل مستطیل قرمز در تصویر سمت چپ مشاهده کرد.

جزئیات mipmap خاص موتور

Unreal Engine 4 برای استفاده از mipmapping به ابعاد بافتی نیاز دارد که توان دو (مثلاً 512x1024، 128x128) باشد. اگر یک یا هر دو بعد بافت قدرت دو نباشد، زنجیره‌های Mipmap تولید نمی‌شوند.

موتور Unity به‌طور خودکار بافت‌هایی را با ابعادی که قدرت دو نیستند، مقیاس‌بندی می‌کند تا mipmaps ایجاد کند. مطمئن شوید که فایل‌های بافت منبع شما دو بعدی هستند تا از این مقیاس‌گذاری جلوگیری کنید.

حالت های فیلتر بافت مناسب را انتخاب کنید

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

نزدیکترین

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

دو خطی

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

مقایسه بین فیلتر نزدیکترین و دوخطی
شکل 4. مقایسه نزدیکترین فیلتر بافت (چپ) و دوخطی (راست).

سه خطی

هنگامی که یک مش را رندر می کنید که در آن فاصله رئوس از دوربین متفاوت است، ممکن است چندین سطح mipmap در طول رندر انتخاب شوند. تغییرات بین دو سطح mipmap ممکن است منجر به برش شدید قابل توجه در نقطه انتقال شود. فیلتر سه خطی با انجام فیلترینگ دوخطی در دو سطح مختلف mipmap و درونیابی نتایج، این انتقال ها را نرم می کند. استفاده از چندین سطح mip و درون یابی، سه خطی را از لحاظ محاسباتی گرانتر از دوخطی می کند.

مقایسه فیلتر دو خطی و سه خطی
شکل 5. مقایسه فیلتر بافت دوخطی (چپ) و سه خطی (راست). منطقه بزرگنمایی شده تفاوت در رندر در طول انتقال mipmap را متضاد می کند.

ناهمسانگرد

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

مقایسه بین فیلتر ناهمسانگرد 1x و 2x
شکل 6. مقایسه فیلتر دوخطی/1x ناهمسانگرد (سمت چپ) و دوخطی/2x فیلتر ناهمسانگرد (راست)

استراتژی انتخاب حالت

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

فیلتر بافت ممکن است تا نیمی از کل انرژی مصرفی GPU را تشکیل دهد، انتخاب فیلترهای بافت ساده‌تر در صورت امکان، راهی عالی برای کاهش تقاضای انرژی بازی شما است.

اندازه های بافت را بهینه کنید

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

هنگام رندر کردن یک مش که از چندین بافت در متریال خود استفاده می کند، به طور انتخابی وضوح برخی بافت ها را کاهش دهید. به عنوان مثال، هنگام استفاده از بافت پراکنده 1024x1024، کاهش ناهمواری یا بافت نقشه فلزی به 512x512 ممکن است تنها با حداقل تأثیر بر کیفیت تصویر امکان پذیر باشد. تأثیر همه این آزمایش‌های تغییر اندازه را تأیید کنید تا مطمئن شوید که سطح کیفی مورد نظر را به خطر نمی‌اندازند.

از فضای رنگی مناسب استفاده کنید

بسیاری از بسته‌های نرم‌افزاری که برای نوشتن بافت استفاده می‌شوند، با استفاده از فضای رنگی sRGB کار می‌کنند و صادر می‌کنند. بافت های پراکنده که به صورت رنگ پردازش می شوند، ممکن است از فضای رنگی sRGB استفاده کنند. بافت‌هایی که به‌عنوان رنگ پردازش نمی‌شوند، مانند نقشه‌های فلزی، زبری یا معمولی، نباید در فضای رنگی sRGB صادر شوند.

تنظیمات بافت موتور بازی شامل پارامتری برای استفاده از فضای رنگی sRGB در بافت است.

تنظیمات بافت sRGB در Unity و Unreal Engine 4
شکل 7. تنظیمات بافت sRGB در Unity (سمت چپ) و Unreal Engine 4 (راست).

از آنجایی که داده‌های پیکسلی چنین بافت‌هایی به‌عنوان داده رنگی استفاده نمی‌شوند، استفاده از فضای رنگی sRGB تصاویری نادرست ایجاد می‌کند.

ارائه یک مرد متالیک زبری در فضای رنگی خطی در مقابل sRGB
شکل 8. نقشه فلزی زبری خطی (غیر sRGB) (سمت چپ) و نقشه فلزی زبری sRGB (راست). بازتاب های سمت راست نادرست به نظر می رسند.

از فشرده سازی بافت استفاده کنید

فشرده‌سازی بافت یک الگوریتم فشرده‌سازی تصویر است که بر روی داده‌های پیکسلی فشرده‌نشده اعمال می‌شود که منجر به بافتی می‌شود که می‌تواند به سرعت توسط سخت‌افزار گرافیک در حین رندر کردن از حالت فشرده خارج شود. استفاده موثر از فشرده سازی بافت می تواند استفاده از حافظه را کاهش دهد و عملکرد را با کمترین تأثیر بر کیفیت بصری افزایش دهد. سه الگوریتم فشرده سازی بافت در اندروید رایج ترین هستند: ETC1، ETC2 و ASTC . برای بازی های مدرن، ASTC به طور کلی بهترین گزینه اولیه است، در صورتی که بازی شما دستگاه هایی را هدف قرار دهد که از ASTC پشتیبانی نمی کنند، ETC2 یک گزینه بازگشتی است.

ETC1

ETC1 توسط تمام دستگاه های اندرویدی پشتیبانی می شود. ETC1 تنها از یک حالت چهار بیت در هر پیکسل از داده های رنگی RGB پشتیبانی می کند. ETC1 از کانال های آلفا پشتیبانی نمی کند. بسیاری از موتورهای بازی که از ETC1 پشتیبانی می‌کنند، اجازه می‌دهند از تعیین بافت ETC1 دوم برای نمایش داده‌های کانال آلفا استفاده شود.

ETC2

ETC2 توسط بیش از 90٪ از دستگاه های فعال اندروید پشتیبانی می شود. دستگاه های بسیار قدیمی که از OpenGL ES 3.0 API پشتیبانی نمی کنند، نمی توانند از ETC2 استفاده کنند. در مقایسه با ETC1، ETC2 اضافه می کند:

  • پشتیبانی از کانال آلفا، هر دو هشت بیت و تک بیت 'punchthrough'
  • نسخه‌های sRGB بافت‌های RGB و RGBA
  • یک و دو کانال، R11 و RG11، بافت

ASTC

ASTC توسط بیش از 75٪ از دستگاه های Android فعال پشتیبانی می شود. ASTC دارای اندازه‌های بلوک فشرده‌سازی قابل تنظیم است که به شما کنترل دقیقی می‌دهد تا نسبت فشرده‌سازی را در برابر کیفیت تصویر برای یک بافت معین متعادل کنید. ASTC اغلب قادر به دستیابی به کیفیت برتر در اندازه حافظه مشابه با ETC2 یا کمیت مشابه در اندازه حافظه کوچکتر از ETC2 است.

مقایسه بصری فرمت های فشرده سازی بافت با استفاده از همان تصویر منبع
شکل 9. مقایسه بین تصاویری که عبارتند از: فشرده نشده (سمت چپ، 17 مگابایت)، فشرده شده با ETC1 (مرکز، اندازه 3 مگابایت)، فشرده شده با ASTC (راست، اندازه 2.5 مگابایت).

سرعت فشرده سازی بافت

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

فشرده سازی بافت در موتورهای بازی

اگر از موتور بازی استفاده می‌کنید، ممکن است مجبور شوید قالب فشرده‌سازی بافت (ETC یا ASTC) خود را در سطح پروژه انتخاب کنید. برای پشتیبانی از چندین فرمت فشرده سازی برای حداکثر سازگاری، ممکن است به کار بیشتری نیاز باشد. ویژگی Texture Compression Format Targeting در Google Play Asset Delivery می‌تواند به گنجاندن فرمت‌های متعدد در بازی شما کمک کند و تنها بهینه‌ترین قالب را در زمان نصب به یک دستگاه خاص ارائه دهد.

UV ها را باز کنید

جزیره UV را تا حد امکان صاف نگه دارید. این به روش های زیر به بافت شما کمک می کند:

  • بسته بندی جزایر اشعه ماوراء بنفش آسانتر است و منجر به فضای کمتری می شود.
  • اشعه ماوراء بنفش مستقیم "اثر پله" را بر روی بافت ها کاهش می دهد.
  • بسته بندی اشعه ماوراء بنفش خوب ، وضوح مطلوب را از بافت تضمین می کند.
  • بافت با کیفیت بهتر ، حتی اگر اشعه ماوراء بنفش کمی از صاف کردن تحریف شود.
یک جزیره UV بهینه نشده در مقابل یک جزیره UV بهینه شده
شکل 10. یک جزیره UV بهینه نشده (سمت چپ) و یک جزیره UV صاف/بدون بند (سمت راست).

درزهای بافت قابل مشاهده روی یک مدل بد به نظر می رسند. سعی کنید هر درز UV را در مکانهایی که کمتر قابل مشاهده هستند قرار دهید. برای کمک به ایجاد نقشه های طبیعی بهتر ، جزیره UV خود را که لبه ها تیز است تقسیم کرده و فضای کمی در اطراف جزیره به جا بگذارید.

از جزئیات غیرقابل تصور خودداری کنید

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

از یک بافت کوچک بر روی مدلی که از فاصله دور استفاده می شود استفاده می شود
شکل 11. یک بافت کوچک 256x256 که فاقد جزئیات بیش از حد در یک مدل سرباز است که از راه دور ارائه می شود.

جزئیات پخت

دستگاه های تلفن همراه دارای صفحه نمایش های کوچکتر و سخت افزار گرافیکی قدرتمند نسبت به رایانه های شخصی یا کنسول های بازی هستند. به جای محاسبه اثرات مانند انسداد محیط یا برجسته سازی خاص در زمان اجرا ، آنها را در صورت امکان "پخت" را در بافت پراکنده در نظر بگیرید. این به عملکرد کمک می کند و از دید جزئیات شما اطمینان می دهد.

نکات برجسته پخت و اکونوژن محیط به یک بافت پراکنده
شکل 12. نکات برجسته و انسداد محیط پخته شده در بافت پراکنده (سمت چپ) و در بازی (سمت راست) ارائه می شود.

از رنگ آمیزی رنگ استفاده کنید

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

یک بافت خاکستری در زمان اجرا رنگ شده است
شکل 13. یک بافت خاکستری (سمت چپ) در زمان اجرا برای مدل ستون (سمت راست) رنگ شده است.

کانال های بافت را بسته بندی کنید

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

سه بافت تک کانال که در یک بافت چند کانال ترکیب شده اند
شکل 14. سه بافت تک کانال (سمت چپ) در یک بافت چند کانال (سمت راست) ترکیب شده اند. داده های انسداد محیط به قرمز ، نقشه زبری/صافی به سبز و نقشه فلزی به آبی اختصاص داده شده است.

هنگام بسته بندی ، داده ها را با بیشترین جزئیات به کانال سبز اختصاص دهید. از آنجا که چشم انسان نسبت به سبز حساس تر است ، سخت افزار گرافیکی معمولاً بیت های بیشتری را به کانال سبز اختصاص می دهد. به عنوان مثال ، نقشه زبری/صافی معمولاً جزئیات بیشتری نسبت به نقشه فلزی خواهد داشت و انتخاب بهتری برای اختصاص به کانال سبز است.

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

یک کانال آلفا که به بافت دیگری بسته شده است
شکل 15. یک نقشه کدورت کانال آلفا به همراه نقشه زبری/صافی و نقشه فلزی در یک بافت بسته بندی شده است.

اطمینان حاصل کنید که بافت های بسته بندی شده شما روی یک فضای رنگی RGB خطی تنظیم شده اند و نه SRGB.

نقشه های عادی ایجاد کنید

نقشه برداری عادی تکنیکی است که به یک مدل سه بعدی ظاهر جزئیات بدون استفاده از هندسه اضافی می دهد. ویژگی هایی از قبیل چین و چروک یا پیچ هایی که ممکن است به مثلث زیادی برای مدل نیاز داشته باشند ، می توانند با استفاده از یک نقشه عادی شبیه سازی شوند. نقشه برداری عادی بسته به سبک هنری و جهت بازی ممکن است مناسب باشد یا نباشد.

مدلی که با و بدون نقشه عادی ارائه شده است
شکل 16. یک مدل ارائه شده بدون نقشه معمولی (سمت چپ) ، و همان مدل ارائه شده با نقشه معمولی (مرکز) و بافت نقشه معمولی (سمت راست).

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

نقشه معمولی بهترین روشهای

در زیر بهترین روشهای برای ایجاد نقشه عادی وجود دارد:

از قفس استفاده کنید

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

قفس اطراف مش چند ضلعی کم
شکل 17 قفس اطراف مش چند ضلعی کم.
مدلی که با استفاده از یک نقشه معمولی با و بدون قفس ارائه شده است
شکل 18. یک مدل ارائه شده با استفاده از یک نقشه عادی که با یک قفس (سمت چپ) تولید می شود در مقایسه با مدل ارائه شده با استفاده از یک نقشه عادی که بدون قفس (سمت راست) تولید می شود.

تطبیق پخت با نام مش

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

مش را منفجر کنید

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

مش منفجر شده برای پخت طبیعی نقشه
شکل 19 یک مش منفجر شده برای پخت نقشه طبیعی

درزها را به حداقل برسانید

UV مداوم در لبه های سخت باعث ایجاد درزهای قابل مشاهده ، اشعه ماوراء بنفش در لبه های سخت می شود تا این اثر به حداقل برسد. هنگام تنظیم گروه های صاف کننده ، به عنوان یک قاعده انگشت شست ، زاویه را کمتر از 90 درجه نگه دارید. درزهای اشعه ماوراء بنفش باید یک گروه هموار سازی متفاوت در مثلث ها داشته باشند.

،

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

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

بخش‌هایی از این مقاله بر اساس آثار ارائه‌شده و دارای حق چاپ توسط Arm Limited است.

اطلس بافت ایجاد کنید

Atlas Texture بافتی است که برای حاوی داده های تصویر از اشیاء گرافیکی متعدد ، مانند مشی های سه بعدی یا اسپری های 2D طراحی شده است. به جای اینکه هر شیء دارای بافت خاص خود باشد ، از بافت اطلس برای ترکیب تصاویر از هر شی استفاده می شود.

مش هایی که یک اطلس بافت دارند
شکل 1. برجسته زرد در صحنه ارائه شده (سمت چپ) مشی هایی را نشان می دهد که ATLAS TEXTURE (سمت راست) را به اشتراک می گذارد.

به حداقل رساندن تعداد تماس های قرعه کشی یک قاب بازی یک عنصر مهم در دستیابی به عملکرد بهینه ارائه است. استفاده از همان بافت برای اشیاء مختلف یکی از عواملی برای ترکیب آنها در یک تماس تساوی است. کاهش تماس های قرعه کشی برای بازی هایی که CPU محدود هستند ، از اهمیت ویژه ای برخوردار است ، زیرا هر یک از تماس های قرعه کشی به عنوان پردازش شده توسط درایور گرافیک ، پردازنده CPU را به سر می برد. Atlases Texture همچنین تعداد پرونده های دارایی بافت را در داده های زمان اجرا بازی شما کاهش می دهد. صدها یا حتی هزاران بافت را می توان در تعداد بسیار کمتری از پرونده های اطلس بافتی تلفیق کرد.

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

دسته تماس مخصوص قرعه کشی موتور

موتور بازی Unity دارای یک ویژگی Batching Call Draw است که می تواند به طور خودکار اشیاء را با هم ترکیب کند. برای واجد شرایط بودن برای دسته بندی خودکار ، اشیاء باید یک ماده مشترک از جمله بافت را به اشتراک بگذارند و استاتیک مشخص شوند.

Enreal Engine 4 برای جمع آوری نیاز به راه اندازی دستی دارد. شما می توانید قبل از وارد کردن آنها به غیر واقعی ، اشیاء را در نرم افزار سه بعدی ادغام کنید. Unreal همچنین شامل ابزار ادغام بازیگر UE4 است که می تواند مش ها را با هم ترکیب کند و پرونده های اطلس بافت را ایجاد کند.

mipmaps تولید کنید

MIPMAPS نسخه های با وضوح پایین تر از یک بافت است. مجموعه ای از mipmaps برای یک بافت خاص ، زنجیره mipmap نامیده می شود. هر سطح MIPMAP بعدی در یک زنجیره وضوح پایین تر از سطح قبلی است. MIPMAPS برای اجرای Texture LOD (سطح جزئیات) در حین ارائه استفاده می شود. هنگامی که یک بافت mipmapped به یک مرحله بافت محدود می شود ، سخت افزار گرافیک از فضای بافت اشغال شده توسط یک قطعه برای انتخاب سطح از زنجیره MIPMAP استفاده می کند. هنگام ارائه صحنه سه بعدی ، یک شی دورتر از دوربین از MIPMAP با وضوح پایین تر از همان شیء نزدیک به دوربین استفاده می کند.

یک بافت mipmapped از حافظه بیشتری در مقایسه با یک بافت غیر تزئین شده استفاده می کند. سطح MIPMAP اضافی ردپای حافظه یک بافت را 33 ٪ افزایش می دهد. اگر یک بافت در فاصله ثابت از دوربین ترسیم شود ، تولید mipmaps استفاده غیر ضروری از حافظه است.

یک زنجیره mipmap از وضوح بافت پایه 512x512 پیکسل
شکل 2. یک زنجیره mipmap ، وضوح پایه بافت 512x512 پیکسل است.

به درستی با استفاده از mipmaps عملکرد GPU را بهبود می بخشد. در دسترس بودن سطح MIPMAP با وضوح پایین ، میزان استفاده از پهنای باند حافظه را کاهش داده و اقامت حافظه پنهان بافت را بهبود می بخشد.

MiPmapping همچنین می تواند با کاهش آلیاژ بافت ، کیفیت بصری را بهبود بخشد. می توان به عنوان یک اثر سوسو زدن در مناطقی که از دوربین استفاده می شود ، به عنوان یک اثر سوسو زدن مشاهده شود.

نمونه ای از آلیانگر بافت
شکل 3 نمونه ای از آلیاژهای بافت. یک تصویر بدون mipmaps (سمت چپ) ارائه می شود ، تصویر دیگر با mipmaps (سمت راست). در تصویر سمت چپ می توان در داخل مستطیل قرمز مشاهده کرد.

جزئیات MIPMAP خاص موتور

موتور غیر واقعی 4 برای استفاده از MIPMapping به ابعاد بافتی نیاز دارد که قدرت دو (به عنوان مثال 512x1024 ، 128x128) باشد. اگر یک یا هر دو ابعاد بافت قدرت دو نباشند ، زنجیره های MIPMAP تولید نمی شوند.

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

حالت های فیلتر کننده بافت مناسب را انتخاب کنید

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

نزدیکترین

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

دو خطی

نمونه های فیلتر دو طرفه چهار تگزیل اطراف مختصات مشخص شده در بافت منبع. این چهار Texels به طور متوسط ​​برای تعیین رنگ بافت برای این قطعه به طور متوسط ​​انجام می شود. فیلتر دو طرفه منجر به شیب نرم تر بین پیکسل ها می شود و از ظاهر مسدود نزدیکترین فیلتر جلوگیری می شود. مثلث های ارائه شده به دوربین به جای پیکسل ، مبهم به نظر می رسند. به دلیل نمونه های اضافی Texel و میانگین ، دو طرفه بیش از نزدیکترین هزینه است.

مقایسه ای بین نزدیکترین و فیلتر دو طرفه
شکل 4. مقایسه نزدیکترین فیلتر بافت (سمت چپ) و دو طرفه (راست).

سه خطی

هنگامی که شما یک مش را ارائه می دهید که در آن فاصله رئوس از دوربین متفاوت باشد ، ممکن است سطح MIPMAP متعدد در هنگام ارائه انتخاب شود. تغییرات بین دو سطح MIPMAP ممکن است منجر به برش شدید قابل توجه در نقطه انتقال شود. فیلتر سه گانه این انتقال ها را با انجام فیلتر دوتایی در دو سطح مختلف MIPMAP و درون یابی نتایج نرم می کند. استفاده از چندین سطح MIP و درون یابی باعث می شود سه قلو از نظر محاسباتی گران تر از دو طرفه باشد.

مقایسه ای بین فیلتر دوتایی و سه گانه
شکل 5. مقایسه فیلتر بافت دوتایی (سمت چپ) و سه گانه (راست). منطقه بزرگنمایی با تفاوت در ارائه در امتداد انتقال MIPMAP تضاد دارد.

ناهمسانگرد

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

مقایسه ای بین فیلتر ناهمسانگرد 1x و 2x
شکل 6. مقایسه فیلتر ناهمسانگرد دو طرفه/1X (سمت چپ) و فیلتر ناهمسانگرد دوتایی/2x (سمت راست)

استراتژی انتخاب حالت

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

فیلتر بافت ممکن است نیمی از کل مصرف انرژی GPU را به خود اختصاص دهد ، و انتخاب فیلترهای بافت ساده تر در صورت امکان یک روش عالی برای کاهش تقاضای قدرت بازی شما است.

اندازه بافت را بهینه کنید

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

هنگام ارائه مش که از چندین بافت در مواد خود استفاده می کند ، در نظر بگیرید که به طور انتخابی وضوح برخی از بافت ها را کاهش دهید. به عنوان مثال ، هنگام استفاده از بافت پراکنده 1024x1024 ، کاهش زبری یا بافت نقشه فلزی به 512x512 ممکن است تنها با تأثیر حداقل بر کیفیت تصویر امکان پذیر باشد. تأثیر همه چنین آزمایش های تغییر شکل را تأیید کنید تا اطمینان حاصل شود که آنها سطح کیفیت مورد نظر را به خطر نمی اندازند.

از فضای رنگی مناسب استفاده کنید

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

تنظیمات بافت موتور بازی شامل یک پارامتر برای اینکه آیا یک بافت از فضای رنگ SRGB استفاده می کند.

تنظیمات بافت SRGB در وحدت و موتور غیر واقعی 4
شکل 7 تنظیمات بافت SRGB در وحدت (چپ) و موتور غیر واقعی 4 (سمت راست).

از آنجا که از داده های پیکسل چنین بافت هایی به عنوان داده های رنگی استفاده نمی شود ، با استفاده از فضای رنگی SRGB ، تصاویر نادرست ایجاد می کند.

ارائه یک مرد فلزی زبری در فضای خطی در مقابل فضای رنگ SRGB
شکل 8. نقشه فلزی خطی (غیر SRGB) نقشه فلزی (سمت چپ) و نقشه فلزی SRGB (سمت راست). بازتاب در سمت راست نادرست به نظر می رسد.

از فشرده سازی بافت استفاده کنید

فشرده سازی بافت یک الگوریتم فشرده سازی تصویر است که برای داده های پیکسل فشرده اعمال می شود که منجر به بافتی می شود که می تواند به سرعت توسط سخت افزار گرافیکی در حین ارائه فشرده شود. استفاده مؤثر از فشرده سازی بافت می تواند میزان مصرف حافظه را کاهش داده و عملکرد را با حداقل تأثیر بر کیفیت بصری افزایش دهد. سه الگوریتم فشرده سازی بافت بیشتر در Android رایج است: ETC1 ، ETC2 و ASTC . برای بازی های مدرن ، ASTC به طور کلی بهترین گزینه اصلی است ، اگر بازی شما دستگاه هایی را که از ASTC پشتیبانی نمی کنند ، گزینه Fallback باشد.

ETC1

ETC1 توسط همه دستگاه های Android پشتیبانی می شود. ETC1 فقط از چهار بیت در هر حالت پیکسل داده های رنگ RGB پشتیبانی می کند. ETC1 از کانال های آلفا پشتیبانی نمی کند. بسیاری از موتورهای بازی که از ETC1 پشتیبانی می کنند ، امکان استفاده از بافت دوم ETC1 را برای نمایش داده های کانال آلفا استفاده می کنند.

ETC2

ETC2 توسط بیش از 90 ٪ دستگاه های فعال Android پشتیبانی می شود. دستگاه های بسیار قدیمی که از API OpenGL ES 3.0 پشتیبانی نمی کنند ، قادر به استفاده از ETC2 نیستند. در مقایسه با etc1 ، etc2 اضافه می کند:

  • پشتیبانی از کانال آلفا ، هر دو "پانچ Through" هشت بیتی و تک بیتی
  • نسخه های SRGB از بافت های RGB و RGBA
  • یک و دو کانال ، R11 و RG11 ، بافت

ASTC

ASTC بیش از 75 ٪ از دستگاه های فعال Android پشتیبانی می شود. ASTC دارای اندازه بلوک فشرده سازی قابل تنظیم است ، که به شما کنترل ریز و درشت می دهد تا نسبت فشرده سازی را در برابر کیفیت تصویر برای یک بافت خاص متعادل کنید. ASTC اغلب قادر به دستیابی به کیفیت برتر در همان اندازه حافظه ETC2 یا مقدار مشابه در اندازه حافظه کوچکتر از ETC2 است.

مقایسه بصری قالب های فشرده سازی بافت با استفاده از همان تصویر منبع
شکل 9. مقایسه ای بین تصاویر عبارتند از: فشرده نشده (سمت چپ ، اندازه 17 مگابایت) ، فشرده شده با ETC1 (مرکز ، اندازه 3 مگابایت) ، فشرده شده با ASTC (سمت راست ، اندازه 2.5 مگابایت).

سرعت فشرده سازی بافت

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

فشرده سازی بافت در موتورهای بازی

اگر از موتور بازی استفاده می کنید ، ممکن است مجبور شوید قالب فشرده سازی بافت خود (ETC یا ASTC) را در سطح پروژه انتخاب کنید. برای پشتیبانی از چندین قالب فشرده سازی برای حداکثر سازگاری ، ممکن است کار اضافی مورد نیاز باشد. فرمت فشرده سازی Texture Formation از Google Play Play Delivery Delivery می تواند در شامل چندین قالب در بازی شما کمک کند و فقط بهینه ترین فرمت را در زمان نصب به یک دستگاه جداگانه ارائه می دهد.

UVS را باز کنید

جزیره UV را تا حد امکان مستقیم نگه دارید. این به روش های زیر به بافت شما کمک می کند:

  • بسته بندی جزایر اشعه ماوراء بنفش آسانتر است و منجر به فضای کمتری می شود.
  • اشعه ماوراء بنفش مستقیم "اثر پله" را بر روی بافت ها کاهش می دهد.
  • بسته بندی اشعه ماوراء بنفش خوب ، وضوح مطلوب را از بافت تضمین می کند.
  • بافت با کیفیت بهتر ، حتی اگر اشعه ماوراء بنفش کمی از صاف کردن تحریف شود.
یک جزیره UV بهینه نشده در مقابل یک جزیره UV بهینه شده
شکل 10. یک جزیره UV بهینه نشده (سمت چپ) و یک جزیره UV صاف/بدون بند (سمت راست).

درزهای بافت قابل مشاهده روی یک مدل بد به نظر می رسند. سعی کنید هر درز UV را در مکانهایی که کمتر قابل مشاهده هستند قرار دهید. برای کمک به ایجاد نقشه های طبیعی بهتر ، جزیره UV خود را که لبه ها تیز است تقسیم کرده و فضای کمی در اطراف جزیره به جا بگذارید.

از جزئیات غیرقابل تصور خودداری کنید

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

از یک بافت کوچک بر روی مدلی که از فاصله دور استفاده می شود استفاده می شود
شکل 11. یک بافت کوچک 256x256 که فاقد جزئیات بیش از حد در یک مدل سرباز است که از راه دور ارائه می شود.

جزئیات پخت

دستگاه های تلفن همراه دارای صفحه نمایش های کوچکتر و سخت افزار گرافیکی قدرتمند نسبت به رایانه های شخصی یا کنسول های بازی هستند. به جای محاسبه اثرات مانند انسداد محیط یا برجسته سازی خاص در زمان اجرا ، آنها را در صورت امکان "پخت" را در بافت پراکنده در نظر بگیرید. این به عملکرد کمک می کند و از دید جزئیات شما اطمینان می دهد.

نکات برجسته پخت و اکونوژن محیط به یک بافت پراکنده
شکل 12. نکات برجسته و انسداد محیط پخته شده در بافت پراکنده (سمت چپ) و در بازی (سمت راست) ارائه می شود.

از رنگ آمیزی رنگ استفاده کنید

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

یک بافت خاکستری در زمان اجرا رنگ شده است
شکل 13. یک بافت خاکستری (سمت چپ) در زمان اجرا برای مدل ستون (سمت راست) رنگ شده است.

کانال های بافت را بسته بندی کنید

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

سه بافت تک کانال که در یک بافت چند کانال ترکیب شده اند
شکل 14. سه بافت تک کانال (سمت چپ) در یک بافت چند کانال (سمت راست) ترکیب شده اند. داده های انسداد محیط به قرمز ، نقشه زبری/صافی به سبز و نقشه فلزی به آبی اختصاص داده شده است.

هنگام بسته بندی ، داده ها را با بیشترین جزئیات به کانال سبز اختصاص دهید. از آنجا که چشم انسان نسبت به سبز حساس تر است ، سخت افزار گرافیکی معمولاً بیت های بیشتری را به کانال سبز اختصاص می دهد. به عنوان مثال ، نقشه زبری/صافی معمولاً جزئیات بیشتری نسبت به نقشه فلزی خواهد داشت و انتخاب بهتری برای اختصاص به کانال سبز است.

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

یک کانال آلفا که به بافت دیگری بسته شده است
شکل 15. یک نقشه کدورت کانال آلفا به همراه نقشه زبری/صافی و نقشه فلزی در یک بافت بسته بندی شده است.

اطمینان حاصل کنید که بافت های بسته بندی شده شما روی یک فضای رنگی RGB خطی تنظیم شده اند و نه SRGB.

نقشه های عادی ایجاد کنید

نقشه برداری عادی تکنیکی است که به یک مدل سه بعدی ظاهر جزئیات بدون استفاده از هندسه اضافی می دهد. ویژگی هایی از قبیل چین و چروک یا پیچ هایی که ممکن است به مثلث زیادی برای مدل نیاز داشته باشند ، می توانند با استفاده از یک نقشه عادی شبیه سازی شوند. نقشه برداری عادی بسته به سبک هنری و جهت بازی ممکن است مناسب باشد یا نباشد.

مدلی که با و بدون نقشه عادی ارائه شده است
شکل 16. یک مدل ارائه شده بدون نقشه معمولی (سمت چپ) ، و همان مدل ارائه شده با نقشه معمولی (مرکز) و بافت نقشه معمولی (سمت راست).

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

نقشه معمولی بهترین روشهای

در زیر بهترین روشهای برای ایجاد نقشه عادی وجود دارد:

از قفس استفاده کنید

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

قفس اطراف مش چند ضلعی کم
شکل 17 قفس اطراف مش چند ضلعی کم.
مدلی که با استفاده از یک نقشه معمولی با و بدون قفس ارائه شده است
شکل 18. یک مدل ارائه شده با استفاده از یک نقشه عادی که با یک قفس (سمت چپ) تولید می شود در مقایسه با مدل ارائه شده با استفاده از یک نقشه عادی که بدون قفس (سمت راست) تولید می شود.

تطبیق پخت با نام مش

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

مش را منفجر کنید

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

مش منفجر شده برای پخت طبیعی نقشه
شکل 19 یک مش منفجر شده برای پخت نقشه طبیعی

درزها را به حداقل برسانید

UV مداوم در لبه های سخت باعث ایجاد درزهای قابل مشاهده ، اشعه ماوراء بنفش در لبه های سخت می شود تا این اثر به حداقل برسد. هنگام تنظیم گروه های صاف کننده ، به عنوان یک قاعده انگشت شست ، زاویه را کمتر از 90 درجه نگه دارید. درزهای اشعه ماوراء بنفش باید یک گروه هموار سازی متفاوت در مثلث ها داشته باشند.