Докуметация Cтарт Статьи Форум Лента Вход
Не официальное русскоязычное сообщество
Главная
    Документация jMonkeyEngine
        jMonkeyEngine Уроки и Документация
            Терминология

Терминология

Опубликованно: 11.01.2016, 15:19
Последняя редакция, Andry: 10.07.2017 21:22

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

3D графика и аудио.

OpenGL является Открытой Графической Библиотекой, спецификация, определяющая платформонезависимый (независимый от языка программирования) программный интерфейс для написания приложений, использующих 2D/3D компьютерную графику. Для языка Java есть две реализации визуализации на основе OpenGL:

  1. Lightweight Java Game Library (LWJGL). – Облегченная библиотека для Java игр.
  2. Java OpenGL (JOGL).

OpenAL – это Открытая Аудио Библиотека, платформонезависимый API для работы с 3D аудио.

Контекст(Context),  Дисплей(Display), Средства визуализации(Renderer).

Jme Контекст(jME Context) подготавливает настройки, средства визуализации, таймер, входные и событийные слушатели, систему отображения, доступную в JME игре.

  • Система Отображения jME(jME Display System) — это привлекательное пользовательское окно JME (вместо Java Swing).
  • Система ввода(Input System) является компонентом, который позволяет реагировать на ввод пользователя: щелчок мыши и движение, нажатие клавиш на клавиатуре и джойстике.
  • Средства визуализации(Renderer) – это то, что выполняет всю работу по расчету того, как нарисовать 3D сцену на 2D экране.
    • Шейдер(Shader) (программа построения теней) представляет собой программируемую часть конвейера рендеринга(визуализации). Игровой движок jME3 использует его, чтобы предложить самые передовые настраиваемые материалы.

Геометрия

Полигон(Polygon), Сетка(Mesh), Вершина(Vertex)

dolphin-mesh

Большинство видимых объектов в 3D сцене состоят из полигонов, сетки – персонажи, ландшафты, здания и так далее . Сетка представляет собой сетчатую структуру сложной формы. Преимущество Сетки – в том, что становиться достаточно просто математически визуализировать объекты в реальном времени с достаточной степенью точности что бы они были узнаваемы.

Каждая фигура сводится к определенному количеству соединенных полигонов (многоугольников), обычно треугольников. Даже круглые поверхности, такие как сферы, сводятся к сетке треугольников. Угловые точки полигонов называются вершинами. Каждая вершина имеет координаты, все вершины вместе описывают контур фигуры. 

Вы можете создавать 3D сетки с помощью инструментов, называемых редакторами сеток, например, Blender. JmonkeyEngine может загружать готовые сетки (= модели) и размещать их в сценах, но он не может редактировать саму сетку.

Материалы: Цвет, Освещение/Затемнение

То что мы называет «цветом» является лишь частью отраженного света от объекта. Мозг зрителя использует свойства затенение и отражения, чтобы сделать вывод о форме и материале объекта. Это факторы которые определяют зрительное различие между мелом и молоком, кожей и бумагой, водой и пластиком, и так далее.

Цвет

Окружающий цвет(Ambient color)

  • Однородный базовый цвет сетки – тот, который делает объект видимым не зависимо ни от какого источника света.
  • Обычно похож на рассеянный (диффузный) цвет.
  • Это минимальный цвет, который нужен вам  для объекта, чтобы он был видимым.

Диффузный цвет(Diffuse color)

  • Базовый цвет сетки плюс разбавленный светом и тенями, которые вызваны источником света.
  • Обычно похож на Окружающий цвет(Ambient color).

Источники света(Light Sources)

Эмиссионный (излучающий) цвет(Emissive color)

  • Цвет света, излучаемого источником или светящимся материалом
  • Только светящиеся материалы, такие как светящиеся фары, имеют эмиссионный цвет, нормальные объекты не обладают этим свойством.
  • Часто белый (солнечный свет).

Отражения(Reflections)

