Pull to refresh

Comments 13

Это все хорошо, но для черной дыры не подходит)

Спасибо, там по делу, но увы, я никогда не видел рендеринг вращающийся черной дыры, что видит наблюдатель изнутри, там где кольцевая сингулярность

Кажется, вращающиеся ЧД тоже умеют рендерить.


  • Недавно залип здесь: https://jila.colorado.edu/~ajsh/insidebh/intro.html — разные рендеры с пояснениями. Правда, сам автор признаётся, что вращающиеся ЧД (Kerr) пока не запилены, но есть заряженные (Reissner-Nordström).
  • Гугл вполне выдаёт что-то дельное по "Kerr black hole render", например: http://www.madore.org/~david/math/kerr.html — занимательное месиво.

image


а зачем использовать трассировку "шагами", как на картинке, вместо того чтобы за один "шаг" найти точку пересечения линии с объектом? все равно на каждом шаге нужно перебирать все объекты.


и кстати исходник неполный, не хватает как минимум функции sceneSDF, где как раз и должен быть перебор объектов.

Вы правы, в коде содержалась ошибка, сейчас она исправлена.
Давайте представим, что объект на сцене один, тогда алгоритм будет работать, как, Вы описали, т.е. лучи, распространяющиеся в направление объекта за один шаг его пересекут.
Если объектов много, важно понимать, что sdf дает лишь расстояние до объекта, который описывает, и мы понимает, только какой из объектов ближайший, но не понимаем, в какой именно объект мы движемся, поэтому, чтобы гарантировать, что мы "не пропустим" объект, сделав слишком большой шаг, мы делаем минимально возможный, чтобы ни во что "не врезаться".

Мой вопрос как раз о том, зачем использовать sdf (и много шагов) вместо непосредственного поиска пересечения (один шаг). Много простых итераций получаются быстрее одной сложной? Какие границы применимости у этих способов?

Постановка задачи такая: дан некий луч, выходящий из некой точки (например из глаза) в некотором направлении, необходимо найти координаты пересечения с некоторым объектом. Если объект примитвный (шар, тругольник), то найти пересечение за один шаг действительно можно. Но если объект сложно составной (или constructive solid geometry), то простых решений (за один шаг) нет.

SDF - гибкий инструмент, который позволяет реализовывать в едином стиле большое количество примитивов. Не всегда много простых итераций лучше одной сложной, все зависит от конкретной сцены, из личного опыта скажу, что для сцены с объектами одного типа можно не использовать sdf, но когда сцена сложная с различной геометрией, то без SDF не обойтись. Одним из главных ограничений является, как мне кажется, тот факт, что поверхности, описываемые sdf должны обладать достаточной степенью гладкости, что сильно сужает количество различных примитивов. Так же существенным ограничением является проблема, называемая "alising", решений которой сильно просаживает fps и даже может нивелировать плюсы от ускорения за счет обратного распространения лучей.

Sign up to leave a comment.