This page has been translated automatically.
Основы UNIGINE
1. Введение
2. Виртуальные миры и работа с ними
4. Материалы
5. Камеры и освещение
6. Реализация логики приложения
7. Создание кат-сцен и запись видео
8. Подготовка проекта к релизу
9. Физика
10. Основы оптимизации
11. ПРОЕКТ2: Шутер от первого лица
12. ПРОЕКТ3: Аркадная гонка по пересеченной местности от 3-го лица
13. ПРОЕКТ4: VR приложение с простым взаимодействием
Внимание! Эта версия документация УСТАРЕЛА, поскольку относится к более ранней версии SDK! Пожалуйста, переключитесь на самую актуальную документацию для последней версии SDK.
Внимание! Эта версия документации описывает устаревшую версию SDK, которая больше не поддерживается! Пожалуйста, обновитесь до последней версии SDK.

Геометрия сцены

In a virtual world, a three-dimensional object is typically represented as a collection of points with coordinates, edges connecting these points, and faces stretching across these edges. Let's go through all these components.Трехмерный объект в виртуальном мире обычно представляется в виде набора точек с координатами, ребер между точками и граней, натянутых на эти ребра. Давайте разберемся со всеми составляющими по порядку.

A point, also known as a vertex, is the foundation. Without points there will be nothing, neither a cube, nor even a line. Points, however, can exist on their own and have their own coordinates.Точка, она же вершина (vertex) – это основа, без точек не будет ничего, ни кубика, ни даже линии. Точки же вполне могут существовать сами по себе и характеризуются координатами.

An edge is a connection of two points, or a segment in three-dimensional space. It is defined by the points it connects and the line itself.Ребро (edge) — это соединение двух точек, или отрезок в трехмерном пространстве. Характеристиками ребра являются образующие его точки и, собственно, сама линия.


Percieving only points and edges is not an easy task, therefore, edges form a frame across which faces are stretched, which allow us to see the object painted in any color or using materials that determine its appearance.Разглядеть одни только точки и ребра — задача не из простых, поэтому ребра в свою очередь образуют каркас, на который натягиваются грани, которые и позволяют нам увидеть объект, окрашенный в какой-либо цвет или использующий материалы, определяющие его внешний вид.

So, a face is stretched across a closed contour of edges (i.e. its starting point coincides with the end point). The minimum number of face edges is three, if it's less, then we'll have an edge. An important notice here: a face with 3 edges cannot be bent — no matter which vertex we pull, all its edges will always lie in one plane. This is crucial for computer calculations, so a face stretched across a closed contour of 3 edges — a triangle — is an important element of geometry, along with a point and an edge. A triangle is characterized by the coordinates of its vertices, the edges, and the normal.Итак, грань натягивается на замкнутый контур из ребер (т.е. его начальная точка совпадает с конечной). Минимально возможное количество ребер у грани равно трем, меньше – уже получим ребро. Тут есть важный момент – грань из 3 ребер нельзя согнуть, за какую бы вершину мы не потянули – все ее ребра всегда будут лежать в одной плоскости. Это свойство критично для компьютерных расчетов, поэтому грань, натянутая на замкнутый контур из 3 ребер — треугольник, является важным элементом геометрии, наряду с точкой и ребром. Характеристики треугольника – это координаты вершин, ребра и нормаль.

The normal is a computer characteristic needed to calculate lighting. A triangle has two surfaces - an outer surface facing outward from the object and an inner surface facing inward. Light falls on the surface of the triangle from the outer side, and the normal vector is the vector going outwards from the triangle at the right angle to its surface. The inner sides of faces are often not drawn, and if you look at a face from inside the object, it won't be visible.Нормаль — это компьютерная характеристика, нужная для расчета освещения. У треугольника есть две поверхности – внешняя (обращенная наружу объекта) и внутренняя. Свет падает на поверхность треугольника с внешней стороны, a нормаль — это вектор, выходящий из треугольника под прямым углом к его поверхности на внешнюю сторону. Внутренние стороны граней зачастую не отрисовываются, и если смотреть на грань изнутри объекта, то она будет не видна.

All faces having more than three edges, and any surface in general, can be approximated with triangles to a sufficient degree of accuracy. The word sufficient in this case refers to the minimum number of triangles required to achieve an acceptable appearance of the surface, as adding more triangles can increase the load on the renderer (while reducing it is one of the crucial tasks). This process of dividing a surface into triangles is known as triangulation, while increasing the level of detail on an already triangulated surface is called tessellation. Graphics APIs such as Vulkan and DirectX, as well as graphics cards, exclusively operate with triangles.Все сложные грани, имеющие более трех ребер, да и любую поверхность в принципе можно разбить с достаточно хорошим приближением на треугольники. Слово “достаточно” в данном случае следует понимать как минимально возможное число треугольников обеспечивающее приемлемый внешний вид поверхности (поскольку, чем больше треугольников — тем больше нагрузка на рендер а ее всегда стараются уменьшить). Процесс стартового разбиения на треугольники называется триангуляцией, а увеличение детализации уже триангулированной поверхности — это тесселяция. Графические API (Vulkan, DirectX) и видеокарты оперируют именно треугольниками.

