تفاوت OpenGL و DirectX ، مزایا و معایب OpenGL و DirectX ، مهمترین API ها در صنعت VFX و انیمیشن ! از زبان یک متخصص ، آقای سجاد ربیعی گنجینه ای از معلومات مختلف 3D – VFX هست که تدریس هودینی با cmiVFX را در کارنامه خود دارد .بخش چهارم از سری مقالات آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی را با آقای سجاد ربیعی دنبال کنید . امیدوارم دوستان نهایت استفاده را از این گنجینه ارزشمند داشته باشند .
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی
قسمت 4 :
-
تفاوت زبان های اسکریپت نویسی و برنامه نویسی
(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
مروری بر مقاله قبلی
در مقاله قبلی با مفهوم کامپایلر آشنا شدید و فهمیدید که وظیفه کامپایلر یا مترجم ، ترجمه کدهای زبانهای برنامه نویسی به زبان ماشین می باشند.
همچنین فهمیدیم یکسری نرم افزار داریم که میتونیم کدهای برنامه نویسی رو در آنها بنویسیم و مستقیما به وسیله آنها برنامه خود را کامپایل کنیم که به این نرم افزارها IDE میگفتیم ، درحقیقت برنامه های IDE مثل CodeBlocks خود کامپایلر نیستند و برای اجرای دستورات به یک برنامه کامپیالر مانند GCC نیاز دارند.
همچنین با انواع برنامه ها و فایل های اجرایی و غیر اجرایی آشنا شدید و اینکه یکی دیگر از انواع خروجی کد های برنامه نویسی شده میتواند فایل های کتابخانه ای باشند که در این مقاله قصد داریم آنها را کاملتر معرفی کنیم.
ادامه مقاله کتابخانه ها (Libraries)
فرض کنیم در برنامه نویسی میخواهید یک برنامه بنویسید که قرار است تقویم میلادی را به تقویم شمسی تبدیل کند ، مسلما برای نوستن این برنامه به تعداد زیادی دستور و تابع و فرمول ریاضی نیاز است ، حالا اگر در برنامه های مختلف بخواهیم هر دفعه از این برنامه تبدیل تقویم استفاده کنیم باید هر دفعه کلی خط کد بنویسیم که مسلما این کار اصولی و درست نیست ، راه درستی که وجود دارد اینه که میتونیم این فرمولها و دستوراتی را که برای تبدیل تقویم نوشتیم را در یک فایل کتابخانه ای ذخیره کنیم و بعد در برنامه های مختلفی که مینویسیم فقط آن فایل کتابخانه را ضمیمه برنامه خود بکنیم و از داخل آن هر دفعه به جای نوشتن تعداد بسیار زیادی کد فقط تابع مربوط به تبدیل تقویم را فراخوانی کنیم.
یکی از بزرگترین کتابخانه های برنامه نویسی زبان C ، کتابخانه Boost Library می باشد که در آن تعداد بسیار زیادی تابع برای چیزهای مختلف مثل انواع فرمول های ریاضی وجود دارد.
انواع فایل های کتابخانه ای
ما دو مدل فایل کتابخانه ای داریم ، فایل های کتابخانه ای پویا که به آنها Dll (Dynamic Link Library) در ویندوز و SO در لینوکس میگوییم. و نوع دوم فایل های کتابخانه ای ثابت یا Static هستند که عموما فرمت های آنها lib می باشد.
1. فایل های dll یا so بدین گونه هستند که در کنار فایل اجرایی خروجی مثلا فایل exe باید همیشه وجود داشته باشند و هر وقت که برنامه مورد نظر باز میشود به این فایل های dll در کنار خود است رجوع میکنند تا از بکسری از اطلاعات داخل آن استفاده کنند.
2. فایل های کتابخانه ای lib یا ثابت بدین گونه هستند که تنها زمانی که میخواهید برنامه خود را کامپایل کنید به آنها نیاز است تا یکسری از دستورات را از داخل آن استفاده کند ، بعد از اینکه برنامه کامپایل شد ، دیگر نیازی به آنها نیست و اطلاعات آن در داخل فایل exe یا فایل های dll ذخیره میشوند.
مثال
در پوشه bin محل نصب برنامه Maya یک نگاهی بندازید ، تعداد بسیار زیادی فایل dll وجود دارند و یک فایل maya.exe ، این فایل maya.exe فایل اصلی برنامه است که برای اجرا شدن به آن فایل های dll نیاز دارد ، مثلا اگر فایل Nurbs.dll که در آن اطلاعات مربوط به اجسام NURBS ذخیره شده است را پاک کنید ، وقتی Maya بالا می آید Error میدهد .
نکته : ممکن است در اثر پاک کردن برخی از فایل های dll مایا اجرا شود ولی بعدا در نحوه کارکرد آن مشکل به وجود بیاید !
یه سوال خوب !
اگر خروجی برنامه نوشته شده یا باید فایل اجرایی مثل exe باشد و یا کتابخانه ای مثل dll و یا lib باشد و یا فایل های غیر اجرایی دیگر ، پس فرمت mll که برای پلاگین های maya میباشد برای کدام دسته است ؟
جواب : این فایل ها در حقیقت همان فایل های dll می باشند که بعدا توضیح میدهم.
پس mll یعنی maya library link
آشنایی با مفهوم API ) Application Programming Interface)
در برنامه نویسی یکسری شرکت ها با ساخت تعداد بسیار زیادی کتابخانه ، تابع و ماژول های مختلف یک مجموعه ابزار برای برنامه نویسان ساخته اند که کار آنها را بسیار ساده میکند ، مثلااگر در حالت عادی برای دسترسی به کارت گرافیک لازم است 2000 خط برنامه به زبان C بنویسیم تا رنگ قرمز را روی مانیتور نشان دهیم ، یکسری شرکت ها این 2000 خط کد را به همراه تعداد بسیار زیادی کد و قابلیت دیگر را در قالب فایل های کتابخانه ای dll و lib نوشته اند که اگر ما از این API ها در برنامه خود استفاده کنیم مثلا با نوشتن 20 خط کد میتوانیم همان کار را انجام دهیم !
پس ما انواع مختلفی API داریم ، مثل یکسری برای دسترسی به کارت صدا ، یکسری برای دسترسی به کارت گرافیک ، یکسری برای دسترسی به کارت شبکه ، یکسری برای ساخت هوش مصنوعی در برنامه و غیره.
اساسا API ها به دو دسته تقسیم می شوند
1. آنهایی که ما را برای نوشتن یک برنامه کامل کمک میکند ، مثلا OpenGL برای ساخت برنامه موتور بازی
2. آنهایی که به ما کمک میکند تا به نرم افزاری که قبلا توسط اشخاص یا شرکت دیگر نوشته شده است، یکسری قابلیت اضافه کنیم که به آن Plug-Ins میگوییم ، دقیقا شبیه برنامه Maya.
OpenGL و DirectX چیست ؟
هر دو یک مجموعه API و کتابخانه هستند که امکان دسترسی به کارت گرافیک و بسیاری کارهای دیگر را به ما میدهند. از این رو از این API ها در نرم افزار های سه بعدی و ساخت بازی استفاده میکنند.
مزایا و معایب OpenGL و DirectX نسبت به هم
1. OpenGL یه API به صورت رایگان می باشد که توسط شرکت Silicon Graphic تولید شده است. این API به صورت Cross Platform می باشد یعنی اینکه در تمام سیستم عامل ها نظیر Windows ، مکینتاش و لینوکس و حتی اندورید و غیره قابل استفاده می باشد. تمامی انواع اجسام سه بعدی نظیر Curves و Surface را ساپورت میکند. از آن حتی میتوان در صفحات وب استفاده کرد و غیره.
2. DirectX که توسط Microsoft ساخته شده است و همانند OpenGL امکان دسترسی به کارت گرافیک را میدهد ، این API تنها روی سیستم عامل ویندوز قابل استفاده میباشد ، به همین دلیل برای نرم افزار های سه بعدی که قرار ایست روی تمام سیستم عامل ها اجرا شوند نظیر Maya و Houdini نمیتوانند از DirectX استفاده کنند ، ولی برنامه 3D Max به دلیل اینکه تنها روی ویندوز نصب میشود از DirectX برای Viewport خود استفاده می کند. OpenGL از لحاظ برخی امکانات که در نرم افزار های سه بعدی نیاز است کمی از DirectX کاملتر و راحتتر است ، مثلا DirectX مستقیما آبجکت های NURBS را نمی شناسد و مجبور است در درون آنها را به Polygon یا Subdiv تبدیل کند. ولی از طرف دیگر نوشتن برنامه هایی برای بازی با DirectX کمی راحتتر است چون ابزار های آماده ی زیادی را دارد و کیفیت خیلی خوبی هم دارد ، از اینرو در برنامه های بازی سازی تحت ویندوز بیشتر از DirectX استفاده میکنند.
XBox و PlayStation
جالبه بدانید که بازی های ساخته شده برای کنسول بازی XBox از DirectX استفاده میکنند و کنسول بازی PlayStation از OpenGL برای بازی های خود استفاده میکند.
مهمترین API ها که در صنعت انیمیشن و VFX کاربرد دارند
ما تعداد بسیار زیادی API داریم که در کار ما کاربرد دارند و شاید صدها بار از آنها استفاده کرده باشید بی آنکه بدانید آنها API هستند ، مهمترین آنها از این قرار است :
API های فیزیک که در بحث داینامیک کاربرد دارند مانند nVidia PhysX که قبلا به اسم Ageia PhysX معروف بود ، Havok و Bullet که اسم آنها را در Maya و Max و برخی برنامه های دیگر شنیدید و همچنین Open Dynamic Engine یا ODE.
API های مخصوص صدا که در بازی کاربرد دارند مانند fmod که یکی از قابلیت های ان صدای سه بعدی می باشد.
یکسری API های کوچکتر مانند OpenVDB و OpenEXR و PTex که میتونید با کمک آنها این فرمت ها را به برنامه خود اضافه کنید و کلی API های مهم دیگر.
پس مثلا با داشتن علم برنامه نویسی و آشنایی با انواع API میتونید خودتون موتور فیزیک Bullet را به Maya یا هر برنامه دیگر اضافه کنید.
خوب حالا که با برخی از مفاهیم مهم در برنامه نویسی اشنا شدید وقتشه که در مقاله بعدی بریم سراغ زبان های اسکریپت نویسی و تفاوت آنها با زبان های برنامه نویسی !
با تشکر
سجاد ربیعی
18 دیدگاه
مریم
ممنون از مطالب فوق العادتون من کارت گرافیکم nvidia geforce 3060 هست ولی نمیدونم چرا موقع نصب نرم افزار گرافیکی بهم error opengl میده و نرم افزار رو باز نمیکنه شما میتونید کمکم کنید
ایمان براتی
من متوجه منظور شما نشدم اما شما باید درایور و برنامه ها رو از سایت اصلی یعنی Nvidia دانلود و نصب کنید . به هیچ وجه از سایر منابع و یا سایت های ایرانی برای دانلود درایور استفاده نکنید .
محمد
سلام
خدا خیرت بده ، همانطور که گفتید کسی از ابتدا این مطالب را نمیشکافه تا درک بهتری داشته باشیم . خیلی ممنون از لطف شما آقای ربیعی موفق و موید باشید
سیامک سازگار
خیلی ممنون
رضا رفیعی
سپاس از مطالب خوبتون
vahidx360
سلام
این کار شما خیلی ستودنی و با ارزشه خدا خیرتون بده.
دانیا
خیلی خیلی ممنون خدا کنه این کار ارزشمند شما ادامه داشته باشه واقعا مقالات کاربرد و خوبی هست.
سجاد ربیعی
ممنونم دوست خوبم ، بله ، مسلما مقالات دیگری هم راجب بخش های مختلف انیمشن و جلوه های ویژه مینویسم ، مانند مقاله مفهوم PBR در موتور های رندر که Share کردم.
انشالا قصد دارم تا مانند همین مقالات برنامه نویسی ، چیزهایی را توضیح یا آموزش بدهم که در فیلم های آموزشی به آنها اشاره ای نمیکنند و یا منابع فارسی معتبر در ارتباط با آنها کم باشند.
مسلما در ایران افراد متخصص خوبی داریم ، ولی همانطور که قبلا در جایی نوشته بودم ، به دلیل نبود مراکز و دانشگاههای کاملا تخصصی ، بیشتر دوستان با استفاده از فیلم های آموزشی و یا تلاش شخصی ، توانسته اند در بخش های مختلف انیمیشن متخصص بشوند ، بنابراین شاید مقالاتی از این قبیل بتواند کمکی بکند تا این دوستان از لحاظ آکادمیک و مفهومی هم کاملا آگاه بشوند.
دانستن این مفاهیم ما را در پیشبرد اهدافمون بسیار کمک میکنه ، به عنوان مثال دانستن دلیل علمی خیلی از کارها یا تنظیماتی که در فیلم های آموزشی مختلف انجام میدهند ، باعث میشود که ما هرگز این تکنیک ها را فراموش نکنیم (چون دیگر آنها را حفظ نیکنیم ! ) و حتی با تکیه بر داشتن آگاهی به مفاهیم و طرز کارکرد آنها ، بتوانیم بدون آموزش دیدن ، کار های متفاوت دیگری را در نرم افزار ها انجام دهیم.
nima
ممنون و خسته نباشید جانانه به شما استاد عزیز.
سجاد ربیعی
سپاسگذارم دوست خوبم.
یاسر
سلام
ممنون و متشکرم از شما بخاطر لطف و زحمتی که می کشید .
درود بر شما
سجاد ربیعی
ممنون از شما دوست عزیز
وحید ولایتی
سلام خیلی ممنون از دانسته های خیلی مفید و زحمتی که برای ارائه مطالب کشیدید. می خواستم بدانم این امکان هست که این مطالب به شکل یک پرونده PDF در یک جا ارائه شود تا هر زمان که نیازی به مرور مطالب بود بشود از آن استفاده نمود. ممنون
سجاد ربیعی
سلام.
فکر بسیار خوبیه دوست عزیزم ، ولی متاسفانه فعلا فرصت انجام اینکار را ندارم.
انشالا بعدا میخواهم تا یک کتاب کامل در ارتباط با برنامه نویسی ، (از مفاهیم تا آموزش کد نویسی) بنویسم ، وقتی تمام شد حتما به دوستان اطلاع میدهم.
با تشکر
احمد
تشكر از شما اقاي ربيعي مطلب مفيدي هست استفاده كرديم
سجاد ربیعی
ممنونم دوست گرامی
مانی مهدویان
سلام
خیلی خوب بود و برای من باعث شد که بتونم یه تقسیم بندی در ذهنم براشون ایجاد کنم
در مورد 3Dmax هم نمیدونستم فقط روی ویندوز نسب میشه
جالب بود…ممنونم
سجاد ربیعی
از اینکه این مطالب کمکتون کرد خوشحالم.