مقدمه: ساختار این درس و رویکرد.

ساخت وبلاگ

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

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

ما در مورد ارائه حجم از طریق مجموعه ای از درس ها می آموزیم: در این درس ، پایه های ارائه دهنده حجم و Ray-Marhing را مطالعه خواهیم کرد. درس های بعدی به سایر روشهای ممکن برای ارائه حجم اختصاص داده می شود ، روشنایی جهانی که برای شرکت های متوسط ، پراکندگی چندگانه ، فرمت هایی که برای ذخیره داده های حجم مانند OpenVDB و غیره استفاده می شود ، اعمال می شود.

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

معرفی

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

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

به جای ارائه پیشینه مفصل در مورد حجم و معادلات مورد استفاده برای آنها ، بیایید مستقیماً به اجرای آن بپردازیم و درک رسمی تر از ارائه حجم را از آنجا بدست آوریم.

انتقال داخلی ، جذب ، تراکم ذرات و قانون آبجو

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

از آنجا که نور از طریق حجم در جهت چشم ما حرکت می کند (به این ترتیب تصاویر از اشیاء مورد نظر در چشم ما شکل می گیرند) ، برخی از آن با عبور از آن با حجم جذب می شوند. این پدیده جذب می شود. آنچه ما به آن علاقه مندیم (در حال حاضر) میزان نوری است که از طریق حجم از پس زمینه منتقل می شود. ما از انتقال داخلی صحبت می کنیم (میزان نور جذب می شود که از طریق آن حرکت می کند). انتقال داخلی را می توان به عنوان مقداری از 0 (حجم بلوک تمام نور) به 1 (خوب ، خلاء است بنابراین تمام نور منتقل می شود).

میزان نوری که از طریق آن حجم منتقل می شود توسط قانون آبجو-لامبرت (یا قانون آبجو کوتاه مدت) اداره می شود. در قانون آبجو-لامبرت ، مفهوم چگالی از نظر ضریب جذب بیان شده است (و ضریب پراکندگی اما ما بعداً در این فصل ضریب پراکندگی را معرفی خواهیم کرد). که می توانید درک کنید ، "هرچه حجم را متراکم تر کنید ، ضریب جذب بیشتر است". و همانطور که می توانید به طور شهودی حدس بزنید ، با افزایش ضریب جذب ، حجم مات تر می شود. معادله قانون آبجو-لامبرت به این شکل است:

قانون بیان می کند که بین انتقال داخلی ، $ t $ ، از طریق یک حجم و محصول ضریب جذب حجم ، $ sigma_a $ (نامه یونانی سیگما) و فاصله نور ، وابستگی نمایی وجود دارد. از طریق مواد (یعنی طول مسیر) حرکت می کند.

واحد این ضرایب فاصله متقابل یا طول معکوس مانند (cm^<1>) یا (m^<1>) (این مهم نیست ، فقط یک مقیاس است). این مهم است زیرا به شما کمک می کند تا از چه اطلاعاتی این ضرایب اطلاعاتی داشته باشد. اگر ترجیح می دهید یک واقعه تصادفی رخ دهد (به عنوان مثال فوتون جذب یا پراکنده می شود) در هر نقطه/فاصله معین ، می توانید ضریب جذب (و ضریب پراکندگی را که بعداً معرفی خواهیم کرد) را در نظر بگیرید.

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

این واقعیت که واحد ضرایب جذب و پراکندگی طول معکوس است ، مهم است زیرا اگر معکوس ضرایب را بگیرید (1 بیش از جذب ضریب پراکندگی) دریافت می کنید. فاصلهاین فاصله به نام میانگین مسیر آزاد نشان دهنده میانگین فاصله ای است که یک رویداد تصادفی در آن رخ می دهد: $ $ متن= <over>$ $ این مقدار نقش مهمی در شبیه سازی چندین پراکندگی در رسانه های شرکت کننده دارد. برای کسب اطلاعات بیشتر در مورد این مباحث بسیار جالب ، دروس موجود در پراکندگی زیرسطحی و ارائه حجم پیشرفته را بررسی کنید.

شکل 1: هرچه فاصله یا چگالی بیشتر باشد ، مقدار انتقال داخلی کمتر است.

هرچه ضریب جذب یا فاصله بیشتر باشد ، T. معادله قانون آبجو-لامبرت کوچکتر است. اگر فاصله یا ضریب جذب 0 باشد ، معادله باز می گردد. 1. برای تعداد بسیار زیادی از فاصله یا چگالی ، T به 0 نزدیکتر می شود. برای فاصله ثابت ، T با افزایش ضریب جذب کاهش می یابد. برای ضریب جذب ثابت ، T با افزایش فاصله کاهش می یابد. هرچه نور بیشتر در حجم حرکت کند ، بیشتر جذب می شود. هرچه ذرات در حجم بیشتر باشد ، نور بیشتری جذب می شود. ساده. این اثر را می توانید در شکل 1 مشاهده کنید.

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

