- Advertisement -
اخبارمقالات

Ray Marching الگوریتمی برای رندر جلوه های حجمی

4.43Kviews

 مقاله ای از مصطفی آری

 

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

رندر کردن یک حجم تفاوتهای اساسی با رندر یک سطح دارد. در مورد سطح، رنگ نهایی پیکسل با محاسبه متریال در نقطه رندر محاسبه می شود ولی وقتی با حجم مواجه هستیم به دلیل نیمه شفاف بودن ماهیت آن مجبور هستیم بردار چشمی تا نقطه رندر را تا جایی ادامه دهیم تا نهایتا به شفافیت صفر دست پیدا کنیم (opacity=1). الگوریتم Ray Marching این فرایند چرخشی را پیاده سازی می کند. برای اینکه با جزئیات این الگوریتم آشنا شویم پروسه برخورد بردار چشمی به نقطه رندر تا خروجی رنگ نهایی را بررسی می کنیم. وقتی بردار چشمی به سطح یک جسم برخورد می کند در ابتدا شفافیت جسم در آن نقطه بررسی می شود. اگر جسم شفاف نبود (مانند فلزات) با محاسبه متریال رنگ نهایی مشخص می شود. اما در صورتی که جسم نیمه شفاف باشد (مانند دود و ابر) بردار به حرکت خود داخل جسم ادامه می دهد و در این مسیر در هر بازه مشخص به اندازه گیری مقدار شفافیت و رنگ می پردازد و مقدار به دست آمده را با مقدار قبلی جمع می کند. در جایی این حاصل جمع به ۱ می رسد و الگوریتم می فهمد که از اینجا جلوتر نمی تواند برود. حاصل جمع رنگهایی که در این مسیر از محاسبه متریال در هر گام به دست آمده است، رنگ نهایی پیکسل خروجی را مشخص می کند.

معمولا تصاویری که از این تکنیک به دست می آید رنگی یکنواخت خواهند داشت که در لبه های آن که غلظت مواد کمتر است نیمه شفاف است. برای ایجاد جزئیات نیاز است که نحوه رسیدن نور به نقاط نیز مورد بررسی قرار بگیرد. این همان پارامتری است که در خصوصیات جلوه های حجمی به آن Self-Shadow می گویند. با فعال کردن آن الگوریتم مجبور می شود برای تمای نورهایی که سایه آنها فعال است در هر گام سایه را محاسبه کرده و آن را بر روی تصویر اعمال کند. اگرچه این فرایند به شدت زمان رندر را طولانی می کند ولی بدون آن نتیجه رندر چندان مورد پسند نخواهد بود. فرق استفاده از self-shadow و عدم استفاده از آن در تصویر زیر آمده است.

                     

 

با موارد گفته شده در بالا می توان به دلایل زمانبر بودن رندر این جلوه ها پی برد. با یک محاسبه سر انگشتی می توان گفت که رندر یک جسم حجمی به تعداد گامهای موجود در فرایند Ray Marching ضرب در رندر یک سطح معمولی طول می کشد. این گامها در نرم افزاری مثل مایا توسط خود نرم افزار تعیین می شوند اما برای یک جسم معمولا ده ها گام در نظر گرفته می شود که باعث افزایش بیش از حد زمان رندر می شود.

توصیه هایی که برای رندر یک جسم حجمی می توان بیان کرد:

۱-     برای رندر آنها در مایا از Detail Shadow Map به جای Ray trace استفاده کنید. چون در مورد اول یک مپ ساخته می شود و shadow در تمام طول مسیر از آن بازخوانی می شود اما در حالت Raytrace ، به ازای هر گام تعداد زیادی Ray برای محاسبه سایه ارسال می شود که می تواند فرایند رندر را بسیار طولانی کند. مزیت Detail Shadow Map این است که توانایی محاسبه سایه های نیمه شفاف را هم دارد.

۲-     تا سرحد امکان از ظاهر شدن آنها در بازتابها و شکستها (Reflections and Refractions) جلوگیری کنید چرا که در این حالت تمامی فرایند Ray Marching برای این تصاویر نیز محاسبه می شود.

۳-     یکی از مهمترین اتفاقاتی که در رندر یک جسم حجمی برای نور اتفاق می افتد فرایند پخش شدن داخلی (Scattering) نور است که می توانید از پارامتر Incandescence برای شبیه سازی آن استفاده کنید گرچه این تنها یک شبیه سازی ساده است.

 

 

مطالعه کنید:  مدیریت رندرفارم 10 Deadline منتشر شد

این مطلب چقدر مفید بود؟

به این پست امتیاز دهید!

متوسط آرا / ۵٫

3 Comments

Leave a Response

3 + 6 =

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.