رفع مشکل Flicker در رندرینگ انیمیشن VRay

یکی از مشکلات عمده کاربران Vray در زمان رندرینگ انیمیشن ( Animation Rendering) مشکل نویزها و نقاط نورانی و تاریکی است که بروی فریم های مختلف قرار میگیرد. به این پدیده Flicker گویند و از بین بردن این Flicker برای کاربران به عنوان یک مشکل همیشگی مطرح بوده است. برای رفع مشکل Flicker در رندرینگ انیمیشن Vray با ما همراه باشید

رفع مشکل Flicker در رندرینگ انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

رفع مشکل Flicker در رندرینگ انیمیشن VRay

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

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

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

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
VRay Animation Rendering Flicker Free

روش های نمونه برداری یا Sampling در موتور رندرینگ V Ray بسیار متنوع است. تقریبا 7 الگوریتم انحصاری و 5 الگوریتم عمومی برای اینکار در موتور وی ری استفاده میشود. زمانی که کاربران در حال پردازش GI هستند در صورتی که از روش Irradiance map استفاده کنند با حرکت دوربین و یا اشیا و نورها، نمونه برداری ها تغییر میکند.

تنظیمات GI

برای مثال در فریم اول شروع نمونه برداری و درخت دو- دویی پیمایش صحنه از مرکز صحنه شروع می شود ولی در فریم بعدی از 10 pixel آنطرف تر این نمونه برداری شروع خواهد شد( این توضیح فقط برای مثال بوده و جنبه علمی ندارد ) . پس در زمانی که جابجایی دوربین و اشیا و نور در صحنه اتفاق می افتد ، نمونه برداری ها تغییر میکنند.

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

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

همین مساله در رندرینگ GI توسط الگوریتم های LightCache اتفاق خواهد افتاد. نمونه برداری (Sampling) در این روش ، تفاوت عمده ای با روش Irradiance map دارد. شما باید بدانید که کجا از Irradiance map و کجا از LightCache استفاده نمایید. باید بدانید که کدامیک وابسته به موقعیت دوربین و کدامیک وابسته به موقعیت اشیا می باشند.

کدامیک با تغییر زاویه دید دوربین نیاز به محاسبه مجدد دارد و کدامیک را میتوان بدون در نظر گرفتن تغییرات در فریم های بعدی استفاده نمود. برای درک این شرایط باید روش محاسبه LightCache و Irradiance map را بدانید تا متوجه شوید که هر کدام به چه طریقی اقدام به محاسبه نقاط روشنایی خواهند کرد.

باید بدانید که روش Brute Force چرا بهترین و دقیق ترین روش ممکن برای محاسبه روشنایی و البته کند ترین و وقت گیر ترین روش است.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
VRay Animation Rendering Flicker Free

در اکثر مواقع کاربران ترجیح میدهند که محاسبه GI را توسط روشهای ترکیبی مانند LightCache و Irradiance map انجام دهند. در این جا با توجه به محاسبه روشنایی توسط دو الگوریتم کاملا متفاوت، نقاط روشنایی بوجود آمده نیز در هر فریم به شدت تغییر خواهد کرد که باعث ایجاد پدیده Flicker خواهد شد.

تنظیمات Sampling

VRay برخلاف موتورهای رندرینگ دیگر مانند Arnold Render و RenderMan که مصرف عمده آنها رندرینگ انیمیشن است، در ابتدا با هدف رندرینگ تک فریم ایجاد شده بود و بعد از توسعه این خصیصه در آن باقی ماند و تا به امروز تلاشی برای ایجاد یک تنظیم ساده و راحت برای رندرینگ انیمیشن در آن صورت نگرفته است. در نتیجه کاربران VRay می بایست شخصا تنظیمات رندرینگ انیمیشن را انجام داده تا از شر Flicker ها و دیگر مشکلات این بخش خلاصی یابند.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

خوب همانطور که ذکر شد تفاوت در نمونه برداری یا همان Sampling باعث خواهد شد که نقاط روشنایی در فریم های مختلف، متفاوت باشد. راه کارهای بسیار زیادی برای این موضوع وجود دارد که در دوره آموزشی مازستا ما به 5 روش اصلی رفع Flicker اشاره خواهیم کرد و در اینجا نیز به برخی از آنها اشاره میکنیم.

ساده ترین روش در رفع Flicker و نویز در محاسبات Irradiance map استفاده از حالت پیش محاسباتی می باشد. زمانی که Irradiance map محاسبه خود را قبلا انجام داده باشد و نمونه های خود را گرفته باشد، در فریم های مختلف، نمونه گیری ثابت خواهد ماند و نقاط روشنایی جابجا نمیگردد. البته توجه داشته باشید که در صورتی که از رندرینگ تحت شبکه استفاده میکنید و یا رندر فایل های شما توسط رندرفارم انجام می شود معادلات شما کمی به هم خواهد ریخت.