ارائه یک حجم بیش از یک پس زمینه یکنواخت

شروع از اینجا آسان است. تصور کنید که ما یک دال حجم داریم که ضخامت و چگالی آن شناخته شده است. به ترتیب 10 و 0. 1 بگویید. سپس اگر رنگ پس زمینه (نور منعکس شده توسط یک دیوار به عنوان مثال که ما به آن نگاه می کنیم) (XR ، XG ، XB) باشد ، چه مقدار از آن رنگ پس زمینه را که از طریق حجم می بینیم ، است:

VEC3 Background_color؛float sigma_a = 0. 1 ؛// ضریب جذب فاصله شناور = 10 ؛float t = exp (-distance * sigma_a) ؛VEC3 background_color_through_volume = t * background_color ؛

نمی تواند ساده تر باشد.

پراکندگی

توجه داشته باشید که تاکنون فرض کرده ایم که حجم ما سیاه است. به عبارت دیگر ، ما فقط رنگ پس زمینه را در هر کجا که دال ما باشد تاریک می کنیم. اما حجم لازم نیست. حجم مانند اشیاء جامد نیز نور را منعکس می کند (یا به طور دقیق تر پراکنده می شود). به همین دلیل ، وقتی در یک روز آفتابی به ابر نگاه می کنید ، تقریباً می توانید شکل ابر را ببینید که گویی این یک شیء جامد است. جلد ها همچنین می توانند نور را منتشر کنند (به یک شعله شمع فکر کنید) که ما فقط به خاطر کامل بودن آن را ذکر می کنیم اما در این فصل از انتشار نادیده می گیریم. بنابراین فرض کنیم صفحات حجم ما دارای رنگ خاصی است (YR ، YG ، YB). ما در حال حاضر نادیده خواهیم گرفت که این رنگ از کجا آمده است. بعداً در فصل آن را توضیح خواهیم داد. بیایید فقط تا آن زمان بگوییم که حجم ما در نتیجه شیء حجمی "بازتاب" نور (نه در واقع ، اما بیایید با مفهوم "بازتاب" مانند اشیاء جامد در حال حاضر) برویم که آن را مانند اشیاء جامد روشن می کند. سپس کد ما می شود:

VEC3 Background_color؛float sigma_a = 0. 1 ؛فاصله شناور = 10 ؛float t = exp (-distance * sigma_a) ؛VEC3 volume_color ؛VEC3 background_color_through_volume = t * background_color + (1 - t) * volume_color ؛

به عنوان فرایند مخلوط کردن (A+B) در Say Photoshop با استفاده از ترکیب آلفا فکر کنید. بگویید می خواهید تصویر B را از طریق A اضافه کنید ، جایی که A تصویر پس زمینه (دیوار آبی ما) است و B تصویر دیسک قرمز با کانال شفافیت است. فرمول ترکیب این دو تصویر:

$ $ c = (1 - b. transparency) * a + b. transparency * b $ $

جایی که شفافیت در اینجا انتقال 1 - (که به آن کدورت نیز گفته می شود) است و B رنگ شیء حجم ما است (نوری که با حجم "منعکس می شود" و به سمت چشم/دوربین ما سفر می کند). ما وقتی به الگوریتم Ray-Marhing می رسیم به این امر باز خواهیم گشت. در حال حاضر ، این را در خاطر داشته باشید.

حوزه جلد اول ما

شکل 2: یک پرتوی دوربین که از یک شیء حجمی عبور می کند.

شکل 3: ما از نقاط تقاطع پرتوهای دوربین با شیء حجمی استفاده می کنیم تا کدورت جسم حجمی را در طول پرتوهای دوربین محاسبه کنیم.

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

