Це правильний спосіб реалізації закону про пиво?


11

Коли я впроваджую закон Пива (поглинання кольору на відстань через об'єкт), він чомусь не виглядає дуже добре.

Коли у мене є колір за об'єктом, я обчислюю відрегульований колір так:

const vec3 c_absorb = vec3(0.2,1.8,1.8);
vec3 absorb = exp(-c_absorb * (distanceInObject));
behindColor *= absorb;

Це дасть мені щось подібне (зверніть увагу на трохи заломлення): введіть тут опис зображення

І ось це без заломлення: введіть тут опис зображення

Зверніть увагу , що це реалізується як іграшка шейдерного тут .

Це відповідає опису того, що робить закон Пива, але він виглядає не дуже добре, не в порівнянні з такими знімками: введіть тут опис зображення

Оглядові моменти вбік, я намагаюся з'ясувати різницю. Чи може бути так, що моя геометрія занадто проста, щоб насправді це добре показати? Або я його неправильно реалізую?


2
Однак ви порівнюєте куб із більш складною сіткою. Чому б не повторити той самий сценарій? Модель Susan легко отримати.
Барт

У реалізації шейдертої це не так просто! (:
Алан Вулф

2
Ви куб мені здається правильним: станьте більш прозорими, коли він наближається до країв. Якщо ви можете зробити повністю роздуту Сьюзанну, сфера повинна, принаймні, краще наблизити вигляд на іншій картині.
юрікс

1
Я не можу відокремити заломлення від загасання. Чи можете ви надати куб за допомогою IOR = 1,0?
imallett

1
@AlanWolfe Ваш IOR = 1 візуалізація виглядає точно так, як я би очікував цього, і я обминув shadertoy impl і це виглядає добре.
imallett

Відповіді:


12

Ваше зображення, безумовно, не виглядає правильним, і, здається, ви неправильно обчислюєте внутрішній шлях променів світла, коли вони проходять через вашу сітку. З огляду на це я б сказав, що ви обчислюєте відстань між точкою, де оглядовий промінь вперше потрапляє в куб і де він вперше потрапляє на внутрішню стінку, і використовуєте це як відстань поглинання. Це по суті передбачає, що світло завжди буде виходити зі скла при першому попаданні в стіну, що є поганим припущенням.

Насправді, коли світло потрапляє у скло з повітря, воно часто не одразу виходить із скла. Це тому, що коли світло потрапляє на інтерфейс скло / повітря, може статися явище, відоме як повне внутрішнє відбиття (МДП). TIR виникає, коли світло рухається від середовища з більш високим показником заломлення (IOR) до одного із нижчим IOR, що саме відбувається у випадку попадання світла на внутрішню стінку скляного предмета. Цей образ із Вікіпедії є гарною наочною демонстрацією того, як він виглядає, коли виникає:

тотальне внутрішнє відображення

У принципі, це означає, що якщо світло потрапляє під неглибоким кутом, то світло повністю відбиватиметься від внутрішнього середовища середовища. Для цього потрібно оцінити рівняння Френелящоразу, коли ваш промінь світла потрапляє на інтерфейс скла / повітря (AKA внутрішня поверхня вашої сітки). Рівняння Френеля підкажуть вам відношення відбитого світла до кількості заломленого світла, тоді як у випадку TIR буде 1. Потім ви можете обчислити відповідні напрямки відбитого та заломленого світла та продовжувати простежувати шлях світла або через середовище, або поза ним. Якщо припустити просту опуклу сітку з рівномірним коефіцієнтом розсіювання, то відстань, яку слід використовувати за законом Бера, буде сумою всіх внутрішніх довжин шляху до виходу із середовища. Ось як виглядає куб із коефіцієнтами розсіювання та коефіцієнтом корисної дії 1,526 (скляна вапняна сода), виведений за допомогою мого власного трасера, який враховує як внутрішні, так і зовнішні відбиття та заломлення:

скляний куб, простежений стежкою

Зрештою, внутрішні відображення та заломлення є основною частиною того, що робить скло схожим на скло. Прості наближення насправді не перерізають це, як ви вже з’ясували. Це стає ще гірше, якщо ви додасте декілька сіток та / або не випуклі сітки, оскільки вам не тільки доведеться враховувати внутрішні відбиття, але й потрібно враховувати промені, що залишають середовище та вводять його в іншій точці.


1
Here is what a cube looks like (...) using my own path tracer. Чи трапляється у вас випадково відкритих джерел?
витирайте

2
Ні, ще ні. Я планував закінчити та випустити саме цей варіант разом із дописом у блозі про надання скляних матеріалів, але це вже було деякий час.
MJP
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.