/ / Відхилити відбиття на відсотки - c #, проміння

Відхиляти відображення у відсотках - c #, raytracing

Я працюю над променевою стрілкою з дифузними віддзеркаленнями (скажімо, 64 або 128 проб на одне відображення).

Наприклад, матеріал може бути 75% віддзеркалювальним, що означає, що відбиті промені повинні відхилятися від «ідеального» відбиття на 25%.

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

right = cross(intersectionNormal, ray)
up = cross(right, ray)
ray" = (ray * w) + (up * u) + (right * v)

Я не можу здатися, що я отримаю математику правильно. Я "спробував генерувати множники для кожного компонента на основі сферичних координат (випадковий нахил під випадковим кутом навколо ідеального відображення), але моя математика не працює належним чином. Результати ніколи не виглядають як напівдифузне відображення. Вони виглядають неправильно. Я використовую Random.NextDouble (), щоб отримати випадкові сферичні координати в межах відбивної здатності матеріалу.

З огляду на коефіцієнт відбиття між 1,0 (досконалий) та 0,0 (дифузний), нормальним перетином та ідеальним променем відбиття, як би я відхилив це на відсоток відбиття?

Відповіді:

0 для відповіді № 1

З того, що ви намагаєтесь досягти, мені здається, що "правильність" і "вгору" не повинні залежати від напрямку вхідного променя, а просто формувати ортонормальну основу з нормальною. Тож ви вибрали б up = cross(right, intersectionNormal).

Але замість того, щоб ви володієте вами, я пропонуюпросто перейдіть з однією зі стандартних моделей відображення, як-от Блінн / Фонг, де показник робить майже все, що ви хочете, щоб ваш параметр відбивної здатності.