Of course, while creating a model, no one manually breaks all its faces into triangles — there are algorithms available specifically for this purpose. Thus you can create faces as polygons, which are sets of triangles lying in one plane and touching each other with edges.Разумеется, при создании модели никто не хочет разбивать все ее грани на треугольники руками, для этого есть специальные алгоритмы. Поэтому грани можно делать в виде полигонов. Полигон — набор треугольников, лежащих в одной плоскости и соприкасающихся друг с другом ребрами.

Closed frame of edgesЗамкнутая рамка из ребер
Frame triangulationТриангуляция рамки
Polygon in the frameПолигон на рамке

By connecting edges (polygons or triangles) lying in different planes, we get what is called an object.Состыковывая между собой лежащие в разных плоскостях грани (полигоны или треугольники), мы и получаем то, что называется “объектом”.

So, the fundamental geometric concepts in 3D are point, edge, triangle (the elementary ones), and polygon (the derivative one). And an object is just a container for geometric elements.Итак, основные геометрические понятия в 3D (от элементарного): точка, ребро, треугольник (и производная — полигон). А объект — это просто контейнер для геометрических элементов.

Mesh and Its Surfaces
Меш и его поверхности#

A mesh is a set of vertices, edges, and triangular faces (organized into polygons) that define the geometry of an object. Meshes include one or more groups of polygons, which are called surfaces.Меш (или сетка) – это набор вершин, ребер и треугольных граней (организованных в полигоны), в совокупности определяющих геометрию объекта. Меши включают в себя одну или несколько групп полигонов, которые называются поверхностями.

A surface is a subset of the object geometry (i.e. a mesh) that does not overlap other subsets. Each surface can be assigned its own material or property. In addition, surfaces within a mesh can be organized into a hierarchy, and each surface can be switched on or off independently of the others — this can also be used for switching between levels of detail (LOD), we'll discuss this later. Thus, a surface can represent:Поверхность (surface) — это подмножество геометрии объекта (т. е. меша), не перекрывающее другие подмножества. Для каждой поверхности можно назначить собственный материал или свойство. Кроме того, поверхности внутри меша можно организовать в иерархию, а также включать или выключать каждую независимо от других – это можно и использовать для переключения между уровнями детализации (LOD), подробнее о них мы поговорим позже. Таким образом, поверхность может представлять собой:

  • Part of the object to which an individual material is assigned (for example, a magnifying glass may have two surfaces — a metal ring with a handle and the glass itself).часть объекта, на которую назначается отдельный материал (например у лупы их может быть две – металлическое кольцо с ручкой и само стекло);
  • One of the levels of detail (LOD), including LODs for reflections and shadows. In this case, the surfaces represent the same object or its part in a more or less detailed form (high- and low-polygonal meshes). Each surface has a set of properties that allow defining the visibility distance (the farther away from the camera, the less detailed surface is requied to be rendered).один из уровней детализации (LOD), включая LOD-ы отражений и теней. В этом случае поверхности представляют один и тот же объект или его часть в более или менее детализированном виде (высоко- и низкополигональные сетки). В свойствах каждой поверхности можно определить расстояние видимости (чем дальше от камеры, тем менее детальную мы будем видеть).

This is why one mesh can have many surfaces. The quadcopter mesh in the picture below consists of four sufraces: moving part of the frame (arms and protection), body, small parts, and landing gear and propellers.Вот почему у меша может быть много поверхностей. Меш квадрокоптера на иллюстрации ниже состоит из четырех: подвижная часть рамы (лучи с защитой), фюзеляж, мелкие детали, а также ноги и пропеллеры.

The most commonly used object is Static Mesh — it can be moved, rotated and scaled, but the geometry itself cannot be changed: the positions of their vertices are unchanged.Наиболее часто используются статические меши (Static Mesh) их можно перемещать, вращать и масштабировать, но нельзя изменять саму геометрию: положения их вершин неизменны.

Object models are created in third-party graphics programs (such as 3ds Max, Maya, etc.) and can be imported through UnigineEditor — their geometry is converted into UNIGINE's own format (*.mesh). In UNIGINE, meshes have 32-bit precision, so we recommend placing meshes at the origin before exporting them from third-party graphics programs, and then placing the mesh in UnigineEditor.Модели объектов создаются в сторонних графических программах (таких как 3ds Max, Maya и т.д.) и могут быть импортированы через UnigineEditor с преобразованием их геометрии в собственный формат UNIGINE (*.mesh). В UNIGINE меши имеют 32-битную точность, поэтому настоятельно рекомендуется экспортировать меши из сторонних графических программ поместив их в начало координат, а затем размещать меш в UnigineEditor.

