В последние дни я создал программный raymarcher для губки Menger.На данный момент без использования SIMD и я тоже не использовал специальный алгоритм.Я просто прослеживаю от -1 до 1 в X и Y, которые являются U и V для конечной текстуры.Затем я получил положение камеры и пункт назначения, который я использую для вычисления вектора приращения для raymarch.
После этого я использую постоянное значение итераций для выполнения, в котором только одна ветвь решает, есть ли пересечение с фрактальным объемом.Так что, если мой глаз камеры - E, а вектор направления - D, мне нужно найти наименьшее t.Если я нашел это или достиг максимального расстояния, я разрываю петлю.В конце у меня есть t - из этого я вычисляю цвет фрагмента.
По моему мнению, должна быть возможность распараллелить эти операции с помощью SSE1 / 2, потому что можно решить ветвь, обнуляя поле ввектор (__m64 / __m128), поэтому дальнейшие операции SIMD здесь не применимы.Это действительно зависит от того, что вы raymarch / -cast, но если вы просто вычисляете цвет фрагмента из функции (как моя кривая фрактала здесь) и не обращаетесь к памяти нелинейно, есть некоторые приемы, чтобы сделать это возможным.
Конечно, этот ответ содержит предположения, но я буду держать вас в курсе, когда распараллелу эту процедуру.