تبلیغات
تبلیغات
تبلیغات
تبلیغات

آشنایی با GI در V-Ray و Redshift / رندر انیمیشن بدون flicker
(1 مشاهده) (1) مهمان
  • صفحه:
  • 1
  • 2

موضوع: آشنایی با GI در V-Ray و Redshift / رندر انیمیشن بدون flicker

آشنایی با GI در V-Ray و Redshift / رندر انیمیشن بدون flicker 1 سال, 6 ماه پیش #117082

  • sd70
  • آفلاین
  • ناظر و نویسنده وبسایت
  • ارسال: 731
  • دریافت تشكر: 1015
  • 
با سلام خدمت تمام دوستان عزیز

معمولا موقعی که بحث رندر انیمیشن به میون میاد اول چیزی که به ذهن خیلی ازدوستان میرسه مشکل flickering هستش که اینو یه کابوس و یه چیز غیر قابل حل میدونند در صورتی که این مورد نه اشکاله و نه ضعف و اگر الگوریتم‌های GI رو بشناسید به خوبی میتونید بفهمید که چرا این مشکل پیش میاد و چجوری میشه حلش کرد.

قبل از این که بریم سراغ بحث اصلی باید بگم که موردی که باعث شد فکر ایجاد این تاپیک به ذهنم برسه صحبتی بود که چند وقت پیش با یک دوست عزیزی داشتم. بحث از رندر انیمیشن شد و ایشون خیلی تأکید داشت که Arnold نسبت به V-Ray برای رندر انیمیشن بهتره. شخصا تعصب خاصی رو هیچ نرم افزار یا پلاگینی ندارم و از این گذشته با هر دوی این موتورها کار کردم و باهاشون آشنام ولی تصمیم گرفتم از این دوست عزیز دلیل این نظر شون رو بدونم و خب انتظار داشتم که یه پاسخ دقیق، مستدل و کارشناسی بهم بدن اما جواب ایشون این بود که چون آرنولد مشکل flickering رو در انیمیشن نداره موتور بهتریه :) بعد یه کم بیشتر باهاشون صحبت کردم متوجه شدم که ایشون نه با آرنولد کار کرده نه با ویری و نه با الگوریتم‌های محاسبه‌ی GI و مدت زمان محاسباتی شون آشناست و صرفا بخاطر اینکه یه جایی یه چیزی شنیده اینقدر دقیق اظهار نظر کارشناسی میکنه که متأسفانه این معضل نه فقط در دنیای CG بلکه در همه‌ی عرصه‌ها وجود داره. در قدرتمند بودن موتور آرنولد برای رندر انیمیشن هیچ شکی نیست. هم از آرنولد هم ویری و هم سایر موتورهای رندر دیگه در فیلم های سینمایی و سریال‌ها و انیمیشن ها استفاده شده و میشه ولی اینکه کسی چنین استدلالی رو برای برتری این موتور نسبت به دیگری ذکر کنه به هیچ وجه برام قابل قبول نیست. توی آرنولد برای محاسبه‌ی GI ما فقط با دو پارامتر سر و کار داریم که یکی تعداد سمپل‌ها رو مشخص میکنه و دیگری تعداد bounce (جهش) های پرتوی GI رو و از طرفی هیچ گونه مشکل flicker هم پیش نمیاد. باید خدمت تون عرض کنم که در V-Ray هم دقیقا چنین روشی که فقط وابسته به دو پارامتر سمپل و جهش باشه و مشکل flicker نداشته باشه وجود داره که در بخش سوم بهش میرسیم.

یک نکته رو فقط عرض کنم که هدفم از ایجاد این تاپیک مقایسه دو موتور رندر نیست و بنابراین تقاضا دارم دوستان عزیز توی این تاپیک بحث‌های مقایسه‌ای بین این دو موتور رو مطرح نکنن. هدف همون طور که در عنوان هم پیداست صرفا معرفی روش‌های محاسبه‌ی GI و نحوه‌ی حذف flickering هست.

نکته1: در این تاپیک فقط قراره روش‌های مورد استفاده در V-Ray مطرح بشه اما دلیل اینکه در عنوان اسم Redshift رو هم آوردم بخاطر شباهت زیاد این دو موتوره و میشه این موارد رو در Redshift هم لحاظ کرد. فقط تنها نکته‌ای که باید بهش توجه داشته باشید اینه که روش Light Cache در ویری با روش Irradiance Point Cloud در ردشیفت متفاوته (هر چند که هدف شون یکیه) و برای رندر انیمیشن شاید نیاز به تمهیدات دیگری باشه که اگر با ردشیفت آشنا باشین و راهنماش رو خونده باشین متوجه میشین که شرایط به چه صورته.

نکته 2: این تاپیک به هیچ وجه محتوای آموزشی نداره. صرفا قراره کلیات بصورت تئوری بیان بشه تا ابهاماتی که دوستان دارند برطرف بشه. اگر نیاز به آموزش دقیق داشتید میتونید به راهنما یا فروم‌های Chaos Group یا Redshift مراجعه کنید.
آشنایی با GI در V-Ray و Redshift / رندر انیمیشن بدون flicker (+)
مقاله آشنایی با مفهموم گاما و Linear Workflow (+)
دانلود کتاب های آموزش پایتون در مایا (+)
آخرین ویرایش: 1 سال, 6 ماه پیش ارسال توسط sd70.
كاربران زیر تشكر كردند: esisb, ghoush, Reza Dar, R.Heydarzadeh, DEADLINE, *muhammad, Mahdi23, sculp, Art2D.3D

