Воксельный движок и оптимизация

Недавно я начал разрабатывать движок вокселей. Мне нужны только цветные воксели без текстуры, но в очень большом количестве (намного меньше, чем в minecraft) - и вопрос в том, как рисовать сцену очень быстро? Я использую c # / xna, но, на мой взгляд, в данном случае это не очень важно, давайте поговорим об общих случаях. Посмотрите на эти две игры:

  1. http://www.youtube.com/watch?v=EKdRri5jSMs
  2. http://www.youtube.com / watch? v = in0bavLJ8KQ

Особенно я думаю, что видео номер 2 представляет собой отличные методы оптимизации (моя карта gfx начинает задыхаться только при 192 x 192 x 64). Как они этого добиваются?

Что я хотел бы иметь в движке :

  • красочные воксели без текстуры, но с затенением
    • много-много вокселей, скажем, минимум 512 x 512 x 128 для получения чего-то вроде теней в видео № 2
    • (плавные тени будет отличным, но это не обязательно)
    • необязательно: динамическое освещение (например, от летящих огненных шаров, которые загораются рядом с воксельными структурами)
    • частота кадров минимум 40 кадров в секунду
    • камера имеет 3 способа свободы (перемещение по x -axis, перемещение по оси y, перемещение по оси z), вращение камеры не требуется
    • наконец, необязательной функцией может быть Depth of Field (это будет мило ^^)

Какую оптимизацию я уже знаю:

  • удалить невидимые воксели, которые находятся внутри структуры вокселей (покрытых с шести направлений другими вокселями)
    • удалить невидимые грани вокселей, потому что камера не вращается и всегда ло хорошо, наклонно вперед, как в играх TPP, поэтому, если мы разделим экран по вертикали, левые и правые воксели будут показывать только 3 лица
    • сохраните воксели в Словаре вместо 3-мерного массива - переход через массив размер 512 x 512 x 128 занимает миллисекунды, что неприемлемо, но словарь int: color, где int описывает упакованное 3D-положение намного быстрее
    • использовать экземпляр, где применимо
    • перекрытие? (как это сделать?)
    • деление пространства / октодерево (это хорошая идея?)

Я буду очень благодарен, если кто-нибудь подскажет, как улучшить существующие оптимизации, перечисленные выше, или поделится идеями о новых улучшениях .Спасибо

6
задан komorra 12 October 2011 в 07:19
поделиться