Блеск(Shininess)

  • Степень блеска поверхности (1-128).
  • Блестящие объекты имеют небольшие, четко очерченные блики. (Например, стекло, вода, серебро)
  • Обычные объекты имеют широкие, размытые блики. (Например, металл, пластик, камень, полированные материалы)
  • Неравномерные объекты не блестят и не имеют бликов. (Например, ткань, бумага, дерево, снег)

Установите зеркальный цвет(Specular color) на ColorRGBA.Black(Черный), чтобы выключить блеск.

Зеркальный цвет(Specular Color)

  • Если материал блестящий, то зеркальный цвет(Specular Color) – это цвет отраженных бликов.
  • Обычно такой же у как источников света, эмиссионный цвет(emissive color) (например, белый).
  • Вы можете использовать цвета для достижения специальных зеркальных эффектов таких как металлические или радужные отражения.
  • Не блестящие объекты имеют черный зеркальный цвет. 

tanlglow2

Материалы: Текстуры

Текстуры являются частью Материалов. В простейшем случае, объект может иметь только одну текстуру – карту цветов(Color Map), загруженная из одного файла изображений. Если вы вспомните старые компьютерные игры, то там все выглядело довольно просто.

Чем больше информации которую вы (разработчик игры) предоставляете дополнительно к карте цветов (Color Map), тем выше степень детализации и реализма. Если вы хотите фотореалистичной визуализации, или мультяшной визуализации (Cel Shading), все будет зависеть от качества ваших материалов и текстур. Современная 3D графика использует несколько слоев информации для описания одного материала, каждый отображаемый слоя является текстурой.

У вас нет текстур? Скачайте бесплатно текстуры с opengameart.org. Только не забывайте прописывать авторские права вместе с используемыми текстурами!

Наложение текстур

Карта цветов / Диффузная карта (Color Map / Diffuse Map)

  • Простой файл изображения или процедурная текстура, которая описывает видимую поверхность объекта.
  • Изображение может иметь альфа-каналы для прозрачности.
  • Карта цветов(Color Map) это минимальная текстура. Вы можете отображать больше текстур в качестве дополнительных улучшений.
  • Карта цветов без теней. Так же используются Диффузные карты(Diffuse Map) в Фонг-освещенном материале, потому что эта текстура определяет основные цвета света, которые рассеиваются этим объектом.

tank_diffuse

Карта Рельефа (Bump Map)

Рельефные карты используются для создания эффекта рельефной поверхности фигур, который было бы слишком трудно или просто слишком неэффективно лепить в редакторе сетки. Есть два типа:

  • Вы можете использовать Карту Нормалей(Normal Map), чтобы моделировать мелкие детали, такие как трещины в стенах, ржавчина, текстура кожи или ткань (Узнать больше о Bump Map).
  • Вы можете использовать Карты Высоты(Height Map) для моделирования больших территорий с долинами и горами.

Карта высот (Height Map)

  • Карта высот представляет из себя черно-белое изображение в градациях серого, похожее на карты местности, которые используются в топографии. Более ярко-серый оттенки показывает более высокие районы и более темно-серый низкие районы.
  • Карта высот может предоставить 256 уровней высоты и в основном используется для грубой прорисовки местностей.
  • Вы можете нарисовать карту высот вручную в любом графическом редакторе.

mountains512

Карта нормалей(Normal Map)

  • Хорошо сделанная карта нормалей позволяет добиться большей детализации без необходимости добавления дорогостоящих полигонов к сетке. Она содержит информацию о затенении, которая делает объект более гладким и более мелкозернистым.
  • Когда вы открываете карту нормалей в графическом редакторе, она выглядит как ложно-цветная версия Карты Цветов. Карты нормалей, однако, никогда не используются для окрашивания, вместо этого, каждый цвет несет данные о смещении выступов и трещин на поверхности. Данные о смещении представлены Нормалями Поверхности(Surface Normals) склонов, отсюда и название.
  • Вы не сможете рисовать или редактировать карты нормалей вручную, профессиональные дизайнеры используют программное обеспечение для расчета 3d моделей высокого качества. Вы можете либо купить профессиональный набор текстур или найти бесплатные коллекции, которые включают в себя карты нормалей.

tank_normals

