سجاد ربیعی و قسمت هفتم از سری مقالات تخصصی CGI – VFX . سجاد ربیعی مدرس دوره هودینی در cmiVFX این بار بخش هفتم مقالات تفاوت زبان های اسکریپت نویسی و برنامه نویسی را منتشر کرده است . مفهوم مفسر یا Interpreter ، فرق مفسر با مترجم یا Compiler ، مقایسه زبان های برنامه نویسی و اسکریپت نویسی ، نوشتن پلاگین با API نرم افزار Maya ،نوشتن ابزار با زبان MEL یا Python معمولی Maya از جمله مباحث سجاد ربیعی در این سری از مقالات بوده است. در این مقاله به زبان اسکریپت نویسی Node Base ، تاریخچه سیستم برنامه نویسی Node Base در انیمیشن و جلوه های ویژه ، سیستم Procedural ،زبان Python و به دستورات MEL در قالب کد های Python پرداخته شده است .
کانال مقالات برنامه نویسی 3D-VFX سجاد ربیعی در ImanVFX
باعث افتخار هست که مقالات فنی و تخصصی آقای سجاد ربیعی یکی از حرفه ای های دنیای VFX – 3D در این وب سایت منتشر میشود . از لینک زیر به تمام مقالات آقای سجاد ربیعی در وب سایت دسترسی خواهید داشت .
کانال مقالات استاد سجاد ربیعی در ImanVFX
آشنایی با مفاهیم زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت 1
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت 2
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت 3
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت 4
آشنایی با مفهوم Physically Based Rendering در موتورهای رندر
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,قسمت 5 معرفی اسکریپت نویسی
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,سجاد ربیعی قسمت 6
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,سجاد ربیعی قسمت 7
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,آشنایی با PyMEL – Python – API – PyQt
مروری بر مقاله قبلی
در مقاله قبلی با مفهوم مفسر یا Interpreter آشنا شدید و فهمیدید که وظیفه Interpreter تفسیر کدهای اسکریپت برای نرم افزاری که این اسکریپت روی آن اجرا میشود میباشد ، فرق مفسر با مترجم یا Compiler این بود که مفسر دستورات را مستقیما اجرا میکند ولی Compiler دستورات را به زبان ماشین تبدیل میکند و یک فایل اجرایی میسازد که بعد از اجرا کردن آن فایل دستورات اجرا میشوند. همچنین زبان های برنامه نویسی و اسکریپت نویسی را با هم مقایسه کردیم و گفتیم که سرعت زبان های برنامه نویسی دهها برابر از زبان های اسکریپت نویسی بیشتر میباشند. گفته شد که با زبان های اسکریپت نویسی عموما میتوان از ابزار های موجود در نرم افزار استفاده کرد ولی با زبان های برنامه نویسی میتوان ابزاری منحصر به فرد به نرم افزار به صورت پلاگین اضافه کرد ، و در نهایت گفتم که تنها زمانی میتوانیم بگوییم که پلاگین نوشتیم که حتما از بخش API نرم افزار Maya استفاده کرده باشیم و اگر ابزاری را با زبان MEL یا Python معمولی Maya نوشتیم ، به آن پلاگین نمیگویند.
ادامه مقاله
خوب حالا که با زبان های اسکریپت نویسی آشنا شدید ، لازمه که چندتا از معروفترین زبان های اسکریپت نویسی را که در صنعت انیمیشن و جلوه های ویژه کاربرد دارند بهتون معرفی بکنم : MEL : زبان اسکریپت نویسی اصلی نرم افزار Maya که مخفف این کلمات است (Maya Embedded Language) Max Script : زبان اسکریپت نویسی نرم افزار 3D Max HScript : زبان اسکریپت نویسی نرم افزار Houdini Python : یک زبان اسکریپت نویسی عمومی و قدرتمند که در اکثر نرم افزار ها نظیر Maya ، Houdini و Nuke قابل استفاده میباشد. Lua : یک زبان اسکریپت نویسی قدرتمند که در برخی از موتور های بازی مورد استفاده قرار میگیرد. RSL : زبان اسکریپت نویسی مخصوص موتور رندر RenderMan که برای ساخت متریال های انحصاری مورد استفاده قرار میگیرد (Renderman Shading Language) ICE : زبان اسکریپت نویسی ویژوال در نرم افزار مرحوم SoftImage XSI ! VEX : زبان اسکریپت نویسی ویژوال در نرم افزار Houdini MCG : زبان اسکریپت نویسی ویژوال در نرم افزار 3D Max 2016 که مخفف این کلمات است (Max Creation Graph) توجه : این سه زبان اسکریپت نویسی آخر نیاز به توضیح دارد که در بخش بعدی به آن می پردازم.
تکنولوژی جدید زبان های اسکریپت نویسی
شاید دیدی که اکثر شما از زبان های اسکریپت نویسی داشته باشید این باشد که همواره باید کدها را در محیطی نظیر Script Editor تایپ کرد و برنامه نویسی یعنی همین تایپ کردن دستورات ، ولی جالبه بدانید که ما به روش دیگری هم میتونیم اسکریپت نویسی کنیم ، روشی که شما حتی لازم نیست یک خط کد تایپ بکنید ! در این روش شما به جای تایپ کردن دستورات از سیستم Node Base استفاده میکنید ، چیزی شبیه نرم افزار Nuke یا Fusion ، اجازه بدید مثالی بزنم . فرض کنید در زبان اسکریپت نویسی معمولی میخواهیم دو عدد را با هم جمع کنیم و نتیجه را در یک متغیر سوم ذخیره کنیم و در نهایت مقدار این متغیر را در مانیتور چاپ بکنیم . خوب مسلما همچین چیزی باید بنویسیم : A = 10; B = 15; C = A + B; print(C); خوب حالا میخواهیم با زبان اسکریپت نویسی Node Base همین عملیات را انجام بدهیم ، در این حالت باید کاری شبیه تصویر زیر انجام دهیم.
در تصویر بالا همانطور که معلوم است ، یک Node برای متغیر A داریم و یک Node برای متغیر B و برای انجام عملیات جمع از ند Add استفاده میکنیم و نهایتا به جای تابع Print از ند مخصوص Print استفاده میکنیم. همانطور که متوجه شدید ، برنامه نویسی با این سیستم زیاد تفاوتی با برنامه نویسی معمولی ندارد ، اما واقعا چرا همچین سیستمی برای برنامه نویسی ابداع شده است ؟ خوب جوابش مزایاییه که این روش دارد.
مزایای برنامه نویسی
1. با سیستم Node Base نوشتن برنامه های بزرگ با این روش بسیار ساده تر است ، یکی از دلیل ها این است که برنامه های که با این روش نوشته میشوند بسیار خوانا تر از روش نوشتاری میباشد ، خوانا بودن برنامه به عیب یابی آن و یا تغییر در بخش هایی از کد های نوشته شده کمک میکند.
2. در روش ویژوال ما قابلیت گروه بندی و پک کردن مجموعه ای از Node ها (یا بهتره بگیم کدها ) را داریم . فرض کنید که یک برنامه خیلی بزرگ نوشتید که از اجزای کوچکتر تشکیل شده ، میتونید هر یک از اجزای کوچکتر را در درون یک گروه یا پک قرار دهید ، این باعث میشه که برنامه شما خیلی شلوغ نشود و تنها از تعدادی گروه تشکیل شده باشد و با وارد شدن به هر گروه میتونید Node های مخصوص به آن را تغییر دهید.
3. امکان تغییر بخشی از برنامه بدون کد نویسی دوباره بسیار راحت میشود ، مثلا یک برنامه بزرگ نوشتید که از اجزای کوچکتری مثل نور ، دوربین و متریال تشکیل شده ، حالا میخواهید به جای سیستم نور قدیمی از یک سیستم نور جدید استفاده بکنید ، فقط کافیه تا گروه مربوط به نور قبلی را غیر فعال یا Disable کنید و پک یا گروه مربوط به نور جدید را جایگزین آن بکنید ، اگر بعدها خواستید دوباره از سیستم نور قبلی استفاده بکنید ، فقط کافیه که پک نور جدید را غیر فعال کنید و پک نور قبلی را فعال کنید.
4. با سیستم Node Base ما به راحتی میتونیم برنامه هایی را به صورت Procedural بنویسیم ،
پا ورقی
سیستم Procedural حود نیاز به توضیحات بسیار زیادی دارد که انشالا در مقاله مخصوص به این سیستم میردازیم. 5. ما به آسانی میتوانیم اسکریپت نوشته شده با سیستم Node Base را به اسکریپت های متنی معمولی تبدیل کنیم و برخی از بخش های برنامه را تایپ کنیم ! خوب این سیستم مزایای بسیار زیادی دارد که برخی از مهمترین ها را براتون نوشتم ، فقط کافیه بدونید که مهمترین مزیت آن سادگی در کد نویسی و همچنین سیستم Procedural می باشد.
تاریخچه سیستم برنامه نویسی Node Base در انیمیشن و جلوه های ویژه
اگرچه به تازگی (در 5 سال اخیر) از این سیستم در برخی از نرم افزار ها استفاده شده است ، ولی جالبه بدانید که تاریخچه مربوط به استفاده از این سیستم به سالها قبل از سال 2000 مربوط میشود. شاید به جرات بتوان گفت که نرم افزار Houdini اولین و قدرتمندترین پیشرو در این صنعت بوده است و از همان بدو تولد از این سیستم استفاده میکرد. این سیستم ابتدا توسط شرکت Side Effects روی نرم افزار Prism مورد استفاده قرار گرفت ، بعدها نرم افزار Prism به نرم افزار Houdini تغییر نام داد. به دلیل قدرت این سیستم امروزه بسیاری از شرکت ها مجبور شدند تا این قابلیت نرم افزار Houdini را به طریقی هر چند محدود به نرم افزار های خود اضافه بکنند ، مثلا ICE در برنامه Softimage یا MCG در 3D Max 2016 ، پلاگین Grasshoper در برنامه Rihno و غیره. متاسفانه برنامه نویسی با این روش فعلا در نرم افزار Maya وجود ندارد ، ولی تعدادی نرم افزار و پلاگین وجود دارند که تا حدی میتوانند این امکان را به Maya اضافه بکنند.
هیولایی به اسم Python
خوب حالا که با برخی از زبان ها یا ابزار های اسکریپت نویسی آشنا شدید ، لازمه که در مورد زبان Python بیشتر صحبت بکنیم ، به دلیل اینکه : 1. استفاده از زبان Python فقط مربوط به یک نرم افزار خاص نمیباشد. 2. امکانات زبان Python از بقیه زبان های اسکریپت نویسی در انیمیشن بیشتر است. 3. زبان Python بسیار پر سرعتتر از بسیاری از زبان های اسکریپت نویسی دیگر است. 4. کتابخانه های زبان Python از سایر زبان های اسکریپت نویسی بسیار کاملتر است. 5. زبان Python یک زبان Cross-Platform است ، یعنی اینکه روی تمامی سیستم عاملها نظیر Windows ، linux و Mac قابل استفاده میباشد. زبان Python در بسیاری از نرم افزار ها مثل Maya ، Houdini و Nuke کاربرد دارد ، ولی به دلیل اینکه بیشترین کاربرد آن در نرم افزار Maya میباشد ، لازمه که توضیحات بیشتری را در این رابطه عنوان کنم . در ابتدا ما تنها میتوانستیم با زبان MEL برای Maya اسکریپت بنویسیم ، ولی بعد از اینکه شرکت Autodesk برنامه Maya را از شرکت Alias خریداری کرد ، بعد از منتشر کردن چند نسخه از Maya ، امکان اسکریپت نویسی با Python را به Maya اضافه کرد. اگرچه در این مقاله قصد ندارم به طور کامل راجب Python صحبت کنم و یا آن را آموزش بدهم ، ولی لازمه که در مورد انواع مختلف زبان اسکریپت نویسی Python در Maya کمی صحبت بکنم ، شاید بیشتر دوستان فکر بکنند که Python در مایا تنها همان نوشتن کد در Script Editor و استفاده از دستورات MEL در قالب کد های Python باشد ، ولی واقعیت این است که در Maya ما به 3 روش میتونیم از Python استفاده بکنیم !
1. استفاده از Python به جای زبان MEL با ماژول
maya.cmds 2. استفاده از Python به جای API با ماژول
maya.OpenMaya 3. استفاده از PyMel
احتمالا اسم این بخش ها را بارها در اینترنت دیدید و همیشه دوست داشتید که بدانید تفاوت این بخش ها نسبت به هم چیست ، خوب حالا که مشتاق هستید با این بخش ها آشنا شوید ، اجازه بدید ادامه مقاله را در شماره بعدی بنویسم 🙂
با تشکر سجاد ربیعی
5 دیدگاه
nima
عالی بود واقعا عالی بود مقاله رو جایی به پایان رسوندین که برای شماره های بعدیش لحظه شماری می کنم ممنون.
امیدوارم این مجموعه آموزشی حالا حالا ها ادامه داشته باشه.
سجاد ربیعی
ممنونم دوست عزیز ، متاسفانه یا خوشبختانه مقاله بعدی ، آخرین مقاله در این رابطه است ، البته اگر خدا بخواد مقالات دیگری هم در رابطه با مباحث دیگر مینویسم.
مرتضی گشتی
باسلام
بازم از سجاد عزیز متشکرم
با اشتیاق منتظر مقاله های بعدیت هستم;-)
مرتضی
سلام
من هنوز مقالات شما رو نخوندم. می خواستم بدونم که این آموزش ها فقط برای مایا است یا میشه اسکریپت های افترافکت رو هم نوشت باهاش؟
البته اگه سوالم کلاً ار بیخ اشتباه بود، نخندین! بذارین به حساب ندونستن.
ممنون!
سجاد ربیعی
سلام.
نه دوست من ، اتفاقا سوال خوبی پرسیدید ، البته من این موضوع را در مقاله شماره یک توضیح دادم .
هدف از نگارش این مقالات ، آشنایی دوستان با کلیت و مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در حوزه انیمیشن و جلوه های ویژه میباشد و به جز شماره آخر مقاله که در دست نگارش است ، بقیه شماره ها هیچ ارتباطی با نرم افزار خاصی ندارد و دانستن آنها برای همه کاربرها میتواند سودمند باشد.
در این مقالات من قصد آموزش زبان اسکریپت نویسی یا برنامه نویسی خاصی را ندارم ، چرا که اولا فیلم های آموزشی و کتابهای مختلفی در این رابطه وجود دارند و ثانیا در همه فیلم های آموزشی راجب برنامه نویسی صحبت میکنند ، اما چیزی که معمولا راجب آنها صحبتی نمیشود همین مفاهیمی است که بنده نوشتم ، چون بارها در سایت های مختلف دیده بودم که دوستان ، حتی کسانی که تا حدی با برنامه نویسی و اسکریپت نویسی آشنا هستند از الفاظ و تعاریف اشتباهی استفاده میکنند (مثلا به کار بردن واژه پلاگین برای اسکریپت نویسی ) ، تصمیم گرفتم با توجه به دانسته های خودم ، این مفاهیم پایه را با زبانی ساده و روان و دور از هرگونه پیچیدگی به صورت مقاله بنویسم تا دوستان علاقه مند حتی کسانی که کوچکترین آشنایی با برنامه نویسی ندارند ، بتوانند از این مقالات بهره ببرند.
بنابراین پیشنهاد میکنم که اگر با هر نرم افزاری کار میکنید و یا در هر بخشی از انیمیشن کار میکنید ، مثلا مدلسازی ، حتما این مقالات را بخوانید و دنبال کنید.