پاسخ: آشنایی با GI در V-Ray و Redshift/ رندر انیمیشن بدون flicker 1 سال, 6 ماه پیش #117083

  • sd70
  • آفلاین
  • ناظر و نویسنده وبسایت
  • ارسال: 731
  • دریافت تشكر: 1015
آشنایی با مفهوم GI

قبل از توضیح در مورد دلیل ایجاد flicker در انیمیشن، ابتدا بهتره به بررسی مفهوم GI بپردازیم. در اصطلاح موتورهای رندر، نورپردازی غیر مستقیم (Indirect Illumination) تحت عنوان Global Illumination یا به اختصار GI شناخته میشه. در دنیای واقعی می‌بینیم که حتی اگر به نقطه‌ای نور مستقیم هم نرسیده باشه همچنان برای ما قابل دیدنه که خب دلیلش اینه که فوتون‌های نور به تعداد زیاد به اطراف (از این سطح به اون سطح) برخورد کردند و اون قسمت رو روشن کردند. GI در موتورهای رندر هم کار شبیه‌سازی روشنایی غیر مستقیم رو انجام میده و معمولا این کار بر عکس دنیای واقعی انجام میشه که در ادامه بهش می‌پردازیم (غیر از روش محاسبات فوتونی)

علت وجود دو انجین Primary (اولیه) و Secondary (ثانویه) برای محاسبه‌ی GI چیست؟

همون طور که در قسمت قبل بهش اشاره شد فرایند محاسبه‌ی GI (غیر از روش فوتونی) بصورت عکس دنیای واقعی انجام میشه. ابتدا پرتوهایی از دید دوربین به محیط شلیک میشه. نقطه‌ای که این پرتو بهش برخورد کرده که در دید دوربین هم هست نقطه‌ی سمپل نام داره. برای جمع‌آوری اطلاعات GI برای این نقطه یک سری پرتوها به اطراف در یک مرحله (یک bounce یا یک جهش) شلیک میشه. برای محاسبه‌ی این پرتوها از موتور GI اولیه استفاده میشه. خود این پرتوها باز به یک سری نقاط دیگه برخورد میکنن. اگر لازم باشه یک یا چند مرتبه‌ی دیگه از این نقاط، پرتوها دچار پرتاب بشن برای این کار از موتور ثانویه استفاده میشه.

برای این که خوب متوجه اتفاقی بشین که میفته بهتره این مورد رو بر اساس روش محاسبه‌ی Brute Force توضیح بدم. فرض کنید انجین اولیه رو گذاشتیم روی حالت Brute Force و انجین ثانویه هم غیر فعاله (حالت None).

همون طور که در تصویر زیر می‌بینید، توی این حالت دوربین یک پرتو رو شلیک میکنه که به دیوار برخورد میکنه (نقطه‌ی A). حالا از موتور GI اولیه برای شلیک یه پرتوی دیگه از نقطه‌ی A استفاده میشه. این پرتو با رنگ قرمز نشون داده شده. این پرتو به نقطه‌ی B میرسه و همون طور که از تصویر هم مشخصه اطلاعات روشنایی رو جمع آوری میکنه. توی این حالت تابش مستقیم نور روی سطح زمین (نقطه B) به نقطه A اثر میذاره. همونطور که اشاره شد این کار بر عکس اون چیزی که در دنیای واقعی اتفاق میفته انجام میشه و اگه جهت فلش ها رو بر عکس کنید نتیجه دقیقا میشه مثل دنیای واقعی: نور به نقطه B می‌تابه و بعد از اصابت به نقطه‌ی A میرسه به چشم ما (دوربین)



حالا فرض کنید برای موتور ثانویه هم حالت رو گذاشتیم روی Brute Force و مقدار Depth رو روی 1 قرار دادیم. پارامتر Depth تعداد bounce (جهش) ها رو تعیین میکنه. دقت کنید این تعداد جهش هاست نه تعداد سمپل (=پرتو) ها



در این حالت همون طور که در تصویر هم می‌بینید از نقطه A یک پرتوی GI به کمک موتور اولیه شلیک میشه تا میرسه به نقطه B. چون تعداد جهش را روی 1 قرار دادیم از نقطه B فقط 1 مرتبه دیگه پرتوهای مورد نیاز شلیک میشه تا برسه به نقطه C تا اطلاعات روشنایی جمع آوری بشه. در این حالت تابش نور مستقیم روی سطح زمین (نقطه B) و کره (نقطه C) به نقطه A اثر میذاره



پس نتیجه این شد که هنگامی که یک نقطه اصطلاحا shaded (یعنی نقطه A) در دید مستقیم دوربین قرار داشت (چه به طور کاملا مستقیم چه از طریق بازتاب) برای محاسبه روشنایی غیر مستقیم اون از پرتوهای انجین اولیه استفاده میشه و هنگامی که یک نقطه shaded قراره ازش برای محاسبه GI استفاده بشه از انجین ثانویه. دلیل این که چرا این کار به دو بخش تقسیم شده خیلی ساده ـس. پرتوهای اولیه بعلت اینکه برای نقاطی که در دید مستقیم دوربین هستند مورد استفاده قرار میگیرن لازمه که کیفیت شون بالا باشه اما برای پرتوهای ثانویه میشه از تنظیماتی با کیفیت پایین استفاده کرد بدون اینکه تاثیر منفی‌ای بر کیفیت GI بذاره که این به افزایش سرعت رندر بسیار کمک میکنه

در بخش دوم روش‌های Irradiance Map، Light Cache و Brute Force رو مورد بررسی قرار میدیم و دقیق توضیح میدم که علت وجود فلیکر چیه.