Зеркальные карты (Specular Map)

  • Зеркальная карта дополнительно улучшает реализм поверхности объекта: она содержит дополнительную информацию о блеске, обеспечивая больший реализм освещения.
  • Начните с копии диффузной карты в средне серой цветовой гамме, которая соответствует средней яркости/тусклости этого материала. Затем добавьте более светлые оттенки серого для более гладких, блестящих, более отражающих областей; И более темные оттенки серого для более тусклых, более грубых, изношенных областей. Полученный файл изображения похож на черно-белую версию диффузной карты.
  • Вы можете использовать цвета в зеркальной карте, чтобы создать определенные отражающие эффекты (поддельное иридизерование, металлический эффект).

tank_specular

Бесшовные плиточные текстуры

Плитки – это очень простой, часто используемый вид текстур. Когда вы текстурируете большую область (например, стены, полы), вы не создаете одну, огромную текстуру – вместо этого вы неоднократно накладываете маленькую текстуру для заполнения области.

Бесшовная текстура представляет собой графический файл, который был спроектирован или модифицирован таким образом, чтобы его можно было использовать в качестве плитки: где правая боковой край изображения соответствует левому краю, а верхний край совпадает с нижним. Зрителю нелегко сказать, где начинается одна и заканчивается другая плитка, создавая тем самым иллюзию одной огромной текстуры. Недостатком этой технологии является то, что если рассматривать такой объект с некоторого расстояния, то плиточность становиться очевидной. Также эту технологию невозможно использовать на сложных объектах, таких как персонажи.

BrickWall

Смотрите также это пособие о том, как сделать бесшовные текстуры в Photoshop.

UV-развертка (преобразование) / Текстурный Атлас(UV Maps / Texture Atlas)

Создать текстуру для куба легко – но, что насчет персонажа: его лица, конечностей? Для более сложных объектов, вам потребуется рисовать текстуру также, как и для плоских: Где один файл изображения содержит контур передней, задней и боковой части объекта рядом друг с другом. Конкретные области плоской текстуры  (UV-координаты) отображаются на определенным областям вашей 3D модели (XYZ-координатам) отсюда и название UV-карты. Используя UV-развертку (также известную как Текстурный Атлас), учитывайте, что одна модель может иметь различные текстуры на каждой из сторон. Вы можете создавать одну соответствующую UV-развертку для каждой текстуры.

Получение швов и отображение имеет решающее значение: вам придется использовать графический инструмент, как Блендер, для создания UV-развертки (Текстурного Атласа) и сохранить правильно координаты. Это стоит того, чтобы узнать это, модели с UV-отображением выглядят намного профессиональнее.

Car

Отображение окружающей среды

Отображение окружения или отображение отражений используется, чтобы создать впечатление о отражении и преломлении в режиме реального времени. Это быстрее (но менее точно), чем метод трассировки лучей, используемый в оффлайновых рендеринг-приложениях.

Вы создаете кубическое пространство(Cube Map) для отображения среды: возможно и сферическое(Sphere Map), но в таком случае часто происходят искажения. Обычно выставляется изображение, охватывающее 360 градусов фоновой сцены – очень похоже на скайбокс. Рендер (визуализатор) отображает эту среду на текстуре отражающей поверхности, что приводит к приемлемому эффекту «стекло/зеркало/вода». Также как и в скайбоксе, отражение является статическим, и динамические вещи (например, гуляющий игрок) не являются частью отражения.(!)

glass-teapot1

Смотрите также: Вода.

MIP текстурирование

MIP текстурирование означает, что вы предоставляете одну текстуру в двух или трех исполнениях в одном файле (MIP = “multum in parvo” = “много в малом”). В зависимости от того, как близко или далеко камера, движок автоматически выдает более или менее подробную текстуру объекта. Таким образом объекты выглядят прорисованными как вблизи, так и издалека. Такой подход хорош всем, однако требует больше времени на создание и больше места для хранения текстур. Если вы не предусмотрите эти детали, то jMonkeyEngine создаст базовые MIP текстуры автоматически, в качестве оптимизации.

Процедурные текстуры

