تسلیشن به معنی تقسیم مثلث‌های مش در گرافیک سه‌بعدی به مثلث‌های بیشتر گفته می‌شود. در ادامه معمولاً با استفاده از نگاشت جابجایی، تکه‌هایی از سطح با توجه به رنگ و بافت برآمده می‌شود. با Tessellation و Displacement Mapping می‌توان سطوح صاف را به سطوح ناهموار و واقعی تبدیل کرد، بدون آنکه مش بسیار پیچیده و سنگین شود و سرعت اجرای بازی را کاهش دهد.

در ادامه به مفهوم تسلیشن و نگاشت عمودی و Displacement Mapping یا نگاشت جابجایی می‌پردازیم.

کاربرد عمومی تسلیشن

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

تِسِلِیشِن می‌تواند با طرحی منظم انجام شود، مثل موارد زیر:

تسلیشن با طرح منظم

و گاهی طرح نیمه‌منظم به کار می‌رود:

تسلیشن با طرح نیمه‌منظم

اما ببینیم در بازی‌ها تسلیشن چه معنایی دارد.

تسلیشن در بازی‌ها

تسلیشن تکنولوژی جدیدی نیست، سال‌هاست که این تکنولوژی در بازی‌هایی با گرافیک خلاقانه مثل کرایسیس به کار رفته است و اکنون در بازی‌های جدید مثل GTA V برای غیرفعال کردن آن هم آپشنی در نظر گرفته شده است. اولین بار انویدیا مقوله‌ی تسلیشن را با همکاری Epic Games عملی کرد و در حقیقت موتور گرافیکی Unreal Engine 3 اولین موتور گرافیکی مجهز به تسلیشن است.

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

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

مکعب ساده و مسطح و مکعب بهینه شده با تسلیشن

مکعب یک مثال ساده است، در طراحی یک کاراکتر پیچیده، تسلیشن و نگاشت عمودی بسیار مفید هستند:

Tessellation (تسلیشن) و نگاشت جابجایی (Displacement Mapping) برای بهبود گرافیک بازی‌ها

نگاشت عمودی یا Normal Mapping برای ناهمواری‌های ظریف

برای ایجاد پستی و بلندی می‌توان از همان ابتدا سطح را پیچیده طراحی کرد. مثلاً به جای مش پیچیده‌ای که شامل 500 هزار مثلث است، از 4 میلیون مثلث استفاده کرد. مش ساده‌تر با چندضلعی‌های کم، در محاسبات گرافیکی و سرعت اجرای بازی‌ها بسیار موثر است. روش خوبی نیست و مدل بسیار پیچیده شده است. می‌توان از همان 500 هزار مثلث استفاده کرد اما در هنگام نورپردازی و محاسبه‌ی سایه روشن‌ها، از نگاشت عمودی یا Normal Mapping استفاده کرد.

تبدیل مدل پیچیده به مدل ساده‌تر با مش سبک‌تر و استفاده از نگاشت عمودی

منظور از نگاشت یا Map کردن، طراحی و تبدیل است. مثلاً واحد بافت یا Texture Mapping Unit، بافت که در واقع یک عکس کوچک است را روی سطح سه‌بعدی اجسام ترسیم می‌کند.

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

نگاشت عمودی و تبدیل صفحه‌ی صاف به صفحه‌ی ناهموار

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

کره‌ی ساده، کره‌ای با نگاشت چاله‌ای و مدل کره با اضافه کردن نگاشت جابجایی

مدل کره با استفاده از Bump Mapping که اساس آن شبیه نگاشت عمودی است، به یک کره‌ی ناهموار تبدیل شده اما شکل کلی تغییری نکرده است و کره کاملاً گرد است. در واقع لبه‌های کره دقیقاً یک دایره را توصیف می‌کنند.

نگاشت جابجایی یا Displacement Mapping بر اساس بافت برای تغییر مش

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

اما چطور؟ طرح نگاشت جابجایی از چه منبعی تهیه می‌شود؟

استفاده از بافت برای برجسته کردن سطح

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

نگاشت جابجایی مبتنی بر یک تصویر ساده

سری به بازی کرایسیس بزنیم، دیوار آجر بافت ساده‌ای دارد و بدون تسلیشن و در حقیقت نگاشت جابجایی، کاملاً مسطح است. اما اگر رنگ تیره را به فرورفتگی و رنگ روشن را برآمدگی تفسیر کنیم چطور؟ مقایسه کنید:

تسلیشن آجرها در کرایسیس 2

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

به عنوان مثال تسلیشن جاده در فاصله‌ی زیاد، دیده نمی‌شود:

تسلیشن کف جاده در کرایسیس 2

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

کارت گرافیک‌های AMD هم برای اجرای بهتر تسلیشن بهینه شده‌اند، بنابراین در حال حاضر یکی از روش‌های مفید و بهینه برای بهبود گرافیک بازی‌ها، تسلیشن است.

در پردازنده‌های گرافیکی وسایل همراه (گوشی و تبلت) هم تسلیشن تدریجاً مهم شده است. به عنوان مثال کوآلکام در معرفی توانمندی‌های آدرینو 420 که پردازنده‌ی گرافیکی به کار رفته در S810 است، از بهبود گرافیک با پیاده‌سازی تسلیشن می‌گوید:

آدرینو 420 کوآلکام و اجرای بهتر تسلیشن

اثر تسلیشن بر سرعت اجرای بازی‌ها و کیفیت گرافیک

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

در بازی جدیدی مثل GTA V اگر از کارت گرافیک‌های ای‌ام‌دی استفاده شود، سرعت اجرای متوسط در حد 10 درصد کمتر خواهد شد که رقم بسیار خوب و مطلوبی است:

سرعت اجرای بازی GTA V با تنظیمات مختلف تسلیشن