نوشتن پلاگین برای مایا و نرم افزارهای 3D . تفاوت زبان های اسکریپت نویسی و برنامه نویسی قسمت 5 معرفی اسکریپت نویسی را با آقای سجاد ربیعی گرامی مدرس دوره هودینی در cmiVFX خواهیم داشت . در این مطلب به ادامه مقاله SDK ،فایل های Include در زبان C ، برنامه نویسی پلاگین ، تفاوت اسکریپت نویسی و برنامه نویسی ، تعریف زبان های اسکریپت نویسی و همچنین مزایا و معایب اسکریپت نویسی و برنامه نویسی پرداخته شده است.
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی
قسمت 5 :
-
تفاوت زبان های اسکریپت نویسی و برنامه نویسی
(Programming Languages vs Scripting Languages)
-
تفاوت پلاگین و اسکریپت ابزار ها
(Plug-ins vs Scripting Tools)
-
کاربرد زبان های برنامه نویسی و اسکریپت نویسی در صنعت انیمیشن و VFX
کانال مقالات استاد سجاد ربیعی در ImanVFX
آشنایی با مفاهیم زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت 1
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت 2
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت 3
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت 4
آشنایی با مفهوم Physically Based Rendering در موتورهای رندر
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,قسمت 5 معرفی اسکریپت نویسی
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,سجاد ربیعی قسمت 6
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,سجاد ربیعی قسمت 7
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,آشنایی با PyMEL – Python – API – PyQt
مروری بر مقاله قبلی
در مقاله قبلی با مفهوم کتابخانه ها آشنا شدید ، گفتیم که کتابخانه یا Library یک سری مجوعه کد هستند که یکسری قابلیت های اضافی (در برنامه نویسی میگیم توابع) را به برنامه اصلی ما اضافه میکند ، مثلا کتابخانه ای به اسم Math که در آن کلی از توابع و فرمول های ریاضی نوشته شده است که میتوانیم آن را ضمیمه برنامه خودمون بکنیم و از توابع ریاضی آن استفاده کنیم. مثلا کتابخانه Boost Library برای ++C . همچنین خودمون هم میتونیم کلی فرمول های مختلف بنویسیم و آنها را به کتابخانه تبدیل کنیم تا در برنامه های دیگری که بعدا مینویسیم بدون دوباره کاری از آن فرمول ها و توابع استفاده بکنیم.
همچنین درباره API ها صحبت شد و گفتیم که مجموعه ای از کتابخانه ها هستند که برای کاربردی خاص ساخته شده اند ، مثلا امکان استفاده از کارت گرافیک برای ساخت موتور های بازی ، یک دسته API هم داشتیم که به وسیله آنها میتوانستیم تواناهی های اضافی به نرم افزارهای مختلف مثل Maya اضافه کنیم که به آن Plug-in یا پلاگین میگویند.
ادامه مقاله SDK یا Software Development Kit
خوب حالا میدونیم که کاربرد دوم API نوشتن پلاگین برای نرم افزارها مثل Maya میباشد.
اگر خاطرتون باشه در تعریف API گفتم مجموعه ای از کتابخانه ها (DLL و Lib) . خوب پس برای اینکه ما با API بتونیم برای هر نرم افزاری پلاگین بنویسیم احتیاج به یکسری فایل کتابخانه داریم که به ما امکان میده با هسته اصلی آن نرم افزار در ارتباط باشیم ، بنابراین شرکت تولید کننده نرم افزارها مثل Autodesk یکسری فایل کتابخانه به همراه نرم افزار به مشتری عرضه میکنند که کاربر به وسیله آن کتابخانه ها میتونه با زبان های برنامه نویسی با هسته داخلی اون نرم افزار ارتباط برقرار کنه و پلاگین بنویسه ، به این مجموعه فایلهای کتابخانه و چیزهای دیگری که برای API و برنامه نویسی پلاگین کاربرد داره میگویند SDK ، بنابراین هر نرم افزار برای خودش یک مجموعه SDK مخصوص به خودش داره.
حالا در این SDK کلی فایل های کتابخانه ای و اطلاعات دیگری وجود داره که میتونیم از آن استفاده بکنیم. در نرم افزار Maya این SDK همراه با خود نرم افزار نصب میشه و نیازی به نصب مجزا نداره ، برای پیدا کردن فایلهای کتابخانه ای Maya که مربوط به API است و برای نوشتن پلاگین کاربرد داره را میتونید در مسیر زیر پیدا بکنید :
C:\Program Files\Autodesk\Maya\lib
مثلا در این آدرس کتابخانه ای داریم به اسم OpenMaya.lib که تقریبا مهمترین کتابخانه است و امکان دسترسی مستقیم به بسیاری از بخش های داخلی نرم افزار Maya را به ما میدهد.
فایل های Include در زبان C
راستش این بخش ارتباط مستقیمی با بحث این مقاله نداره ، چون قرار نیست در زبان برنامه نویسی خاصی ریز بشیم و همه جزییات آن را بگویم ، ولی استثنا چون فایل های Include را در زبان C بسیار دیده ایم و حتی در محل نصب نرم افزار Maya تعداد بسیار زیادی از این فایل ها وجود دارند ، اجازه بدید فقط یک توضیح کوچک بدهم . فایل فای Include که معمولا با فرمت .h هستند مثل JKCompany.h ، کاربردهای بسیار زیادی دارند ولی اونی که مستقیما به بحث ما مربوط میشه اینه :
ایجاد ارتباط با توابع داخلی فایل های کتابخانه ای یا lib در درون برنامه ای که داریم مینویسیم ، بدین صورت که فرض کنید از بین هزاران تابع داخل یک فایل کتابخانه ای ، ما یک تابع به اسم createParticle در کتابخانه ای مثل Particle.lib داریم که امکان ساخت پارتیکل در برنامه نویسی را به ما میدهد. حالا معمولا ما باید یک فایل Include برای Particle ها هم داشته باشیم که اسم تابع را از طریق آن صدا بزنیم ، مثل یک فایل Include داریم به اسم MnParticle.h که این اسم تابع createParticle درون آن است ، در برنامه نویسی باید این فایل MnParticle.h را به برنامه خود وارد کنیم و تابع createParticle را از داخل آن صدا بزنیم (یعنی استفاده کنیم) ، بعد این قایل MnParticle.h کدهای برنامه نویسی مربوط به تایع createParticle را از داخل کتابخانه مربوطه وارد برنامه ما میکند و باعث میشود بعد از اجرای کد ، یک سیستم پارتیکل در Maya ساخته شود.
با چه زبان های برنامه نویسی میتونیم پلاگین بنویسیم ؟
عموما با زبانی برای نرم افزار پلاگین مینویسند که خود نرم افزار را نوشتند ، ولی در برنامه های بزرگ برای اینکه کار کاربران را راحتتر بکنند ، میتوانند این امکان را ایجاد کنند که با چندین زبان مختلف پلاگین نوشت ، مثلا در Maya ابتدا فقط با زبان ++C میشد پلاگین نوشت ولی در حال حاضر با زبان #C یا حتی زبان اسکریپت نویسی Python هم میتوان پلاگین نوشت(بعدا توضیح میدهم). اما نکته اصلی اینه که پلاگینی که با زبان C نوشته شده باشد سریعتر از همان پلاگینی است که با سایر زبانها نوشته شده است ، هم به دلیل اینکه خود Maya با زبان C نوشته شده و هم به دلیل اینکه کلا زبان C نسبت به #C زبان سطح پایینتری است.
— نکته : برای نوشتن پلاگین برای Maya با زبان C در ویندوز معمولا از برنامه Microsoft Visual Studio استفاده میکنند.
و بالا خره اسکریپت نویسی چیست و چه فرقی با برنامه نویسی دارد !؟؟؟
خوب اگر در اینترنت در مورد زبان های اسکریپت نویسی سرچ بزنید ، حقیقت اینه که بیشتر تعاریفی که وجود دارند انگلیسی هستند و حقیقتا برای کسانی که با برنامه نویسی آشنایی ندارند بسیار گنگ می باشد ، حتی خود من هم بعد از اینکه با زبان ++C آشنا شده بودم ، باز هم بعد از مدتها با خواندن انواع تعاریف هنوز در تعریف اسکریپت نویسی مشکل داشتم.
خوب من یک مثال خیلی خوب براتون میگم که امیدوارم خیلی راحت بتونید بفهمید دقیقا اسکریپت نویسی به چی میگن.
— مثال
فرض کنید من با زبان C یک برنامه ماشین حساب ساده مینویسم که تنها قراره دو عدد را ورودی بگیره و اعمال جمع ، تفریق ، تقسیم و یا ضرب را روی آن دو عدد ورودی اعمال کنه و نتیجه را برای ما روی مانیتور نمایش بده.
همچنین در برنامه نویسی C برای این برنامه ماشین حساب یکسری دکمه میزارم تا کاربر بتونه با فشار دادن آنها این عملیات را انجام بده.بعد از Compile کردن این برنامه ، یک فایل اجرایی با فرمت exe ایجاد میشه که وقتی آن را اجرا میکنیم ، برنامه ماشین حساب ما باز میشه ، بعد از بین دکمه های 0 تا 9 ، یک عدد را انتخاب میکنیم مثلا 4 ، بعد دکمه + را میزنیم و بعد دکمه یک عدد دیگر مثل 5 را میزنیم و نهایتا وقتی دکمه = را میزنیم عدد 9 روی مانیتور چاپ میشه.
خوب در دل کد این ماشین حساب این اتفاق میوفته که بعد از اینکه دو عدد را انتخاب میکنیم ، وقتی دکمه + را فشار میدهیم این اعداد وارد تابع مخصوص جمع اعداد میشه (مثلا اسم این تابع را Add گذاشتیم) ، نهایتا وقتی دکمه = را فشار میدهیم ، تابع Add اجرا میشه و اعداد ورودی را با هم جمع میکنه و در مانیتور چاپ میکنه.
>>> حالا این برنامه ماشین حساب را میزارم برای فروش ، یه شرکتی آن را میخره و استفاده میکنه ، حالا ابن شرکت کارش مهندسیه و میخواد با برنامه من کلی کارای مهندسی بکنه ، مثلا میخواد مساحت یک دایره را پیدا بکنه .
مساحت دایره = عدد پی ( 3/14 ) × شعاع × شعاع
خوب اونا هر دفعه از اینکه باید عدد ها را دستی وارد کنند، در هم ضرب کنند و در عدد پی دوباره ضرب کنند خسته شدند و به من میگن لطفا در برنامه ماشین حسابم یک دکمه بذارم که اتوماتیک بعد از وارد کردن عدد شعاع دایره ، با زدن تنها یک دکمه مساحت دایره را به ما بده.
در حین فکر کردن به این مساله هستم که تلفن زنگ میزنه و یکی دیگه از مشتریام به من میگه لطفا یک دکمه به برنامه ماشین حسابم اضافه بکنم که بتونه محیط لوزی رو محاسبه بکنه.
تلفن رو که قطع میکنم به خودم میگم این چه وضعیه ! من که نمیتونم یه برنامه ای رو که نوشتم هر دفعه برای شرکت های مختلف بشینم انحصاری از اول بنویسم !
خلاصه اینقدر اعصابم خورد میشه که حتی به خودم میگم سورس برنامه C این ماشین حساب رو به این شرکت ها بدم و بگم حالا خودتون هر کاری دوست دارید بکنید ، ولی بعد که حالم بهتر میشه به دو دلیل اینکار رو نمیکنم :
1. سورس C این ماشین حساب رو خودم کلی زحمت کشیدم و نوشتم و نمیتونم همینجوری راحت اون رو در اختیار شرکت های مختلف بزارم.
2. تازه اگر هم اینکار رو بکنم ، اون شرکت ها نمیتونند از این سورس استفاده بکنند ، چون آنها که برنامه نویس نیستند بدونند چه طور میشه از این سورس کدها استفاده بکنند ، کلی هم کتابخانه و خرتو پرت های مختلف برای این برنامه استفاده کردم که فقط خودم میدونم چی هستند !
دینگ … اینجاست که یک فکر بکر به ذهنم میزنه !
اگر بتونم کاری بکنم که این شرکت ها بتونند با یک زبان برنامه نویسی خیلی ساده تر از C که به زبان آدم بسیار بسیار نزدیکه و نیاز به دانش خاص برنامه نویسی نداره ، بتونند توابع و دستورات انحصاری را خودشون رو به برنامه من اضافه بکنند مشکل حل میشه . اما مشکل اینجاست که وقتی من یک برنامه را کامپایل میکنم و فایل اجرایی exe ایجاد میشه ، اونا دیگه نمیتونند برای این فایل exe بشینند کد بنویسندو قابلیتی را به آن اضافه کنند !
اینجاست که پای زبان های اسکریپت نویسی وسط میاد ، با استفاده از آنها دو مشکل من حل میشه :
1. زبان های اسکریپت نویسی بسیار سطح بالا هستند و به زبان آدم خیلی نزدیک هستند.
2. با استفاده از زبان های اسکریپت نویسی ما میتونیم برای برنامه هایی که قبلا با زبان دیگر مثل C نوشتیم و آنها را Compile کردیم یکسری قابلیت جدید اضافه کنیم ، بدون اینکه نیاز باشه دوباره کد های زبان C را تغییر دهیم و از اول برنامه را Compile کنیم ، اما چه طور ؟
در برنامه ماشین حساب من ، استفاده از اسکریپت نویسی اینگونه عمل میکنه که ابتدا یک پنجره جدید باید به ماشین حسابم اضافه کنم تا کاربر بتونه در آن یکسری کد بنویسه ، چیزی شبیه Script Editor در Maya و Max.
خوب همه میدانیم که در برنامه ماشین حساب من وقتی که داشتم آن را با زبان C مینوشتم چندتا تابع برای انجام عملیات های ساده ریاضی ساخته بودم. مثل Add برای جمع ، Subtract برای تفریق ، Divide برای تقسیم و Multiply برای ضرب.
خوب زبان اسکریپت نویسی هم در حقیقت یک نوع زبان برنامه نویسی می باشد ، فقط با این تفاوت که روی یک برنامه از قبل Compile شده سوار میشوند و یکسری توابع و دستورات داخل آن را (مثل توابع ریاضی که در بالا نوشتم) از بیرون سورس برنامه (کدهای زبان C) اجرا میکنند ، یکم پیچیده شد ؟ اجازه بدید توضیح بیشتری بدهم !
وقتی من به برنامه ماشین حسابم یک زبان اسکریپت نویسی مثل Python را اضافه میکنم ، بعد از اینکه کدهای ماشین حساب را که با زبان C نوشتم ، اجرا میکنم ، یک فایل exe به ما میده ، اما چون در آن از زبان اسکریپت نویسی استفاده کردم ، با زبان Python میتونم یکسری کد بنویسم که از آن توابع ریاضی داخل سورس برنامه ماشین حساب (در زبان C ) استفاده بکنه ، پس با این قابلیت خیلی راحت با Python میتونم بدون تغییر در سورس کد زبان C برنامه ، از طریق خود برنامه ماشین حساب ، یک تابع یا ابزار برای محاسبه مساحت دایره بسازم .
پس در محیط اسکریپت نویسی برنامم مینویسم :
Func JKCompute(Radius)
Result = Radius * Radius * 3.14
print Result
در کد بالا یک تابع به اسم JKCompute ساختم که یک عدد ورودی به عنوان شعاع میگیره ، وقتی این اسکریپت در برنامه ماشین حساب اجرا بشه ، چون از علامت ضربدر استفاده کردم ، این اسکریپت تابع Multiply را که در زبان C نوشته بودم را صدا میزنه و از آن استفاده میکنه . دستور print هم تابع مربوط به نمایش نتیجه روی مانیتور را که در زبان C نوشته بودم را صدا میزنه و باعث میشه که نتیجه محاسباتم در مانیتور دیده بشه.
خوب از این به بعد به جای نوشتن فرمول مساحت ، کافیه فقط عدد شعاع را بدم و اسکریپت من خودش مساحت را محاسبه میکنه و نتیجه را به من میده.
مثلا اگر شعاع 6 باشه اینجوری استفاده میکنم :
JKCompute(6)
خوب با این قابلیت دیگه نیاز نیست سورس زبان C برنامه ماشین حساب را که سالها برای نوشتنش وقت گذاشتم را به کسی بدم ، ولی از طرفی امکان برنامه نویسی را به مشتریام دادم تا بتونند خودشون ابزار های انحصاری به آن اضافه بکنند.
حالا تعریف اصلی
خوب با توجه به مثال بالا ، حالا اگر اسکریپت نویسی راتعریف کنم ، باید بهتر متوجه بشید .
تعریف زبان های اسکریپت نویسی
زبان های اسکریپت نویسی در حقیقت یک نوع زبان برنامه نویسی خیلی سطح بالا میباشد ، فقط با این تفاوت که زبان های برنامه نویسی معمولی خود مستقیما به زبان ماشین تبدیل یا Compile میشوند ، ولی زبان های اسکریپت نویسی باید روی یک نرم افزار یا برنامه از قبل نوشته شده (مثل مثال ماشین حساب) سوار شوند و از طریق آن نرم افزار واسط دستوری را انجام دهند.
بهترین مثال در اینجا ، نرم افزار maya یا Max میباشد ، در برنامه Maya ما یک زبان اسکریپت نویسی مخصوص به اسم MEL داریم ، به وسیله این زبان ما میتونیم به یکسری از دستورات و توابعی که در سورس کد Maya به زبان C نوشته شده است دسترسی پیدا کنیم. مثلا ممکنه در سورس کد زبان C برنامه Maya ما یک تابع داشته باشیم به اسم createLight که وظیفه ایجاد نور در Maya را بر عهده داره ، چون این تابع در سورس Maya نوشته شده و برنامه Maya هم Compile شده ، ما دیگه به این تابع دسترسی نداریم ، ولی با زبان MEL میتونیم اینکار را بکنیم ، مثلا از تابع JKCreateLight استفاده بکنیم ، این تابع ، تابع createLight را از درون کدهای C برنامه Maya اجرا میکنه و باعث میشه یک نور در Maya ساخته بشه.
خوب یکی از معروفترین و قویترین زبان های اسکریپت نویسی Python یا پایتون می باشد. اگر دقت کرده باشید معمولا از این زبان در درون برنامه های دیگر مثل Maya ، Nuke و Houdini استفاده میکنیم ، خوب دلیلش مشخصه ، چون زبان اسکریپت نویسیه و نیاز داره از طریق یک نرم افزار واسط کاری را انجام بده.
جالبه بدونید که زبان HTML هم شاید بتوان یک زبان اسکریپت نویسی نام برد ، چون برای اجرا شدن به برنامه های واسط مثل Internet Explorer ، Firefox یا Chrome نیاز داره !
یا Action Script در برنامه Flash که به خود برنامه Flash یا فایل های SWF که در حقیقت مثل فایل های exe ، یک نوع فایل اجرایی هستند نیاز داره.
برخی از زبان های اسکریپت نویسی معروف عبارتند از :
Python
Action Script
Perl
Lua
Java Script
PHP
Post Script
MEL
Max Script
, ….
که همه و همه برای اجرا حداقل به یک برنامه اجرایی واسط نیاز دارند.
البته بحث برای Python کمی فرق میکنه که در مقاله بعدی توضیح میدهم.
خوب حالا که با مفاهیم اسکریپت نویسی آشنا شدید ، باید راحت بتونید معایب و مزایای آنها را بیان کنید (البته در کار انیمشن ، نه در برنامه نویسی وب و غیره !)
معایب و مزایای زبان های اسکریپت نویسی نسبت به زبان های برنامه نویسی
مزایا :
1. اضافه کردن امکان ارتقای ابزارهای نرم افزار توسط کاربر بدون نیاز به تغییر در سورس اصلی برنامه و کامپایل مجدد
2. سهولت بسیار زیاد در برنامه نویسی نسبت به سایر زبان ها مانند C
3. استفاده از یک زبان اسکریپت نویسی پایه در نرم افزارهای مختلف که هریک ممکن است با زبان های مختلف نوشته شده باشند
معایب :
1. به دلیل اینکه دستورات مستقیما به زبان ماشین تبدیل نمیشه و قراره به صورت غیر مستقیم یکسری توابع داخلی یک نرم افزار را صدا بزنه و استفاده بکنه ، سرعت اجرای آنها از زبان های برنامه نویسی به خصوص زبان C بسیار کمتره
2. اگر کاری خاص را بخواهیم انجام بدهیم که قابلیت این کار در سورس کد اصلی آن نرم افزار وجود نداشته باشد ، نمیتوانیم آن را در اسکریپت نویسی انجام دهیم ، به زبان ساده تر ، ما تنها میتوانیم از دستورات و توابعی استفاده کنیم که در سورس کد اصلی برنامه به زبان C تعبیه شده باشند !
3. عموما سورس اسکریپت هایی که نوسته ایم برای همه آشکار است و همه میتوانند آنها را بخوانند یا تغییر دهند ( در مواردی میشه سورس ها را کد گذاری کرد )
خوب این معایب و مزایایی بود که تا الان به ذهنم رسید ، ولی اگر موارد مهم دیگری باشه بعدا خدمتتون عرض میکنم. این مقاله نسبتا طولانی شده و من هم به شدت خسته شدم ، اجازه بدید ادامه توضیحات را در مقاله بعدی براتون بنویسم.ولی این را بدونید که توضیحات مربوط به اسکریپت نویسی هنوز تمام نشده و شما باید با چیزهای دیگری مثل مفسر ها آشنا بشوید.
با تشکر
سجاد ربیعی
5 دیدگاه
amir
با سلام
اول هر چیز یه تشکر جانانه به استاد عزیز بگیم و بابت مطالب عالیشون تشکر کنم.
من از مطلب فیزیکال بیس بودن انجین های رندر خیلی استفاده کردم و خیلی مطلب مفیدی برام بود .
استاد عزیز اگه برای اشما امکانش هست و وقت دارید که برای ما بزارید لطفن در مورد مفاهیم پایه ای رندر و متریال مطلب بزارید چون واقعن بیشتر ما اگه بهترین کارها رو هم رندر کنیم واقعن بی سواد هستیم {البته همه نه} من قبلن ازFresnel برای بیشتر آبجکت هام استفاده می کردم ولی در مطلب شما دیدم که برای آبجکت های کروی کاربرد داره .منظورم اینه ما چیز ها رو طوطی وار یاد گرفتیم و نیاز به مطالب علمی داریم .درسته که مطالب زیادی در این موارد به زبان اصلی وجود داره ولی خیلی هامون این زبان رو بلد نیستیم.
تشکر فراوان
سجاد ربیعی
بابت تعاریفتون ممنونم دوست عزیز.
راستش من هم در نظر دارم تا در مورد مفاهیم پایه برای چیزهای مختلف مثل متریال ، داینامیک ، کامپوزیت و غیره مقالات دیگری بنویسم ، البته فقط در مورد چیزهایی که احتمال میدم دوستان به صورت حفظی با آنها کار میکنند و منطق اصلی استفاده از آنها را ندونند چیه یا حداقال کامل آشنا نباشند.
در مورد Fresnel راستش باید بگم که فقط مربوط به اشکال کروی نیست ، (البته من هم ننوشتم فقط برای کرست ! ) ، در مقاله گفتم که اختلاف انعکاس در لبه های مدل نسبت به وسط آن ایجاد میکنه ، فقط برای فلزات این اختلاف خیلی خیلی کمه طوری که شاید به چشم نیاد ، حالا این مدل میتونه هر شکلی داشته باشه ، بنابراین پیشنهاد میکنم که به شکل مدلتون اصلا کاری نداشته باشید و حتما از این گزینه در همه کارها استفاده بکنید. فقط اگر متریالتون فلز باشه میتونید از این گزینه صرف نظر بکنید.
amir
تشکر
من به شدت به این مطالب پایه نیاز مندم بنابراین با تمام توان منتظر مقالات شما هستم.
موفق باشید
nima
با سلام مجدد خدمت شما استاد گرامی.
یک سوالی که برام به وجود اومد این هستش که اگر فرضا شما بخواید یک پلاگینی بنویسید که تابع مورد نظرتون مسقیما در خود SDK برنامه وجود نداشت اونوقت باید چی کار کنیم؟
مثلا فرض کنید شما در مایا یک locator ساختید و گذاشتید وسط یک جسم پلیگان با تعداد face های زیاد.
حالا شما تصمیم گرفتید یک برنامه بنویسید به این صورت که اگر locator و اون جسمی که locator توش قرار داره با هم انتخاب و سپس کد رو اجرا کنید، برنامه در خروجی چاپ کنه که این نقطه داخل جسم سع بعدی هست یا خارج اون!
بدیهیه که همچین دستور مستقیمی رو در اسکریپت برنامه ی مایا نداریم و مجبوریم به کتابخانه ی توسعه ی نرم افزار یا SDK اون مراجعه کنیم به آن امید که چنین دستوری حاضر و آماده برای ما قرار داده شده باشد.
حال اگر ببینید که همچین دستوری آنجا هم وجود ندارد آیا به بن بست میخوریم؟
مثلا تو هودینی شما میتونید با تبدیل جسمتون به یک جسم VDB تعیین کنید که ایا فلان نقطه در داخل جسم هست یا نه ولی در مایا چنین چیزی وجود ندارد!
با تشکر و سپاس فراوان از شما استاد گرامی.
سجاد ربیعی
سلام.
از اینکه دیر جواب سوالتون رو دادم عذر خواهی میکنم ، من این مدت درگیر انجام دادن تغییراتی در سایتم بودم.
در مورد سوالتون باید بگم که حرفتون درسته ، ما برای انجام دادن هر کاری چه در زبان C و چه در زبانهای اسکریپت نویسی توابع از قبل نوشته شده و آماده ای نداریم ، در حقیقت ما فقط توابع اولیه داریم که با آنها میتونیم برای خودمون توابع انحصاری بسازیم ، در حقیقت این توابع پایه مثل این میمونه که به ما آجر و ملات و چیزای اولیه بدن و بگن حالا برای خودتون هر ساختمانی که دوست دارید بسازید.
فرق اصلی زبان C و MEL در Maya اینه که ما با زبان MEL تنها میتونیم از دستورات و ابزارها و Node هایی که در Maya وجود دارند برای رسیدن به هدفمون استفاده بکنیم ، مثلا از MEL برای اتوماتیک انجام دادن یه سری کارها در Maya استفاده بکنیم. ولی با زبان MEL نمیشه یک Node جدید بسازیم ، مثلا نمیتونیم یک نور جدید یا دوربین جدید به جز آنهایی که در Maya موجوده بسازیم .
چون Maya یک برنامه Node Base میباشد (بعدا توضیح میدهم) ، بهترین تعریف اینه که با MEL نمیشه Node جدید ساخت ولی با پلاگین میشه .
حالا زبان C به ما یکسری تابع و کلاس میده که مثلا با اون میتونیم یک Node از جنس نور بسازیم ، ولی اینکه این نور باید چه طوری کار بکنه را باید خودمون منطقشو بنویسیم.
کلا در هر جایی زبان C یا بقیه زبان ها تنها یک ابزار اولیه میباشد و اصل کار را خودمون باید انجام بدیم ، حالا استثنا اگر شانس بیاریم ممکنه یکسری از کارها را بعضی ها از قبل کدشو نوشته باشن و ما بتونیم از آن به عنوان کتابخانه یا API استفاده بکنیم ، مثل محاسبه برخورد اشیا در فیزیک.
استثنا در مورد مثال شما در رابط فهمیدن موقعیت Locator در وسط مدل ، ما میتونیم با MEL هم برنامه را بنویسم (چون با MEL میشه هم مختصات Locator را گرفت و هم مختصات Face های مدل) ، فقط کافیه فرمول و منطقش رو بفهمیم چیه ، ولی فرقش با C این میشه که اگر ما با MEL بنویسم ، یا باید از Expression استفاده بکنیم یا باید به صورت یک تابع از Script Editor استفاده بکنیم .
ولی اگر از C استفاده کنیم و یک پلاگین بنویسیم ، میتونیم یک Node جدید به Maya اضافه کنیم که همین کار را انجام میده ولی با این تفاوت که سرعت محاسبات شاید دهها برابر از MEL بیشتر بشه.
در زبان C هم برای ساخت مثالتون احتمالا اینطوری میشه که یک Node در Maya ساخته میشه که حداقل 2 ورودی داره ، ورودی اول اطلاعات Vector موقعیت Locator و ورودی دوم اطلاعات Mesh مدل مورد نظر که این Node با دریافت این اطلاعات با توجه به فرمولی که براش نوشتیم نتیجه 0 یا 1 رو میتونه در خروجیه خودش به ما بده.
اما در مثال های دیگر مثل ساخت نور انحصاری یا حتی ساخت یک Locator با یک قیافه دیگر ، ما حتما باید از C (یا غیره) استفاده بکنیم.