در بخش سوم روش های مختلف برای رندر انیمیشن با فعال بودن GI (هم روش آرنولد و هم روش‌هایی که سرعت شون بسیار بالاتره اما برای حذف فلیکر نیاز به یه سری تمهیدات داره) رو بصورت کلی توضیح میدم
آشنایی با GI در V-Ray و Redshift / رندر انیمیشن بدون flicker (+)
مقاله آشنایی با مفهموم گاما و Linear Workflow (+)
دانلود کتاب های آموزش پایتون در مایا (+)
آخرین ویرایش: 1 سال, 6 ماه پیش ارسال توسط sd70.
كاربران زیر تشكر كردند: esisb, ghoush, داناپور, R.Heydarzadeh, DEADLINE, Mahdi23, sculp, bawa

پاسخ: آشنایی با GI در V-Ray و Redshift/ رندر انیمیشن بدون flicker 1 سال, 6 ماه پیش #117084

  • sd70
  • آفلاین
  • ناظر و نویسنده وبسایت
  • ارسال: 731
  • دریافت تشكر: 1015
انواع روش‌های محاسبه‌ی GI در V-Ray

در این قسمت به بررسی انواع روش‌های اصلی محاسبه‌ی GI در ویری می‌پردازیم. در ویری روش‌های مختلفی رو برای محاسبه‌ی GI داریم که بسته به بودجه و نوع انیمیشن مد نظر می‌تونیم از هر کدوم خواستیم استفاده کنیم. بعضی روش‌ها ساده‌تر هستند و نیاز به هیچ کار خاصی ندارند (مانند موتور آرنولد) اما در برابرش مدت زمان محاسباتی این روش‌ها بسیار بیشتره و در نتیجه هزینه‌ی انجام کار (اجاره رندرفارم یا نیاز به سیستم های بیشتر و قوی‌تر) رو بالا تر می‌بره و در مقابل برخی روش‌ها هم هستند که از نظر محاسباتی بسیار سریع‌ترند اما برای تنظیم کردن شون نیاز به یک سری مراحل اضافه هستش که مناسب استودیوهای کوچکتر یا افرادی با بودجه‌ی محدوده که در بخش بعدی (انواع روش‌های رندر انیمیشن با GI) بهش می‌پردازیم.

Irradiance Map
از Irradiance Map فقط بعنوان انجین اولیه میشه استفاده کرد. در این روش ابتدا پرتوهایی از دید دوربین به داخل صحنه شلیک میشن (پرتوهای سیاه) و به آبجکت های صحنه برخورد می‌کنن. به نقاط برخورد اصطلاحا سمپل irradiance گفته میشه. از محل این سمپل‌ها، همان طور که در شکل می‌بینید پرتوهایی شلیک میشه و اطلاعات روشنایی مربوط به GI رو برای اون سمپل جمع‌آوری و ذخیره میکنه.


برای اینکه دقیق تر متوجه بشید چه اتفاقی میفته تصویر زیر رو در نظر بگیرید:



نقاط زرد رنگی که در تصویر بالا مشاهده می‌کنید همون نقاط سمپل هستند. همون طور که ملاحظه میکنید این سمپل‌ها برای تمام نقاط صحنه یا دقیق‌تر بگم برای تمامی پیکسل‌ها شلیک نشدن و سوالی که مطرحه اینه که دقیقا چطوری به طور یکنواخت و صحیح روشنایی غیر مستقیم با این روش محاسبه میشه. همون طور که ملاحظه می‌کنید برای قسمت هایی که تقریبا روشنایی یکنواخت هست سمپل های کمتر شلیک شده و برای قسمت هایی که نیاز به جزئیات بیشتر داره سمپل های بیشتر و بخاطر همین حالت تطبیق پذیر (Adaptive)، این روش میتونه نسبت به Brute Force که در ادامه بهش میرسیم روش بسیار سریعتری باشه. هنگام محاسبه GI به روش Irradiance Map ابتدا تصویر در چند مرحله (پاس) از رزولیشن کم به زیاد رندر میشه تا به طور بهینه بتونه این نقاط رو در صحنه قرار بده. موقع رندر که قراره ویری GI رو در هر نقطه محاسبه کنه، اطلاعات ذخیره شده در این نقاط رو با همدیگه ترکیب و بعبارت دیگه درونیابی میکنه و به این صورت GI محاسبه میشه.

همون طور که در ابتدا اشاره شد و در تصویر زیر هم می‌بینید این سمپل‌ها از دید دوربین و فقط برای نقاطی که در دید دوربین هستند شلیک میشن و همون طور که ملاحظه می کنید برای نقاطی که در دید دوربین قرار نداشته سمپلی شلیک نشده:



بریم سراغ بحث اصلی مون یعنی flicker. در این جا فقط میخوایم در مورد علت ایجاد فلیکر صحبت کنیم. فلیکر در روش Irradiance Map به دو دلیل ممکنه ایجاد بشه: 1. حرکت دوربین 2. حرکت آبجکت ها. فرض کنید فقط حرکت دوربین داریم. یک مرتبه دیگه تصویر اول رو نگاه کنید. همون طور که گفته شد این نقاط زرد نقاط سمپل GI هستند که اطلاعات روشنایی غیر مستقیم در اونها ذخیره میشه. در فریم بعدی که نمای دوربین قدری عوض شده به نظرتون این سمپل‌ها دقیقا در همون نقاط قبلی واقع میشن و دقیقا به همون شکل ترکیب میشن؟ قطعا این طور نیست. همین اختلاف کوچک در موقعیت این سمپل ها از این فریم تا اون فریم باعث میشه که در انیمیشن مون یه حالت چشمک زدن نور که بهش فلیکر گفته میشه ایجاد بشه. در رابطه با آبجکت‌های دارای حرکت هم علت مشابه همین مورد هست. در بخش سوم به روش های برطرف کردن flicker تولید شده با Irradiance Map می‌پردازیم.

