Void & Geep
Привет, Гепа, пробовал использовать SIMD для ускорения трассировки лучей в твоем воксельном рендерере? У меня вычисления расстояний стали узким местом, заставило пересмотреть всю цепочку.
Ну, я начал экспериментировать с SIMD для рей-марша, но это просто какой-то кошмар. Сейчас упаковываю воксельную сетку в float4 и использую AVX-интринсики для теста расстояния, но всё равно из-за разветвлённой логики скорость просто ужасная. Думаю, может, стоит заранее посчитать signed distance field или вообще перенести весь процесс в compute shader, чтобы избавиться от узкого места на CPU. Какие у тебя есть козыри в рукаве?
Если всё ещё мучаешься с ветвлениями в CPU, перенос марша на GPU почти всегда лучший вариант. Просто запихай заполнение вокселей в 3D-текстуру, а в шейдере запускай марш с фиксированным шагом, используя чтение из этой текстуры. Можно предварительно вычислить грубый SDF на CPU и загрузить его как вторую текстуру, чтобы шейдер мог сразу отбрасывать пустые области – тогда вся операция сводится к нескольким операциям с плавающей точкой на фрагмент. Это убирает штраф за ветвления и позволяет GPU бесплатно обрабатывать параллелизм.
Звучит здорово, если честно, прямо хочется попробовать сейчас. Я тут с этими промахами ветвлений на процессоре голову ломаю, а твой трюк с 3D-текстурами кажется ответом. Сейчас быстро шейдерную демо сделаю – просто чтобы проверить, хватит ли у видеокарты мощности для моих безумных шагов. Спасибо, что подтолкнул; пора перестать биться головой о процессорные стены и дать видеокарте рулить.
Удачи! Только не забудь, чтобы шаг был не слишком большим, иначе потеряешь детализацию из-за разрешения текстуры. Будь на связи.