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

Источники света

World Light
World Light#

World Light is an infinitely remote light source casting orthographically projected beams onto the scene. The shadows cast by this light are parallel, which provides a realistic simulation of celestial bodies such as the Sun and Moon. World Light also takes part in simulation of atmospheric scattering.World Light – это бесконечно удаленный источник света, излучающий ортографически проецируемые лучи на сцену. Тени, отбрасываемые от этого источника, параллельны, что обеспечивает реалистичное моделирование света небесных тел, таких как Солнце и Луна. World Light также принимает участие в моделировании атмосферного рассеяния.

Omni Light
Omni Light#

Omni Light is a point source emitting light in all directions and realistically reproducing cast shadows. This type of light serves to simulate light sources with bright center and equal roll-off of intensity. Omni Light proves useful for general lighting purposes in indoor scenes because of its nondirectional qualities. In addition, Omni Light has many shapes and therefore can be used to create a variety of lights for indoor and outdoor lighting.Omni Light – точечный источник, излучающий свет во всех направлениях и реалистично воспроизводящий отбрасываемые тени. Этот тип служит для имитации источников света с ярким центром и равномерным снижением интенсивности в зависимости от расстояния. Omni Light может использоваться для общего освещения в помещениях из-за его ненаправленности. Кроме того, источник имеет множество форм и, следовательно, может использоваться для создания различных светильников для интерьерного или уличного освещения.

Projected Light
Projected Light#

Projected Light is a light source that casts light from a single point forming a focused beam aimed in a specific direction. This type of light is visualized in a form of a pyramid. Due to its form, it is versatile and can be conveniently used to simulate the numerous light emitting sources: for example, car headlights, flash light, or street lamps.Источник Projected Light излучает свет из одной точки, образуя сфокусированный луч, ориентированный в определенном направлении. Этот тип света визуализируется в виде пирамиды. Благодаря своей форме он универсален и может использоваться для имитации множества источников света (автомобильных фар, прожекторов или уличных фонарей).

Area Lights
Area Lights#

By default, Omni and Projected light sources are represented by a point emitting light. They both also have additional parameters that specify the light shape (sphere, capsule or box). Local light sources provide wider light spots and correct specular highlights on geometry. По умолчанию источники света света Omni и Projected представлены точкой, излучающей свет. Оба они также имеют дополнительные параметры, задающие форму светильника (сфера, капсула или параллелепипед). Локальные источники света обеспечивают более широкие световые пятна и корректные зеркальные блики на геометрии.

Emissive Objects
Эмиссионные объекты#

It is also possible to make almost any geometry emit light (e.g. to make neon signs or a glowing electric stove). This is done using Emission, and materials have a corresponding set of parameters that allow you to set the glow brightness and color. By default, the glow from such objects does not affect the environment. However, it is possible to bake lighting from an emissive object to GI (we'll review this in detail a bit later) or calculate it in real time with Screen-Space GI.Кроме того, можно заставить практически любую геометрию излучать свет (например, чтобы сделать неоновые вывески или раскаленную электроплитку). Делается это при помощи эмиссии (Emission), у материалов есть соответствующий набор настроек, позволяющий задавать яркость и цвет свечения. Однако, по умолчанию свечение от таких объектов не влияет на окружающую среду. Но можно запечь освещение от эмиссионного объекта в GI (об этом чуть позже) или вычислять его в реальном времени с помощью Screen-Space GI.

How Shadows Are Drawn and Why Too Many Sources May Cause Performance Drop
Как рисуются тени и почему много источников может ударить по производительности#

Now we know what types of light sources are available and we want to hang the Sun (World Light) outside the window, light the room with a lot of spotlights (Projected Light), and a lot of bulbs (Omni Light), or even a garland! But, it is said that a large number of light sources can be very hard on performance, and shadows are the culprit! To understand why regular shadows are so expensive, we need to understand how they are drawn.Ну вот, теперь мы знаем, какие есть источники света и хочется быстрее повесить за окном Солнце (World Light), по комнате расставить множество софитов (Projected Light), да еще и кучу лампочек развесить (Omni Light), or even a garland! а то и вообще гирлянду! Но, говорят, что большое количество источников света может очень сильно ударить по производительности, и виной тому – тени! Чтобы понять почему обычные тени стоят так дорого, надо разобраться как они рисуются.

Shadows in engines (and UNIGINE is no exception here) are drawn using the traditional Shadow Mapping method, which allows you to define lighted and darkened areas for each light source. This method is based on the use of Z-buffer (depth buffer). First, we draw the scene into the Z-buffer from the point of view of the light source to define the pixels visible from this point and the distances to them — thus a special buffer (shadow map) is created, which is a two-dimensional texture. Then, when the scene is drawn from the observer's point of view, the texture coordinates are compared with the shadow map: if this comparison says that the corresponding pixel is invisible from the point of view of the light source and therefore should be shaded, it is painted with a dark color.Тени в движках (и UNIGINE здесь не исключение) отрисовываются с использованием традиционного метода Shadow Mapping (построения карт теней), позволяющего определить для каждого источника света освещенные и затемненные области. Метод этот основан на использовании Z-буфера (буфера глубины). Сначала мы рисуем сцену в Z-буфер с точки зрения источника света, чтобы установить видимые из этой точки пикселы и расстояния до них — таким образом формируется специальный буфер (карта теней), представляющий собой двухмерную текстуру. После этого, когда сцена рисуется уже с точки зрения наблюдателя, текстурные координаты сравниваются с картой теней; если такое сравнение говорит, что соответствующий пиксел невидим с точки зрения источника света и, следовательно, должен быть затенен, он закрашивается темным цветом.

This is how it's done for a directional Projected source, but if we have an Omni point source (an ordinary light bulb, for example), then instead of one depth buffer we have to draw a whole cube map (6 depth buffers, one for each side of the cube surrounding the light source). Thus, one bulb requires drawing the scene again, albeit highly simplified, but 6 more times! And this all is for one frame! Now it becomes clear why a large number of light sources significantly increases the load on the GPU, so all sorts of tricks are used to minimize the number of sources for which shadows are actually calculated. Depending on the scene type, different approaches are used.Это для направленного источника типа Projected, а если у нас точечный источник типа Omni (обычная лампочка, например), то вместо одного буфера глубины мы должны отрисовать целую кубическую карту (6 буферов глубины по сторонам куба, окружающего источник света). Для одной лампочки – дополнительно отрисовать сцену (пусть и сильно упрощенно), but 6 more times! And this all is for one frame! Теперь становится понятно, почему при большом количестве источников света нагрузка на GPU значительно возрастает, поэтому на практике обычно идут на всевозможные ухищрения, чтобы максимально сократить число источников с реально просчитываемыми тенями. В зависимости от характера сцены используются различные подходы.

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