از جمله مزایای این روش اینه که دارای سرعت محاسبه بسیار سریعتر (نسبت به Brute Force) هست به ویژه در صحنه هایی که دارای سطوح هموار بزرگه. Irradiance Map رو میشه ذخیره کرد و دوباره ازش موقع رندر استفاده کرد که این کار به افزایش سرعت رندر یک صحنه از نماهای مخلف یا انیمیشن هایی که فقط حرکت دوربین داریم کمک بسیاری میکنه

در رابطه با معایبش هم میشه گفت به دلیل روش درونیابی ای که داره ممکنه بعضی جزئیات از بین بره یا blur بشه. اگر از تنظیمات و تمهیدات مناسب استفاده نشه باعث ایجاد flicker در انیمیشن میشه. اطلاعات در این روش ذخیره میشه و بنابراین فضایی از حافظه رو اشغال میکنه. نورپردازی غیر مستقیم برای آبجکت های دارای موشن بلور با این روش نتیجه درستی رو نمیده و ممکنه باعث ایجاد نویز بشه (البته در بیشتر موارد این نویزها اصلا به چشم نمیان)

Brute Force
قبل از هر چیز بگم که روشی که برای محاسبه‌ی GI در موتور آرنولد وجود داره مشابه همین روشه. در روش Brute Force هم مانند روش قبلی پرتوهایی از دید دوربین برای مشخص کردن نقاط محاسبه‌ی GI شلیک میشه اما تفاوت این روش با روش قبل اینه که این کار برای تک تک پیکسل‌ها انجام میشه و به عبارت دیگه برای تمام پیکسل ها سمپل GI شلیک میشه. یعنی بر فرض اگر محل نقاط سمپل رو مانند تصویر روش قبل بخوایم با نقاط زرد رنگ نشون بدیم چون این کار برای تمامی پیکسل‌ها انجام شده کل تصویر به رنگ زرد در میاد. این روش بسیار دقیقه و به خوبی جزئیات رو نمایش میده و هیچ گونه درونیابی ای هم در این روش اتفاق نمیفته و برای هر پیکسل اطلاعات GI به طور دقیق محاسبه میشه. در این روش، محاسبه GI همزمان با رندر انجام میشه و مانند روش‌های Irradiance Map یا Light Cache چیزی در حافظه ذخیره نمیشه و در یک مرحله جدا انجام نمیشه. از این روش هم بعنوان موتور اولیه و هم ثانویه میشه استفاده کرد که در بخش قبل روش کار BF + BF رو توضیح دادیم.

از جمله مزیت های این روش میشه به ساده بودن تنظیمات (که فقط دارای دو پارامتر سمپل و تعداد bounce هست)، حفظ تمامی جزئیات صحنه، نبود flicker در انیمیشن، عدم نیاز به حافظه و محاسبه درست آبجکت های دارای موشن بلور اشاره کرد. از جمله ضعف هاش هم میشه به سرعت محاسبه پایین (در مقایسه با روش IM) در محیط های پیچیده (به ویژه در صحنه های داخلی) و همین طور ایجاد نویز در تصویر اشاره کرد. البته طبیعتا نویز رو به کمک تعیین سمپل های بیشتر میشه از بین برد که خب سمپل بیشتر یعنی زمان محاسبه بیشتر. (البته Denoiser هم هست)

Light Cache
لایت کش یک روش بسیار سریع برای تقریب زدن GI در صحنه ـست. در این روش پرتوهای زیادی از دید دوربین شلیک میشه و دچار جهش (bouce) میشه. همون طور که در تصویر می‌بینید محل برخورد هر پرتو یک سمپل جدید رو در لایت کش میسازه که حین رندر میتونه مورد استفاده قرار بگیره. اگر یک پرتو به سمپلی برسه که قبلا توسط یک پرتوی دیگه محاسبه شده فرایند محاسبه متوقف میشه و به جاش اطلاعات اون سمپل خونده میشه. این که در Light Cache امکان خوندن اطلاعات مربوط به نور (به جای انجام محاسبات جدید) وجود داره باعث شده که سرعت این روش بسیار بالا باشه. همون طور که در تصویر هم می‌بینید سمپل هایی که توسط پرتوهای آبی تولید شدن برای پرتوی قرمز مورد استفاده قرار میگیرن.



از روش Light Cache هم بعنوان انجین اولیه و هم ثانویه میشه استفاده کرد اما بهتره فقط برای رندرهای preview ازش بعنوان انجین اولیه استفاده بشه چرا که این روش کیفیت کمی داره و جزئیات رو نمیتونه حفظ کنه. سوال: با توجه به کیفیت پایین، آیا پس تنها مزیت این روش سرعت بالاشه و فقط مناسب رندرهای تست هست؟ خیر. اگر یادتون باشه در مقاله‌ی قبل در بخش "علت وجود دو انجین Primary و Secondary برای محاسبه‌ی GI چیست؟" این مورد توضیح داده شد: "پرتوهای اولیه بعلت اینکه برای نقاطی که در دید مستقیم دوربین هستند قرار میگیرن لازمه که کیفیت شون بالا باشه اما برای پرتوهای ثانویه میشه از تنظیماتی با کیفیت پایین استفاده کرد بدون اینکه تاثیری منفی‌ای بر کیفیت GI بذاره" در نتیجه در اکثر موارد میتونیم از Light Cache بعنوان انجین ثانویه در ترکیب با روش‌هایی نظیر IM یا BF استفاده کنیم بدون اینکه مشکلی پیش بیاد. Light Cache هم مانند Irradiance Map فضایی از حافظه رو برای ذخیره کردن اطلاعات GI اشغال میکنه.