In 3D modeling, surfaces are rendered as individual elements that require their own DIP rendering call. To render a surface, a material must be assigned to determine its appearance, such as whether it will be matte or glossy and have a wood or brick texture. Textures are used to set the color and texture of the surface at each point and are overlaid onto the model's surface using a UV map or map stored within the model (we'll review materials and textures in more detail later). This map converts (X,Y,Z) space coordinates to UV space coordinates, with U and V coordinates taking values from 0 to 1. Modern video cards consider the UV transformation within a single triangle to be affine, requiring only U and V coordinates for each vertex. So, it is up to 3D modelers to decide how to connect the triangles to each other, and creating a successful unwrapping is an indicator of their skill level.Поверхность является неделимым элементом рендеринга – каждая поверхность требует свой вызов отрисовки DIP. Для визуализации поверхности необходимо назначить ей материал, который определяет внешний вид поверхности (будет ли она матовой или глянцевой, иметь фактуру дерева или кирпича и т.д.). Как мы упоминали, в материалах используются текстуры (в частности, для того, чтобы задать ту самую фактуру и цвет поверхности в каждой точке). Текстуры при этом как бы накладываются на поверхность модели, а для сопоставления точки объемной поверхности с плоским изображением текстуры используется UV-развертка или просто развертка и хранится она обычно в самой модели (подробнее о материалах и текстурах мы расскажем чуть позже). Итак, развертка преобразует координаты из пространства (X,Y,Z) в пространство (U,V), при этом координаты U и V принимают значения от 0 до 1. Современное видеокарты считают, что UV-преобразование в пределах одного треугольника является аффинным — поэтому достаточно задать U и V для каждой вершины каждого из треугольников модели. Как именно стыковать треугольники друг с другом, выбирает 3D-моделер, и умение строить удачную развёртку — один из показателей его класса.

There are several mapping quality parameters, which may be contradictory:Существует несколько противоречащих друг другу показателей качества развёртки:

  • Maximizing the use of texture space. Compact layout is necessary for efficient memory use and higher texture detail on the model. However, keep in mind that a certain allowance is required at the edges of the unwrapping to generate smaller textures.Максимально полное использование площади текстуры. Плотное расположение нужно для экономии памяти и возможности добиться наибольшей детализации текстуры на готовой модели. Однако, надо помнить, что по краям развёртки текстуре нужен определённый «припуск» на генерацию текстур меньшего размера.
  • Avoiding areas with excessive or insufficient detail.Отсутствие областей с избыточной или недостаточной детализацией текстуры.
  • Avoiding areas with excessive geometry distortions.Отсутствие областей с излишними геометрическими искажениями.
  • Maintaining the viewing angles from which an object is usually drawn or photographed to simplify the texture artist's work.Сходство со стандартными ракурсами, с которых обычно рисуется или фотографируется объект, упрощает работу художника по текстурам.
  • Effectively locating seams — the lines that correspond one edge but are positioned in different areas of the texture. Seams are desirable if a surface has a natural interruption (clothing seams, edges, joints, etc.) and should be avoided if there is none.Удачное расположение «швов» — линий, соответствующих одному ребру, но расположенных в разных местах текстуры. Швы желательны, если есть естественный «разрыв» поверхности (швы одежды, кромки, сочленения и т. д.), и нежелательны, если таковых нет.
  • For partially symmetrical objects: combining of symmetrical and asymmetrical parts of the layout. Symmetry increases texture detail and simplifies the artist's work; asymmetrical details juice up the object.Для частично симметричных объектов: удачное сочетание симметричных и асимметричных участков развёртки. Симметрия повышает детализацию текстуры и упрощает работу художника; асимметричные детали «оживляют» объект.

The unwrapping can be done either manually or automatically, and many tools (Maya, Blender, 3D Max, and others) offer an auto unwrapping feature. UNIGINE has this functionality too, and you can generate a UV unwrapping at the model import, which can be used for lighting maps or for drawing directly on the object.Развёртка может строиться как вручную, так и автоматически, многие инструменты сегодня (Maya, Blender, 3D Max и другие) предлагают функцию авторазвертки. В UNIGINE тоже есть такой функционал, и можно на этапе импорта модели сгенерировать UV-развертку для карт освещения или для рисования прямо на объекте.

Each surface in UNIGINE has 2 UV channels. You can specify in the material settings which UV channel to use. For example: the first UV channel can be used for tiling and detail textures, and the second for light maps.Каждая поверхность в UNIGINE имеет 2 UV-канала. В настройках материалов можно указать, какой из UV-каналов использовать. Например: первый UV-канал можно использовать для непрерывно повторяющихся текстур (tiling) и текстур детализации, а второй — для карты освещения (light map).

Последнее обновление: 16.08.2024
Build: ()