Silentor / InfluenceTerrainDemo

Some experiments with zone-based terrain generation
4 stars 2 forks source link

Invent data structure for fast request/traversal of combined Blockmap #96

Open Silentor opened 5 years ago

Silentor commented 5 years ago

1) Main block/heightmap requesting should be as fast as plain blockmap 2) Object block/heightmap requesting should be as fast as plain blockmap 3) Shared block (between main map and object map) should be marked and resolved specially. 4) Shared overlapped block should be requested as one topmost block 5) Shared nonoverlapped block - most difficult case. Need some way to store nonoverlapped block in blockmap

Silentor commented 5 years ago

So, the first approximation of Navigation map is created. Next, I need to tweak Navigation Cell coefficient to properly calculate cost and heuristic for A* on macro-level. Then I need calculate micro-level path segments between Cells. And probably I need enrich Navigation Map with navigation grid class to speed up micro-level path calculation.

Silentor commented 5 years ago

Для хорошего иерархического поиска пути сейчас не хватает хороших навигационных макро-метрик ячеек ландшафта. Я пробую собирать макростатистику по среднему арифметическому всех блоков ячейки. И если со средней скоростью движения все понятно (скорость перемещения через песчаную ячейку будет примерно равна средней скорости перемещения по песчаному блоку), то например для горных, сильно рельефных ячеек метрика не столь понятна. Каждый отдельный горный блок может быть почти горизонтальным или сильно не горизонтальным. Какую среднюю метрику использовать, Я пробую среднеквадратичное отклонение нормали блока, это даёт метрику Roughness. Околонулевое значение говорит о том, что блок почти не изломан, он гладкий (хотя и может иметь сильный общий наклон). Значение близкое к единице и более говорит о том, что ячейка состоит из хаотично направленных блоков, и, возможно, даже не получится найти путь через такую ячейку, или же путь будет длинным, со множеством поворотов, спусков и подъемов. Таких ячеек нужно избегать. Но вот как перевести Roughness метрику в адекватную стоимость перемещения для использования в A*-алгоритме, пока не придумал.