دو روش دیگه محاسبه GI به نام Photon Map و Spherical Harmonics هم وجود داره که موضوع بحث ما نیست. در بخش بعد، بصورت کلی به بررسی انواع روش‌های رندر انیمیشن با فعال بودن GI و روش حذف flicker می‌پردازیم. (البته فکر میکنم تا الان مشخص شده باشه که روش Brute Force مانند موتور آرنولد هیچ گونه فلیکری ایجاد نمیکنه)
آشنایی با GI در V-Ray و Redshift / رندر انیمیشن بدون flicker (+)
مقاله آشنایی با مفهموم گاما و Linear Workflow (+)
دانلود کتاب های آموزش پایتون در مایا (+)
آخرین ویرایش: 1 سال, 6 ماه پیش ارسال توسط sd70.
كاربران زیر تشكر كردند: esisb, ghoush, Reza Dar, R.Heydarzadeh, DEADLINE, *muhammad, Mahdi23, sculp

پاسخ: آشنایی با GI در V-Ray و Redshift/ رندر انیمیشن بدون flicker 1 سال, 6 ماه پیش #117086

  • sd70
  • آفلاین
  • ناظر و نویسنده وبسایت
  • ارسال: 731
  • دریافت تشكر: 1015
نحوه صحیح رندر انیمیشن با فعال بودن GI

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

1. Brute Force

همون طور که قبلا هم گفته شد هنگام انتخاب Brute Force بعنوان انجین اولیه، برای تمامی پیکسل‌ها GI در مرحله‌ی رندر بدون مواردی نظیر کش شدن و درونیابی محاسبه میشه و روش بسیار دقیقیه.

1. الف) BF + BF (روش موتور آرنولد):
نحوه‌ی کار این روش در مقاله‌ی دوم بیان شد. در این روش برای هر دو موتور اولیه و ثانویه حالت Brute Force رو فعال می‌کنیم. این روش دقیق ترین و پایدار ترین روشه و تمامی جزئیات رو به خوبی میتونه محاسبه کنه. به هیچ وجه لازم نیست نگران چیزی به نام flicker باشید. همون طور که در تصویر زیر هم مشاهده می‌کنید درست مانند موتور آرنولد فقط با دو پارامتر که تعداد سمپل ها و bounce (جهش) ها رو تعیین میکنه سر و کار داریم. مثلا در تصویر زیر مقدار Depth روی عدد 2 قرار داره این یعنی محاسبه‌ی GI با 3 تا جهش انجام میشه (1 + 2)



1. ب) BF + LC:
در این روش برای موتور ثانویه از Light Cache استفاده می‌کنیم. در قسمت قبل گفته شد که Light Cache کیفیت مطلوبی نداره اما اگر به یاد داشته باشید گفتیم استفاده از یک روش با کیفیت کمتر برای موتور ثانویه‌ی محاسبه‌ی GI هیچ مشکلی نداره. مزیت Light Cache اینه که سرعت محاسبه‌ی بسیار زیادی داره. در این روش فقط باید تنظیمات پیش‌فرض Light Cache رو قدری تغییر داد. برای محاسبه‌ی GI چون انجین اولیه Brute Force هست محاسبات برای تک تک پیکسل‌ها انجام میشه و پرتوهایی که از هر سمپل GI شلیک میشه میرسه به نقاطی که اطلاعات شون قبلا توسط Light Cache محاسبه شده. در این روش هم مشکل flicker رو نداریم و سرعت محاسبات هم نسبت به روش قبل بالاتره اما یک نکته‌ی بسیار بسیار مهم رو باید بهش توجه داشته باشید و اونم اینه که اگر صحنه دارای جزئیات کوچیک و ریز بسیار زیادی باشه ممکنه flicker توی انیمیشن ایجاد شه، اینو حتما بهش توجه داشته باشین اما در حالت کلی میشه این روش رو هم یک روش بدون flicker دونست.

جمع‌بندی:
سوالی که الان ممکنه پیش بیاد اینه که کدوم روش بهتره. در پاسخ باید گفت که بستگی داره با چه نوع صحنه‌ای سر و کار داشته باشید. اگر با یک صحنه‌ی خارجی و به ویژه یک محیط وسیع سر و کار داشته باشید Light Cache نمیتونه عملکرد خوبی داشته باشه و روش الف خیلی میتونه بهتر باشه و برعکس در صحنه های داخلی به دلیل وجود جزئیات بیشتر استفاده از روش الف ممکنه نویز بسیاری رو در کار ایجاد کنه که برای حلش نیاز به استفاده از تعداد سمپل‌های بیشتره که خب طبیعتا این کار افزایش زمان رندر رو هم در پی داره و در چنین شرایطی باید از روش ب استفاده کرد اما همون طور که گفتم اگر جزئیات ریز بسیار زیادی در صحنه وجود داشته باشه این روش ممکنه flicker ایجاد کنه.

یکی از روش‌هایی که توصیه میشه اینه که قبل از انجام رندر نهایی و تحویل کار به رندرفارم، چند ثانیه از انیمیشن رو با هر دو روش رندر کنید و نسبت کیفیت به مدت زمان رندر رو برای خروجی این روشها مقایسه کنید و هر کدوم مناسب تر بود از همون استفاده کنید ولی در حالت کلی روش الف هیچ گونه مشکل و مساله‌ای به هیچ وجه نداره اما خب اگه بشه از روش سریعتری مثل ب استفاده کرد (که در بیشتر مواقع میشه) خب دلیلی نداره که بخوایم از روش زمان‌بری مثل الف استفاده کنیم. البته همون طور که گفتم BF+BF برای فضاهای باز و وسیع میتونه خیلی روش بهتری باشه.

