В трассировке лучей где находится изображение-плоскость? - PullRequest
0 голосов
/ 18 октября 2018

Я запускаю базовый движок трассировки лучей в Java.

Я понимаю основы его работы, но я не уверен, где именно должна быть размещена плоскость изображения в мире.На всех диаграммах, которые я вижу, он просто показывает плоскость изображения где-то между камерой и сценой.

В настоящее время у меня камера (0, 0, -5), а плоскость моего изображения центрирована в (0, 0, -4).Я не знаю, где это должно быть размещено, что было бы "нормально" или "имеет смысл".

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Возможно, я ошибаюсь, но я не думаю, что вам здесь нужна какая-либо концепция плоскости изображения.Это всего лишь вопрос отображения положения пикселей на лучи.

Вы можете предположить, что у вас есть некоторая плоскость изображения, и вы делаете свою математику таким образом, но представьте, что вам нужен рендеринг "рыбий глаз" или 360 градусов - теперь вы можете 'Я не могу представить его в виде плоскости изображения, но все равно можно выполнить рендеринг.

Что вам нужно, так это способ преобразования положения пикселя (x, y) в луч (начало, направление), но так, как вы это делаете.это зависит от вас.Вы можете представить плоскость, разделить ее на пиксели и вычислить лучи, идущие от камеры к конкретному пикселю.Вы также можете предположить некоторую угловую дельту между одним пикселем и следующим, затем получить направление камеры и повернуть его для каждого пикселя.На самом деле второй подход должен быть лучше, потому что он позволяет избежать искажений, которые вы получаете при типичном 3D-рендеринге с большим Fov.С этим вторым подходом также возможно выполнять рендеринг с полями зрения, близкими или превышающими 180 градусов.

Это также одна из лучших вещей в трассировке лучей, у вас нет всех этих предположений о плоскостях отсечения, растеризациии весь конвейер GPU.Вы просто пишете код, который будет вычислять какое-то значение, в зависимости от того, как вы это делаете.

Если вы решите придерживаться image-plane, то вы, вероятно, знаете, что когда вы делаете эту плоскость в два раза большеи переместите его вдвое дальше, это должно дать вам тот же результат.Таким образом, ваша главная проблема здесь - это численные ошибкиТрудно дать какие-то конкретные цифры, так как они всегда «зависят», но я думаю, что расстояние в 1, независимо от используемых вами единиц, является хорошим началом.

0 голосов
/ 18 октября 2018

Плоскость изображения для трассировщика лучей может быть любым разумным расстоянием вдоль вектора вперед камеры.То, как далеко будет располагаться прямой вектор, будет зависеть от того, как вы взаимодействуете с единицами в трассировке лучей и создании контента.если 0,1 представляет 1м, 1см или 1мм.

Эффект, который это расстояние будет иметь для ваших лучей, будет изменение угла , при котором они пересекают плоскость виртуального изображения.

...