آشنایی با مفهوم Physically Based Rendering در موتورهای رندر موضوع این مطلب است که توسط اقای سجاد ربیعی مدرس نرم افزار هودینی در cmiVFX ارائه شده است .Physically Based Rendering یعنی رندر هایی که بر پایه قوانین فیزیکی هستند . شما را به دیدن ادامه مطلب آقای سجاد ربیعی دعوت میکنم .
آشنایی با مفهوم Physically Based Rendering در موتورهای رندر
کانال مقالات استاد سجاد ربیعی در ImanVFX
آشنایی با مفاهیم زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت 1
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت 2
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت 3
آشنایی با مفاهیم اولیه زبان های برنامه نویسی و اسکریپت نویسی در انیمیشن و VFX قسمت 4
آشنایی با مفهوم Physically Based Rendering در موتورهای رندر
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,قسمت 5 معرفی اسکریپت نویسی
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,سجاد ربیعی قسمت 6
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,سجاد ربیعی قسمت 7
تفاوت زبان های اسکریپت نویسی و برنامه نویسی,آشنایی با PyMEL – Python – API – PyQt
با عرض سلام.
در این مقاله قراره در ارتباط با مفهوم Physically Based Rendering در موتورهای رندر صحبت بکنیم ، در انیمیشن و جلوه های ویژه کلی مفهوم کوچک و بزرگ وجود داره که ممکنه هر روز با آنها سروکار داشته باشیم ولی واقعا معنی حقیقی آن را ندانیم ، متاسفانه یکی از دلایل میتونه این باشه که در ایران به صورت کاملا آکادمیک کسی موضوعات خیلی تخصصی را یاد نگرفته و دوستانی هم که متخصص شده اند ، عموما از طریق فیلم های آموزشی یا از طریق تلاش های شخصی به آن تخصص دست پیدا کردند ، به همین دلیل شاید با نحوه کار ابزار ها آشنا باشیم ولی هیچ وقت نرفته باشیم دنبال مفهوم اصلی آنها .
منابع انگلیسی زیادی هم وجود دارند که عموما به زبان صریح و روان ترجمه نشده اند.
مفهموم Physically Based Rendering یا PBR یکی از آنهاست ، امروزه در اکثر موتورهای رندر به عنوان یک مزیت از آن یاد میکنند ولی شاید ما تنها چیزی که از آن میدانیم این باشد که این جمله یعنی اینکه فلان موتور رندر از مانند فیزیک واقعی یا دنیای واقعی رندر میکنه !
مانند مقالات مربوط به برنامه نویسی ، سعی میکنم تا کمی ساده تر این مباحث را توضیح دهم تا همه دوستان بتوانند از آنها بهره ببرند.
Let’s Begin it !
خوب همانطور که از معنی این جمله معلومه و خودتون هم بهتر میدونید ، Physically Based Rendering یعنی رندر هایی که بر پاییه قوانین فیزیکی واقعی باشند.
پس ما اینجا متوجه میشیم که مقوله نورپردازی ورندر یکسری قوانین فیزیکی دارن که اگر موتورهای رندر از این قوانین تبعیت بکنند ، به آنها موتورهای رندر Physically Based Rendering یا PBR میگوییند.
حالا شما فقط باید بدانید این قوانین یا اتفاقات فیزیکی چی هستند.
در دنیای واقعی وقتی پرتو های نور به اجسام برخورد میکنه یکسری اتفاقات مختلف برای این پرتو های نور می افته.
1. بخشی از این پرتو های نوری در جهت های مختلف منعکس میشوند(Specular – Reflection)
2. بخشی از این پرتوها جذب جسم میشوندو معمولا به گرما تبدیل میشوند.
3. بخشی از این پرتوها وارد جسم میشوند (Scattering)
(به تصویر شماره 1 رجوع کنید)
توضیح هر قسمت
1. Reflection
بعد از برخورد نور به سطح ، بخشی از آن به جهات مختلف منعکس میشوند ، اگر جسم خیلی صاف و صیقلی باشد مثل آینه ، بیشتر این پرتوها بعد از برخورد در زاویه مخالف منعکس میشوند ، به همین دلیله که ما انعکاس اجسام را در آینه میبینیم . ولی اگر سطح جسم صیقلی نباشد ، این پرتوها در جهات مختلف بازتاب میشوند و این باعث میشه که ما انعکاس صافی نداشته باشیم و آن را مات ببینیم.
در اجسام صیقلی و صاف مثل آینه و فلزات ، بخش اعظم نور اولیه منعکس میشود.
2. جذب نور توسط جسم
در حالت دوم انرژی نور بعد از برخورد با سطح جذب شده و معمولا تبدیل به انرژی گرمایی میشود که مسلما قابل رویت نیست ولی در مرحله رندر بی تاثیر نیست ، اثرش را در رندر میگذاره که جلوتر توضیح میدهم (چون بعدا متوجه میشید که مقداری از انرژی نور گرفته میشه ) ، برای همینه که اجسام تیره و سیاه گرمتر از اجسام صیقلی می شوند ، چون اجسام صیقلی بیشتر نور خورشید را منعکس میکنند ولی اجسام سیاه بیشتر نور را جذب میکنند.
3. Scattering
بعد از برخورد نور با سطح ، بخشی از آن وارد سطح جسم میشوند ، حالا در اجسام مختلف این نفوذ نور متفاوته ، مثلا در سنگ نور تنها میتونه در لایه اولیه نفوذ کنه ولی در موم شمع یا پوست آدم این نور میتونه در لایه های عمیقتر نفوذ کنه که در این حالت به آن Sub Surface Scattering یا SSS میگویند. جالبه بدونید که رنگ متریال یا Diffuse در اثر همین نفوذ نور ایجاد میشه ، مثلا اگر رنگ متریال قرمز باشه ، نور سفید وقتی به آن میخوره ، طیف های سبز و آبی جذب متریال میشن ولی مقداری از طیف قرمز بعد از پخش شدن از سطح جسم خارج شده و به چشم ما یا دوربین میرسد و همین باعث میشه ما اون جسم را قرمز ببینیم.
در اجسام خیلی شفاف مثل شیشه ، قسمت بیشتر نور اولیه در آنها وارد یا Scatter میشوند و به دلیل شفافیت آنها ، این پرتوها بدون تغییر زاویه قابل توجهی (منظور زاویه آنها نسبت به هم است) از طرف دیگر جسم عبور کرده و باعث میشه که ما طرف دیگر آن را از داخل شیشه ببینیم.
خوب این سه موضوعی که گفته شد رو فعلا در ذهن داشته باشیم تا برسیم به یک بحث دیگه .
قانون پایستگی انرژی (Energy Conservation)
بر اساس این قانون ، انرژی هرگز از بین نمیره و تنها از حالتی به حالت دیگری تبدیل میشه ، همچنین مجموع مقدار انرژی های تبدیل شده نمیتواند از مقدار انرژی اولیه کمتر یا بیشتر بشود.
بر اساس این قانون وقتی که نور به سطوح مختلف برخورد میکند و به سه دسته دیگر تبدیل میشه ، (یعنی مقداری نفوذ ، مقداری منعکس و مقداری هم به گرما) مجموع انرژی اون سه تا دسته نمیتونه از مقدار نور اولیه بیشتر بشه.
پس اگر مقدار انرژی اولیه 100 باشه و 10 تا به گرما و 70 تا منعکس بشه تنها 20 تا از آن میتونه به Diffuse تبدیل بشه ، خوب چه نتیجه ای میگیرید ؟
این یعنی اینکه هرچه انعکاس متریال بیشتر بشه یعنی اینکه رنگ Diffuse باید سیاهتر بشه !
برای همینه که معمولا برای ساخت آینه یا نقره رنگ Diffuse را مشکی میکنند و انعکاس را بیشتر میکنند .
(به تصویر شماره 2 رجوع کنید)
خواص فلزات در واقعیت
در دنیای واقعی فلزات با بقیه متریال ها مثل پلاستیک و شیشه کاملا متفاوت هستند ، اول اینکه فلزات معمولا بخش بیشتری از نور را منعکس میکنند ، مثلا بین 40 تا 70% ، همچنین انعکاس در فلزات معمولا رنگی است ، مثل طلا و مس ولی در متریال های غیر فلز عموما انعکاس بی رنگ است (سفید) ، برای همین در برخی از موتور های رندر متریال های ویژه ای برای فلزات میسازند.
خاصیت Fresnel
در دنیای واقعی انعکاس نور روی سطوح منحنی یکنواخت نیست ، بدین صورت که انعکاس در لبه های این سطوح بیشتر است تا وسط های سطوح ، کره ای را در نظر بگیرید که لبه های آن انعکاس بیشتری دارد تا مرکز آن ، به این حالت Fresnel میگویند که در حقیقت اسم کاشف این پدیده می باشد.
(به تصویر شماره 3 مراجعه کنید)
حالا این پدیده در همه متریال ها یکنواخت نیست ، مثلا در فلزات معمولا این اثر Fresnel کمتر است ، یعنی اینکه انعکاس لبه های مدل با مرکز آن اختلاف کمی دارد. یا مثلا این پدیده در اجسام پلاستیکی و لاستیکی بسیار بیشتر است.
در تصویر شماره 4 دو نمودار برای مقایسه این پدیده در فلزات و لاستیک را قرار دادم. (محور عمودی شدت انعکاس است و محور افقی فاصله بین مرکز مدل تا لبه های آن).
خاصیت Microsurface یا سطوح میکروسکوپی
در دنیای واقعی اجسام 100% صاف و هموار وجود ندارد و اگر آنها را زیر ذره بین ببینیم ، متوجه میشیم که در روی سطح آن شیار ها و فرو رفتگی های بسیار ریزی وجود دارد که با چشم غیر مسلح قابل رویت نیست. خوب این موضوع چه ربطی به بحث ما داره ؟
جوابش اینه که این شیار ها و یا برآمدگیهای بسیار ریز باعث میشه که پرتو های نوری بعد از برخورد با این سطح ، با زاویه های موازی بازتاب نشوند و هریک به جهت های مختلفی منعکس بشوند ، حالا اگر این ناهمواری ها و شیار های سطح خیلی زیاد باشه ، پرتو های نور با زاویه های خیلی بیشتری به جهات مختلف منعکس میشوند و این باعث میشه که انعکاس مات یا Blur بشه ، بالعکس هرچه این شیار ها و برآمدگیها کمتر باشد ، پرتو های نور بعد از انعکاس تقریبا به صورت موازی در یک جهت خاص بازتاب میشه و باعث میشه انعکاس خیلی شفاف و شارپ ایجاد بشه ، مثل آینه.
(به تصویر شماره 5 رجوع کنید)
در موتور های رندر به این مات کردن انعکاس معمولا Glossy , Smoothness یا Roughness میگویند.
جالبه بدونید که در واقعیت همه چیز انعکاس داره ، حتی خاک ، فقط به دلیل اینکه سطح این اجسام به شدت ناهمواره ، انعکاس اینقدر مات میشه که دیگه چیزی دیده نمیشه ، خودتون میتونید همین موضوع را در رندر تست بزنید ، یک متریال بسازید و انعکاس آن زیاد کنید ولی آن را خیلی خیلی مات کنید.
دوباره قانون پایستگی انرژی
دوباره میرسیم به قانون پایستگی انرژی ! ولی اینبار برای همین مات شدن انعکاس یا Roughness
بر اساس این قانون هرچه مقدار ماتی متریال بیشتر یا کمتر بشه ، نباید هیچگونه تاثیری روی شدت انعکاس نور بگذاره !
(به تصویر شماره 6 رجوع کنید)
و حالا نتیجه گیری نهایی !
خوب در بالا مهمترین خواص فیزیکی نور را در لحظه برخورد با اجسام معرفی کردم ، با دونستن این ویژگی ها الان دیگه باید خیلی راحت بتونید بگید که Physically Based Rendering یعنی چی و چه موتور رندر هایی PBR هستند.
پس هر موتور رندری که از این قوانین بالا تبعیت کنه یعنی فیزیکال بیسه ، حالا چه CPU Base باشه مثل Arnold و RenderMan و چه GPU Base باشه مثل IRay.
قدیما همه موتور های رندر اینگونه نبودند ، مثل Maya Software که هنوزم PBR نیست ، ولی الان بیشتر موتورهای رندر یا حداقل آنهایی که معروفند و من و شما باهاشون کار میکنیم PBR هستند.
امیدوارم از این مقاله نیز راضی باشد ، مسلما در اینترنت میتونید توضیحات کاملتری را پیدا کنید ، من فقط سعی کردم آنها را به زبان فارسی و روان براتون توضیح بدهم.
با تشکر
سجاد ربیعی
18 دیدگاه
احمد
درود
محمد قدیانی
سلام.
محمد قدیانی هستم.
متشکرم برای اطلاعات مفیدی که نوشتید.
من تصمیم دارم یک رندرر نرم افزاری بنویسم با c++ . برام جالب بود که اطلاعاتتون اینقدر عالیه. تبریک میگم. من خیلی ازین اطلاعاتو ندارم ولی تصمیم گرفتم رندرر بنویسم. فکر میکنم با این دانشی که دارید حتما میتونید همچین برنامه هایی بنویسید.
مرتضی گشتی
سلام جناب ربیعی
تشکر مفید بود.
سجاد ربیعی
از نظرات همه دوستان عزیز بسیار سپاسگذارم.
سیما
خیل خیلی سپاس .
رضا رفیعی
واقعا عالی بود. نکات مهمی رو گفتید که مدتها برام سوال بود. خسته نباشید
Salam
slm
آقا خیلی ممنن واقعا استفاده بردم
اگر ممکنه باز هم ز این سوپرازا رو بزاردید
محمد
سلام
ممنون از آقای ربیعی و آقا ایمان و همه دست اندرکاران این سایت خوب و مفید
خدا خیرتون بده
نیما
بسیار آموزنده و مفید بود با تشکر از شما
علی احدی
بسیار خوب و روان-ممنون
danial
دستتون درد نکنه 🙂
حسین تاجیک
لذت بردم.
بسیار مفید بود.
ممنون آقای ربیعی
سجاد ربیعی
با تشکر از تمامی دوستان
خوشحالم که این مقاله براتون مفید بود.
قاسم قاسمی
درود بر شما آقای ربیعی عزیز
مقاله بسیار ارزشمند و جذابی بود.
ممنون از شما
احمد
تشكر از شما مطلب مفيدي بود
reza
ممنون.خیلی خوب بود اقای ربیعی.
لطف کردید
مسعود
با تشکر از آقای ربیعی برای مطالب بسیار مفیدشون…
افشین
ممنون عالی بود آقای ربیعی