سلام دوستان عزیز
همونطور که می دونید یکی ویژگی های جدیدی که به نسخه های جدید نرم افزار تری دی مکس اضافه شده، ابزار max creation graph یا به اختصار MCG هستش. این ابزار تحول بزرگی توی این نرم افزار بحساب میاد چون بوسیله اون شما بدون اینکه نیاز باشه اسکریپت نویسی یا برنامه نویسی رو یاد بگیرید، می تونید انواع پلاگین های متنوعی رو بر اساس نیاز درست کنید و همین طور پلاگین های که دیگران درست کردن رو اجرا کنید. این ابزار توی نسخه های جدید مدام در حال بروزرسانی هست و در حال تعمیم دادن به بخش های مختلف مکس هست، مثلا توی دو نسخه جدیدش فیزیک رو هم وارد خودش کرده. ما قصد داریم در قالب چند مقاله این ابزار رو شرح بدیم و برای شروع از ترجمه یکی دو مقاله از آقای مارتین اشتون شروع می کنیم و بعد از یادگیری چند اصول اولیه، انشاالله وارد بحث های ساخت پلاگین های متنوعی خواهیم شد. برای همراه شدن با این مقاله لازمه که حد اقل
این تاپیک رو مطالعه کرده باشید تا مطالب براتون قابل هضم باشه.
با ما همراه باشید ...
The Function Connector - اتصال تابع
اگه شما کاربا MCG را تازه شروع کردین، احتمالا از خودتون پرسیدین که این مربع های کوچک function connector چی هستن؟ هدف از این پست اینه که کاربردشون رو یاد بگیریم.
بیاید اینطور تصور کنیم که Map operator یه جادوگره، این ابزار به 2 شرط برای شما کاری رو انجام میده.
- اول اینکه اون فقط با آرایه کار می کنه. شما باید مقدار های ورودی این ابزار رو به صورت آرایه در بیارید.
- دوم اینکه باید به اون یه فرمول بدین که بتونه مقدار آرایه رو توی اون فرمول استفاده کنه. به عبارت دیگه : جادوگر آرایه ای از اعداد رو می گیره و توی فرمولتون قرار میده و به یه آرایه جدید تبدیل می کنه.
بیاید یه مثال ملموس تر بزنیم.
در نمودار زیر، ما در حال تهیه مپ جادوگر با آرایه ای از پنج شماره: [0، 1، 2، 3، 4] هستیم. همچنین یک فرمول داریم که به سادگی "عدد 1 را به تعداد ورودی ها اضافه می کنه" در نتیجه آرایه تبدیل میشه به: [1، 2، 3، 4، 5].
اضافه کردن یک عدد به یک آرایه کاربردهای خودش را داره، البته تصور درستی نمی شه ازش پیدا کرد. بیایید یه مثال جالب تر بزنیم، در زیر می خواهیم یه مودیفایر MCG ایجاد کنیم که باکس هایی رو در راس یک Mesh درست می کنه.
بطور خلاصه اینکه : اپراتور MeshVertices موقعیت ورتکس های آبجکتمون رو بصورت آرایه ای از نوع Vector3 مشخص می کنه. اپراتور map از این ارایه توی یه فرمول به شرح زیر استفاده می کنه.
درست کردن باکس و جابجایی به موقعیت هایی که داده های vector3 در اختیارمون میگذاره. وقتی که همه باکس ها ایجاد و جابجا شدند، همه بعنوان یک Mesh با هم ترکیب می شن. این Mesh با Mesh اصلی ترکیب میشه و سپس با خروجی output مودیفایر درست میشه.
حالا که ما ایده این کار رو داریم، می تونیم یه نگاه دقیق تر به اون بندازیم. به عبارت دیگه یه تابع چی می سازه ؟ برای شروع توجه کنید به ارتباطی که بین دو اسلات توابع هستش.
اپراتور در ابتدا اتصالی از نوع خروجی تابع تعریف می کنه (رنگ فیروزه ای). در این مورد، نوع خروجی اپراتور OffsetMesh به مقدار TriMesh : این معنی رو میده که طیف خروجی نیازمند اراده TriMesh است. اگه نوع خروجی از نوع “any” باشه (در مورد مثال اول با “add” بود) بطور خودکار جستجوگر تلاش می کنه که خروجی تابع رو جستجو کنه (زمانی این اتفاق میوفته که) : Build > Validate, Build > Evaluat رو بزنید یا CTRL+E
وقتی خروجی توابع تو دستتون باشه، شما با گام برداشتن یکی به یکی گره ها، می تونین نمودارتون رو با توجه به مقادیری که برای محاسبه نیاز دارید روی به عقب درست کنید. در توابع پیچیده تر این "مسیر های مورد نیاز" بصورت شاخه ها و با دقت بیشتر و بصورت سلسله مراتبی به هم وابسته درست میشن.
در این تابع ما می تونیم ببنیم که چطور OffsetMesh نیاز به پارامتری مانند CreateBox داره و CreateBox نیاز به "پارامتر اندازه باکس" داره. ما از این سلسله مراتب وابستگی به عنوان بدنه تابع “body” برای خروجی تابع استفاده می کنیم.
آخرین مرحله، شناسایی ورود های تابع هست که شما می تونید ورودی یک تابع توسط اسلات ورودی بی ارتباط رو، توی بدنه تشخیص بدید. در این تابع ما، فقط یه اسلات ورودی بی ارتباط داریم. یعنی offset که Vector3 از اپراتور OffsetMesh هست. بنابراین تابع Vector3 به عنوان یه ورودی که به طور خودکار به اسلات “offset” اتصال پیدا می کنه.
حالا که با همه قسمت های تابع آشنا شدیم، نگاه کلی به این تابع داشته باشیم :
- یه ورودی از نوع Vector3 داره
- باکس درست می کنه و با استفاده از ورودی Vector3 اونا رو جابجا می کنه
- باکس رو مانند یه TriMesh در میاره
در نتیجه : اپراتور Map با استفاده از این تابع مجموعه ای از بردارها را به یک آرایه از TriMeshes تبدیل می کنه.
منبع: mostafa3d.com