زیرا در تمامی الگوریتم های رندرینگ، در صورتی که تعداد هسته های پردازشی تغییر کند و یا میزان حافظه و … بین سیستم ها متفاوت باشد، روشهای نمونه برداری ممکن است نتایج متفاوتی را محاسبه نماییند. در نتیجه همانطور که حتما تجربه کرده اید ممکن است در سیستم خودتان رندرینگ بدون Flicker باشد در صورتی که همان رندر را تحت شبکه با مشکلات بیشتر و نویز بالاتری رندر کنید.

پس اولین راه کار استفاده از حالات پیش محاسباتی (Pre-calculate) در Irradiance map می باشد. البته توجه داشته باشید که روش های پیش محاسباتی فقط در زمانی قابل استفاده است که موضوعات و اشیا درون صحنه و همچنین منابع نوری ثابت و بدون تغییر باشند.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
VRay Animation Rendering Flicker Free

تنظیمات توالی

یکی از حالات محبوب کاربران انیمیشن در رندرینگ VRay استفاده از Mode ویژه ای به نام MultiFrame Incremental می باشد. در وصف این روش باید عرض کنم در زمانی که الگوریتم Irradiance map میخواهد نمونه برداری صحنه را شروع کند، در صورتی که از وضعیت MultiFrame Incremental استفاده کند، VRay متوجه خواهد شد که قرار است زاویه دید در این رندر تغییر کند.

پس MultiFrame Incremental بیشتر مناسب زمانی است که دوربین در حال تغییر است . در این حالت الگوریتم Irradiance map نمونه برداری را به صورت موردی انجام نمیدهد بلکه تلاش میکند نمونه برداری فقط در شرایطی تغییر کند که تفاوت عمده ای بین فریم قبل و بعد صورت گرفته باشد. در این حالت نمونه برداری های انجام شده در فریم های متوالی بسیار به یکدیگر شبیه خواهند بود.

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

پس روش MultiFrame Incremental در محاسبات Irradiance map فقط مناسب انیمیشن هایی است که دوربین در آنها متحرک بوده و مابقی صحنه ثابت خواهد بود. به این روش از متحرک سازی Fly-Through میگویند زیرا دروبین بروی صحنه مانند پرواز پرنده حرکت میکند.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

در نهایت روش MultiFrame Incremental در محاسبات Irradiance map به این صورت خواهد بود که با شروع رندرینگ ، محاسبات روشنایی برای فریم اول آغاز می شود. همانطور که میدانید روشنایی فقط برای قسمتی محاسبه می شود که در راستای دید دوربین می باشد.

یعنی حجمی از صحنه که دوربین قابلیت رویت آن را دارد. پس فریم اول محاسبه می شود. در فریم دوم قرار است دوربین جابجا شود. در نتیجه بخشی از صحنه که در فریم قبل، در دید دوربین نبوده است ظاهر خواهد شد، در این حالت VRay فقط روشنایی را در بخشی که به دید دوربین اضافه شده است محاسبه کرده و نمونه های قبلی و نقاط روشنایی قبلی اضافه میکند.

در فریم های بعدی هم فقط آن بخشی از صحنه که در فریم های قبلی پردازش نشده است مورد محاسبه قرار خواهند گرفت. پس در هر فریم نقاط روشنایی جدید به نقاط روشنایی قبلی اضافه می شود (Increment) و این در فریم های بعدی محاسبه خواهد شد که به آن روش MultiFrame Incremental گویند.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

تا به اینجا دریافتیم که در صورتی که دوربین متحرکی در صحنه داشته باشیم میتوانیم روش صحیح محاسبه الگوریتم Irradiance map را تعیین کنیم. اما در صورتی که بخواهیم از LightCache نیز در محاسبات GI استفاده کنیم، می بایست به VRay تفهیم کنیم که روش LightCache را نیز مانند Irradiance map به حالت مستقل محاسبه نکند. پس Mode یا روش محاسبهLightCache را نیز بروی Fly-Through قرار میدهیم تا پردازش آن نیز شبیه Irradiance map از ترکیب فریم های بدست آید.

رفع مشکل Flicker در رندرینگ انیمیشن VRay

در قسمت اول مختصر توضیحی در مورد علت پدیده Flicker در رندرینگ انیمیشن توسط VRay شرح دادم و در مورد رندرینگ با دوربین متحرک و صحنه ثابت ( اشیا و نورها ) صحبت کردیم. در این بخش در مورد حالتی بحث خواهیم کرد که در آن اشیا در حرکت باشند و همانطور که در قسمت اول ذکر شد،