Процедурные текстуры генерируются от повторяющегося маленького изображения, плюс некоторые псевдослучайные вариации градиента (так называемые шумы Перлина). Процедурные текстуры выглядят более естественней, чем статические прямоугольные текстуры, и их менее искажает на сферах. На больших моделях их повторяемость гораздо менее заметна, чем бесшовная плиточная текстура. Процедурные текстуры идеально подходят для неравномерных больших по площади текстур таких как: трава, почва, породы, ржавчина и стены. Используйте плагин jMonkeyEngine SDK Нео Texture для их создания.

neotexture-2

Смотрите также: Создание материалов в Блендере, Блендер: каждый материал, известный человеку.

Анимация

В 3D-играх, скелетная анимация используется для анимированных персонажей, но, в принципе, скелетный подход можно распространить на любую 3D модель (для примера, открывание какой-нибудь дверцы на шарнирах может быть представлено как примитивный сустав).

Если вы не произведете такую анимацию своих персонажей, их реализм будет сильно страдать, как правило: движения могут выглядеть неестественными, механическими или ломанными, персонаж кажется пустотелым или как-будто плывущим. Профессиональные дизайнеры игр прикладывают огромные усилия, чтобы оживить персонажи, сделать их движения натуральными, например, захват движений.

Подготовка (Rigging) и Покрытие (Skinning)

Анимированный персонаж имеет «арматуру»: внутренний скелет (кости) и внешнее покрытие (кожа или еще называется скин). Кожа(скин) является видимой частью персонажа и включает в себя еще и одежду. Кости не видны и используются для интерполяции (расчета) морфинга (изменений) кожи(скина).

JME3, игровой движок, загружает и воспроизводит только записанные анимации.Вы должны использовать инструмент (такой как Blender), чтобы настроить (одежду, кожу и анимирование) персонажа.

  1. Подготовка (Rigging): Построение скелета персонажа.
    • Создавайте как можно меньше костей, чтобы уменьшить сложность.
    • Кости связаны иерархически: перемещение одной может повлечь перемещение другой (например, предплечье тянет кисть).
    • Кости располагаются по определенной схеме наименования, так что 3D движки знают что к чему.
  2. Покрытие(Skinning): ассоциирование отдельных костей с соответствующими участками кожи(скина).
    • Каждая кость соединена с частью кожи. Анимация происходит так: кость (невидима) тянет кожу (видима) за собой. Для примера, бедренная кость соединяется с кожей ноги.
    • Определенная зона кожи может быть затронута более, чем одной костью (например, колено, локоть).
    • Соединение между костями и кожей осуществляется постепенно: вы назначаете вес, сколько кожных полигонов будет задействовано при движении какой-нибудь кости. Например: Когда бедренная кость движется, нога полностью затронута, тазобедренных суставов меньше, а головы вообще отсутствует.
    • jMonkeyEngine поддерживает аппаратные шкуры (на GPU, а не на CPU).
  3. Анимация по ключевым кадрам (keyframe): Ключевой кадр – это один из снимков последовательности движения.
    • Серия ключевых кадров составляет одну анимацию.
    • Каждая модель может иметь несколько анимаций. Каждая анимация имеет идентификационное имя (например, «прогулка», «нападение», «прыжок»).
    • Вы указываете в игре код, который будет подгружать ключевые кадры анимации.
В чем разница между анимацией (риггинг, скиннинг, ключевые кадры) и преобразованием (поворот, масштабирование, перемещение)?

  • Преобразование проще, чем анимация: Иногда, трансформируя геометрию можно добиться похожести на анимацию: например, вращающаяся мельницы, пульсация энергетического шара, движение стержней в машине. Преобразование легко осуществляются с помощью методов JME3.
  • Анимация более сложна и кодируется в специальном формате (keyframes). Она искажает поверхность объекта и осуществляет ряд сложных движений, которые могут быть записаны во внешних инструментах и проиграны (в JME3).

Кинематики

  • Суть прямой кинематики состоит в том, что воздействие передаётся по иерархической цепочке сверху вниз, то есть дочерние сегменты движутся относительно родительских. Сначала положение и/или ориентацию меняет родительский сегмент.
  • Инверсная кинематика использует принцип, диаметрально противоположный принципу прямой — перемещение компонентов-потомков приводит к изменению положения компонентов-предков, то есть алгоритм рассчитывает положение и ориентацию компонентов-предков, исходя из положения и ориентации компонентов-потомков.

