بهینه‌سازی سیستم‌های مپینگ در TouchDesigner


بهینه‌سازی سیستم‌های مپینگ در TouchDesigner

آیا تا به حال در پروژه‌های مپینگ (Projection Mapping) با مشکل افت فریم یا حجم بسیار زیاد فایل پروژه روبرو شده‌اید؟ استفاده از کامپوننت Stoner در پالت TouchDesigner راهکاری استاندارد برای کالیبراسیون تصویر است (Keystone و Warping).

اما روش معمول، یعنی استفاده از یک Stoner مجزا برای هر پروژکتور، می‌تواند قاتل عملکرد سیستم شما باشد.

در این مقاله، تکنیک‌هایی را بررسی می‌کنیم که چگونه با استفاده از UV Remap و اسکریپت‌نویسی پایتون، یک سیستم کالیبراسیون حرفه‌ای، سبک و ماژولار بسازید.


مشکل: روش سنتی و پرهزینه

در حالت عادی، اگر شما ۴ خروجی (مثلاً ۴ پروژکتور) داشته باشید، ممکن است برای هر کانال یک Stoner قرار دهید. مشکلات این روش عبارتند از:

  • زمان پردازش (Cook Time): هر Stoner به تنهایی حدود ۰.۶ میلی‌ثانیه یا بیشتر زمان پردازش مصرف می‌کند.
  • حجم فایل: Stoner داده‌های تکسچر را درون فایل پروژه ذخیره می‌کند. با ۴ کانال Stoner، حجم فایل پروژه (.toe) می‌تواند از چند کیلوبایت به ده‌ها مگابایت افزایش یابد.
⚠ CPU: 95%
4x Stoner Nodes Active

تصویر ۱: نمایش مصرف بالای CPU و افت فریم در Performance Monitor به دلیل استفاده موازی از Stonerها

راه‌حل اول: جادوی UV Remap

راز بهینه‌سازی Stoner در خروجی دوم آن نهفته است. Stoner علاوه بر تصویر اصلاح شده، یک خروجی دوم دارد که یک UV Map است.
به جای استفاده از خودِ Stoner برای پردازش تصویر نهایی، ما می‌توانیم:

  1. از خروجی دوم Stoner (مپ UV) استفاده کنیم.
  2. آن را به ورودی دوم یک Remap TOP متصل کنیم.
  3. تصویر اصلی را به ورودی اول Remap TOP بدهیم.
Movie File In
(Content)
Remap TOP
(Output)
Null (UV)
From Stoner Output 2

نتیجه همان اصلاح تصویر است، اما با هزینه پردازشی تقریباً صفر (اگر مپ UV ثابت باشد).

تصویر ۲: شماتیک اتصال نودها در روش بهینه

راه‌حل دوم: معماری سیستم و جداسازی کالیبراسیون

برای مدیریت بهتر، نباید Stoner را مستقیماً در زنجیره خروجی قرار داد. در عوض، باید یک معماری ماژولار بسازیم:

  • بخش کالیبراسیون (Calibration Base): یک Base جداگانه که Stoner در آن قرار دارد. این بخش وظیفه تولید داده‌های UV را بر عهده دارد اما در مسیر رندر نهایی نیست.
  • بخش خروجی‌ها (Output Containers): کانتینرهایی برای هر پروژکتور (مثلاً Channel 1 تا 4) که فقط شامل یک Remap TOP هستند.
  • انتخاب‌گر (Select): با استفاده از یک Select TOP، داده‌های UV مورد نیاز هر کانال را از بخش کالیبراسیون فراخوانی می‌کنیم.

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

Calibration Base
(UI & Logic)
CH 1
Remap
CH 2
Remap
CH 3
Remap
CH 4
Remap

نمودار ۳: معماری درختی جدا کردن رابط کاربری از خروجی‌ها

راه‌حل سوم: مدیریت حجم فایل با TOX‌های اکسترنال

حتی با روش بالا، اطلاعات کالیبراسیون حجم فایل پروژه را بالا می‌برد. راهکار حرفه‌ای، ذخیره کردن بخش کالیبراسیون به عنوان یک فایل .tox جداگانه است. با کلیک راست روی کامپوننت کالیبراسیون و انتخاب Save Component .tox، آن را ذخیره کنید.

سپس در پارامترهای Common، گزینه “External .tox” را آدرس‌دهی کنید و تیک “Save Backups” را بردارید. این کار حجم فایل اصلی .toe شما را به شدت کاهش می‌دهد و مدیریت ورژن‌ها در گیت (Git) را آسان می‌کند.

روش سنتی
70 MB

اکسترنال TOX
5 KB

تصویر ۴: مقایسه دراماتیک حجم فایل پروژه

سطح پیشرفته: اتوماسیون با پایتون (Python)

برای اینکه رابط کاربری (UI) شما هوشمند باشد و نیازی نباشد دستی مسیرها را تغییر دهید، از پایتون استفاده می‌کنیم:

  • منوی داینامیک: با نوشتن یک ماژول پایتون و استفاده از دکوریتورها (@property) و متد findChildren، می‌توانیم لیستی از تمام کانال‌های موجود را پیدا کرده و به صورت خودکار در منوی Custom Parameter قرار دهیم.
  • تغییر مسیر خودکار: با استفاده از یک Parameter Execute DAT، وقتی شما در منو “Channel 2” را انتخاب می‌کنید، پایتون به طور خودکار مسیر Stoner را تغییر می‌دهد تا دقیقاً همان کانال را ویرایش کند.
def onValueChange(par, prev):
if par.name == “Selectedchannel”:
target_op = op(par.val)
# Update Stoner target dynamically
op(‘stoner’).par.Targettop = target_op.path
return

تصویر ۵: نمونه منطق پایتون برای تغییر داینامیک کانال‌ها

جمع‌بندی

Performance 🚀

کاهش شدید زمان پردازش با حذف Stonerهای اضافی.

Storage 💾

کاهش حجم فایل پروژه و تفکیک داده‌های کالیبراسیون.

Workflow ⚙️

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

همین حالا پروژه خود را باز کنید و Stonerهای اضافی را حذف کنید!