مشکل Flicker در رندرینگ انیمیشن توسط VRay از همان ابتدای کار وجود داشت، به همین دلیل بعد از بروز رسانی های متعدد، ابتدا با ارائه Service Pack 2 برای نسخه VRay 1.5 و سپس در نسخه بعدی گزینه های رندرینگ انیمیشن توسعه داده شد. در نتیجه اگر از Vray 1.5 Sp2 به پایین را استفاده میکنید نخواهید توانست Flicker ها از بین ببرید. در نتیجه اولین قدم برای شما ارتقا نسخه VRay می باشد.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
VRay Animation Rendering Flicker Free

زمانی که اشیا در صحنه جابجا می شوند، تمام محاسبات روشنایی عمومی بهم می ریزد. تصور کنید تمامی بازتاب های پرتوهای نوری که به سطوح اشیا برخورد کرده و روشنایی عمومی (GI) را پدید آورده است با جابجایی اشیاء باید مجددا محاسبه شود. زمانی که یک موضوع در صحنه جابجا میشود سطح برخورد پرتوها نیز جابجا می شود.پس نقاط روشنایی نیز جابجا شده و در کل Global illumination تغییر خواهد کرد.

بر خلاف حالتی که در قسمت اول تشریح شد، نمیتوانیم از Fly-Trhough یعنی حالتی که دوربین متحرک است استفاده کنیم. پس باید بدنبال راهکاری باشیم که علاوه بر محاسبه نقاط روشنایی بروی سطوح متغییر، این نقاط در فریم های بعدی نیز به صورت یکنواخت نشان داده شده و یا در هم ادغام شوند.یک راه بسیار بسیار ساده و دقیق در رندرینگ صحنه هایی که اشیا و دوربین و … در آن جابجا می شوند این است که از الگوریتم Brute Force استفاده کنید.

این الگوریتم با توجه به نمونه گیری را برای هر یک نقطه صحنه و بدون توجه به نقاط همجوار آن محاسبه میکند علاوه بر دقت بالای آن، نتیجه بسیار دقیقی هم ارائه میدهد و بدون شک تصویری بدون Flicker را به شما تقدیم خواهد کرد. خوب پس چرا ما از Brute Force در پردازش های GI استفاده نمیکنیم؟؟؟؟

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

در نتیجه چاره ای جز استفاده از روش Irradiance Map و LightCache برای ما باقی نخواهد ماند. حال باید راه کاری پیدا کنیم که نقاط روشنایی محاسبه شده و نمونه برداری شده در فریم های مختلف عملکردی یکسان و بدون Flicker داشته باشند. بدین منظور می بایست میانگینی از این نقاط روشنایی نه فقط برای یک فریم بلکه میانگینی از آنها برای فریم های پشت سر هم محاسبه و تعیین شود.

نقاط روشنایی در فریم های متوالی به روش میانگین توالی یا Interpolation پردازش خواهید شد. بنابراین Irradiance Map به جز اینکه برای هر فریم محاسبه خواهد شد، قبل از پایان پردازش، روشنایی محاسبه شده در فریم های قبلی خود را نیز بررسی کرده تا روشنایی های محاسبه شده فریم های قبلی را با روشنایی محاسبه شده فریم جاری توسط الگوریتم میانگین یا همان Interpolation در هم آمیزد. نتیجه کار ایجاد یک روشنایی هموار برای هر فریم با توجه به فریم های قبلی خود است.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

اولین قدم در تنظیمات Irradiance Map در این روش، حذف Flicker از حرکت دوربین می باشد.پس برای استفاده از تنظیماتی میانگین روشنایی یا Time Interpolation می بایست این توالی را برای دوربین نیز تعریف کنیم. پس مطابق تصویر زیر گزینه Use Camera Path را فعال کنید. در این حالت الگوریتم Irradiance Map خود را برای حذف Flicker ها آماده میکند.


در قدم بعدی می بایست Current Preset را بروی یکی از پارامترهای Meduim Animation و یا High Animation قرار دهید. البته الزامی برای اینکار وجود ندارد اما این عمل باعث میشود که بسیاری از پارامترها به صورت خودکار برای حالت بدون Flicker تنظیم شود.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

حال کافی است که Mode را بروی Animation (PrePass) قرار دهید و آن را در محلی مناسب ذخیره کنید. توجه داشته باشید که باید گزینه Autosave را مطابق تصویر زیر فعال کنید.با توجه به تنظیمات انجام شده ، شما به دومین روش محاسبه GI نیز احتیاج خواهید داشت. زیرا با تنظیماتی که در بالا انجام داید، فقط بخشی از روشنایی محیط محاسبه خواهد شد و نیاز به الگوریتم دوم برای تکمیل آن وجود دارد. اینبار از LightCache کمک خواهیم گرفت تا روشنایی عمومی را تکمیل کنیم.

