استاد سجاد ربیعی با مقاله آشنایی با سیستم های Procedural در کنار ماست . Procedural terrain در VUE یا Procedural Maps در RenderMan یا Procedural Maps در Arnold به چه معنی هستند ؟ فرق بین مدلسازی معمولی با مدلسازی Procedural در چیست ؟ مدلسازی پارامتریک و Asset چیست ؟
آشنایی با سیستم Procedural در نرم افزارهای سه بعدی
Procedural City by Ali Seiffouri
کلمه Procedural (پروسجورال) ، کلمه ای است که شاید این چندسال اخیر زیاد دیده و شنیده باشید . این واژه در نرم افزارهای بسیاری مورد استفاده قرار میگیرد. در نرم افزار Vue میبینیم که نوشته Procedural terrain ، در موتور رندر RenderMan میبینیم که میگویند Procedural Maps و در Arnold هم به Procedural Textures اشاره میکنند ، بیشتر از همه این موارد ، در نرم افزار Houdini میبینیم که بسیار زیاد از کلمه Procedural استفاده میشود ، مواردی مثل Procedural Modeling ، Procedural Shaders و غیره. اما این کلمه Procedural واقعا چیست ؟ چه مزیت هایی داره ؟ مثلا فرق بین مدلسازی معمولی با مدلسازی Procedural در چیست ؟ قبل از ادامه به دوستانی که با نرم افزار های مختلف کار میکنند پیشنهاد میکنم حتما این مقاله را بخوانند ، چون این مقاله فقط برای کسایی که با نرم افزار های Procedural مثل Houdini کار میکنند نیست ، اگرچه نرم افزار هایی مثل Maya یا Max را نمیتوان یک نرم افزار کاملا Procedural نام برد ، ولی حتی در این نرم افزارها بخش هایی وجود دارند که به صورت Procedural کار میکنند و میتوان از آنها به صورت Procedural استفاده کرد. بنابراین آشنایی با این سیستم برای همه دوستان خالی از حسن نیست.
معنی کلمه Procedural :
خوب قبل از هر چیز اجازه بدید شما را با معنی این کلمه آشنا بکنم ، Procedural یعنی ” رویه ای و یا روندی” . رویه ای یعنی اینکه ما به تمامی مراحل و روندهای رسیدن به یک هدف خاص دسترسی داریم و همچنین میتوانیم بدون اینکه خللی در روند اجرای پروژه صورت پذیرد ، تغییراتی را در هر یک از این مراحل لحاظ کنیم.
اجازه بدید مثالی بزنم :
مثلا فرض کنید که در یک نرم افزار Procedural Modeling نظیر Houdini ، شما مدل یک ماشین رو به صورت Procedural می سازید ، خوب با توجه به تعریف فوق ، وقتی مدل ماشین کامل میشود ، شما میتوانید به تک تک مراحل رسیدن به مدل نهایی ماشین مراجعه کنید و در آن تغییراتی انجام بدهید ، مثلا ممکنه مدل ماشین را از یک مکعب یا Box شروع کرده باشید ، بعد روی آن از چندین مرحله ابزار Extrude استفاده کرده باشید ، بنابراین در مدلسازی Procedural شما میتوانید به تک تک این مراحل سفر کنید و در تنظیمات آن تغییراتی را لحاظ کنید ، مثلا وارد مرحله Extrude شوید و تنظیم Division آن را تغییر دهید. خوب این رویه و عملیات ممکنه برای دوستان Maya کار کمی آشنا باشه ، نه ؟ در نرم افزار Maya به این مراحل History میگوییم و از طریق پنجره های Hypergraph یا Node Editor میتوانیم تک تک مراحل ساخت یک مدل را به صورتBase Node ببینیم ، ولی واقعیت این است که هنوز Maya را نمیتوان یک نرم افزار کاملا Procedural نام برد.
برای دیدن سایز بزرگ روی تصویر کلیک کنید
به این دلیل که :
اگرچه ما تک تک مراحل ساخت یک مدل را به صورت Node داریم ، ولی حتما متوجه شدید که واقعا نمیتوان در بسیاری از موارد ، وقتی یک مدل ساخته میشود ، تنظیمات مراحل قبل را تغییر داد ، مثلا وقتی از ابزار Extrude استفاده میکنیم و بعد از آن چندین مرحله دیگر مثل Cut Face Tool یا Delete Face یا Smooth را انجام میدهیم ، وقتی به مرحله Extrude دوباره مراجعه میکنیم و تنظیمات Division را تغییر میدهیم ، کل مدل به هم میریزد ، در صورتی که در نرم افزار های Procedural واقعی ، ما این امکان را داریم تا طوری یک مدل را بسازیم که اگر در مراحل اولیه مدل تغییراتی را انجام دهیم ، خللی در روند عملکرد مراحل بعد اتفاق نیافتد !
به یک مثال دیگر توجه کنید :
فرض کنید یک استوانه ساده را میسازیم و با ابزار های مخصوص ، UV آن را اصلاح میکنیم ، بعد در وسط آن Joint می سازیم و با مدل Skin میکنیم ، سپس Joint ها را انیمیت میکنیم تا مدل استوانه حرکت کند ، بعد روی این مدل استوانه Particle پخش میکنیم . خوب مراحل کار یا History کار به این ترتیب است :
Cylander -> UV Projection -> Joints -> Skin -> Animate -> Emitting Particles
خوب شما این پروژه را می سازید و به جناب کارگردان نشان میدهید ، متاسفانه آقای کارگردان با دیدن این پروژه شوکه میشه و با عصبانیت بهتون میگه : مگه من به شما نگفتم که به جای استوانه باید از مکعب مستطیل استفاده بکنید ؟ شما هم به دلیل اینکه چندین شبانه روز روی پروژه وقت گذاشته بودید متوجه میشید که از شدت خستگی این مورد را فراموش کردید ! خوب اگر به روش معمول در برنامه هایی مثل Maya کار کرده باشید ، اینجاست که با دو دست باید تو سرتون بزنید ، چون باید از اول همه مراحل را تکرار کنید ! ولی اگر شما در نرم افزار های Procedural کار کرده باشید ، اینجاست که یک لبخند تحویل جناب کارگردان میدهید و تنها کاری که میکنید اینه که به مرحله اول پروژه میروید و جای مدل استوانه را با مکعب مستطیل عوض میکنید و دکمه play را میزنید ، خواهید دید که تمام مراحل به صورت اتوماتیک بدون مشکلی روی مدل جدید اتفاق میوفتد ! البته لازم است به این نکته اشاره کنم که کار کردن با نرم افزارهای Procedural همچین هم ساده نیست و شما باید از ابتدا که میخواهید پروژه را بسازید ، قواعد و اصولی را رعایت بکنید ، باید حواستان باشد تا طوری پروژه را بسازید که بعدا اگر مدل های ورودی را تغییر دادید ، خللی در روند کار مراحل بعد پیدا نشود ( مثلا طوری از ابزارها استفاده بکنید که برای کار کردن نیازی به شماره Vertex ها نداشته باشند ، چون اگر مدل عوض شود و شماره Vertex ها تغییر کند ، همه چیز خراب میشود.). در فیلم زیر ، مثال بالا را به صورت تصویری خدمتتان نمایش میدهم ، بدین صورت که پروژه ساده ای را با مدل استوانه ساخته ام که شامل چندین مرحله History اعم از اصلاح UV ، Joint ، Skin ، Animate میباشد که نتیجه آن در بخش داینامیک نرم افزار Houdini مورد استفاده قرار میگیرد. در این فیلم میبینید که وقتی مدل استوانه را با مکعب جایگزین میکنم ، هیچگونه خللی در روند اجرای پروژه صورت نمیگیرد . همچنین پروژه مشابهی را در نرم افزار Maya ساخته ام و خواهید دید که با جایگزینی مدل مکعب با استوانه ، به مشکل برخورد میکنیم .
خوب فکرکنم مثال بالا آنقدر واضح باشد که کاملا متوجه شده باشید فرق بین مدلسازی معمولی با Procedural در چیست. ولی این تنها قدرت و قابلیت سیستم کاری Procedural نیست.
:
عموما وقتی از کلمه Procedural استفاده میکنند ، از کلمه Parametric نیز استفاده میکنند. اگر در مثال بالا دقت بکنید ، متوجه میشوید که ما با این روش قادر خواهیم بود ابزار هایی را بسازیم که تنها با تغییر ورودی آن ، بتوانیم مراحل انجام پروژه را روی ورودی جدید به صورت اتوماتیک اعمال کنیم ، خوب این شما را یاد چه چیز می اندازد ؟ بله درست حدس زدید ، این شبیه پلاگین ها و ابزارهای مختلفی است که در نرم افزارها استفاده میکنیم ، مثالا یک پلاگین برای یک نوع Deformer نصب میکنید ، بعد این ابزار در Maya یک Attribute دارد که قادر است اسم مدلهای مورد نظر را بگیرد و عملیات Deform را روی آنها اعمال کند ، بدون اینکه نیاز باشد کار خاصی را انجام دهید ، همچنین این Deformer احتمالا تعدادی Attribute دیگر هم دارد که با تغییر آنها میتوانید نوع Deform کردن را تغییر دهید و کنترل کنید. خوب با توجه به توانایی های نرم افزارهای Procedural شما میتوانید بدون برنامه نویسی خاصی ، یکسری ابزار به صورت Procedural بسازید که قادر است یک نوع عملیات خاص را مثل مورد بالا بدون در نظر گرفتن نوع مدل و اطلاعات ورودی انجام دهد ، همچنین بعد از ساخت میتوانید همه چیزهایی را که برای این ابزار مورد استفاده قرار داده اید را در داخل یک گروه یا پک قرار دهید و پارامترهای مهم را که به کاربر امکان تغییر در روند محاسبات و عملیات را میدهند را از این پک یا گروه بیرون بکشید و در اختیار کاربر قرار دهید ، بنابراین نتیجه این کار یک ابزار یا Node کامل میشود که یکسری پارامتر هم دارد ، کاربر فقط لازم است تا مدل خود را به این ابزار وصل بکند و پارامتر های آن را تغییر دهد ، بدون اینکه نیاز باشد بداند در دل این ابزار چه میگذرد ، به این ابزارهایی که معمولا به این روش ساخته میشوند ، Asset یا Digital Asset هم میگویند. بخش Asset نرم افزار Maya که در نسخه های اخیر این نرم افزار اضافه شده است ، همچین کاری را انجام میدهد ، ولی نسبت به نرم افزار های مشابه مثل Houdini بسیار محدودتر می باشد. احتمالا میتوانید حدس بزنید که این ویژگی در شرکت های بزرگ جلوه های ویژه و انیمیشن چه قدر میتواند کاربرد داشته باشد !؟ در این شرکتها اشخاص Technical برای تسریع روند ساخت پروژه ، Asset هایی را برای انجام کارهای مختلف میسازند و آنها را در اختیار آرتیست ها می گذارند و آرتیست ها تنها با استفاده از این ابزارها و تغییر پارامترهای آنها میتوانند خیلی راحت و سریع کارهای مختلف را انجام دهند. از این روش در صنعت بازی سازی هم بسیار استفاده میشود ، تولید کننده ها Asset های متفاوتی را دارند که به کمک آنها میتوانند به آسانی مدلهای و فضاهای مختلفی را نظیر جاده ، پل ، شهر ، ساختمان و غیره بسازند.در انتهای این مقاله در مورد این بحث بیشتر صحبت خواهم کرد.
در تصویر زیر ، یک نمونه از Digital Asset ساخته شده در Houdini را میبینید ، همانطور که مشخص است ، این ابزار از تعداد زیادی ابزار یا Node های کوچکتر ساخته شده است که مجموعا تشکیل یک ابزار کامل را میدهند ، در سمت راست تصویر پارامترهای مهم این ابزار را میبینید که در اختیار کاربر قرار میگیرند.
برای دیدن سایز بزرگ روی تصویر کلیک کنید
اگر فیلم Pixels محصول سال 2015 را دیده باشید ، حتما از افکتهای Pixelization که در فیلم استفاده شده است لذت برده اید. اگر دقت بکنید ، حتی آتشها و انفجارهای این فیلم هم ماهیت Pixel دارند. شاید از خودتان سوال کرده باشید که برای ساخت افکت هایی نظیر این ، از چه نرم افزارها و پلاگین هایی استفاده کرده اند. دوستانی که با نرم افزار Maya کار میکنند ممکن است کمی فکرشان درگیر نحوه ساخت این افکت شده باشد ، احتمالا متوجه میشوند که ساخت همچین افکتی در نرم افزار Maya زیاد هم کار ساده ای نیست و مسلما نیاز به یکسری پلاگین و یا اسکریپت نویسی دارند . اما جالب است بدانید که ساخت این تکنیک در نرم افزارهای Procedural نظیر Houdini زیاد هم سخت نیست و حتی بدون کد نویسی و تنها با استفاده از Node های پییشفرض آن میتوان این افکت را به صورت یک ابزار کامل پیاده سازی کرد.
توجه : در نرم افزار Maya تعدادی اسکریپت در اینترنت وجود دارند که قادر هستند به صورت محدود این افکت را تنها روی مدلها اعمال کنند ، من لینک یکی از این اسکریپت ها را در زیر براتون گذاشتم تا علاقه مندان استفاده کنند ، البته من تا به حال با این اسکریپت کار نکرده ام ولی شاید به دردتون بخوره.
لینک :
http://www.creativecrash.com/maya/script/voxelizer
در فیلم زیر ، من به صورت خیلی ساده و ابتدایی Asset یا ابزاری را براتون در Houdini ساخته ام که قادر است آبجکت هایی از جنس Volume مانند آتش ، دود و انفجار را به جلوه Pixelization تبدیل بکند. طبق تعاریف سیستم های Procedural و Parametric که در بالا گفتم ، در این فیلم هم ابزاری ساخته ام که از یکسری Node ها و ابزارهای کوچکتر ساخته شده است و همه آنها با هم تشکیل یک ابزار کامل را میدهند که پارامترهای مهم آن برای تغییر در اختیار کاربر قرار گرفته است. این ابزار قادر است افکت Pixel را برای دود و آتش به صورت مجزا محاسبه کند. سیستم رنگ این ابزار به صورت اتوماتیک با توجه به میزان درجه حرارت محاسبه میشود.همچنین امکان استفاده از Volume Scattering (نفوذ نور آتش در داخل دود ) که در پلاگین FumeFX وجود دارد امکانپذیر است. (برای نمایش فیلم ها با کیفیت بالاتر ( HD ) آنها را مستقیما در سایت Vimeo مشاهده فرمایید )
رندر نهایی این پروژه :
فایل Vimeo
فیلم مربوط به نحوه استفاده و طرز عملکرد این ابزار در نرم افزار Houdini :
فایل Vimeo
برنامه هایی که تا حدی از قابلیت Procedural برخوردارند :
امروزه برنامه های مختلفی وجود دارند که هریک به نحوی قابلیت Procedural را در خود جای داده اند .
— 3D Max2016 :
یکی از این برنامه ها نرم افزار 3D Max نسخه 2016 میباشد که با اضافه کردن بخش Max Creation Graph یا MCG توانسته تا حدی امکان استفاده از قابلیت Procedural را در خود جای دهد ، البته این بخش هنوز محدود است و بیشتر برای بحث مدلسازی کاربرد دارد ، ولی مسلما در نسخه های بعدی کاملتر میشود.
— SoftImage XSI :
زمانی که نرم افزار XSI تولید می شد ، بخشی در آن اضافه شده بود به اسم ICE که چیزی شبیه MCG در برنامه Max 2016 بود ، ICE برنامه Softimage بسیار کامل بود و حتی در بسیاری از بخش ها میتوانست با بخش VOPs برنامه Houdini رقابت کند.
— Cinema 4D :
در نرم افزار Cinema 4D بخشی به اسم Mograph وجود دارد که شامل تعداد بسیار زیادی ابزار است که قابلیت Procedural دارند. این نرم افزار همچنین دارای محیطی به اسم Xpresso وجود دارد که همانند MCG ، ICE و VOPs در نرم افزارهای Max ، XSI و Houdini عمل میکند و قابلیت ساخت ابزارهای Procedural را با سیستم Node-Base به کاربر میدهد. نرم افزار Cinema 4D به دلیل استفاده از سیستم Procedural و همچنین سادگی ساخت ابزارها نسبت به رقبای خود مثل Houdini ، توانسته بخش اعظم بازار را در حوزه پروژه های Motion Graphic به خود اختصاص دهد.
— Rihno :
در برنامه Rihno هم پلاگینی وجود دارد به اسم GrassHopper که قابلیت استفاده از Procedural را در بخش مدلسازی به کاربر میدهد.
— Speed Tree :
نرم افزاری قدرتمند که به صورت Procedural قادر است گیاهان مختلف مثل انواع درختان را بسازد.
— Terragen :
نرم افزاری قدرتمند برای ساخت فضاهای طبیعی به صورت Procedural .
— Maya :
متاسفانه خود نرم افزار Maya هنوز بخش کاملی را برای ساخت ابزارهای Procedural ندارد ، ولی نرم افزارهای جانبی و همچنین پلاگین هایی برای Maya ساخته شده اند که این توانایی را به Maya اضافه میکنند ، یکی از این نرم افزارهای جانبی ، برنامه ایست به اسم Fabric Engine که میتواند به صورت پلاگین به برنامه Maya وصل شود و امکان ساخت ابزارهای Procedural را به کاربران Maya بدهد.البته Fabric Engine تنها یک پلاگین مخصوص Maya نیست و خود ، یک برنامه کامل و Stand Alone است که میتوانیم مستقیما با آن کار کنیم. همچنین مجموعه ابزارهای پلاگین Soup ، ابزارهای Procedural بسیاری را که به صورت پیش فرض در برنامه Houdini موجود هستند را به Maya اضافه میکند. مسلما نرم افزارهای دیگری هم ممکن است وجود داشته باشند که از قابلیت Procedural برخوردار باشند ، ولی این نرم افزارهایی که نام بردم ، مهمترین آنها میباشند که من نیز با انها آشنایی دارم . اگر شما هم برنامه های دیگری را میشناسید که در صنعت انیمیشن و جلوه های ویژه کاربرد دارند و از سیستم Procedural بهره مند هستند ، اسامی آنها را در بخش کامت های این مقاله بنویسید تا بقیه دوستان نیز با آنها آشنا بشوند.
Procedural یعنی Houdini ، Houdini یعنی Procedural ! :
همانطور که گفتم بی شک نرم افزار هودینی قویترین نرم افزار در این زمینه و پیشتاز این تکنولوژی در بین سایر نرم افزارهای 3D میباشد. جالب است بدانید که نرم افزار Houdini خود یکی از قدیمیترین نرم افزارهاست که سالها قبل از سال 2000 به اسم Prism تولید میشده است (تاریخ دقیق رو یادم نیست) و بعدا به Houdini تغییر نام داد ، این نرم افزار از همان بدو تولد به صورت Procedural کار میکرد. مزیت خوب هودینی در این زمینه این است که امکان استفاده از قابلیت Procedural در همه بخش های آن نظیر Modeling ، Rendering ، Compositing ، Dynamic ، Sound & Animation ، Programming دارا میباشد. در فیلم زیر با صفر تا صد نحوه ساخت یک ابزار کاملا Procedural در نرم افزار Houdini آشنا میشوید. این ابزاری که ساختم ، در حقیقت یک نوع Deformer ساده میباشد که قادر است دو نوع Deformation مختلف را (Noise و Wave) روی مدلهایی که به آن وصل میشوند اعمال کند. همچنین این امکان وجود دارد تا مدلهای دیگری را به عنوان Effector به ورودی دوم این ابزار متصل کرد تا عملیات Deformation با توجه به شکل و حجم مدل Effector ، تنها روی محدوده خاصی از مدل اصلی اتفاق افتد.
مشاهده فیلم از طریق آپارات :
موارد دیگری که از کلمه Procedural استفاده میکنند :
خوب با توجه به توضیحات بالا ، الان باید دید خوبی راجب مبحث Procedural بدست آورده باشید ، اما اینجا ممکنه یکسری از دوستان سوال کنند که : طبق توضیحات گفته شده در بالا فهمیدیم که Procedural یعنی چه و همچنین با کمک آن میتوانیم ابزارها یا Asset هایی را برای راحتی کار بسازیم ، ولی هنوز یک موضوع روشن نشده و آن این است که چرا در برنامه های دیگر ، از واژه Procedural برای بخش هایی استفاده میکنند که با توضیحات بالا همخوانی ندارد ، مثلا در برنامه Vue از کلمه Procedural Terrain برای ساخت کوه استفاده میکنند ، مگر این ابزار یک Asset است ؟ در صورتی که اینطور نیست ، همچنین در RenderMan میگویند Procedural Map ، یا در مایا بعضا میگویند Procedural Textures در صورتی که این واژه ها با توضیحات بالا همخوانی ندارد ، مثلا بافت Checker در برنامه Maya یک Procedural Texture است ولی این Node مخصوص Checker یک Asset نیست (یک گروه که از ابزارهای دیگر ساخته شده باشد نیست ) !
دیگر موارد استفاده از سیستم های Procedural :
کاربرد سیستم های Procedural تنها به نمونه هایی که در بالا نوشتم محدود نمیشوند و در بخش های دیگر تولید انیمیشن هم مورد استفاده قرار میگیرند.
Procedural Textures :
در نرم افزار Maya و تقریبا در همه برنامه های سه بعدی دیگر ، ما تکسچری به اسم Checker (همان تسکچر شطرنجی خودمون ) داریم ، خوب حالا فرض کنید به جای استفاده از Checker موجود در Maya ، ما این تکسچر یا بافت شطرنجی را در Photoshop طراحی میکنیم و بعد آن را وارد مایا میکنیم ، خوب از لحاظ نتیجه ممکنه نتیجه هر دو یکسان باشه ، ولی تفاوتشان در چیست ؟ دوستان خیلی راحت میتوانند جواب بدهند ، تفاوتش در این است که در بافت Checker موجود در Maya و سایر برنامه ها ، یکسری پارامتر یا Attribute داریم که با کمک آنها میتوانیم شکل Checker را تغییر دهیم بدون آنکه لازم باشد به برنامه های ویرایش عکس مثل Photoshop رجوع کنیم ، مثلا تعداد خانه های Checker را کم وزیاد کنیم یا رنگ سیاه و سفید آن را به رنگ های دیگر تغییر دهیم ، اما در بافت Checker که در Photoshop ساخته ایم ، امکان انجام این تغییرات را در نرم افزار سه بعدی نداریم و باید حتما از Photoshop استفاده کنیم و این تغییرات را انجام دهیم و مجددا بعد از خروجی گرفتن از Photoshop ، آن Texture را وارد Maya بکنیم . البته ممکن است دوستان بگویند که ما با تغییر اندازه UV ها میتوانیم حتی Checker ساخته شده در Photoshop را در نرم افزار خودمان کوچک یا بزرگ کنیم ، اما یک مساله دیگر اینجا مطرح میشود و آن این است که اگر Texture ساخته شده در Photoshop را که فرضا با ابعاد 1024 * 1024 ساخته ایم ، به کمک UV در نرم افزار Maya خیلی بزرگ کنیم ، در زمان رندر کیفیت Texture بسیار کم پایین می آید و اصطلاحا میگوییم که Pixel شده است. ولی اگر از Checker داخلی Maya استفاده بکنیم ، حتی اگر با تغییر UV ، اندازه آن را هزاران برابر بزرگتر بکنیم ، باز در زمان رندر میبینیم که کیفیت آن هیچ تغییری نمیکند و پیکسل نمیشود .(به تصاویر زیر دقت کنید)
برای دیدن سایز بزرگ روی تصویر کلیک کنید
خوب حالا که با مثال بالا تفاوت Checker مخصوص مایا ( Procedural Texture ) را با Checker ساخته شده در Photoshop که یک Texture معمولی میباشد (Pixel Base) را متوجه شدید ، اجازه بدهید تعریف دیگر Procedural را بیان کنم. در Texture ها و کلا هر ابزاری (مثل Procedural Terrain در برنامه Vue) که به صورت Procedural ساخته شده است ، کاربر با دست آنها را نساخته (مثل طراحی Checker در Photoshop نمیباشد) و در حقیقت نرم افزار با توجه به یکسری فرمول که برای آن برنامه نویسی کردند آن Texture و یا بافت را میسازد. چون یک فرمول این نوع بافت ها یا ابزارها را میسازد ، بنابراین با تغییر اعداد در این فرمول ما میتوانیم به نتایج مختلف برسیم و پارامترهای این ابزار ها همین کار را انجام میدهد (مثل پارامتر های بافت Noise در Maya) ، همچنین چون بافت ها و ابزارهای Procedural با فرمول های ریاضی ساخته شده اند ، نه پیکسل های از قبل تعریف شده ، بنابراین با بزرگ یا کوچک کردن این بافت ها ، فرمول مذکور ، محاسبات را در ابعاد جدید انجام می دهد و بنابراین کیفیت این بافت ها با بزرگ کردن آنها پایین نمی آید ، به بیان دیگر میتوانیم بگوییم که این فرمول ها به صورت داینامیک با توجه به تغییر شرایط ، خودشان پیکسل جدید تولید میکنند. پس تمامی Texture هایی که در خود نرم افزارها وجود دارند مثل Checker ، Grid ، Noise ، Ramp و غیره در Maya ، بافت های Procedural هستند و تمامی بافت هایی که به صورت فایل عکس هستند ، Texture های معمولی هستند. ( میتوان گفت که ابعاد تصویر یا بافت ، تنها در مورد بافتهایی که عکس یا Pixel Base میباشند کاربرد دارد و بافتهای Procedural ابعاد مشخصی ندارند.) ( در بافت های معمولی ، حجم زیادی از اطلاعات پیکسل به صورت ثابت در فایل مربوط به بافت وجود دارند ، ولی در بافت های Procedural ، اطلاعات پیکسل با توجه به فرمول موجود در تابع یا Procedure مخصوص آن بافت ، در زمان اجرای دستورات محاسبه و ساخته میشوند.)
در تصاویر زیر ، تعدادی از Texture های Procedural پرکاربرد را قرار دادم :
فیلم آموزشی محاسبه یک Procedural Texture در نرم افزار Maya :
برای اینکه دقیقا متوجه بشوید که منظور از محاسبه Texture توسط فرمول چیست ، من نحوه ساخت یک بافت Procedural ساده را در نرم افزار Maya برای شما ضبط کرده ام. فقط به جای اینکه این فرمول ، Texture را به صورت عکس تولید کند ، از پارتیکل ها استفاده میکند ، یعنی هر پارتیکل نماد یک پیکسل است. برای نوشتن Texture های Procedural ما با اطلاعات U و V سروکار داریم ، در این پروژه چون قرار است ذرات جای پیکسل ها را بگیرند ، بنابراین به جای اطلاعات U و V کافیست تا مختصات ذرات را روی محورهای X و Z بگیریم و به متغیرهای S و T در سورس برنامه بدهیم. به دلیل اینکه معمولا اطلاعات U و V بین اعداد 0 تا 1 هستند (به جز سیستم UDIM) ، بنابراین خطی را به برنامه اضافه کردم تا مختصات ذرات را از -12 تا +12 به 0 تا 1 تغییر دهد ، به این کار معمولا Normalize کردن میگویند. سورس برنامه را میتوانید از بخش زیر در پنچره Expression Editor برنامه Maya مطابق با فیلم آموزشی Paste کنید.
توجه : ممکن است سورس کد زیر در مرورگر شما از راست به چپ نوشته شده باشد ، وقتی آن را در Maya کپی میکنید ، مطمئن شوید که از چپ به راست مطابق فیلم آموزشی کپی شده باشد.
// Procedural Texture // www.JKCompany.org
// Attributes vector $FinalColor; float $bendScaleS = 2; float $bendScaleT = 2; float $frequencyS = frame/20; float $frequencyT = frame/20; float $modAmount = 2;
// Take Position of the Particles
vector $Pos = (particleShape1.position);
// Normalize Position (between 0 to 1) float $s = ($Pos.x+12)/24; float $t = ($Pos.z+12)/24;
// Procedural Texture Algorithm float $ss = $s + sin($t * 1 * 3.14159 ) * $bendScaleS; float $tt = $t + sin($s * 1 * 3.14159 ) * $bendScaleT;
float $stripeS = floor($ss * $frequencyS ); float $stripeT = floor($tt * $frequencyT );
$FinalColor = ($stripeS + $stripeT) % $modAmount;
// Set Color of the particles particleShape1.rgbPP = $FinalColor;
نمایش فیلم آموزشی فوق از طریق آپارات :
خوب حالا اجازه بدهید از بحث Texture ها خارج شویم و برویم سراغ مثال های دیگر در رابطه با ابزار های Procedural .
Procedural Terrains :
خوب دوستانی که با برنامه Vue آشنایی داشته باشند ، حتما میدانند که برای ساخت کوه ما دو روش داریم ، اول ساخت کوه به صورت مدل Polygon و دیگری ساخت کوه با ابزار Procedural Terrain ، خوب فرق این دو مدل هم دقیقا مثل بافت هاست ، در Vue ، کوه هایی را که با polygon ساختیم ، تعداد Vertex های مشخص دارند و جزییاتی که در آن وجود دارند ، همان جزییاتی هستند که خودمان با استفاده از قلم ها و ابزار های مختلف روی مدل کوه Sculpt کردیم ، در حقیقت میتوان گفت که این مدل استاتیک یا ثابت است ، حالا در پروژه اگر دوربین در روی یک بخش خاص از این کوه مثلا روی قله آن خیلی نزدیک شود و Zoom بکند ، اگر تعداد Vertex ها خیلی زیاد نباشد ، جزییات قله خیلی کم دیده میشود و حتی ممکن است لبه ها و یا Edge های قله به دلیل کم بودن Vertex ها به صورت چند وجهی دیده شوند. اما در نمونه Procedural ، مدل شما به صورت داینامیک میباشد و با توجه به تغییر دید دوربین ، جزییات آن تغییر میکند ، در این حالت دیگر مدل کوه به تعداد Vertex های ثابت محدود نیست و وقتی دوربین به قله خیلی نزدیک میشود ، جزییات قله با توجه به نزدیک شدن دوربین به آن ناحیه بیشتر میشود ، بنابراین این یک مدل Procedural می باشد ، چون با تغییر حالات مختلف پروژه نظیر دید دوربین ، پارامترها و اطلاعات مدل تغییر میکند. بنابراین در Standard Terrain تعداد Vertex ها (Static Division Grid) ثابت است ولی در Procedural Terrains تعداد Vertex ها (Dynamic Division Grid) با توجه به زاویه دوربین تغییر میکند ، به این حالت Adaptive میگویند.
Procedural Animations :
با توجه به تعاریف گفته شده ، اگر شما کاری کنید که مدل یک کاراکتر بدون اینکه برای آن keyframe تعریف کنید ، با توجه به یکسری پارامتر و منطق ، خود حرکت کند ، در این صورت میتوان گفت که یک سیستم Procedural Animation ساخته اید. مثلا ابزاری را تولید کنید که وقتی به کاراکتر اعمال کنید کاراکتر حرکت کند ، یک پارامتر وجود داشته باشد که چندین حالت دارد (Stand,Walk,Run) ، وقتی این پارامتر را روی Stand بگذارید کاراکتر بایستد و اگر روی Run تنظیم کنید کاراکتر بدود . همچنین ممکن است پارامتری وجود داشته باشد به اسم Speed که با کمک آن بتوانید سرعت کاراکتر را کنترل کنید یا پارامتر دیگری به اسم Blend که بتوانید با کمک آن حرکت کاراکتر را به صورت نرم از حالت دویدن به ایستادن تغییر دهید. حالا شما چه این ابزار را در Houdini با کمک Node ها ساخته باشید و چه در Maya با کمک Expressions این ابزار را بسازید ، در هر دو صورت موفق یه ساخت ابزار Procedural Animation شده اید.
Procedural Animation in Crowd System :
برای دیدن سایز بزرگ روی تصویر کلیک کنید
یکی از کاربردهای Procedural Animation در مبحث Crowd Simulation یا Crowd System میباشد. برای دوستانی که با این مبحث زیاد آشنا نیستند باید عرض کنم که Crowd System در انیمیشن یعنی لشگر یا جمعیت سازی ، مثلا در فیلم Lord of the Ring دو لشگر را میبینیم که شامل میلیون ها کاراکتر میباشند که به سمت یکدیگر میدوند و در نهایت شروع به جنگیدن با هم میکنند ، برای ساخت چنین پلانی ، از نرم افزارهای مخصوصی که دارای هوش مصنوعی یا AI هستند استفاده میکنند (مثل برنامه Massive ) و این نرم افزار ها مشخص میکنند که کاراکترها باید چه کاری انجام دهند. عموما این نرم افزارها نقش Trigger را بر عهده دارند ، یعنی اینکه یکسری حرکات از پیش تعریف شده مثل راه رفتن ، دویدن و جنگیدن برای کاراکترها باید ساخته شوند ، سپس نرم افزارهای Crowd با توجه به سیستم هوش مصنوعی خود مشخص میکنند که هر کاراکتر در زمان مشخص از کدام حرکت یا انیمیت باید استفاده بکند. این حرکات از پیش تعریف شده را عموما به دو روش میسازند ، یا با استفاده از دستگاه Motion Capture این حرکات را در دنیای واقعی ضبط میکنند و نهایتا به کاراکتر های مجازی اعمال میکنند ، یا اینکه خود این حرکات هم در کامپیوتر به صورت Procedural تولید میشوند. معمولا برای کاراکتر های انسانی به دلیل پیچیده بودن حرکات و اینکه باید حرکات بسیار واقعی باشند از Motion Capture استفاده میکنند و در موارد دیگر مثل حرکت دسته پرنده گان یا حشرات ، میتوانند حرکات را به صورت Procedural تولید کنند.
Procedural Materials :
تمامی مواردی که در مورد سیستمهای Procedural گفته شد ، در مورد مراحل ساخت متریال هم صدق میکند. برای آشنایی بیشتر باز برنامه Houdini را مثال میزنم. در این نرم افزار شما تعداد بسیار زیادی Node و ابزارهای کوچکتر دارید که برای محاسبات متریال مورد استفاده قرار میگیرند ، مثلا Node مخصوصی دارید برای محاسبه Specular یا Node دیگری برای محاسبه Sub Surface Scattering ، با تلفیق این Node ها میتوانید یک متریال انحصاری و کامل را بسازید که دارای پارامتر های مختلفی برای تنظیم میباشند. در موتور رندر RenderMan هم شما با زبان RSL که مخصوص الگوریتم رندر Reyes در RenderMan میباشد ، میتوانید متریال های انحصاری بنویسید ، در نرم افزار Houdini به سادگی میتوانید به جای نوشتن Code ، از Node های مخصوص RenderMan استفاده کنید و یک متریال جدید را به صورت Procedural برای RenderMan بسازید. نرم افزار Fabric Engine هم که قبلا توضیح دادم ، به تازگی امکان استفاده و ساخت متریال های Procedural را برای موتور رندر RenderMan اضافه کرده است. در تصویر زیر متریالی را مشاهده می فرمایید که بنده قبلا برای محاسبه افکت Dispersion در نرم افزار Houdini ساخته بودم. همانطور که مشخص است ،تعدادی Node را برای انجام محاسبات متریال و Dispersion به هم وصل کرده ام و نهایتا آن ها را مانند نمونه Asset ساخته شده در فیلم Deformer با هم Group کرده و پارامترهای مهم آن را از جمله Dispersion Amount در اختیار کاربر قرار داده ام.
برای دیدن سایز بزرگ روی تصویر کلیک کنید
کاربرد Procedural در صنعت بازی سازی :
برای دیدن سایز بزرگ روی تصویر کلیک کنید
یکی از کاربردهای وسیع مدلسازی Procedural ، ساخت ابزار های مدلسازی برای صنعت بازی سازی میباشد ، مثلا فرض کنید که ابزاری را با این روش میسازید که وظیفه ساخت ساختمان های مختلف به صورت تصادفی یا Random را دارد ، حالا برای ساخت یک شهر در بازی دیگر نیازی نیست تا مدلسازها هزاران مدل ساختمان را بسازند و در محیط شهر پخش کنند ، فقط کافیست تا ابزار مخصوصی به صورت Procedural و Parametric ساخته شود و کاربر با فشار دادن تنها یک دکمه یا نهایتا تغییر تعداد محدودی تنظیمات به صورت Random تعداد بسیار زیادی ساختمان بسازد و در محیط شهر پخش کنند. همچنین میتوان ابزار مشابهی ساخت تا به صورت Random سفینه های فضایی متفاوتی را تولید کند. در فیلم زیر من یک نمونه ابزار ساخت سفینه فضایی را که برای نرم افزار Houdini ساخته شده است را نمایش میدهم ، این ابزار از طریق کتابخانه Orbolt3D قابل دسترس است (کتابخانه ابزارها مخصوص کاربران Houdini ) :
به جز ساخت ابزارهای مدلسازی ذکر شده ، میتوان سیستم Procedural مخصوصی را ساخت تا خیلی راحت بتواند روی یک زمین ناهموار مثل کوهستان (Terrain) جاده ای را بسازد ، به این صورت که کاربر تنها روی سطح زمین یک Curve را به عنوان مسیر جاده طراحی کند و با فشردن یک دکمه به اسم Build ، این Curve تبدیل به جاده بشود ، جاده میتواند با توجه به بالا و پایین رفتن سطح زمین و تپه ها ، تغییر شیب بدهد ، همچنین اگر به کوه یا تپه ای برخورد کرد که ارتفاع بیشتر از یک اندازه مشخص داشته باشد ، یک تونل به صورت اتوماتیک ساخته شود و جاده از داخل آن عبور کند ، خطوط وسط خیابان و بافت آسفالت روی جاده به صورت اتوماتیک و هوشمند ساخته می شوند ، گاردریل کنار جاده ساخته میشود و حتی وقتی جاده به یک دره رسید ، در روی آن یک پل ساخته شود و جاده از روی آن عبور کند ، همه و همه به صورت کاملا اتوماتیک و هوشمند بدون اینکه کاربر بجز طراحی کردن مسیر جاده با Curve و فشردن یک دکمه ، کار خاص دیگری انجام داده باشد ! ممکن است کمی غیر ممکن به نظر برسد و فکر کنید که حداقل برای ساخت چنین ابزار قدرتمندی باید کلی برنامه نویسی کرد و یک پلاگین قوی نوشت ، ابزارهایی نظیر این مورد در پروژه های بازی سازی و حتی فیلم های سینمایی بسیار زیاد مورد استفاده قرار میگیرند ، مطمئنا برای ساخت چنین ابزارهایی در نرم افزار های غیر Procedural باید برنامه نویسی کرد و یک پلاگین برای نرم افزار نوشت و یا با اسکریپت نویسی کلی کد نوشت که مسلما نتیجه کار بسیار کند بوده و رضایت بخش نمیباشد ، اما در نرم افزارهای Procedural نظیر Houdini بسیار راحت و در زمان بسیار کوتاهتر میتوان از این قبیل پروژه ها را ساخت.
به جز مدلسازی Procedural ، در صنعت بازی سازی هم بسیار زیاد از سیستم Procedural Animation استفاده میشود.
آیا تنها در نرم افزارهای Node-Base نظیر Houdini میتوان سیستم Procedural را پیاده سازی کرد ؟
با توجه به تعاریف گفته شده مسلما جواب سوال خیر میباشد. مثلا در Maya با نوشتن Expression میتوانیم یک Procedural Animation بسازیم یا در موتور رندر Arnold با نوشتن کد به زبان C++ میتوانیم یک Procedural Texture بسازیم.بنابراین ابزاری که میسازیم اگر دارای ویژگی های زیر باشد ، یک ابزار Procedural میباشد.
ویژگی هایی که ابزارهای Procedural باید از آنها برخوردار باشند :
1. کاری که ابزار قرار است انجام دهد توسط نرم افزار و با توجه به اجرای یکسری فرمول و برنامه باشد و کاربر آنها را ایجاد نکند. (مثل نمونه بافت Checker که گفته شد ) 2. ابزاری که ساخته شده دارای یکسری پارامتر باشد که کاربر بتواند با تغییر آن پارامترها ، به نتیجه دلخواه خود برسد . ( Parametric باشد ) 3. کاری که آن ابزار باید انجام دهد ، بدون در نظر گرفتن نوع ورودی باشد . (مثلا نباید وابسته به تعداد Vertex ها بوده و روی همه مدلها قابل استفاده باشد )
مشکل نرم افزارهای کاملا Procedural :
اگرچه سیستم کاری Procedural مزایای بسیار زیادی دارد ، اما یک عیب هم دارد و آن هم سختی انجام کارهایی است که غیر Procedural میباشند. مثلا برای ساخت یک مدل کاراکتر نیازی به سیستم Procedural نیست ، چون مدل کاراکتر معمولا مطابق با یک کانسپت ساخته میشود و بعد از تایید کارگردان قرار نیست تغییر کند و به مدل کاراکتر دیگری تبدیل شود ، ساخت همین مدل کاراکتر در نرم افزارهای Procedural نظیر Houdini بسیار سختتر از نرم افزارهای Maya و 3D Max میباشد. به این دلیل که برای اعمال هر مرحله از مدل سازی مثل استفاده از ابزار Extrude باید از Node های مخصوص آن میشود و مدلسازی با استفاده از منو های نرم افزار Maya و Max بسیار راحتتر از روش اضافه کردن Node برای مدلسازی میباشد ، همچنین Layout و چیدمان Scene ، انیمیت کاراکتر و دوربین ، نورپردازی و رندر در نرم افزار های عادی بسیار راحتتر از برنامه های Procedural میباشد ، بنابراین در یک پروژه معمولا از نرم افزارهای معمولی هم در کنار نرم افزار های Procedural استفاده میکنند و به دنبال آن کاربران نرم افزارهای Procedural و Node-Base معمولا با نرم افزارهای دیگر مثل Maya و 3D Max نیز باید آشنایی داشته باشند. مسلما این بدان معنا نیست که در نرم افزارهایی نظیر Houdini نمیتوانیم مدلسازی معمولی کنیم ، یا کاراکتر بسازیم و انیمیت کنیم و یا نورپردازی و رندر انجام دهیم ، اتفاقا در این نرم افزار برای بخش های مدلسازی ، انیمیت و رندر قابلیت هایی وجود دارد که ممکن است در نرم افزارهای دیگر مثل Maya وجود نداشته باشند ، ولی مساله در زمان انجام پروژه هاست نه در محدودیت در قابلیت های نرم افزار !
خلاصه :
سیستم Procedural متدی است که به کمک آن میتوان به تمامی مراحل ساخت یک پروژه دسترسی داشت و حتی در این مراحل تغییراتی را اعمال کرد ، بدون اینکه مشکلی در نتیجه نهایی پروژه به وجود بیاید ، همچنین به دلیل اینکه در این روش به تمامی پارامترها و تنظیمات تک تک مراحل ساخت یک پروژه دسترسی داریم ، میتوانی ابزارها یا Asset هایی را به صورت Parametric تولید کنیم که بتوانند روند تولید پروژه را سریعتر کنند. اگرچه این روش میتواند در بسیاری از پروژه ها سرعت و کیفیت انجام کار را بالا ببرد ، ولی در مقابل در پروژه هایی که ماهیت Procedural ندارند و نیازی هم به این سیستم ندارند (مثل مدلسازی یک کاراکتر ) ، میتواند روند تولید را کندتر کند. معروفترین نرم افزار سه بعدی که از این سیستم استفاده میکند ، نرم افزار Houdini میباشد. معمولا پروژه های بزرگ انیمیشن و جلوه های ویژه را از لحاظ Pipeline ساخت ، تقسیم بندی میکنند و سعی میکنند تا بخش های فضا سازی ، متحرک سازی ، نورپردازی و رندر را در سایر نرم افزارهای دیگر مثل Maya و Max انجام دهند.مگر اینکه در هر یک از این مراحل نیاز به سیستم Procedural باشد. دیگر کاربردهای مهم این سیستم در صنعت جلوه های ویژه ، Motion graphic و بازی های رایانه ای می باشد. امیدوارم از این مقاله نهایت استفاده را برده باشید. با امید موفقیت سجاد ربیعی
توجه : استفاده از این مقاله در سایتهای دیگر ، فقط با ذکر کردن نام نویسنده و منبع بلامانع است.
23 دیدگاه
نیما
از این که وقت گذاشتین هم برای مقاله و هم برای پاسخ های عالی تون بسیار سپاس گزارم.
فقط شما در بحث سرعت در نرم افزار هودینی گفتین سرعت VEX از C بیشتر هست من گیج شدم آخه تا اونجایی که میدونم پلاگین هایی که با زبان C++ نوشته میشن از لحاظ سرعت بهترینند ولی VEX چه طوری میتونه از C سریع تر باشه؟
البته تا اونجایی که من میدونم ظاهرا VEX در هودینی یک کامپایلر جدا داره و توابعی از جنس C رو اجرا نمیکنه بلکه خودش مستقیما و با کامپایلری که داره به زبان ماشین تبدیل میشه. به خاطر همین عدم وابستگی به کامپایلر هودینی موجب کرش کردن نرم افزار هودینی هم نمیشه (همونطور که گفتم VEX ;کامپایلر جدا دا ره) .
JK Path Deformer رو بنظرم این طور اومد که با HDK و زبان C++ نوشتین حالا نمیدونم درست تشخیص دادم یا نه چون اگر تا این حد بشه با VEX کار کرد پس دیگه چه احتیاجی به HDK و C++ در هودینی هست؟
از طرفی ماجرا وقتی جالب تر میشه که ما با کلمه ی CVEX برخورد می کنیم و واقعا گیج شدم فرق اینا باهم چی هست؟
ممنون و با تشکر.
اگر VEX رو میشه با C++ توسعه داد پس نقش CVEX این وسط چی هست؟
سجاد ربیعی
اینکه در مورد هودینی گیج میشوید کاملا طبیعیه !
حقیقتا هودینی یک برنامه بسیار گسترده و بزرگه که اصلا نمیتوانیم با بقیه برنامه ها مقایسه کنیم ، چون هیچ چیزش شباهتی با برنامه های دیگه نداره ، من همیشه میگم هودینی قبل از اینکه یک برنامه سه بعدی باشه ، یک سیستم عامله ، چون حتی در آن کارهایی میتونیم بکنیم که ممکنه هیچ ربطی به انیمیشن نداشته باشه !
شاید اصلا باورتون نشه ولی شخصی با نرم افزار هودینی و تنها با استفاده از Node های VOPs توانسته یک موتور رندری بسازید که حتی نورهای غیر مستقیم را میتونه پردازش کنه ، چنین چیزی در تمامی برنامه ها کاملا محاله و حتما باید با زبان C این کار را انجام دهیم.(لینکشو پیدا کنم میفرستم )
یا مثلا شخص دیگری توانسته با برنامه هودینی نرم افزار HDR Studio رو که برای ساخت تصاویر HDRI استفاده میشه رو بسازه.
لینک :
https://vimeo.com/112192706
بنابراین اگر بخواهم تمام قابلیت ها و ویژگی های این نرم افزار را بگم ، خودش یک مقاله چندین صفحه ای میشه !
در مورد سرعت VEX باید عرض کنم که بله من هم مثل شما برام عجیبه که چرا از C سریعتره ، شاید بخاطر همان کامپایلر جداش VCC باشه. اما این چیزیه که در سایت هودینی نوشته ، VEX حدود چند میلی ثانیه از C سریعتره ، البته این مقدار زیاد به چشم نمیاد وای در محاسبات پیچیده قابل لمسه !(عدد دقیقشو در سایت گفته شد )
ابزار JK Path Deformer را من با C نساختم ، بلکه با زبان VEX ساختم. البته در Forum هودینی شخصی همین ابزار را به صورت پلاگین با C نوشته است.
اما در مورد لزوم HDK نسبت به VEX :
در زبان VEX یا در محیط ویژوال آن یکسری تابع های مخصوص داریم (مثل Add ، Multiply ، Import Attribute و غیره ) ، زمانی که میخواهیم ابزاری را با VEX بنویسیم تنها میتوانیم از این توابع استفاده بکنیم ، ولی اگر به تابع جدیدی نیاز داشته باشیم یا Node جدیدی بخواهیم بسا زیم دیگه نمیتونیم با VEX کار کنیم. اینجاست که با HDK باید اون Node یا تابع جدید را به هودینی به صورت پلاگین اضافه کنیم.
ساده تر بخوام بگم VEX مثل MEL در مایاست ، با MEL چی کار میتونیم بکنیم ؟ تنها میتونیم از ابزارهایی که در Maya وجود دارند استفاده کنیم ولی اگر نیاز به یک ابزار جدید داشته باشیم مجبوریم با API برای Maya پلاگین بنویسیم .
یکی دیگه از محدودیت های VEX اینه که با VEX نمیتوان اطلاعات و آبجکت های جدید ساخت.عموما از VEX برای تغییر و Edit اطلاعاتی استفاده میشود که از قبل داریم ، مثلا ابتدا یک مدل کره را میسازیم و بعد Node مخصوص VEX را به آن وصل میکنیم تا بتوانیم مثلا نقاط آن را تغییر دهیم.یعنی اگر فقط یک ند Vop SOp داشته باشید و چیزی به آن وصل نشود نمیتوان نقطه یا Primitive از هیچی ساخت !
در حالی که با HDK میشه همچین کاری کرد.مثلا Node مخصوصی ساخت که بتواند یک مارپیچ بسازد !
اما در مورد CVEX :
همانطور که میدانید ما در هودینی چندین Network یا چندین context داریم مثل : Object ، Geometry ، Dynamic و MotionFX و غیره.
در هر یک از این شبکه ها که وارد بشیم و یک ند Vops بسازیم و وارد آن بشویم ، یکسری پارامتر و تابع منحصر به فرد داریم که تنها در آن شبکه مورد استفاده قرار میگیرند. مثلا در Vops مربوط به Geometry ما اطلاعات P ، Cd ، V و غیره داریم اما در شبکه MotionFX ما پارامترهای channel ، Sample Rate و غیره را داریم.
روش کار Vops در همه شبکه ها بدین صورت است که ابتدا اطلاعات وارد آنها میشود و بعد از تغییر در خروجی Vops آماده استفاده میشود و ما تغییر را میتونیم در Viewport ببینیم.
خوب CVEX هم شبیه VEX میباشد فقط با این تفاوت که اولا در CVEX ما اطلاعات مختلف برای Context های مختلف نداریم و به جای آن یکسری اطلاعات عمومی داریم که در اغلب Context ها قابل استفاده است.
دوما برخلاف VEX که در زمان اجرای محاسبات Geometry یا غیره اجرا میشود ، CVEX در زمان رندر اجرا میشود.
بدین صورت که مثلا یک پروژه با Fur ساختید ، یک Shader پروسجورال با CVEX ساختید و به آن اعمال کردید ، حالا در زمان رندر اطلاعات Geometry مربوط به Fur وارد CVEX میشوند و بعد از تغییر اطلاعات مجددا به Fur باز گردانده میشود و بعد از رندر ما Fur تغییر یافته توسط CVEX را میبینیم.
از CVEX معمولا برای تغییر اطلاعات Geometry ، Volume و Hair استفاده میکنند.(مثل P و Density)
پس به طور خلاصه CVEX برنامه ای است که بین Geometry و مرحله رندر قرار میگیرد ، اطلاعات اول وارد برنامه CVEX میشوند و بعد از تغییر وارد مرحله رندر میشوند.
بنابراین برخلاف اسمش ، ما با CVEX تابعی برای VEX با زبان C نمیسازیم و اصلا هیچ ارتباطی هم با زبان C ندارد !
نیما
سپاس گزارم از اینکه پاسخ های کامل و عالی میدین.
babak
واییی خدا … عجب مقاله ای! خداوکیلی بهترین مقاله CG بود که تا حالا اینقدر کامل دیدم! همه چیزو درست و دقیق با تحقیق بسیار توضیح دادید واسه ما! عجب کار بزرگی. خسته نباشید آقای ربیعی.
حالا من چند سوال دارم. در مورد سیستم crowd من واقعا سردرگم هستم و میخوام از یک جایی بالاخره شروع کنم. بین golaem crowd و miarmy کدوم بهتره؟ لطفا gmail تون رو چک کنید چند سوال شخصی هم داشتم از شما. سپاس فراوان
سجاد ربیعی
سلام.
بسیار خوشحالم که از این مقاله لذت بردید ، نگارش این مقاله حدود یک ماه زمان برد ، چون میخواستم خیلی کامل و جامع باشه . چون در سایت های انگلیسی هم مقالات جامعی که در ارتباط با سیستم های Procedural در انیمیشن باشه وجود نداشت (کم و بیش چیزهایی پیدا میشه ) میخواستم تمام مطالبی که مینویسم کاملا صحیح باشه و سندیت داشته باشه.
در مورد سوالتون راجب Crowd باید عرض کنم که :
اولا باید ببینید با چه نرم افزاری کار میکنید که طبق کامنتتون من حدس میزنم با Maya کار میکنید.
در حال حاضر چندین ابزار و نرم افزار داریم که از بقیه معروفترند.
1. Massive
2. Massive for Maya
3. Goleam
4. Miarmy
5. Houdini
مسلما مورد آخر برای کسانی که با این نرم افزار کار نکرده اند زیاد گزینه مناسبی نیست.
از بین این موارد برنامه Massive از بقیه قویتره ، اما کار کردن با Massive و همچنین نعاملش با برنامه های دیگر یکم سخته.
Massive for Maya یکی دیگه از نسخه های Massive میباشد که به صورت پلاگین در داخل Maya قابل استفادست.من با این پلاگین کار نکردم ولی فکر میکنم چون قابلیت های خود Massive رو داره باید خیلی قوی باشه.
Miarmy هم بنده قبلا خیلی کم باهاش کار کردم و ازش خیلی خوشم اومد ، منابع آموزشی بسیاری هم راجبش هست.
در کل من پیشنهاد میکنم که اگر یک Generalist هستید و میخواهید در پروژه هایی که انجام میدهید ، گهگاهی Crowd هم استفاده بکنید ، بهتره Miarmy رو یاد بگیرید ، چون هم یادگیریش راحتتره و هم منابع آموزشی بیشتری داره ، بنابراین زودتر یاد میگیرید.
اگر هم میخواهید صرفا تخصص Crowd System داشته باشید و وارد بخش های دیگه مثل انیمشین ، رندر و یا داینامیک نشوید ، حتما Massive اصلی رو (Massive Software) یاد بگیرید.
babak
راستش من با مکس کار میکنم. بنظر شما چه ابزاری از اینا بهتره که با مکس رابطه خوبی داشته باشه ینی آدمو به دردسر و error های اعصاب خوردکن نندازه!
سجاد ربیعی
متاسفانه من با مکس زیاد آشنایی ندارم ، ولی اگر Miarmy برای مکس هم وجود داره باهاش کار کنید بهتره . هر برنامه Crowd که دارای منطق فازی (Fuzzy Logic) باشه میتونه کار شما را انجام بده.
متاسفانه برنامه های Crowd مثل Massive و Miarmy با Maya سازگاری بیشتری دارند و عموما برای Maya نوشته شده اند.
در هر صورت اگر اون کاری رو که در ایمیل برام نوشتید رو میخواهید انجام دهید ، همچین کار ساده ای نیست و زمان زیادی میبره ، ابتدا منطقشو باید با این برنامه ها پیاده کنید (مثلا دشمن به سمت حریف حمله کند ) ، سپس یکسری حرکات آماده مثل دویدن ، تیر اندازی و غیره داشته باشید که به Agent ها در برنامه Crowd اعمال کنید. (این حرکات هم به صورت آماده با فرمت های FBX یا Mocap باید در اینترنت پیدا بشه)
اگر با مکس نتونستید ابزار Crowd مناسبی پیدا کنید ، شاید بتونید با مایا Crowd رو بسازید و به مکس وارد کنید (با روش هایی مثل Alembic ، Rib و … ) که البته خیلی سنگین میشه.
در خیلی از پروژه ها حتی لشگر رو در مایا رندر میکنند و فضا را در مکس رندر میکنند و در کامپوزیت ایندو را روی هم قرار میدهند.
در هر صورت امیدوارم راه مناسبی را پیدا کنید.
موفق باشید
ایمان . ب
سلام استاد ممنونم
در حال مطالعه مطلب هستم و یکسری سوال دارم
که بعد از خوندن کامل مطلب مطرح میکنم
سجاد ربیعی
خواهش میکنم ، بیصبرانه منتظرم 🙂
نیما
با سلام و درود به استاد سجاد عزیز.
بسیار مطلب عالی بود خیلی استفاده کردیم بی نهایت سپاس گزار.
فقط این سوال برام پیش اومد که اگر شما در نرم افزاری مثل هودینی به صورت رویه ای مدل سازی رو انجام داده باشین ولی به خاطر زیاد بودن نود ها هر تغییر در ورودی زمان زیادی برای نمایش خروجی صرف کنه اون وقت چی کار میکنن؟
فرضا شما یک نود مثل ورونوآی رو در نظر بگیرید که به یک شکل خاصی فرضا سر یک مجسمه متصل شده باشه.
همون طور که میدونید نود ورونوآی در نرم افزار هودینی خودش از چندین نود کوچکتر تشکیل شده که با دوبار کلیک بر روی نود ورونوآی میشه اونارو دید پس نتیجه میگیریم که نود ورونوآی یک ابزار رویه ای هست.
حالا گاهی پیش میاد که شما یک جسم رو میخواید خوردش کنید میبینید بعد از گذشت مثلا 20 دقیقه هنوز هودینی نتیجه رو به ما نشون نداده و این در حالی هستش که نرم افزار از تمام منابع سیستم برای انجام این کار استفاده نمیکنه(منطقی هم نیست) در این مواقع آیا سیستم رویه ای که راهکاری جالب به ما ارزانی داشته و باعث بالاتر رفتن سطح توقعات شده احساس رضایت رو با زمان طولانی محاسبات از ما پس نمیگیره؟
البته ممکنه شما بگین که جسم رو قسمت، قسمت خورد کنید و نتیجه رو در آخر با هم ادغام کنیم ولی در مورد Deformer ها (مدل های پیوسته) وضع به چه گونه هست؟ فرضا شما در ویدیویی که یک سیستم رویه ای برای ایجاد پستی و بلندی روی زمین ایجاد کردین با هرتغییر هودینی به مثلا 10 دقیقه زمان برای نمایش نتیجه احتیاج داشته باشه!
سوال دیگری هم که برام پیش اومده این هستش که آیا شبیه سازی رویه ای هم داریم؟
بسیار متشکر و سپاس گزارم.
سجاد ربیعی
سلام.ممکنه بنده منظور شما را کامل متوجه نشده باشم ، اگر اینطور بود سوال خود را با مثالی دیگر مطرح کنید.
بله Node های هودینی از چندین جنس مختلف هستند.
1. Node های اصلی که با زبان C برای هودینی نوشته شده اند و ما در داخل آنها نمیتوانیم تغییر ایجاد کنیم (مثل Copy SOP).
2. Node هایی که خود یک Digital Asset هستند و از تلفیق تعدادی Node تشکیل شده اند و امکان تغییر در آنها میسر است.
3. Node هایی که با زبان VEX (چه متنی و چه ویژوال مثل VOPs) ساخته شده اند و امکان تغییر هم وجود دارند.
4. Node هایی که مثل دسته سوم هستند ولی با زبان Python ساخته شده اند و امکان تغییر هم وجود دارد.
در بین این 4 دسته بالاترین حد سرعت محاسبات مربوط به دسته سوم است و بعد از آن دسته اول و از همه کند تر دسته آخر میباشد.
اگر بتوانید ابزار خود را با یکی از دسته های سوم و اول بسازید ، بالاترین حد سرعت محاسبات را خواهید داشت.
(جالب اینجاست که سرعت محاسبات VEX حتی از زبان C هم بیشتر است ! )
بنده یک ابزار برای Deform کردن مدل روی Curve برای Houdini ساخته بودم و در کتابخانه Orbolt قرار دادم ، لینکش رو براتون میفرستم.
(کلمه JK Path Deformer را در سایت Orbolt3D سرچ کنید).
پیشنهاد میکنم سرعت این ابزار را که از تعداد بسیار بسیار زیادی Node تشکیل شده را با Flow Path Object برنامه Maya مقایسه کنید.
نکته ای که وجود داره اینه که زیاد شدن و تعداد Node ها تاثیر زیادی روی زمان محاسبات ابزار نداره ، نوع و حجم محاسبات است که زمان اجرا را کند میکند. اگر ابزار Voronoi برای محاسبه مثلا 10 دقیقه زمان لازم دارد ، در برنامه های دیگر هم اگر با هر روشی این ابزار را داشته باشید ، زمان محاسبات در بهترین حالت همین مقدار است ( حالا یا یک مقدار کمتر یا یک مقدار بیشتر ).
یا محاسبات مایعات کلا سنگین است ، حالا در هر برنامه ای که باشه !
مثلا محاسبات Flip Simulation در هودینی نسبت به برنامه های دیگر نسبتا سریعتر است ، اما جالب اینجاست که این محاسبات هم نوسط یک ند Solver محاسبه میشود که خود یک HDA است و از Node های دیگر تشکیل شده !
یک پروژه یکسان را هم با Flip در هودینی و هم با Bifrost در Maya تست بزنید ، با اینکه Flip Solver از تعداد بسیار زیادی Node تشکیل شده ولی نسبت به Bifrost اصلا کند نیست !
میخوام بگویم که شما مهم نیست از چند تا Node استفاده میکنید ، مهم این است که چه کاری میخواهید انجام دهید ، خرد کردن یک مدل محاسبات پیچیده ای دارد و در هر نرم افزاری چه معمولی و چه Procedural زمان لازم دارد. البته Voronoi هودینی را در پروژه های زیادی استفاده کردم و خیلی هم کند نیست ، اگر تعداد تکه ها را خیلی زیاد کنید کند میشود که خوب این در همه جا همینه و اگر اینطور نباشه باید تعجب کرد !
نکته جالب دیگر که مربوط به سیستم های Node Base است اینست که در معماری نرم افزارهای Node-Base مثل Houdini یا حتی Nuke و Fusion ، محاسبات به گونه ای است که بیشترین استفاده را از منابع سیستم میبرند و در مقابل هم سرعت محاسبات زیادتر میشوند و هم رم کمتری استفاده میشود ، به این دلیل که در هر Node تنها اطلاعاتی که لازم است ، تغییر میکند واصل اطلاعات و داده ها که ممکن است خیلی زیاد باشند ، به هر مرحله کپی یا منتقل نمیشود و پردازش نمیشوند.
در مورد چیزی که راجب Deformer هم گفتید همین تعاریف صدق میکنه ، البته اگر شما در Maya مدل بسیار سنگینی داشته باشید و به آن یک نوع Deformer بدهید که با Play کردن پیوسته تغییر میکند نتیجه کارتون کند میشود ، خوب در مایا چه میکنید ؟ مثلا Point Cache میگیرید ؟ خوب در هودینی هم باید همین کار را بکنید و از مدل خود Cache بگیرید.
در مورد سوال آخرتون هم که جوابشو زودتر دادم ، بله شبیه سازی رویه ای هم داریم ، مثل انواع Node های Solver که همه یک نوع Digital Asset هستند.
امیرنزاکت
واقعن عالی بود اگر چه یه کم طولانی بود ولی واقعن مطلب خوبی بود و من کیف کردم از خوندنش.
دستتون درد نکنه و خسته نباشید
سجاد ربیعی
خواهش میکنم ، بله یکم طولانی بود ولی نمیخواستم دو نسخه ای بکنم. ممنون از نظرتون 🙂
رسول شاکری
البته جناب ربیعی بنده مدت خیلی زیادی هست در این حوزه فعالیت میکنم. و کاملا به این مسئله
واقفم که هر نرم افزاری چه کارهایی رو انجام میده. و اینم اضافه کنم اون متنی که در ابتدا ذکر کردم کلش از زبان جان مکوار بوده نه فقط یک بخشیش. .. من خودم چند سالی میشه با نیوک کار میکنم و کاملا به مسائلی که اشاره فرمودین اگاهی از پیش دارم.
سجاد ربیعی
چون گفته های جناب مکوار را در کامنت های این مقاله نوشتید ، بنده جسارت کردم و گفتم که این گفته ها شاید مستقیما به مقاله بنده ارتباطی نداشته باشد و ممکن است در ذهن دوستانی که شاید از من و شما تجربه کمتری دارند اشتباه برداشت بشود.
قسمت دوم مطلب رو هم برای این گفتم که با توجه به کامنت شما دوست عزیز، دوستان فکر نکنند برنامه های Procedural مثل Houdini تنها برای افکت و داینامیک ساخته شده اند و از آنها در بخش های دیگر مثل مدلسازی ، رندر ، کامپوزیت و انیمیشن استفاده نمیشود. جالب اینجاست که من هم از ابتدا که با Maya کار میکردم دقیقا همینطور فکر میکردم تا اینکه بعد از6 سال کار کردن با Maya رفتم سراغ هودینی و فهمیدم که کلا راجب توانایی های این نرم افزار اشتباه فکرمیکردم. صنعت انیمیشن و جلوه های ویژه بسیار گسترده است و هر روز هم تکنولوژی های جدیدی وارد آن میشود که مسلما من و شما اگر سالها هم تجربه داشته باشیم باز ممکن است از خیلی از آنها بی اطلاع باشیم یا طرز فکر اشتباهی راجب آنها داشته باشیم.
در هر صورت از اینکه نظراتتون را در این بخش نوشتید سپاسگذارم . این تعامل باعث میشه که همه از یکدیگر چیزهای جدید یاد بگیرند و از تجربیات یکدیگر نیز استفاده بکنیم.
وحید ولایتی
سلام
بسیار عالی بود. ممنون از لطف بی پایان شما و زحمتی که برای ارائه یِ این مقاله کشیدید . همیشه موفق باشید
سجاد ربیعی
از نظرتون سپاسگذارم .
احمد
تشكر از شما مقاله مفيدي بود
سجاد ربیعی
ممنون 🙂
رضا
واقعا عالی بود خسته نباشید
رسول شاکری
با سلام. البته طبق گفته جان مکوار مدیر بخش توسعه دیجیتال که در کمپانی weta digital مشغول هست. هر نرم افزاری به منظر یه هدف ساخته شده. البته در این چندسال نرم افزارها خیلی از رو دست هم کپی رداری میکنن اما در وحله آخر برمیگردن به ماهیت اصلیشون. پس بهتره هر قدمیو هوشمندانه بر داریم.
هودینی اساسا برای مدل سازی تعریف نشده و ماهیت اصلیش داینامیک. پارتیکل. فلوئید هست.
سجاد ربیعی
بله دقیقا درست میفرمایید.
من فکر میکنم متن این مقاله را کامل مطالعه نکردید یا حداقل خیلی با عجله مطالعه فرمودید.
به عنوان مثال در انتهای مقاله بنده نوشته بودم که نرم افزارهای Procedural Base نظیر Houdini برای همه موارد مورد استفاده قرار نمیگیرند و حتی کار کردن را میتوانند سخت تر بکنند ، ( بخش معایب را مطالعه فرمایید ) حتی یه جورایی به گفته جناب مکوار هم اشاره ای کردم و گفتم معمولا سعی میکنند در کنار نرم افزارهای Procedural از سایر نرم افزارها هم استفاده کنند و بخش های غیر procedural را در آنها انجام دهند ( بخش خلاصه را مطالعه فرمایید ) ، مثالی هم در قالب مدلسازی های مربوط به کاراکتر زدم که گفتم در برنامه های دیگر مانند Maya و Max راحتتر و سریعتر است.
این مساله که هر نرم افزاری برای هدف خاصی ساخته شده را اصلا لازم نیست کسی به ما بگه ، اینقدر روشنه که خودمان هم میدانیم همینطور است . کل مقاله این موضوع را بیان میکند که از نرم افزارهای Procedural در زمانهایی باید استفاده بکنیم که نیاز به سیستم های Procedural داریم.
اما در مورد جمله آخرتون راجب Houdini باید عرض کنم که اینطور نیست ، Houdini هم مانند نرم افزارهای دیگر نظیر Maya ، یک نرم افزار کامل است که شامل بخش های مدلسازی ، رندر، انیمیشن ، ریگ ، و حتی کامپوزیت میباشد. فقط نکته ای که وجود دارد این است که باید به نیازهای پروژه توجه کنید ، اگر نیاز به مدلسازی Procedural دارید مثل برخی از بخش های بازیهای کامپیوتری یا پروژه های Motion Graphic، خوب مسلما مدلسازی در برنامه هایی مثل Maya نمیتونه گزینه مناسبی باشه و باید از برنامه های Procedural استفاده کنید ، اگر نیازی به مدلسازی Procedural ندارید مثل زمانی که میخواهید یک کاراکتر برای یک پروژه انیمیشن بسازید ، استفاده از برنامه های Procedural نمیتونه گزینه مناسبی باشه !
اگر دوستان با دقت مطالعه بفرمایند، بنده در تمامی مقالاتم ، هیچ وقت نرم افزاری را به جای نرم افزار دیگر تحمیل نکردم و اگر هم از مزایای نرم افزاری گفتم ، مطمئنا مزایای منحصر به فردی بوده که در برنامه های دیگر موجود نیست یا محدود است.
Procedural هم یکی از همین مزیت هاست که تمام نرم افزارها در تلاش هستند تا به نوعی این ویژگی را در خود جای دهند ، مثل ICE در XSI یا MCG در Max که از ابتدا وجود نداشتند و بعدا به این نرم افزارها اضافه شدند.
سجاد ربیعی
البته برای همه نرم افزارها نمیتوانیم بگوییم که همه آنها برای هدف خاصی ساخته شدند ، احتمالا هم جناب مکوار منظورش یک قانون ثابت برای همه نرم افزارها نبوده !
چون نرم افزارهایی هم ساخته شدند که همه صرفا یک هدف را دنبال میکنند.
مثلا برنامه Nuke و Fusion که هر دو برای کامپوزیت در VFX مورد استفاده قرار میگیرند.
برنامه های Z Brush و ModBox که هردو هم برای Sculpt Modeling کاربرد دارند و هم برای3D Texture Painting
یا برنامه Speed Tree و Plant Factory که برای ساخت گیاهان مورد استفاده قرار میگیرند.
یا برنامه های Real Flow و Naiad (البته زمانی که Naiad تولید میشد )
همچنین موتورهای رندر مختلف مثل V-Ray و MaxWell
یا حتی برنامه های Maya و Max یا Blender که همه شامل همه بخشهای ساخت انیمیشن از مدلینگ تا رندر هستند و از هر سه هم برای پروژه های انیمیشن و جلوه های ویژه استفاده میکنند و هم برای پروژه های معماری
طبق فرموده شما باید هوشمندانه و سنجیده قدم برداشت و نرم افزاری را انتخاب کرد که در حیطه تخصص ما بیشترین قدرت و توانایی را داشته باشد.