Много читал на эту тему, но много вещей по-прежнему остается загадкой.
Хотелось бы получить информацию о BSP именно в применении к raytrace-системам.
Модели в рендере только мешевые (треугольнички). В дереве секущие плоскости перпендикулярны осям.
1. Как строить? Что делать с фейсами, которые пересекаются делящей плоскостью? Оставлять в текущем узле, или засовывать детям. Причем на последующих этапах тоже не совсем просто определить будет ли такой фейс принадлежать детенку детенка ("внуку")
2. В каком порядке оптимальнее трассировать? Как оптимальнее производить трассировку луча, если точка его начала лежит в каком-то из узлов...
3. Хотелось бы разобраться с BSP для начала, но интересует также kd-tree. Это то же BSP, но у которой секущая плоскость необязательно делит сцену ровно на 2 половины — её положение и ось рассечения выбирается так, чтобы оба полупространства содержали равное количество полигонов и количество пересекаемых этой плоскостью полигонов было минимальным. Т.е. на самом деле строится некоторая оценочная функция, значение которой зависит от кол-ва пересекаемых фейсов и от степени дизбаланса подпространств, затем та точка, в которой функция принимает минимальное значение и есть оптимальная — т.е. через неё нужно провести плоскость.
Я долго искал, но так ничего конкретного не нашёл, кроме диссертации одного человека, который показал, что kd-деревья являются наиболее быстрым алгоритмом для определения пересечения луча и полигона, чем те же OCTree, BSP Tree и т.п.. Но там весьма абстрактные понятия об этой самой оценочной функции, к сожалению. И о способе построения даже BSP я тоже толком не понял.
... << RSDN@Home 1.1.3 stable >>