ad

درباره نویسنده

سجاد ربیعی

11 سال سابقه کار حرفه ای در صنعت انیمیشن و جلوه های ویژه کامپیوتری به عنوان FX Artist و FX Technical Director. سرپرست جلوه های ویژه در فیلم سینمایی حرکت اول ، سریال تلویزیونی ماتادور ، انیمیشن سینمایی شاهزاده رومی و چندین پروژه کوچک و بزرگ دیگر. مسلط به نرم افزارهای Maya ، Houdini و Nuke و موتور های رندر Arnold و RenderMan. مسلط به انواع زبان های برنامه نویسی و اسکریپت نویسی در صنعت انیمشین نظیر ++C و Python ، MEL , HScript , PyQt. مدرس شرکت cmiVFX برای آموزش جلوه های ویژه و نرم افزار Houdini. برای دریافت اطلاعات بیشتر لطفا به سایت شخصی بنده به آدرس www.JKCompany.org مراجعه فرمایید.

مطالب مرتبط

22 دیدگاه

  1. امیرعباس فیض

    سلام سجاد !

    پاسخ
  2. احسان

    عزیزم خسته نباشی واقعا کلی اطلاعات کسب کردم.
    به امید مقالات جدید (:

    پاسخ
  3. مرتضی

    سلام
    دیدم این دوره تموم شده، گفتم کل هشت قسمت رو تبدیل به یه کتاب با فرمت epub کنم. فرمت Epub فرمت خیلی عالی ای برای مطالعه توی کتابخوان ها و یا گوشی های هوشمنده. از لینک زیر می تونین دانلودش کنین:
    http://iranupload.com/nkqrctxi6gzf/tfawt_zban_hay_askhrypt_nwysy_w_-_sjad_rby`y.epub.html

    پاسخ
    1. سجاد ربیعی

      بله ، از پیشنهادتون ممنونم ، حتما چک میکنم.

  4. دانیا

    واقعا عالی بود من با مقالات ارزشمند شما برنامه نویسی را شروع کردم.

    پاسخ
    1. سجاد ربیعی

      سلام ، بسیار خوشحالم که این مقالات تونسته کمکی به شما بکنه و انشالا که خیلی زود بتونید از این انتخابتون بهره ببرید.

  5. مرتضی گشتی

    با سلام
    واقعا از سجاد عزیز تشکر می کنم که این سری مقالات رو بطور رایگان در اختیار عموم قرار داد. با خواندن این مقالات نسبت به گذشته دیدم خیلی بازتر شد و الان میتونم کد نویسی رو راحتتر دنبال کنم.
    در مورد ترجمه هم که قرار بود منتشر کنم بخاطر تآخیر ایجاد شده (بعلت خرابی کارت گرافیک و بعد از اون هم مسافرت) عذر میخام و انشاالله در آینده نزدیک دراختیار دوستان قرار خواهم داد.

    پاسخ
    1. سجاد ربیعی

      خواهش میکنم ، انشالا که مشکلتون زود حل بشه.

  6. جواد

    دست شما درد نکنه جناب ربیعی عزیز
    و همین دست آقا ایمان عزیز و آقای زراعتی هم درد نکنه بخاطره زحماتشون

    پاسخ
    1. سجاد ربیعی

      خواهش میکنم ، دوست عزیز ، لطف دارید.

  7. مرتضی

    درود بر سجاد ربیعی عزیز. واقعا خسته نباشید بابت این همه زحمت.
    میشه در مورد شی گرایی هم توضیح بدین؟آخه هر سایتی یک تعریفی از شی گرایی داره و من واقعا گیج شدم که برنامه نویسی شی گرا چیه و چه فرقی با برنامه نویسی پیمانه ای داره؟

    پاسخ
    1. سجاد ربیعی

      بله ، اتفاقا حدس میزدم که دوستان با تعریف شی گرا که در این مقاله چندین بار گفتم ، مشکل بخورند، امکان شی گرا بودن توضیحات زیادی داره که شاید خود یک مقاله بشه ، ولی در حد مختصر که مشکلتون حل بشه میتونم توضیح بدم.
      اگر چه برنامه نویسی شی گرا مزیت های زیادی داره ، ولی یکی از مهمترین آنها را در خدممتون توضیح میدهم.

      در برنامه نویسی شی گرا ما چیزی به اسم کلاس یا Class داریم که چیزی شبیه به یک گروه یا کتابخانه میباشد که در داخل آن تعداد زیادی تابع را قرار میدهیم.
      فرض کنید که میخواهید یک برنامه رندر بنویسید ، در برنامه رندر خود تعداد زیادی تابع برای نور ، دوربین ، متریال و غیره دارید ، مثلا یک تابع برای ساخت دوربین دارید ، یک تابع برای ساخت نور ، چند تابع برای ساخت متریال و غیره ، حالا اگر بخواهید زمان کد نویسی یک نور یا دوربین بسازید ، باید بین تعداد بسیار زیادی تابع که دارید بگردید و از بین آنهایی که برای نور است ، تابع مخصوص ساخت نور را پیدا کنید و استفاده کنید. ولی با کمک کلاس یا Class (برنامه نویسی شی گرا) ، شما میتوانید تابع های مخصوص نور را در کلاسی به اسم Light قرار دهید و تابع های مخصوص دوربین را در کلاسی به اسم Camera قرار دهید و تابع های متریال را در کلاس Material قرار دهید.
      حالا در برنامه نویسی اگر بخواهید یک نور بسازید ، فقط کافیه اسم کلاس نور یا Light را تایپ کنید و بعد از آن اسم تابع ساخت نور را بنویسید (معمولا برنامه های IDE به صورت خودکار بعد از تایپ کردن اسم کلاس ، اسم تمامی تابع های داخل آن را به شما نشان میدهند) ، چیزی مثل کار زیر :
      Light.createLight
      بنابراین میبینید که یکی از کاربرد های کلاسها ، دسته بندی و منظم کردن توابع میباشد ، کلاس ها کاربرد های دیگری هم دارند که در مقاله دیگر توضیح میدهم.
      فقط این را بدانید که کلاس ها چیزی شبیه کلاس های درس در دانشگاه میباشد ، در هر کلاس دانشجویانی که شرکت میکنند ، توابع هستند ، بنابراین در کلاس ریاضی ، تنها کسایی شرکت میکنند که رشته ریاضی میخونند ، یا در کلاس جغرافی به همین ترتیب ، حالا شما اینجوری خیلی راحت میتونید تمامی کسانی(توابع) رو که ریاضی میخونند یا به ریاضی مربوط هستند را پیدا کنید ، فقط کافیه برید سر کلاس ریاضی !

      هر زبان برنامه نویسی که از قابلیت کلاس ها برخوردار باشد را میگویند Object Oriented .
      البته دوباره تاکید میکنم که برنامه نویسی شی گرا فقط به این مورد محدود نمیشود و امکانات بسیار دیگری نظیر وراثت را دارا هستند که اینجا توضیح نمیدهم.

      موفق باشید

    2. nadali

      سلام خسته نباشید ناشنوا هستم لطفا اموزشی برنامه نویسی یادبگیرم؟؟

    3. ایمان . ب

      سلام
      چه زبانی رو می خواین یاد بگیرین ؟

  8. danial

    سلام اقای ربیعی عزیز .
    مطالب واقعا عالیی بودن دستتون درد نکنه 🙂

    پاسخ
  9. amir

    خسته نباشید واقعن از خوندن مقالاتتون لذت بردم و همشون رو خوندم.منتظر مقالات دیگری از شما هستیم.
    تشکر

    پاسخ
  10. nima

    عالی بود بی صبرانه منتظر مقلات بعدی شما هستم.
    فقط در پایان من چند تا سوال دیگه در رابطه با این سری مقالات برام پیش اومد با عرض پوزش اگر زیاد سوال میپرسم:
    1_پلاگین هایی نظیر FumeFX یا Arnold که برای مایا نوشته شدن با تمام قسمت های مایا سازگاری ندارن، این عدم سازگاری به خاطر خواسته ی عمد خود شرکت های سازنده ی پلاگین هست یا واقعا مشکلی وجود دارد؟؟؟؟
    به عنوان مثال در خود سایت solidangle نوشته شده که موتور رندر آرنولد فعلا از پارتیکل های مایا که به صورت thick cloud هستند پشتیبانی نمیکند و اگر شما از این نوع پارتیکل رندر بگیرید حاصل کار گوی هایی گرد خواهد بود!!!!!
    یا در پلاگین FumeFX چنانچه بخواهیم یک آتش را با پارچه تماس دهیم به ناهماهنگی هایی بر میخوریم و مجبوریم آتش رو به ذررات نسبت دهیم!!!!!
    ——————————————————————–
    2_هر پلاگین خود API دارد مثلا همین آرنولد خودش در هنگام نصب به مایا SDK خود را اضافه میکند.
    این امکان چه کاربردی دارد؟آیا از این SDK میتوان برای رفع محدودیت ها نظیر آنچه که در شماره یک پرسیدم استفاده نمود؟؟؟؟
    ——————————————————————–
    3_چرا زبان MEL با برخی از متغیر ها مشکل دارد؟؟
    به عنوان مثال چنانچه شما در شرط اولیه حلقه ی for از متغیری با نام i$ استفاده کنید اسکریپت شما با خطا مواجه خواهد شد و جالبتر این ماجرا اینجاست که پیام خطای این حالت هم هیچ ارتباطی با نام i$ ندارد!!!
    یا در مثالی دیگر:
    string $sel[] = `ls -sl -tr`;
    با کمال تعجب وقتی این کد رو اجرا میکنم خطای:
    // Error: Line 1.13: Invalid redeclaration of variable “$sel” as a different type. //
    نمایش داده میشود حالا اگر شما متغیر رو string $selList[] تعریف کنید مشکل حل میشود!!!!!
    فوق العاده سپاس گزار از شما استاد گرامی و ارجمند.

    پاسخ
    1. سجاد ربیعی

      سلام.
      1. در مورد سوال اولتون باید بگم ، یکسری از چیزها مثل مثالی که برای رندر پارتیکل با Arnold زدید ، فقط چون برای شرکت نسبت به سایر امکانات دیگر که باید اضافه کند از درجه اهمیت کمتری برخوردار است ، هنوز این امکان را اضافه نمیکنند ، وگرنه اگر شرکت بخواهدمیتواند بسیاری از آنها را حل کند و برای آنها انجام آن زیاد مشکل نیست . در مورد FumeFX هم باید بگم ، چون هسته پردازش با Solver این پلاگین ها با هسته پردازش بخش های داینامیک مایا یکی نیست و به صورت جدا نوشته شده ، بنابراین این دو سیستم یکدیگر رو نمیشناسند و نمیتوانند با هم تعامل داشته باشند ، اگرچه میشود کلک زد ، مثلا حرکت Fume را به Particle داد و Particle را با nCloth برای Collision استفاده بکنیم ، ولی به هر حال به صورت مستقیم نمیشه. اگر بدانید ، تفاوت سیستم nDynamic و Dynamic در Maya همین است ، Autodesk ابتکار به خرج داد و هسته پردازش سیستم Particle ، Cloth و Rigid را یکی ساخت (Nucleus) ، بنابراین سیستم nParticle و nCloth و nHair و nRigid همدیگر رو میشناسند و با هم تبادل اطلاعات میکنند.
      در نرم افزار Houdini هم چون تمام عناصر داینامیک ماهیتا از یکسری Node های یکسان و در یک سیستم داینامیک ساخته شده اند ، همه آنها با هم در تعامل هستند.

      2. همانطور که در مقاله هم اشاره کردم ، از SDK برای ساخت پلاگین استفاده میکنند ، پلاگین یعنی اضافه کردن قابلیت اضافی به نرم افزار ، حالا خود Arnold هم در حقیقت یک نرم افزار هست که فقط از طریق پلاگین با مایا در ارتباط است ( هسته این نرم افزار همان فایل ai.dll میباشد) ، شما به کمک SDK میتوانید امکانات زیادی به آرنولد اضافه کنید ، مثلا متریال های جدید برای آن بسازید ، متریال های ALShaders نمونه کامل این قضیه میباشند.
      ولی برای ارتباط با بخش های داخلی مایا مثلا کاری کنید که Fume روی پارچه تاثیر بگذارد ، شما اگر به API مربوط به FumeFX دسترسی داشته باشید و از طریفی هم به API مربوط به پارچه در Maya دسترسی داشته باشید ، تا حدی میتونید یکسری قابلیت به آنها اضافه کنید ، ولی اگر واقعا بخواهید مثل سیستم nDyna,mic ، برنامه FumeFX را جزوی از داینامیک مایا بکنید ، باید حتما به سورس کدهای اصلی سیستم nDynamic مایا دسترسی داشته باشید و آن را بازنویسی کنید. اگرچه من با SDK آرنولد کار نکردم ، ولی اگر با آن آشنا باشید ، باید خودتون بتنونید اون محدودیت رندر پارتیکل ها را برطرف کنید.

      3. در مورد بخش سوم سولاتتون من نمیدونم دقیقا منظورتون چیه ؟ مثلا در زبان MEL در حلقه for هیچ مشکلی در رابطه با متغیر $i بر نمیخوریم ، شاید شما متغیر را خارج از حلقه تعریف نکردید ، چون در این موضوع زبان MEL مثل زبان C نیست !
      انشالا اگر با زبان MEL بیشتر آشنا بشوید و بیشتر تمرین کنید ، دلیل بسیاری از مشکلاتتون رو پیدا میکنید و میبینید که چه قدر راحت هستند.
      مثلا در مورد متغیر $Sel که فرمودید ، اگر خودتون پیغام خطا را ترجمه کنید ، میبینید که میگه متغیر $Sel قبلا تعریف شده و ما نمیتوانیم آن را با یک نوع جدید تعریف کنیم.
      مثلا شما اگر اول بنویسی string $Sel و بعد این کد رو اجرا کنید ، چون این متغیر از نوع string معمولی تعریف شده ، دیگه نمیتونید بنویسید string $Sel[] ، حتی اگر کد قبلی را پاک کنید .چون این متغیر قبلی تا وقتی که مایا را نبندید ، در Ram سیستم تعریف شده و پاک نمیشه ،
      این محدودیت زبان MEL میاشد که در مقاله هم توضیح دادم ، گفتم که در زبان Python شما هر وقت که اراده کنید ، میتونید نوع متغیر ها را تغییر دهید.

      امیدوارم که تونسته باشم جواب سوالاتتون را داده باشم

    2. nima

      ممنون از پاسختون واقعا کامل و عالی بود.
      سپاس گزارم.

  11. شهیر

    استاد عزیز سلام امید وارم خوب باشین از مقالات تان بی نهایت استفاده خوبی داشتم .
    من یک مشکل در برنامه نویسی دارم یعنی من دارم برنامه نویسی را شروع کردم با سی پلاس پلاس مفاهیم loop , condtional statement … میدانم اما چطور میشه برنامه های به این بزرگی تنها با این دستورات و چند دستور دیگر توسعه داده شود یعنی درک بهتر نداشتم تا حال میشه کمی در باره اش توضیح بدین .

    پاسخ
    1. سجاد ربیعی

      دوست عزیز اینجا نمیتونم خیلی توضیح بدم ، ولی فکر میکنم اگر به مقالات کامل توجه بکنید ، جواب سوالتون رو پیدا میکنید ، بنده گفتم که برای ساخت نرم افزاری بزرگ مثل Maya یا موتور بازی ، ما نمیتوانیم از اول همه کدها را خودمون بنویسیم ، و شاید هم کسی این کار را نکنه ، اینجاست که از API های مختلف استفاده میکنیم.
      یادگیری زبان C اصلا سخت نیست و البته مهم هم نیست ، مهم اینه که شما API های مختلف را بشناسید و برای انجام کار خود بدانید چه طور باید از آنها و توابع و کلاسهای داخل انها استفاده کنید ، مثلا برای ساخت موتور رندر GPU Base ، باید با API های DirectX و یا OpenGL آشنایی داشته باشید.
      چیزی که باید یاد بگیرید ، نحوه استفاده از API های مختلف است ، وگرنه همانطور که خودتون فرمودید ، خود زبان C چیزی جز تعریف کردن و کار کردن با متغیرها ، کلاسها و توابع و غیره نیست .(البته همه زبانها همینطور هستند).
      بنابراین شاید جمله آخرتون را باید اینطور اصلاح کنم :
      برای نوشتن برنامه های بزرگ از این چندتا دستور زبان C استفاده میکنیم تا بتونیم با کتابخانه ها و API های مختلف کار بکنیم.

ارسال یک نظر

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

ImanVFX - مستقل