Маршевые кубы и LoD

У меня есть и основанный на octree мир, построенный (с самого начала) через маршевые кубы с определенной функцией плотности, чтобы создать ландшафт (вариации на шумы). Рельеф более ровный, он не похож на мелкомасштабный ландшафт. Самый глубокий уровень LoD - 12, и на этом уровне (скажем,) игрок движется. У игрока есть возможность размещать блоки (точно так же, как в minecraft), и рыть отверстия (блочные) в местности. Блоки сохраняются как переопределения для функции плотности, так что алгоритм рендеринга выглядит, если есть переопределение для каждой точки определенного блока маршевого куба, а если есть, то он строит сплошной блок или отверстие там. Довольно просто.

Вопрос в том, какую технику LoD вы рекомендуете, когда я удаляюсь от определенного места, где я поместил свои блоки, чтобы максимально поддерживать детали на более низких уровнях LoD?

Я вижу два способа:

  1. Оказывать рельеф отдельно на каждом LoD и настраивать геометрию (блоки), как они есть. Это означает, что мой ландшафт будет содержать все блоки, которые я разместил на LoD 12, в то время как местность будет находиться в соответствующем LoD. Это приведет к утечке ресурсов, потому что все мои пользовательские блоки должны отображаться с максимальной детализацией, не зависящей от того, насколько я близка к ним, но с другой стороны мой дом, который я построил, будет выглядеть как дом на расстоянии.

  2. Просто переключайте вес при переключении на более низкий уровень LoD. Это будет быстро, но это изменит, как выглядят мои блоки (или я должен сказать, что это сильно изменит, как выглядит вся моя конструкция) - если я сделаю дом из блоков и уйду, мой дом не будет выглядеть как дом больше.

5 голосов | спросил kaytrance 3 TueEurope/Moscow2013-12-03T15:40:28+04:00Europe/Moscow12bEurope/MoscowTue, 03 Dec 2013 15:40:28 +0400 2013, 15:40:28

1 ответ


5

Из того, что я могу сказать, есть два основных требования к вашей местности, которые Marching Cubes (MC) просто не могут выполнить:

  1. Очерченный рендеринг
  2. Chunked LOD

Я бы рекомендовал алгоритм Dual Contouring (DC), который отлично справляется с обоими случаями, а в качестве бонуса можно оптимизировать куски с меньшим количеством функций, чтобы использовать меньше треугольников. Здесь есть часто цитируемая статья.

http://www.cs.rice.edu/~jwarren /papers/dualcontour.pdf

Основное различие между MC и DC заключается в том, что DC работает с данными Hermite . В контексте рендеринга местности существуют два разных набора данных, которые содержат данные Эрмита, обычно основанные на единой трехмерной сетке.

  1. Знаки (для одного материала) или индексы (для нескольких материалов) в каждом углу
  2. Поверхностные пересечения и нормали на каждом ребре, которые имеют знак или изменение индекса

В документе объясняется, как алгоритм работает с данными Эрмита и как его адаптировать для октеза вместо простой сетки. Некоторые другие источники, которые могут оказаться полезными, следующие:

http://upvoid.com/девблог /2013/05 /Внедорожный двигатель-часть-1-двойной контурный /

http://upvoid.com/devblog/2013/07/terrain-engine-part-2-volume-generation-and-the-csg-tree/

https://stackoverflow.com/questions/6485908/basic-dual-contouring-theory

ответил jmegaffin 4 WedEurope/Moscow2013-12-04T00:57:40+04:00Europe/Moscow12bEurope/MoscowWed, 04 Dec 2013 00:57:40 +0400 2013, 00:57:40

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132