2. Irradiance Map + Light Cache

در قسمت قبل، نحوه‌ی محاسبه‌ی GI رو با روش IM و علت ایجاد flicker رو در انیمیشن توضیح دادیم. در این بخش بصورت کلی یاد میگیرم که چطور میشه با استفاده از این روش انیمیشن رو بدون flicker رندر کنیم.

2. الف) در حالتی که فقط حرکت دوربین داریم

ساده ترین سبک رندر انیمیشن با این روش‌ها وقتیه که تنها آبجکت متحرک دوربینه (معمولا انیمیشن های معماری از این نوعه). این نوع انیمیشن با نام‌هایی نظیر Walk-Through یا Fly-through شناخته میشه. در قسمت قبل گفتیم که تغییر وضعیت و مکان نقاط سمپل از یک فریم تا فریم مجاور منجر به ایجاد یک حالت چشمک‌زن یا فلیکر میشه. خب به نظرتون اگر بتونیم موقعیت این نقاط (همون نقاط زرد رنگ) رو در محیط ثابت نگه داریم چه اتفاقی میفته؟ بله درسته، فلیکر بی فلیکر. دو تصویری که در مقاله قبلی دارای نقاط سمپل بود رو در نظر بگیرید. فرض کنید تصویر دوم موقعیت بعدی دوربینه. همون طور که می‌بینید بخش هایی که در تصویر اول در دید دوربین نبودن براشون سمپلی شلیک نشده. خب نقاطی که در دید موقعیت قبلی دوربین قبل بودن و از قبل سمپل GI دارن که هیچی. تنها کاری که باید انجام بدیم اینه که در این فریم برای جاهایی که نقطه‌ی سمپل GI نداره، این نقاط رو شلیک کنیم و اونا رو به مپ قبلی اضافه کنیم. در واقع کاری که باید انجام بدیم اینه که در یک مرحله برای تمام مسیر دوربین مپ GI رو در یک مرحله محاسبه کنیم؛ بهمین راحتی.

خب یادتون باشه که گفتم این تاپیک محتوای آموزشی نداره بنابراین خیلی کلی این روش رو توضیح میدم. ابتدا برای انجین اولیه و ثانویه Light Cache رو انتخاب میکنیم و برای تمام مسیر دوربین در یک مرحله اونو محاسبه میکنیم. در گام بعد برای موتور اولیه Irradiance Map و برای ثانویه Light Cache رو انتخاب میکنیم. برای لایت کش مپی که در مرحله‌ی قبل محاسبه شده رو وارد میکنیم تا لایت کش محاسبه نشه و از همون مپ فراخوانی بشه. حالا همین کار رو هم برای IM میکنیم و اونو ذخیره میکنیم. در تمام این مراحل فقط GI محاسبه میشه و رندر نهایی انجام نمیشه. حالا کافیه مپ ساخته شده رو برای Irradiance Map لود کنیم تا موقع رندر دیگه GI محاسبه نشه و به جاش از اطلاعات ذخیره شده استفاده بشه. بهمین راحتی. حالا انیمیشن مون رو رندر میکنیم و هیچ فلیکری هم در کار نخواهد بود.

2. ب) در حالتی که آبجکت متحرک داریم (و احتمالا حرکت دوربین)
خب اینجا کار خیلی به سادگی روش قبل نیست. کاری که ابتدا باید انجام بدیم اینه که اول GI رو برای تک تک فریم ها محاسبه کنیم و اونو در فایل‌های مجزا ذخیره کنیم (در روش قبل چون هیچ آبجکت متحرکی نداشتیم GI در یک مرحله و در یک فایل ذخیره شد) حالا فایلهای ذخیره شده رو لود میکنیم تا موقع رندر از این اطلاعات استفاده بشه. برای اینکه روی آبجکت های دارای حرکت فلیکر نداشته باشیم باید برای محاسبه‌ی GI در هر نقطه، این کار رو با درونیابی چند فریم قبل و بعد انجام بدیم (که در بیشتر موارد شاید 2 فریم قبل و بعد جوابگو باشه). در حالت عادی که گفتیم GI در روش IM با ترکیب اطلاعات نقاط سمپل اطرافش انجام میشه خب حالا همین کار رو با ترکیب دو فریم قبل و بعد انجام میدیم تا به یک نتیجه‌ی پایدار برسیم و فلیکر رو بسیار کم یا عملا صفر کنیم.

جمع‌بندی:
این روش نسبت به Brute Force سرعت بسیار بسیار بالاتری داره و برای افرادی که بودجه‌ی محدودی دارن روش بسیار بسیار مناسبیه. سوال: در روش ب GI برای تک تک فریم ها به طور مجزا محاسبه شد و در انتها با چند فریم قبل و بعد درونیابی شد. برای آبجکت های دارای انیمیت که خب این کار لازم بود اما برای بک گراند مون (آبجکت های ثابت) یک سری محاسباتی که نیاز نبود انجام شد، درسته؟ در جواب باید گفت که همین طوره. اگر بشه بک گراند رو به روش الف و فقط آبجکت های دارای انیمیت رو به روش ب رندر گرفت که باز خیلی خیلی بیشتر در زمان رندر صرفه جویی میشه امــــا توجه داشته باشین که این کار درسته زمان رندر و در نتیجه هزینه رو کاهش میده اما کار خودتون رو سخت تر میکنه و یک مرحله‌ی دیگه به کار تون اضافه میکنه (خودمونی بگم دنگ و فنگ داره) که خب اگر بخواید، برای صرفه‌جویی بیشتر در هزینه‌ها و رسیدن به سرعت رندر سریعتر میتونید ازش استفاده کنید. در مقاله‌ی بعدی (روش های کاهش زمان رندر با GI) این مورد رو بصورت اجمالی بررسی میکنیم.