Контроллер и Канал

В приложении JME3 вы регистрируете анимированные модели в Анимационном контроллере. Объект контроллера предоставляет доступ к доступным последовательностям анимации. Контроллер имеет несколько каналов, каждый канал может запускать одну анимационную последовательность за раз. Для запуска нескольких последовательностей вы создаете несколько каналов и запускаете их параллельно.

Искусственный интеллект (ИИ)

NPC (управляются компьютером)  игроки – это персонажи (NPC –НИП: неигровой персонаж) для забавы в игре, если они не тупо бьются о стену или бегут на линию огня. Вам нужно создать NPC, которые бы «знали» о своей среде и окружении и могли бы принимать решения, основанные на текущем состоянии игры – в противном случае игрок будет их просто игнорировать. В большинстве случаев стараются сделать так, чтобы враг своими действиями бросал бы вызов игроку, предлагая ему более интересный путь в игре.

«Умные» игровые элементы называются агентами искусственного интеллекта (ИИ агенты). ИИ агенты могут быть использованы для реализации вражеских NPC, а также обученных животных. Вы также можете использовать их, чтобы  создавать автоматические системы сигнализаций, блокирующие двери и «вызывающие охранников» после того как игрок инициирует уведомление о тревоге.

Область применения ИИ, среди прочего:

  • Знания — знание это данные, к которым ИИ имеют доступ и на основе которых основывают свои решения. Реалистичные агенты только «знают» что они «видели и слышали». Это подразумевает что информация может быть скрыта от ИИ. Вы можете иметь всезнающего ИИ или позволить лишь некоторым ИИ агентам обмениваться информацией, или позволить некоторым знать о текущем состоянии игры. Например: после того, как игрок разъединяет провод, только несколько охранников с двусторонней связью начинают двигаться в сторону позиции игрока, в то время как другие охранники даже не подозревают еще ничего.
  • Цель планирования – планировать то, какие ИИ агенты будут предпринимать меры. Каждый агент имеет свои приоритеты в достижении какой-либо цели, для достижения будущего состояния. При программировании вам нужно разделять цели агентов на несколько подцелей. Агент сверяет свои знания с текущим состоянием игры, выбирает из имеющихся тактик и стратегий, сортирую по приоритетности. Агент неоднократно тестирует пути достижения цели с текущим состоянием. Если получается неуспешно, то он отказывается от текущей тактики и выбирает другую. Пример: агент ищет наилучший путь на базу игрока в изменяющейся среде, избегая ловушек. Агент догоняет игрока с целью его ликвидировать. Агент скрывается от игрока, когда он VIP цель для устранения.
  • Решение проблемы – Решение проблем связано с тем, как агент реагирует на, препятствия, стоящие между ним и его целью. Агент использует предустановленные факты и правила, вычисляя в каком он состоянии – боль, агония, скука, попал в ловушку. В каждом состоянии только определенное подмножество реакций. Фактическая реакция также зависит от агента, так как реакция не должна блокировать цель!
    Например: если игрок приближается, что делать агенту: атаковать, прятаться, поднять тревогу? А будучи в режиме ожидания: лежать в ловушке, лечить себя или перезаряжаться? А если возникла опасность собственной жизни: бежать или стать камикадзе?

Более продвинутые ИИ могут самообучаться, для примера, используя нейронные сети

Есть множество ресурсов, объясняющие интересные алгоритмы ИИ:

А*(A-Star) поиск пути для начинающих

А*(A-Star) теория поиска пути

«Z-Путь» алгоритм (в обратном направлении поиска пути)

GOAP —целевое планирование действий

Neuroph — Java нейронные сети

Математика

Координаты

coordinate-system

Координаты представляют местоположение в системе координат. Координаты относительно начала координат (0,0,0). В 3D-пространстве вам нужно указать три координатных значения, чтобы найти точку: X (справа), Y (вверх), Z (по направлению к вам). Аналогично, -X (слева), -Y (вниз), -Z (от вас). В отличие от вектора (который выглядит аналогичным) координата — это местоположение, а не направление.

