Архитектура современного 3 d движка: Разработка Xenus:...

Post on 15-Jun-2015

3.441 views 13 download

description

Лекция прочитана на конференции разработчиков компьютерных игр КРИ-2007

Transcript of Архитектура современного 3 d движка: Разработка Xenus:...

Архитектура современного 3D движка

Разработка Xenus: Точка кипения

Докладчики: Роман Лут, Сергей ЗабарянскийКомпания Deep Shadows

О чем лекция

• О чем лекция: какие системы должны присутствовать в современном трехмерном движке?

• Для кого лекция: для разработчиков игр:) для программистов, руководителей проектов. Лекция обзорная.

• Цель лекции: реклама движка Vital Engine ZL

Офис типичной игровой компании 80-х годов

Первый трехмерный «движок»

BattleZone, Atari, 1980

Современные игры

“The Precursors”, Deep Shadows, 2007

Современные игры - графика

Реалистичная картинка:

• фототекстуры;

• имитация различных материалов (шейдеры);

• сложное освещение;

• обилие деталей;

• построцессинг;

«White Gold», Deep Shadows, 2007

Современные игры - интерактивность

Реалистичная симуляция мира:

• интерактивность

• точные столкновения, сложная физика;

• искусственный интеллект;

• качественная анимация;

• качественный звук;

«The Precursors», Deep Shadows, 2007

Огромный объём работ

• команды >30 человек;

• много деталей - трудно все учесть и спланировать;

Результат:

• нарушение сроков;

• перерасход бюджета;

• низкое качество продукта.

Разработка игры

• разработка «движка»

• разработка игрового кода;

• разработка контента.

«White Gold», Deep Shadows

Разработка «движка»

«Движок» рендер

• столкновения (collizion engine);

• физика;

• искусственный интеллект;

• звук;

• редакторы и плагины !!!;

• детали (системы частиц, трава, погода, quest диалоги и т.д.)

• вспомогательные системы (виртуальная файловая система, UI (user interface), скрипты, менеджер фоновой загрузки, save/load и т.д.);

Разработка «движка» - Рендер

• рендеринг геометрии мира• рендеринг статических объектов (деревья)• рендеринг движущихся объектов• рендеринг эфектов: • частицы: • трава: • lens flare и т.д.:• постпроцесинг• рендеринг HUD

Рендеринг геометрии мира• тайловая карта• каждая клетка - уровень 600x600м• клетки могут повторяться• клетки можно вращать на 90,180,270*

Рендеринг геометрии мира• в памяти - только 12 уровней• при движении по миру, уровни подгружаются на фоне• на дальнем расстоянии отображаются «level impostors»• impostors создаются автоматически при помощи утилиты

Уровень, 650000 треугольников,50Мб текстур

Level Impostor, 3000 треугольников,одна текстура 512x256

Рендеринг геометрии мира

Рендеринг геометрии мира

Рендеринг статических объектов

• наполненность мира обеспечивается множеством объектов

• дизайнер расставляет модели в редакторе уровней

• модели хранятся в памяти в одном экземпляре, могут использоваться много раз (своего рода «упаковка»)

Рендеринг статических объектов

• система рендеринга статических объектов обязательно должна использовать LOD

• LOD уровни создаются автоматически при экспортемодели из 3DS MAX

• на заднем плане вместо объектов отображаются спрайты(billboard)

модели спрайты

Рендеринг статических объектов

• статические объекты могут переключаться в активноесостояние - проигрывать анимацию

• статические объекты можно разрушать

Ролик: lodmesh_anim.avi

Рендеринг движущихся объектов

• персонажи, машины, животные

• предметы, которые можно двигать (бочки, ящики и т.д.)

Рендеринг движущихся объектов

• используют скелетную анимацию

• используют LOD уровни геометрии и скелета

Рендеринг эффектов

• системы частиц (particles) реализованы в концепциидвижка как «процедурная модель»

• процедурная модель - специальный класс, который умеет “рендерить себя”

• можно легко создавать дополнительные процедурные модели - плагины к движку

• трасеры, flare, lens flare, тормозной путь на асфальте,туманности(космос), инверсионный след(космос)

Рендеринг эффектов

• трава - «объекты детализации» - объекты на поверхностиземли

• отображаются движком возле персонажа, согласнокарте, прорисованной дизайнером в редакторе уровней

• позволяют значительно повысить воспринимаемую насыщенность мира деталями

Ролик: grass.avi

Построцессинг

• постпроцессинг - набор фильтров, применяемых к финальной картинке

• легко добавлять новые типы фильтров - плагины к движку

• стек фильтров - порядок и параметры применения фильтров- описывается в текстовом файле

• реализованы HDR with automatic exposure control, blum,motion blur, depth of field, air distortion

• можно реализовывать эффекты для геймлея - черно-белоеизображение, сепия, cartoon, размытие фокуса, искажение цветов - управляется из игрового кода

