Я визуализирую огромный 3D-объем с помощью WebGL, а алгоритм приведения лучей реализован в шейдере (glsl). Объем создается из стеков биоизображений. Что я хочу сделать, так это плавно увеличивать и уменьшать масштаб при рендеринге этого трехмерного объема. Но стеки изображений имеют высокое разрешение, чтобы получить производительность в реальном времени, мне нужно использовать Octree. Есть ли у вас какие-либо предложения, как я могу это реализовать?
Многомасштабный рендеринг огромного 3D-объема с использованием WebGL
Ответы (1)
Я не думаю, что вы получите Octree на графическом процессоре только с WebGL — он поддерживает только OpenGL ES 2.0, поэтому его может быть слишком мало для реализации приличного Octree.
Тем не менее, есть некоторые приемы, которые могут помочь в решении вашей проблемы. В общем, вы хотите ускорить рендеринг во время масштабирования/движения, но по возможности сохранить целевое качество. Вы можете реализовать качество «низкой четкости» и использовать его во время движения камеры. Проще всего было бы просто использовать больший шаг raycasting, вы также можете подготовить несколько версий ваших изображений с более низким разрешением.
Затем, когда вы видите, что пользователь начинает перемещать/масштабировать вид, вы можете включить рендеринг с низким разрешением, чтобы получить больше кадров в секунду. Во время этого движения пользователь не заметит большой потери качества на движущемся изображении, а когда он перестанет менять камеру, вы снова визуализируете сцену, но уже в своем целевом качестве.
Допустим, ваш обычный рендеринг занимает 1 секунду, а «низкое разрешение» — 0,1 секунды. При таком подходе вы можете получить интерактивное движение камеры со скоростью ~ 10 кадров в секунду, а когда вы перестанете двигаться, вы получите окончательное изображение сразу через 1 секунду.
Я знаю, что это не идеально, но может сослужить вам хорошую службу, я видел несколько больших приложений gfx, использующих этот трюк.
Немного другой, но похожий подход заключается в рендеринге одного из каждых X пикселей во время интерактивного движения. В некоторых приложениях для 3D-моделирования, когда вы меняете вид/перемещаете какой-либо объект и включаете предварительный просмотр с трассировкой лучей, вы можете заметить, что он отображает только часть всех пикселей, сохраняя интерактивность. Когда вы останавливаете движение, он отображает остальные пиксели.