26
Трехмерная графика не для игр Дурдин Денис, 2ГИС

CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Embed Size (px)

Citation preview

Page 1: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Трехмерная графика не для игр

Дурдин Денис,2ГИС

Page 2: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Обо мне

Являюсь руководителем группы разработки ПО, тимлидом команды «3D Карта», которая разрабатывает графические движки для всей линейки продуктов 2ГИС.

Участвовал в разработке:

Графических движков

Систем обработки видео

Биллинговых систем

Решений в области защиты информации

Работал в компаниях:

2ГИС

Fortess

Softomate

Page 3: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Графический движок для мобильного приложения 2ГИС

Page 4: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

2ГИС только для десктоп?

Page 5: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Требования и ограничения мобильных платформ:

Кроссплатформенный растеризатор

Отделение логики отображения от остального кода

Слабые CPU

Дефицит ОЗУ

Дефицит ПЗУ

Разные дисплеи и разрешения

Page 6: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Модуль «3D Карта»

3D Карта3D Карта

Carto API

Page 7: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Кроссплатформенные игровые движки

Page 8: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Что такое графический движок?

Page 9: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Геймдев: игровой движок

Схема движка id Tech 4 (Doom 3):

Page 10: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Часть 2. Устройство движка

Page 11: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Подсистема «движок рендеринга»

За основу взята шейдерная модель OpenGL 2.0 ES:

Page 12: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Подсистема «движок рендеринга»

Vertex ShaderPixel Shader

Софтварный рендеринг:

Очередь рендеринга

Page 13: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Арифметика на ARM-процессоре

tmMath

Page 14: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Сцена: пространственно организованный набор данных

Page 15: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Сцена: требования к организации данных

Эффективность отрисовки данных

Оперативная память

Дисковая память

Эффективность управления объектами

Подготовка сцены к рендерингу

Page 16: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Техника рендеринга полупрозрачных 3D объектов

Page 17: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

id Tech: BSP-деревья

Компиляция сцены Рендеринг

Page 18: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

id Tech: BSP-деревья

Проблемы:

1. Сшитие деревьев в real-time

2. Потребление памяти

3. Размер баз

Page 19: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Техника рендеринга полупрозрачных 3D объектов

Подход:

1. Все 3D объекты разбиваются на выпуклые полигоны на этапе подготовки данных

2. Определение перекрытий на экранной сетке

3. Сортировка в плоской проекции

Page 20: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Верхний уровень: система Условных Знаков

Гибкая система управления внешним видом объектов:

Задает геометрическое преобразование

Задает цвета, ширину линий, технику рендера.

Анимирует объект

Page 21: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Верхний уровень: масштаб карты

Обеспечивает большую информативность на больших экранах

Не перегружает карту деталями на маленьких экранах с высоким DPI.

Page 22: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Верхний уровень: масштаб карты

iPad

iPhone

Page 23: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Что еще предоставляет API движка?

Взаимодействия с пользователем

Гео-поиск

Управления динамическими объектами карты

Определение пересечений и расстояний между объектами

Конструктивная геометрия (CSG)

Page 24: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Как мы решали что должно быть и чего не должно быть в движке? Данные, которые нужны для выполнения

задачи.

Существующий код, который используется для реализации функциональности.

Ответственность команды за код.

Page 25: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Графический движок - это фреймворк

Page 26: CodeFest 2013. Дурдин Д. — Трехмерная графика не для игр

Вопросы?

Дурдин Денис,2ГИС

[email protected]