Я знайшов дивовижні великі світи Minecraft надзвичайно повільними для навігації, навіть із чотирьохядерним та м'яким графічною картою.
Я припускаю, що повільність Minecraft походить від:
- Java, як просторове розділення та управління пам'яттю, є швидшими в рідному C ++.
- Слабкий світовий поділ.
Я можу помилитися в обох припущеннях. Однак це змусило мене задуматися про найкращий спосіб управління великими воксельними світами. Оскільки це справжній 3D-світ, де блок може існувати в будь-якій частині світу, це в основному великий 3D-масив [x][y][z]
, де кожен блок у світі має тип (тобто BlockType.Empty = 0
,BlockType.Dirt = 1
і т.д.)
Я припускаю, що для того, щоб такий світ працював добре, вам потрібно:
- Використовуйте дерево певного сорту ( oct / kd / bsp ), щоб розділити всі кубики; здається, що oct / kd буде кращим варіантом, оскільки ви можете просто розділити на рівень куба, а не на рівень трикутника.
- Використовуйте деякий алгоритм, щоб визначити, які блоки в даний момент можна побачити, оскільки блоки, наближені до користувача, можуть затуманити блоки позаду, що робить їх безглуздим.
- Тримайте самі об’єкти блоку легкими, тому їх швидко додавати та видаляти з дерев.
Я думаю, що на це немає правильної відповіді, але мені було б цікаво побачити думку людей з цього приводу. Як би ви покращили продуктивність у великому світі, заснованому на вокселях?