نکته مهم: اگر نورها دارای انیمیت هستند (به ویژه انیمیت های نسبتا سریع) و قراره در تولید GI نقش داشته باشند استفاده از روش Irradiance Map برای رندر انیمیشن به هیچ وجه جوابگو نیست. فکر نمیکنم نیاز به بیان دلیلش باشه چون واضحه.

کدام روش بهتر است؟ Brute Force یا Irradiance Map؟

اگر سیستم‌های بسیار قوی در اختیار دارید یا محدودیت مالی برای اجاره‌ی رندرفارم ندارید که خب ایده‌آل ترین روش همون Brute Force ـه. چون عملا هیچ تنظیمی نداره. اما اگر به لحاظ مالی یا سخت‌افزاری دچار محدودیت هستید طبیعتا Irradiance Map انتخاب خیلی بهتری میتونه باشه. درسته تنظیماتش بیشتره و قدری لازمه تا کاربر خودش وقت بذاره اما در هر حال کلی در هزینه‌ها میشه با این روش صرفه‌جویی کرد (خودم شخصا اگه کار رو بخوام به رندر فارم بدم تا زمانی که بشه از روش IM استفاده میکنم که هزینه کمتر شه) ولی خب توجه داشته باشید که همه‌ی صحنه‌ها رو نمیشه با روش دوم رندر کرد. اگر بر فرض نورها دارای انیمیت هستند (انیمیت قابل توجه) اینجا دیگه درونیابی کارساز نخواهد بود و نتایج غیر طبیعی و عجیب غریب در پی خواهد داشت. برای صحنه‌های خارجی هم که گفتیم Brute Force میتونه نسبت به Light Cache روش بهتری باشه (البته این نکته رو یادتون باشه که Brute Force رو بعنوان موتور ثانویه با Irradiance Map هم میتونید ترکیب کنید)

فقط از هر روشی که میخواین استفاده کنید قبل از انجام رندر نهایی یادتون باشه چند ثانیه رو بصورت تست رندر بگیرین تا مطمئن شین مشکلی وجود نداره
آشنایی با GI در V-Ray و Redshift / رندر انیمیشن بدون flicker (+)
مقاله آشنایی با مفهموم گاما و Linear Workflow (+)
دانلود کتاب های آموزش پایتون در مایا (+)
آخرین ویرایش: 1 سال, 6 ماه پیش ارسال توسط sd70.
كاربران زیر تشكر كردند: ghoush, R.Heydarzadeh, DEADLINE, *muhammad, Mahdi23, sculp, mirza92155

پاسخ: آشنایی با GI در V-Ray و Redshift/ رندر انیمیشن بدون flicker 1 سال, 6 ماه پیش #117349

  • sd70
  • آفلاین
  • ناظر و نویسنده وبسایت
  • ارسال: 731
  • دریافت تشكر: 1015
روش های کاهش زمان رندر با GI و فیک کردن آن

در بخش‌های قبل به الگوریتم‌های مختلف محاسبه‌ی GI در ویری و مزایا و معایب هر کدوم اشاره شد. در این قسمت قراره به روش هایی برای کاهش زمان رندر بپردازیم. غیر از روش اول، در بقیه کلا GI رو غیر فعال می‌کنیم و اون رو بصورت fake تولید می‌کنیم.

روش اول: تفکیک بک‌گراند و آبجکت‌های دارای حرکت
در قسمت قبل در روش 2.الف دیدیم که موقعی که فقط حرکت دوربین داریم میتونیم GI رو فقط در یک مرحله با سرعت بسیار زیاد محاسبه و کش کنیم اما این کار برای وقتی که آبجکت‌ها نیز دارای حرکت بودن کاربرد نداشت. حالا اگر بیایم آبجکت های دارای حرکت رو از بک گراند حذف کنیم و به طور مجزا هر کدوم رو رندر بگیریم میتونیم سرعت محاسبات رو افزایش بدیم و به رندر سریع‌تری برسیم. البته عیب این روش اینه که نیاز به چند مرحله رندر و انجام کامپوزیت داره ولی خب برای صرفه‌جویی در هزینه میتونه روش بسیار مناسبی باشه. (به ویژه در شرایطی که دوربین کلا حرکت نداره و بک گراند ثابته که بسیار میتونه به صرفه باشه)

خب خیلی کلی روش رو توضیح میدم. گام اول اینه که آبجکت های دارای حرکت رو hide کنیم. الان هیچ گونه آبجکت دارای انیمیتی نداریم و میتونیم بصورت Fly-Trough (روش 2.الف) انیمیشن رو رندر کنیم. در مرحله‌ی بعد آبجکت‌های دارای حرکت رو بهمراه یک فضای کروی در اطراف شون با یکی از روش‌های (1.الف)، (2.الف) یا (2.ب) به تنهایی رندر می‌کنیم (معمولا آبجکت ها به محدوده‌ای مشخص در شعاع اطراف شون تاثیر میذارن و بخاطر همین یک فضای کروی براشون انتخاب می‌کنیم) اینکه آبجکت ها بهمراه یک فضای کروی رندر بشن خیلی سرعت بیشتری میتونه به ما بده تا این که برای هر فریم کامل بخواد به طور جداگانه GI محاسبه و درونیابی بشه. یک سری لایه‌ی دیگه هم باید رندر بشه که خب برای اطلاعات بیشتر میتونید به راهنمای V-Ray مراجعه کنید. در مرحله‌ی پایانی این لایه‌ها رو با هم ترکیب می‌کنیم.

