Код 3D движка TrickRig обеспечивает динамическое перестроение данных в графической памяти (OpenGL VAO), из которых рендерится сцена:

  • данные для рендера объектов, которые при перемещении камеры попадают в область видимости, в фоновом режиме подгружаются в VAO;
  • ячейки графической памяти с данными, которые вышли за границы области видимости, исключаются из рендера и становятся доступными для записи новых данных. Точнее, так как OpenGL позволяет выделить только фиксированный размер памяти под VAO, то новые данные просто пишутся поверх данных тех объектов, которые вышли за границу своего LOD. В результате получаем как-бы динамический VAO и рендер только тех объектов, которые находятся в своей области видимости (или в своем LOD).

Такая техника работы с VAO требует при перемещении камеры постоянного контроля и перестроения данных на границе области видимости. При этом вся информация, необходимая для пострения 3D объектов сцены на границе LOD, запрашивается и поступает из базы данных, что создает задержки рендеру. Если не принимать специальных мер, то каждый раз при перемещении границей LOD размера вокселя, рендер будет замирать на время получения данных из базы, то есть движение будет не гладким а рывками. Для того, чтобы обеспечить “гладкое” перемещение камеры необходимо разнести процедуру рендера и операции работы с данными в VAO по разным потокам. Для этого надо обеспечить минимально возможную связность модулей графического движка, которые выполняют перечисленные операции.