Построцессинг

;============================================================; Bloom;============================================================;; - уменьшаем картинку в 4 раза. Получаем примерно 64x64, в зависимости от разрешения экрана.; Можно уменьшить еще, но возможно появление некрасивых блочных артефактов из-за bilinear ; filtering при обратном увеличении.; - пикселы темнее указанного порога делаем черными (оставляем только яркие пикселы); ; - накладываем blur - separate gaussian blur;; - увеличиваем назад до размеров экрана;; - добавляем разблюренную картинку к исходной и выводим на экран.

TEMP1 NONE NONE NONE temp2 scaledown4x4 0

TEMP2 NONE NONE NONE temp3 brightpass 0 0.1 1

TEMP3 NONE NONE NONE temp2 fakegaussianh 0 40TEMP2 NONE NONE NONE temp3 fakegaussianV 0 40

TEMP3 NONE NONE NONE temp2 scale 0 4 4

TEMP1 TEMP2 NONE NONE backbuffer combine 0 1.0 1.0 1.0 0.6 0.6 0.6

Описание стекапостроцесса

Рендеринг HUD

• библиотека UI: окна, кнопки, диалоги, картинки, списки, деревья

• можно добавлять свои элементы интерфейса, наследуяот TWidget - автоматически появляются в редакторе

• редактор UI

• принцип - редактор UI Delphi

• эскизы сохраняются в XML

Библиотека шейдеров

• DirectX 9.0

• Библиотека шейдеров - отдельный плагин в движку

• Новые шейдеры создаются программистом - наследование от TShader

• редактора a-la Maya Shading Graph нет

• Pixel shaders 1.0-3.0

• Поддержка Vertex shader textures

• Движок ориентирован на материалы, а не на шейдеры(a-la 3DS MAX), одному материалу соответствует 3-10 шейдеров DirectX

• Добавить новый тип материала - 0.5-4 дня

Библиотека шейдеров

Type: BUMPMAPMaterialId: 0World space width: 300.0World space height: 300.0SOLID: YesTRANSPARENT: NoGOURAUD: NoHIGHQUALITY: NoFILTERING: YesUTILING: YesVTILING: YesUWRAPPING: NoVWRAPPING: No

Texture1_Name: vehicles\SDN_boat_part2_dmap.tgaTexture1_BUMP: vehicles\SDN_boat_part2_nmap.tga

SPECULARSTRENGTH_R: 1.0SPECULARSTRENGTH_G: 1.0SPECULARSTRENGTH_B: 1.0BUMPINESS: 1.0

SPECULARPOWER: 120HDRGlow: 0.3AMBIENT: 0.4

Описание материала

Библиотека шейдеров

AlphaGlowAlphakeyAlphamaskAlphastencilAtmosphereBumpmapClothColorDecalBumpmapDistortionEnvBumpmapEnvmapGlowBumpmapGlowColorHightiledHologramLandswellLava

LayeredLeafsMapGroupInfoMiniMapMorphMultidetailOceanParalaxBumpmapPSunSimpleSkinSunflowerTerrainTransparentTransparent_EnvmapTransparentNoiseWater

Библиотека шейдеров

Ролик: shader.avi

Освещение

• геометрия уровней - precalculated lightmaps

• статические объекты - precalculated вершинное освещение

• движущиеся объекты - precalculated упакованная регулярная сетка, освещение в каждой точке апроксимируется - направленный источник+амбиент

• есть динамические источники света(фонарик, фары машин)

Освещение

• освещение рассчитывается с помощью редактора уровней:ambient occlusion + освещение от Солнца + освещение от источников света

• расчет освещения - полностью автоматический(от дизайнера ничего не требуется)

• редактор рассчитывает два освещения: дневное и ночное

• комбинируя два освещения, можно реализовыватьсмену дня и ночи, смену погоды

• расчет освещения на один уровень - 4-20 часов

Collision

• столкновения обрабатываются с геометрией уровня,отдельный меш рисовать не нужно

• для статических объектов (деревья) рисуется hitmesh - меш для столкновений, 300-500 треугольников

• любой меш, единственное ограничение - игрок не долженкасаться open edges

• оптимизировано для streaming

• оптимизировано по памяти (до 1Мб на уровень 600x600м)

Физика

• боксы, цилиндры, капсулы, сферы

• физическая система строится в 3DS Max, (свой плагин - физические объекты, joint’s и пружины) экспортируется вместе с моделью в формат движка • все физические параметры задаются в редакторе ресурсов

Физика

• готовые классы: • машина • танк • ветолет • самолет

• единая физическая система - машина, танк, качели, ragdol

AI

• структуры для поиска пути стоятся автоматически в редакторе уровней

• библиотека AI позволяет быстро обрабатывать запросы: • путь о точки к точке (с учетом дверей) • видимость из точки в точку

• позволяет реализовывать сложное поведение (взаимодействие персонажей в бою, укрытие, окружение)