از نظر فنی ، ما نیازی به محاسبه نقاطی نداریم که پرتو وارد آن شود و کره را ترک کند تا فاصله بین نقاط را بدست آورد. ما به سادگی باید TMIN را به TMAX تفریق کنیم (فاصله پارامتری اشعه در امتداد پرتوی دوربین که در آن پرتو از کره در آن عبور می کند. ما این کار را انجام می دهیم تا این واقعیت را تأکید کنیم که آنچه در اینجا به آن اهمیت می دهیم فاصله بین دو نقطه است.

کاملاً منطقی ، با افزایش چگالی ، انتقال به 0 نزدیکتر می شود و این بدان معنی است که رنگ کره حجمی بر روی پس زمینه حاکم است.

در تصاویر بالا می بینید که حجم نسبت به مرکز کره مات تر می شود (جایی که مسافت طی شده توسط پرتو از طریق کره بیشتر است. همچنین می توانید ببینید که با افزایش چگالی (با افزایش SIGMA_A) ،حوزه به طور کلی مات تر می شود. Eureka! شما فقط اولین کره حجمی خود را ارائه داده اید و در نیمه راه برای تبدیل شدن به یک متخصص ارائه دهنده حجم هستید.

بیایید نور اضافه کنیم! پراکنده

شکل 4: نوری که ما از طریق یک اشیاء حجمی از اشیاء پس زمینه (در اینجا رنگ آبی) و همچنین از منابع نور می بینیم. حتی اگر پرتوهای نوری که توسط منبع نور ساطع می شوند به چشم سفر نمی کنند ، مقداری از نور به دلیل اثر پراکندگی از طریق جسم حجمی به سمت چشم هدایت می شود.

تاکنون تصویر خوبی از یک کره حجمی داریم ، اما در مورد روشنایی چیست؟اگر چراغی را بر روی یک شیء حجمی بدرخشیم ، می توانیم ببینیم که قسمت هایی از حجم که مستقیماً در معرض نور قرار دارند ، روشن تر از آنهایی هستند که در سایه هستند. حجم نیز توسط چراغ ها روشن می شود. چگونه برای آن حساب می کنیم؟

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

float light_intensity = 10; // just a number, it could be anything float T = exp(-distance_travelled_by_light * volume>جذب_کوف.) ؛light_intension_attenuation = t * ligth_intens ؛

بنابراین اول چیز اول ، با توجه به قانون Beer ، انرژی نور کاهش می یابد. این کاملاً منطقی است. اما چیز دیگری نیز اتفاق می افتد: نوری که توسط یک منبع نوری منتشر می شود که در ابتدا به سمت چشم حرکت نمی کند ، می تواند به سمت چشم (حداقل بخشی از آن همانطور که خواهیم دید) هدایت شود. ما در این مورد خاص از پراکندگی صحبت می کنیم. پراکندگی به نور عبور از یک جلد اشاره دارد که به دلیل یک واقعه پراکنده به سمت چشم ها هدایت می شود. این اثر در شکل 4 نشان داده شده است. یک رویداد پراکندگی نتیجه تعامل بین فوتون و یک ذره/اتم است که متوسط/حجم را تشکیل می دهد. به جای جذب یا بازتاب (که می تواند اتفاق بیفتد) ، اتم فقط فوتون را در جهتی که با جهت ورودی آن متفاوت است ، "تف می کند". ما در فصل های بعدی اطلاعات بیشتری در مورد این پدیده خواهیم داشت.

اگر به شکل 4 نگاه می کنید ، توجه داشته باشید که نوری که به چشم می رسد (در امتداد پرتوی خاص چشم/دوربین که به رنگ آبی کشیده شده است) ، ترکیبی از نور است که از پس زمینه (پس زمینه آبی ما) و نور می آیداز منبع نور پراکنده به سمت چشم به دلیل پراکندگی (پرتوی زرد).

شکل 5: ما باید به دلیل پراکندگی در امتداد قطعه پرتوی که از شیء حجمی عبور می کند ، نوری را که به سمت چشم هدایت می شود ، ادغام کنیم.

بنابراین چگونه می توانیم سهم یک منبع نور را حساب کنیم؟ما باید نور را که به سمت چشم (همراه با پرتوهای دوربین) پراکنده شده است ، "اندازه گیری کنیم". مشکل این است که ما باید این اثر را در کل قسمت از پرتوهای دوربین که در حال تلاقی در کره هستند ، حساب کنیم (شکل 5). ما باید نور "ادغام" کنیم که در امتداد پرتوهای دوربین ، در محدوده T0-T1 پراکنده شده است.

برای حل این مشکل ، ما بخش پرتوی دوربین را که از طریق حجم عبور می کند به تعداد مشخصی از بخش ها (نمونه های ما در صورت تمایل) تقسیم خواهیم کرد و محاسبه می کنیم که چقدر نور به مرکز هر یک از این قسمت ها می رسد (نمونه)با استفاده از روش زیر (برای نمایش بصری مفهوم به شکل 6 مراجعه کنید):

  • ما یک پرتوی را از آن نقطه نمونه شلیک می کنیم (بیایید آن را x بنامیم) به سمت منبع نور برای محاسبه فاصله از نقطه نمونه تا مرز کره (بیایید این نقطه را بنامیم). توجه داشته باشید که X همیشه در داخل کره (حجم ما) است و P همیشه نقطه ای از سطح کره است.
  • سپس قانون آبجو را اعمال کنید تا بدانید که انرژی نور از زمان عبور از P (نقطه ای که این پرتوی سبک وارد کره می شود) به X (نقطه ای در امتداد پرتوی چشم که در آن این پرتوی نور به سمت بیننده پراکنده شده بود)بشر

شکل 6: راهپیمایی در امتداد پرتو در مراحل منظم برای برآورد انتگرال ما با استفاده از مبلغ Riema.

شکل 7: ما می توانیم منطقه زیر منحنی را که نشان دهنده میزان نور پراکنده در کنار دوربین با استفاده از مبلغ ریمان است ، تخمین بزنیم. ایده این است که منطقه را در زیر منحنی به جمع مستطیل های کوچک تقسیم کنیم. ارتفاع هر مستطیل توسط لی (x) داده می شود و عرض ، dx ، کاربر تعریف شده است.

برای درک نوع مشکلی که در اینجا حل می کنیم ، باید به شکل 6 و 7 نگاه کنیم. شکل 6 نشان می دهد که نور ورودی در امتداد پرتوی دوربین وارد می شود که همانطور که در قسمت پایین شکل مشاهده می کنید ، یک عملکرد مداوم استبشربیایید این عملکرد را LI (x) بنامیم که در اینجا x در اینجا هر نقطه ای در امتداد پرتوی دوربین موجود در محدوده T0-T1 است. آنچه ما باید محاسبه کنیم "منطقه" زیر منحنی است. در ریاضیات ، این یک جدایی ناپذیر است که می توانیم به عنوان:

همانطور که ما فقط گفتیم ، نتیجه یک انتگرال (که یک عدد است) به عنوان منطقه (خالص امضا شده) در زیر منحنی (عملکرد LI (x)) تعریف شده است ، همانطور که در شکل 6 نشان داده شده است. ما نمی توانیم این منطقه را با استفاده از یک راه حل تحلیلی محاسبه کنیم. اما ما می توانیم با شکستن آن به اشکال ساده تر ، از یک ترفند برای تقریب این منطقه استفاده کنیم: مستطیل ها را می شناسیم (همانطور که در شکل 7 نشان داده شده است). ما نمونه Li (x) را در امتداد منحنی در فواصل منظم که می دانیم عرض (dx) و مساحت مستطیل حاصل می تواند به صورت لی (x) ضرب شده توسط dx محاسبه شود (x در وسط فاصله است)بشربا جمع بندی مساحت همه مستطیل ها ، تقریب منطقه را در زیر منحنی دریافت می کنیم. et voila! این تکنیک به عنوان Riema Sum شناخته شده است (ایده تقریب یک شکل که منطقه ای که ما با مناطقی که می دانیم نمی دانیم به یونانی ها باز می گردد).

می توانید اطلاعات بیشتری در مورد انتگرال و نحوه محاسبه آنها در درس "ریاضیات سایه زنی" پیدا کنید.< Pan> همانطور که فقط گفتیم ، نتیجه یک انتگرال (که یک عدد است) به عنوان منطقه (خالص امضا شده) تحت منحنی (عملکرد LI (x)) تعریف شده است ، همانطور که در شکل 6 نشان داده شده است. مورد این است که ما نمی توانیم این منطقه را با استفاده از یک راه حل تحلیلی محاسبه کنیم. اما ما می توانیم با شکستن آن به اشکال ساده تر ، از یک ترفند برای تقریب این منطقه استفاده کنیم: مستطیل ها را می شناسیم (همانطور که در شکل 7 نشان داده شده است). ما نمونه Li (x) را در امتداد منحنی در فواصل منظم که می دانیم عرض (dx) و مساحت مستطیل حاصل می تواند به صورت لی (x) ضرب شده توسط dx محاسبه شود (x در وسط فاصله است)بشربا جمع بندی مساحت همه مستطیل ها ، تقریب منطقه را در زیر منحنی دریافت می کنیم. et voila! این تکنیک به عنوان Riema Sum شناخته شده است (ایده تقریب یک شکل که منطقه ای که ما با مناطقی که می دانیم نمی دانیم به یونانی ها باز می گردد).

ویدیو های آموزشی فارکس...
ما را در سایت ویدیو های آموزشی فارکس دنبال می کنید

برچسب : نویسنده : محبوب امانی بازدید : 39 تاريخ : پنجشنبه 1 تير 1402 ساعت: 0:24