Должен ли я использовать Intel Embree через API или через исходный код проекта?

Я думаю об использовании Intel Embree в моем рендере и в настоящее время играю с учебниками по Embree.

Итак, вопрос в том, возможно ли эффективно использовать Intel Embree через API?

Я имею в виду, я вижу, что функции от <embree2/rtcore.h>, <embree2/rtcore_ray.h>, e.t.c использовать некоторые внутренние структуры данных, такие как RTCRay,
И, очевидно, поскольку я не могу перегрузить никакие операторы, мне всегда приходится приводить свои структуры данных к структурам данных Embree и наоборот.
И это даже не просто приведение типов, это конструкция нового объекта.

Например, перед звонком rtcIntersect(RTCScene scene, RTCRay ray); Я строю RTCRay луч от моего Ray Класс объекта, а затем, когда функция возвращает некоторые данные, я копирую некоторые значения обратно.

Это не похоже на хороший способ использовать Intel Embree.

0

Решение

Создавая RTCRay, используйте rtcIntersect, затем скопируйте данные обратно. Накладные расходы незначительны (<0,5%) по сравнению с пересечением лучей и примитивным пересечением.

Я думаю, что рендер Corona использует RTCRay внутри, поэтому они экономят 0,5% накладных расходов.

Я знаю, что V-Ray точно создает RTCRay, использует rtcIntersect, а затем копирует данные обратно.

Общий совет: избегайте преждевременной оптимизации. Реализуйте рабочий код, а затем используйте профилировщик, чтобы направлять ваши оптимизации.

1

Другие решения

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

Вот мой EmbreeTest проект, который имеет один main.cpp файл, с которого вы начали. Просто используйте Установщик Embree и это все, что вам нужно.

Что касается эффективности, если вы начнете с этого проекта, вы сможете определить, есть ли какие-либо узкие места в производительности, поскольку он почти ничего не делает, кроме как вызывает Embree. Метод приведения луча просто копирует ray org и dir, которые я вычислил, в структуру RTCRay в стеке. Я не думаю, что это будет много накладных расходов. Реструктуризация для одновременного применения нескольких лучей будет иметь большее значение для производительности, чем копия.

1

По вопросам рекламы [email protected]