Недавно я начал разрабатывать движок вокселей. Мне нужны только цветные воксели без текстуры, но в очень большом количестве (намного меньше, чем в minecraft) - и вопрос в том, как рисовать сцену очень быстро? Я использую c # / xna, но, на мой взгляд, в данном случае это не очень важно, давайте поговорим об общих случаях. Посмотрите на эти две игры:
- http://www.youtube.com/watch?v=EKdRri5jSMs
- 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-положение намного быстрее
- использовать экземпляр, где применимо
- перекрытие? (как это сделать?)
- деление пространства / октодерево (это хорошая идея?)
Я буду очень благодарен, если кто-нибудь подскажет, как улучшить существующие оптимизации, перечисленные выше, или поделится идеями о новых улучшениях .Спасибо
задан komorra 12 October 2011 в 07:19
поделиться