2013-08-28 2 views
2

Многих определенных ресурсов о трассировке лучах говорит о:Raytracing с помощью диффузионного алгоритма

«стрелять лучи, найти первое препятствие, чтобы сократить его»

«стрелять вторичные лучи ...»

«или, сделать это обратным и приблизительным/интерполировать "

Я не видел никаких алгоритмов, которые используют алгоритм диффузии. Предположим, что точка-свет - это точка с большей плотностью, чем другие ячейки (все пространство разделено на ячейки), каждый шаг/итерация освещения/трассировки заставляет этот источник рассеиваться в соседи, используя поле скоростей, и чем их соседи и так продолжается. После некоторых удовлетворительных итераций (например, 30-40 итераций) информация о плотности каждой ячейки используется для просвечивания объектов в этой ячейке.

точечные и поле скоростей:

enter image description here

Но это должно быть как 1000x1000x1000 размера, и это заняло бы слишком много времени и памяти для вычисления. Возможно, просто вычислив 10x10x10 и обнаружив препятствие, разделение этой области на 100x100x100 (в динамическом режиме kd-tree) может помочь генерировать освещение/тени для приемлемого разрешения? Специально для освещения на основе вершины, а не треугольника.

Пробовал ли кто-нибудь такой подход?

Примечание: Поле скорости здесь предназначено для того, чтобы свет рассеивался наружу в основном (а не% 100, а% 99, чтобы иметь некоторое глобальное освещение). Метод конечных элементов может сделать это смущающе-параллельным.

Редактировать: любой объект, пораженный положительной плотностью, будет препятствием для создания нового поля скорости вокруг его поверхности. Таким образом, свет не может пройти через этот объект, но может быть отражен в другом направлении (если объектив объектива, чем свет, рассеивается с трудом через него). Таким образом, отражение света может влиять на другие объекты с более высоким итерированием.

Тот же kd -tree можно использовать в алгоритмах объектно-столкновений :)

Просто взять как соль соли: нейронную сеть можно обучить адвекции & диффузии в сетке 30x30x30 и которая может использоваться в «gpu (opencl/cuda) -> нейронная сеть ---> метод конечных элементов ---> тени ".

+0

кажется классной головоломкой; я в это, но я ничего не знаю об этом. – naomik

+0

Вы правы. Как насчет этого вопроса? Вид применим? –

+0

Он достигнет довольно узкой аудитории только из-за высокого уровня интеллекта, необходимого для этого предмета. Так что да, я бы сказал, применимо :) – naomik

ответ

1

Есть пара проблем с этим, поскольку он стоит.

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

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

Так, отбрасывая проблемные участки вашей идеи, то, что вы остаетесь с представляет собой систему частиц для фотонов: P

Теперь, чтобы быть справедливым, системы Судо-частиц в настоящее время используются для глобальных решений освещения , Этот тип вещей называется Photon Mapping, но использовать его можно просто: P

 Смежные вопросы

  • Нет связанных вопросов^_^