روش دوم: استفاده از نورپردازی بر اساس تصویر (IBL) برای شبیه‌سازی GI
این روش برای فقط برای محیط‌های باز کاربرد داره. در این روش می‌تونید برای شبیه‌سازی GI از یک تصویر HDR استفاده کنید. بخاطر این فضا باز هست و از سرتاسر محیط نورهای این تصویر به محیط می‌تابه در برخی موارد خاص میشه کلا GI رو غیر فعال کرد و به همین نور بسنده کرد. (البته شاید در مواردی نیاز باشه از Direct Light هایی با جهت بر عکس هم برای اضافه کردن اثرات نور غیر مستقیم به محیط استفاده بشه)

روش سوم: فیک کردن GI با استفاده از نورهای کمکی
در این روش که Jeremy Birn توی کتابش از اون با نام "ساندویچ اوکلوژنی" نام برده کار در سه مرحله انجام میشه. مرحله‌ی اول که خب رندر تصویر به کمک نورهای اصلی هست. توی این لایه طبیعتا چون فقط نور مستقیم وجود داره بعضی قسمت‌ها ممکنه هیچ نوری بهشون نرسیده باشه و به طور مطلق تاریک باشن. لایه‌ی بعد Ambient Occlusion هست که حتما کاربردش رو و روش ایجادش رو میدونید. لایه‌ی بعدی (لایه‌ی پرکننده) برای فیک کردن اثرات bounce های نور و بعبارت دیگه GI کاربرد داره. در این لایه باید نورهایی رو با رنگ مناسب در محل‌های درست قرار بدیم تا به نوعی بشه روشنایی غیر مستقیم رو بصورت فیک تولید کرد. این لایه نباید سایه داشته باشه؛ دقیق تر بخوام بگم سایه‌های بسیار بسیار نرمی و محوی باید داشته باشه. حالا کافیه در یکی از نرم افزارهای کامپوزیت این سه لایه رو به این ترتیب با هم ترکیب کنیم: لایه‌ی AO در لایه‌ی پرکننده Multiply میشه و لایه‌ی اصلی Add (یا Plus) میشه به لایه‌ی AO. تصاویر زیر به خوبی این موارد رو نشون داده:











در صحنه های خارجی برای شبیه سازی نور غیر مسقیتم میشه از Direct Light هایی با جهت بر عکس (از زمین به هوا) استفاده کرد.

روش چهارم: فیک کردن GI با استفاده از Ambient Occlusion
خب از AO معمولا برای ایجاد تاریکی به صحنه اضافه میشه (برای قسمت‌هایی که GI به خوبی نمیتونه جزئیاتش رو تولید کنه) اما اینجا ما میخوایم با هدفی بر عکس این ازش استفاده کنیم یعنی برای روشن کردن محیط و فیک کردن نورپردازی غیر مستقیم. روش‌های مختلفی برای این کار وجود داره مثلا در مایا و در موتور منتال‌ری میشه AO رو به یک نور وصل کرد و مستقیما ازش در صحنه استفاده کرد ‌اما برای سایر موتورها بایستی این کار با کامپوزیت کردن انجام بشه. مثلا یک روشش اینه که از کار یک رندر flat گرفته بشه و لایه‌ی AO باهاش میکس بشه و در انتها با رندر نور مستقیم ترکیب بشه. (این روش در این صفحه برای موتور آرنولد توضیح داده شده) میتونید عبارت Faking Global Illumination with Ambient Occlusion رو جستجو کنید تا روش های دیگری رو هم در این رابطه پیدا کنید.

همون طور که دیدید در سه روش دوم کلا GI غیر فعاله و به صورت فیک تولید میشه و روش های دقیقی نیست اما اگر سیستم قوی در اختیار نداشته باشین یا بخواین تا جایی که بشه هزینه ها رو کمتر بکنید میشه ازشون استفاده کرد.
آشنایی با GI در V-Ray و Redshift / رندر انیمیشن بدون flicker (+)
مقاله آشنایی با مفهموم گاما و Linear Workflow (+)
دانلود کتاب های آموزش پایتون در مایا (+)
آخرین ویرایش: 1 سال, 5 ماه پیش ارسال توسط sd70.
كاربران زیر تشكر كردند: ghoush, R.Heydarzadeh, DEADLINE, *muhammad, Mahdi23, bawa

پاسخ: آشنایی با GI در V-Ray و Redshift/ رندر انیمیشن بدون flicker 1 سال, 6 ماه پیش #117605

  • sd70
  • آفلاین
  • ناظر و نویسنده وبسایت
  • ارسال: 731
  • دریافت تشكر: 1015
بخش سوم با عنوان "نحوه صحیح رندر انیمیشن با فعال بودن GI" اضافه شد
آشنایی با GI در V-Ray و Redshift / رندر انیمیشن بدون flicker (+)
مقاله آشنایی با مفهموم گاما و Linear Workflow (+)
دانلود کتاب های آموزش پایتون در مایا (+)
كاربران زیر تشكر كردند: DEADLINE, *muhammad, Mahdi23
  • صفحه:
  • 1
  • 2
مدیران انجمن: m.bodat
زمان ایجاد صفحه: 0.31 ثانیه

جدیدترین آثار ارسالی در گالری

تبلیغات
تبلیغات

جدیدترین ارسالهای تالارگفتگو