Подскажите какие поверхности наиболее применимы при трассировке? А если конкретнее, то интересует есть ли способы задания кривых поверхностей, при которых решается (аналитически) задача нахождения точки пересечения луча и поверхности.
Стандартно раз в неделю такой вопрос поднимается.
Поищи в этом разделе форума.
Trin
Нет. Есть огромный пласт различных поверхностей, заданных формулой, для которых эту задачу аналитически невозможно решить...
Например, как у меня с блобами: http://www.gamedev.ru/code/forum/?id=126484
В этом случае тебе необходимо находить эту точку итеративно. Про это почитай тут: http://iquilezles.org/www/articles/terrainmarching/terrainmarching.htm
При фиксированном шаге поиска скорость тебя не порадует ^_^ Но есть простое решение которое значительно увеличивает скорость. Тебе надо брать шаг немного меньше или примерно равный наименьшему радиусу сферы, которая не пересекала бы поверхность или проходила через нее лишь по касательной. Про это читаешь тут: http://iquilezles.org/www/material/nvscene2008/nvscene2008.htm
Trin
Точку пересечения легко найти для сферы, цилиндра, тора, конуса
Madware
Я так понял суть метода состоит в том что бы последовательно перебирать точки на луче, проверяя лежат ли они на поверхности. Как тогда применить такой подход к поверхности Безье?
Может в случае Безье необходимо применять методы поиска минимума функции двух переменых, например симплекс метод? И искать минимум функции, которая считает растояние от луча до точки на поверхности.
Trin
> Может в случае Безье необходимо применять методы поиска минимума функции двух
> переменых, например симплекс метод? И искать минимум функции, которая считает
> растояние от луча до точки на поверхности.
аппроксимируй поверхность треугольниками и трассируй их
Направь поверхность безье в тесселятор, поучи вершиы, а по ним построй треугольники
innuendo
> аппроксимируй поверхность треугольниками и трассируй их
Можно нубский вопрос? Во всех примерах используются сферы, это вроде как быстро, почему бы тогда не рендерить только ее часть - выпуклый/вогнутый треугольник, а из них составлять сложные фигуры. это возможно?)
Trin
>Я так понял суть метода состоит в том что бы последовательно перебирать точки на луче, проверяя лежат ли они на поверхности
нет... там суть в другом у тебя есть некая поверхность... ты можешь представить ее f(x,y,z) = с. Для отрезка луча проверяется чтобы на одном конце функция дала результат меньше константы с а на другом больше. Дальше идет простой поиск(лучше разновидность бинарного) с каким-то числом итераций для уточнения результата. На выч. мате был метод который работал так как я тут описал только что, но я точно не помню как назывался он(может так и назывался, метод итераций).
Я сделал целых два варианта поиска, один обычный бинарный, другой с ньютоновской итерацией. При бинарном просто делится отрезок пополам, при ньютоновской на части t * (с-с1)/(c2-c1) и t * (1 - (с-с1)/(c2-c1))
Вообще, если понимаешь marching cubes, то можно сказать и этот метод ты тож понимаешь. Токо тут марчин рейс))))
rAmpArk
> Можно нубский вопрос? Во всех примерах используются сферы, это вроде как
> быстро, почему бы тогда не рендерить только ее часть - выпуклый/вогнутый
> треугольник, а из них составлять сложные фигуры. это возможно?)
почему только сферы ? а как по твоему трассируют ray на heightMap в физиксе ?
innuendo
> почему только сферы ?
я не сказал только сферы, вопрос был в том что пересечение со сферой это самый простой и быстрый вариант, и все начинают с этого; и что можно ли выводить не всю сферу, а только ее часть - выпуклый многоугольник.
rAmpArk
мне кажется это будет странная хрень. Лучше честно найти, или же, как уже говорили, аппроксимировать обычными трианглами.
Насчет можно ли: можно все
innuendo
> аппроксимируй поверхность треугольниками и трассируй их
В таком случае не будет нормального отражения/преломления. А если и будет то для этого нужно громадное количество треугольников.
rAmpArk
> Можно нубский вопрос? Во всех примерах используются сферы, это вроде как
> быстро, почему бы тогда не рендерить только ее часть - выпуклый/вогнутый
> треугольник, а из них составлять сложные фигуры. это возможно?)
И как из таких треугольников сложить беспрерывную и беспрерывно гладкую поверхность?
Madware
> не помню как назывался он
Назывался он "метод золотой середины". Есть еще пара подобных методов, но они используют производные 1-го и/или 2-го порядка. Но всеравно к Безье они не применимы. Безье это же f(u,v)=point.
Trin
Ну, тогда хз) в этом случае действительно легче треугольниками аппроксимировать наверное)
Тема в архиве.