در تنظیمات LightCache نیز می بایست گزینه Use Camera Path را فعال کنید.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

در ادامه راه کارهای متعددی را میتوانید انتخاب کنید. برای مثال گروهی از کاربران از روش Pre-Pass استفاده میکنند و عده ای از ورش Single-Pass .برای مثال LightCache را به وضعیت Single Frame انتخاب کنید ( در بخش Mode). حال میتوانید دیگر تنظیمات رندرینگ را انجام و آماده رندر شوید.

اما یک نکته مهم باقی خواهد ماند. اگر ابتدای متن را دقیق خوانده باشید، عرض کردم که در روش Time Interpolation نقاط روشنایی محاسبه شده در فریم های قبل و فریم جاری با هم آمیخته می شوند. در عمل GI در هر فریم از محاسبه چند فریم قبل و چند فریم بعد بدست آمده است.اما این فریم های را کجا مشخص میکنیم؟ همانطور که در تصویر زیر ملاحظه میکنید در تنظیمات Irradiance Map میتوانید تعداد نمونه برداری های Interpolation و همچنین فریم های آن را تعیین نمایید. اما نه الان.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

نکته اینجاست که Irradiance Map و تمام الگوریتم های محاسبه Global illumination فقط بروی فریم جاری پردازش انجام میدهند و اگر بخواهند فریم بعدی را محاسبه کنند باید تمام آن فریم را از اول تا آخر پردازش نمایند. پس چطور میتوان انتظار داشت که Irradiance Map نقاط روشنایی فریم های بعد و قبل را در هم ترکیب و از آنها میانگین بگیرد؟؟؟

جواب در اینجاست که یک بار باید Irradiance Map مانند تنظیماتی که در بالا ذکر شد پزدازش فریم های را انجام دهد و در فایل های جداگانه برای هر فریم ذخیره کند ( به همین دلیل عرض کردم که Auto Save را فعال کنید ) و سپس در مرحله دوم، Irradiance Map ذخیره شده را برای میانگین گیری یا Interpolation مورد استفاده قرار دهیم.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

پس ما نیاز داریم که برای فریم ها یک بار محاسبات را انجام دهیم ، اما نیاز داریم که فریم های قبل و بعد را نیز تعیین کنیم ، پس توجه داشته باشید باید همان تعداد فریمی را که در گزینه Interpolation برای میانگین گیری تعیین میکنید ، ایجاد نمایید. بدین منظور کافی است که شروع زمان بندی انیمیشن را از هر تعداد فریم قبل از فریم صفر شروع کنیم. برای مثال TimeLine را از فریم -5 تا 105 در نظر میگیریم. در این حالت Irradiance Map متوجه می شود که برای محاسبه نقاط روشنایی یک فریم می بایست از 5 فریم قبل و 5 فریم بعد محاسبه نماید.

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

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

حال رندرینگ انیمیشن خود را انجام دهید و منتظر بمانید که فریم های به انتها برسند . البته نیازی نیست که تصاویر را کامل رندر کنید بلکه فقط محاسبات GI را انجام دهید. بعد از پایان انیمیشن بدون هیچ گونه تغییری در صحنه، به تنظیمات Irradiance Map برگشته و از گزینه Mode روش Animation (rendering) را انتخاب نمایید.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

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

با انتخاب فایل ذخیره شده مرحله قبلی و تعیین گزینه های Inter. Samples و Inter. Frames بر اساس آنچه که قبلا تعیین کرده اید میتوانید، از محاسبات پیشین و توضیحات داده شده استفاده نمایید. در پایان نیازی به استفاده از LightCache به عنوان دومین پردازش Global illumination نیز نخواهید داشت و Secondary GI را بدون الگوریتم و بروی None قرار دهید. در رندر خود را اغاز کنید و از تصویر بدون Flicker لذت ببرید.

رفع مشکل Flicker در رندرینگ  انیمیشن Vray
رفع مشکل Flicker در رندرینگ انیمیشن Vray

این مطلب را به اشتراک بگذارید

Share on facebook
Facebook
Share on twitter
Twitter
Share on linkedin
LinkedIn
Share on email
Email
Share on whatsapp
WhatsApp
Share on telegram
Telegram

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

رفع مشکل Flicker در رندرینگ انیمیشن VRay

بستن سبد خرید
بستن علاقه‌مندی
بستن

بستن
منو
دسته بندی ها