Начало координат(Origin)

Началом координат является центральной точкой в мире 3D, где встречаются три оси. Он всегда в координатах (0,0,0).

Пример:

Vector3f origin = new Vector3f( Vector3f.ZERO );

Векторы

Вектор имеет длину и направление, как стрела в 3D пространстве. Вектор начинается с некоторой координаты (x1,y1,z1) или из начала координат и заканчивается на целевой координате (x2,y2,z2). Обратное направление выражается отрицательными выражениями.

Например:

Vector3f v = new Vector3f( 17f , -4f , 0f ); //начинается в (0/0/0)
Vector3f v = new Vector3f( 8f , 0f , 33f ).add(new Vector3f( 0f , -2f , -2f )); // начинается в (8,-2,31)

Единичные вектора

Единичный вектор является базовым вектором длиной 1 мировая единицы. Поскольку его длина фиксирована, единственным интересным моментом в этом векторе является его направление.

  • Vector3f.UNIT_X = (1, 0, 0) = вправо
  • Vector3f.UNITY = (0, 1, 0) = вверх
  • Vector3f.UNIT_Z = (0, 0, 1) = вперед
  • Vector3f.UNIT_ XYZ = 1 uw по диагонали: вправо-вверх-вперед

Инвертируйте компоненты вектора, чтобы изменять его направление, например. Сделав отрицательным в право (1,0,0) получим в лево (-1,0,0).

Нормализованные векторы

Нормализованный вектор – это настраиваемый единичный вектор, это не то же самое, что вектор нормали(поверхностным). Когда вы нормализуете вектор, он по прежнему имеет направление, но теряется информация о первоначальном расположении.
Например: вы нормализовали векторы до расчета углов.

Вектор Нормали

Нормаль поверхности представляет собой вектор, который перпендикулярен (ортогонален) к плоскости. Он вычисляется путем векторное произведение.

300px-surface_normal

Векторное произведение

Векторное произведение — это вычисление, которое вы используете, чтобы найти перпендикулярный вектор (ортогональный, «прямой угол в 90°). В трехмерном пространстве говорить о ортогональности имеет смысл только в отношении плоскости. Для однозначного определения плоскости необходимы два вектора. Векторное произведение двух векторов, v1 × v2, представляет собой новый вектор, перпендикулярный этой плоскости. Вектор, перпендикулярный плоскости, называется нормалью поверхности.

Например: х – единичный вектор и у – единичный вектор вместе определяют х/у плоскость. Вектор, перпендикулярный к ним, проходит по оси Z. JME может просчитать, что это равенство верно:
( Vector3f.UNIT_X.cross( Vector3f.UNIT_Y ) ).equals( Vector3f.UNIT_Z ) == true

Преобразование(Transformation)

Преобразование называют вращение (поворот), масштабирование (изменение размера) или перевод (перемещение) объектов в 3D сценах. 3D движки предлагают простые методы для того чтобы вы могли писать код для преобразования узлов.

Например: Падение и вращение кирпичей в 3D тетрисе.

Slerp (сферическая линейная интерполяция)

Это интерполированное преобразование, которое используется в качестве простой «анимации» в 3D движках. Вы определяете начальную и конечную точку, и постоянную скорость перехода из одного состояния в другое. Вы можете проигрывать движение, приостановить его на различном значении (от 0,0 до 1,0) и проигрывать его назад и вперед. JavaDoc: slerp()

Например: Горение метеорита.
Узнайте больше о 3D математике здесь.

Жаргон разработчиков игр

Культурный словарь игровой студии.

Терминология 3D Вики книга

http://en.wikipedia.org/wiki/User:Jreynaga/Books/3D_Graphics_Terms

Вот тут вы еще можете почитать об основах 3D графики


Переведено для jmonkeyengine.ru, оригинал
Автор перевода: BuGaGa

Добавить комментарий

Содержание

jMonkeyEngine.ru © 2017. Все права сохранены.