• удобные базовые классы, реализуют 90% необходимой функциональности

Сеть

• сетевая архитектура - в основе движка

• single player - игра на локальном сервере

Звук

• static и streaming звуки

• неограниченное количество

• 2D и 3D источники, ambient

• загрузка и распаковка звуков на фоне, форматы - WAV, OGG

Редакторы - редактор уровней

• позволяет создавать «с нуля» и редактировать геометриюуровней

• CSG не используется, уровень = mesh

• тесное взаимодействие с 3DS MAX

• отображает финальную картинку, включая построцесс

Редакторы - редактор уровней

• шейдер TERRAIN позволяет прорисовывать слои с помощьюкисточки (до 32 слоев)

Редакторы - редактор уровней

• карта объектов детализации прорисовывается с помощьюкисточки

Редакторы - редактор уровней

• служит для расстановки статических и движущихся объектов на уровнях

• программист AI написал новый юнит - автоматическипоявляется в списке классов объектов в редакторе

• поддерживает коллективную работу над уровнем:объекты могут расставлять несколько человек одновременно.Объекты аплоадятся/забираются с сервера и хранятся на нем

• дизайнер уровня еще расставляет деревья, а гейм-дизайнеруже расставляет персонажей и прописывает квесты

Редакторы - редактор карты мира

• для расстановки клеток

• поддерживается коллективная работа, типы клеток и сами карты хранятсяна сервере

Редакторы - плагин экспорта

моделей из 3DS MAX

• модели создаются полностью в 3DS MAX;

• своего редактора моделей нет;

• плагин автоматически создает LOD уровни геометрии и скелета при экспорте;

Редакторы - просмотрщик моделей

• позволяет увидеть финальный результат, запускаетсяавтоматически после экспорта

• позволяет проверить анимацию, разделение на части,правильно ли работают контроллеры

Скелетная анимация

• блендинг 2 или 4 анимаций

• скелет разделен на части - каждая часть проигрывает своюанимацию

• можно программно скрывать треугольники, привязанные к указанной группе костей

• можно программно вращать группы костей (bone controller)

• можно программно управлять положением и ориентациейгруппы костей (bone controller)

• используется сжатие анимации (персонаж - 4000 кадров,60 костей)

• используется LOD скелета

Скелетная анимация

• можно «вешать» одну модель на кость («порт») другой - пистолет в руке, партикл выстрела на дуле пистолета

• лицевая анимация - 12 костей на лице

Скелетная анимация

• для того, чтобы ноги не проскальзывали - используются«кривые движения»

• строятся автоматически при экспорте

Ролик: movecurves.avi

Редакторы - редактор системы частиц• организован как плагин к игре

• сложные системы частиц: частица рождает новый источникчастиц в момент смерти/через промежутки времени/черезуказанное расстояние

• ветер, гравитация

Редакторы - редактор ресурсов

• ресурсы: • строки • диалоги • описание quest-предметов • параметры модели для конкретного unit (кадры анимации, названия портов)

• поддерживается несколько языков, можно локализировать поэтапно

• поддерживается коллективная работа: • каждый ресурс имеет владельца • владелец выкладывает свои ресурсы на сервер, забирает чужие с сервера • сценарист пишет диалоги, геймдиз прописывает анимацию модели - одновременно

Редакторы - редактор UI

• a-la Delphi form designer

• программист написал новый элемент интерфейса - автоматически появляется в редакторе

Редакторы - коллективная работа

• Важно: все редакторы рассчитаны на коллективную работу -ресурсы хранятся в базе данных

• это позволяет распараллелить работу над контентом

Что еще?

• виртуальная файловая система(групповые файлы)

• cut-scenes на движке

• проигрывание AVI роликов

• процедурные текстуры(рисуются программно)

• смена дня и ночи, погоды

• система save/load

• decals (следы от пуль, взрывов)

• skin (замена текстур на моделях)

• ...

Программная архитектура

• к серьёзному приложению - серьёзный подход

• объектно-ориентированная архитектура

• шаблоны проектирования

• «программирование с использованием абстрактных интерфейсов»

• движок разделен на модули (DLL) - облегчаетколлективную работу

• расширение движка и кустомизация к конкретной игре -плагины

• EXE игры должен вызвать VE_LaunchEngine(); все остальное - плагинами

(см. «Плагины на основе COM интерфейсов» http://www.dtf.ru/articles/read.php?id=44995)

Универсальный движок

• большой мир - Action/RPG

• карта из одной клетки - indoor First person/Third person shooter

• камера сверху - стратегия

• нет геометрии уровня - Space sim

Ролик precursors.avi

Выводы

• огромный объем работ

• предоставьте создание движка профессионалам :) делайте интересные игры!

• Vital Engine 3.0 рулит!

По вопросам лицензирования:

contact@deep-shadows.com

Дополнительные материалы

• сайт компании Deep Shadows - www.deep-shadows.com