Как лучше всего написать воксельный движок на C с учетом производительности

у основанный на GPU рендеринг трассировки лучей в реальном времени, используя вычислительный шейдер GLSL. Пока что это работает очень хорошо, но я столкнулся с, казалось бы, неразрешимой проблемой, когда речь идет о одновременном отражении и преломлении.

Моя логика подсказывает мне, что для отражения и преломления объекта, такого как стекло, луч должен быть разделен на два, один луч отражается от поверхности, а другой преломляется через поверхность. Конечные цвета этих лучей будут затем объединяться на основе некоторой функции и в конечном итоге использоваться в качестве цвета пикселя, из которого исходит луч. У меня проблема в том, что я не могу разделить лучи в шейдерном коде, так как для этого мне придется использовать рекурсию. Насколько я понимаю, функции в шейдере не могут быть рекурсивными, потому что все функции GLSL похожи на встроенные функции в C ++ из-за проблем совместимости со старым оборудованием GPU.

Можно ли имитировать или имитировать рекурсию в шейдерном коде, или я могу даже достичь отражения и преломления одновременно, не используя рекурсию вообще? Я не вижу, как это может произойти без рекурсии, но я могу ошибаться.

Ответы на вопрос(1)

Ваш ответ на вопрос