Видеоуроки
Interface
Essentials
Advanced
Полезные советы
Принципы работы
Свойства (properties)
Компонентная Система
Рендер
Физика
Редактор UnigineEditor
Обзор интерфейса
Работа с ассетами
Настройки и предпочтения
Работа с проектами
Настройка параметров узла
Setting Up Materials
Setting Up Properties
Освещение
Landscape Tool
Sandworm (Experimental)
Использование инструментов редактора для конкретных задач
Extending Editor Functionality
Программирование
Основы
Настройка среды разработки
Примеры использования
UnigineScript
C++
C#
File Formats
Rebuilding the Engine Tools
GUI
Двойная точность координат
API
Containers
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
IG Plugin
CIGIConnector Plugin
Rendering-Related Classes
Работа с контентом
Оптимизация контента
Материалы
Art Samples
Tutorials

Структура UUSL GBuffer

G-buffer is a series of textures where all the visible information is written: albedo color, normals, lightmap, etc. G-buffer is used for deferred rendering pipeline. G-буфер - это серия текстур, в которую записана вся видимая информация: цвет альбедо, нормали, карта освещения и т.д. G-буфер используется для конвейера отложенного рендеринга .

UUSL has a handy GBuffer structure to fill it in the shader's code. UUSL имеет удобную структуру GBuffer, которую вы можете заполнить в коде шейдера.

Примечание
Since main workflow in UNIGINE is metalness, it has different structure of G-buffer than specular workflow has. Поскольку основной рабочий процесс в UNIGINE - это металличность, он имеет другую структуру G-буфера, чем зеркальный рабочий процесс.

GBuffer TexturesТекстуры GBuffer#

GBuffer has the following set of textures: GBuffer имеет следующий набор текстур:

Имя текстуры Тип Описание
Albedo RGBA8 RGB - albedo value.
A - occlusion value.
RGB - значение альбедо.
A - значение окклюзии.
Shading RGBA8 R - metalness value.
G - F0 (specular) value.
B - translucent value.
A - microfiber value.
R - значение металличности.
G - значение F0 (зеркальное отражение).
B - значение полупрозрачности.
A - значение микрофибры.
Normal RGBA8 RGB - normal value.
A - roughness value.
RGB - нормальное значение.
A - значение шероховатости.
Velocity RG16F RG - pixel displacement value (XY coordinates). RG - значение смещения пикселя (координаты XY).
Material Mask R32U R - material mask value. R - значение маски материала.
Lightmap RG11B10F RGB - lightmap value. RGB - значение карты освещения.
Features RGBA8 R - bevel value. R - значение фаски.

Channels of these textures fill corresponding fields of the GBuffer structure. Каналы этих текстур заполняют соответствующие поля структуры GBuffer.

UUSL
struct GBuffer {
	float3	albedo;
	float	transparent;
	
	float	metalness;
	float	roughness;
	float	f0;
	float	microfiber;
	
	float3	normal;
	float	translucent;
	
	float2	velocity;
	
	float3	lightmap;
	float	occlusion;
	
	float	bevel;
	
	int		material_mask;
};

Specular G-buffer struct has different fields: Specular G-buffer struct имеет разные поля:

UUSL
struct GBufferSpecular {
	float3	diffuse;
	float	transparent;
		
	float3	specular;
	float	gloss;
	float	microfiber;
		
	float3	normal;
	float	translucent;
		
	float2	velocity;
		
	float3	lightmap;
	float	occlusion;
		
	float	bevel;
		
	int		material_mask;
};

To convert Specular G-buffer to Metalness G-buffer, use specularToMetalness() function. Чтобы преобразовать Specular G-buffer в Metalness G-buffer, используйте функцию specularToMetalness().

GBuffer FunctionsФункции GBuffer#

GBuffer GBufferDefault ( ) #

Default constructor for GBuffer structure for metalness workflow. It creates an instance with default (not null) values. Конструктор по умолчанию для структуры GBuffer для рабочего процесса metalness. Он создает экземпляр со значениями по умолчанию (не нулевыми).

Возвращаемое значение

GBuffer structure with default (not null) values. Структура GBuffer со значениями по умолчанию (не нулевыми).

GBufferSpecular GBufferSpecularDefault ( ) #

Constructor for GBuffferSpecular structure for specular workflow. It creates an instance with default (not null) values. Конструктор структуры GBuffferSpecular для Specular подхода. Он создает экземпляр со значениями по умолчанию (не нулевыми).

Возвращаемое значение

GBufferSpecular structure with default (not null) values. Структура GBufferSpecular со значениями по умолчанию (не нулевыми).

void shadingGBuffer ( inout GBuffer gbuffer, float3 view ) #

Adds a view-dependent shading to the gbuffer. Добавляет зависящее от вида затенение в gbuffer.

Аргументы

  • inout GBuffer gbuffer - GBuffer instance. Экземпляр GBuffer.
  • float3 view - View vector. Вектор направления взгляда.

void shadingGBuffer ( inout GBuffer gbuffer ) #

Adds a shading which is dependent on material parameters. Добавляет затенение, зависящее от параметров материала.

Аргументы

  • inout GBuffer gbuffer - GBuffer instance. Экземпляр GBuffer.

GBuffer specularToMetalness ( GBufferSpecular gbuffer ) #

Converts given specular GBufferSpecular to metalness Gbuffer. Преобразует заданный зеркальный GBufferSpecular в металлический Gbuffer.

Аргументы

  • GBufferSpecular gbuffer - Specular GBufferSpecular instance to be converted. Экземпляр Specular GBufferSpecular для преобразования.

Возвращаемое значение

Metalness Gbuffer instance. Экземпляр Metalness Gbuffer.

void setGBuffer ( GBuffer gbuffer ) #

Sets GBuffer values by using corresponding values of given GBuffer instance. Устанавливает значения GBuffer, используя соответствующие значения данного экземпляра GBuffer.

Аргументы

  • GBuffer gbuffer - GBuffer instance with necessary values to be set. Экземпляр GBuffer с необходимыми значениями, которые необходимо установить.

void setGBuffer ( GBufferSpecular gbuffer ) #

Sets GBuffer values by using corresponding values of given GBufferSpecular instance.
Inside this method specularToMetalness() is called.
Устанавливает значения GBuffer, используя соответствующие значения данного экземпляра GBufferSpecular.
Внутри этого метода вызывается specularToMetalness () .

Аргументы

  • GBufferSpecular gbuffer - GBufferSpecular instance with necessary values to be set. Экземпляр GBufferSpecular с необходимыми значениями, которые нужно установить.

void loadGBufferAlbedo ( inout GBuffer gbuffer, TEXTURE_IN TEX_ALBEDO, float2 uv ) #

Loads albedo texture values (albedo color and occlusion) to GBuffer. Загружает значения текстуры альбедо (цвет и окклюзию альбедо) в GBuffer.

Аргументы

  • inout GBuffer gbuffer - Gbuffer structure. Values will be written in it. Структура Gbuffer. В нем будут записаны значения.
  • TEXTURE_IN TEX_ALBEDO - Albedo texture. Текстура Альбедо.
  • float2 uv - UV coordinates. UV-координаты.

void loadGBufferShading ( inout GBuffer gbuffer, TEXTURE_IN TEX_SHADING, float2 uv ) #

Loads shading texture values (metalness, f0, translucence, microfiber) to GBuffer. Загружает значения текстуры затенения (металличность, f0, полупрозрачность, микрофибра) в GBuffer.

Аргументы

  • inout GBuffer gbuffer - Gbuffer structure. Values will be written in it. Структура Gbuffer. В нем будут записаны значения.
  • TEXTURE_IN TEX_SHADING - Shading texture. Затенение текстуры.
  • float2 uv - UV coordinates. UV-координаты.

void loadGBufferNormal ( inout GBuffer gbuffer, TEXTURE_IN TEX_NORMAL, float2 uv ) #

Loads normal texture values (normal and roughness) to GBuffer. Загружает значения нормальной текстуры (нормаль и шероховатость) в GBuffer.

Аргументы

  • inout GBuffer gbuffer - Gbuffer structure. Values will be written in it. Структура Gbuffer. В нем будут записаны значения.
  • TEXTURE_IN TEX_NORMAL - Normal texture. Обычная текстура.
  • float2 uv - UV coordinates. UV-координаты.

void loadGBufferLightMap ( inout GBuffer gbuffer, TEXTURE_IN TEX_LIGHTMAP, float2 uv ) #

Loads lightmap texture values to passed GBuffer instance. Загружает значения текстуры карты освещения в переданный экземпляр GBuffer.

Аргументы

  • inout GBuffer gbuffer - Gbuffer structure. Values will be written in it. Структура Gbuffer. В нем будут записаны значения.
  • TEXTURE_IN TEX_LIGHTMAP - Lightmap texture. Текстура карты освещения.
  • float2 uv - UV coordinates. UV-координаты.

void loadGBufferVelocity ( inout GBuffer gbuffer, TEXTURE_IN TEX_VELOCITY, float2 uv ) #

Loads velocity texture values to passed GBuffer instance. Загружает значения текстуры скорости в переданный экземпляр GBuffer.

Аргументы

  • inout GBuffer gbuffer - Gbuffer structure. Values will be written in it. Структура Gbuffer. В нем будут записаны значения.
  • TEXTURE_IN TEX_VELOCITY - Velocity texture. Текстура скорости.
  • float2 uv - UV coordinates. UV-координаты.

void loadGBufferMaterialMask ( inout GBuffer gbuffer, TEXTURE_IN_UINT TEX_MATERIAL_MASK, float2 uv ) #

Loads material mask texture values to passed GBuffer instance. Загружает значения текстуры маски материала в переданный экземпляр GBuffer.

Аргументы

  • inout GBuffer gbuffer - Gbuffer structure. Values will be written in it. Структура Gbuffer. В нем будут записаны значения.
  • TEXTURE_IN_UINT TEX_MATERIAL_MASK - Material mask texture. Текстура маски материала.
  • float2 uv - UV coordinates. UV-координаты.

Usage ExampleПример использования#

Defining the GBuffer StructureОпределение структуры GBuffer#

To use GBuffer structure in your shader's code, you should define and initialize the GBuffer structure by using its constructors. For metalness worlkflow use GBufferDefault() constructor (for specular workflow you should use GBufferSpecular structure and GBufferSpecularDefault() constructor respectively). Чтобы использовать структуру GBuffer в коде шейдера, вы должны определить и инициализировать структуру GBuffer с помощью ее конструкторов. Для металлического рабочего процесса используйте конструктор GBufferDefault() (для зеркального рабочего процесса вы должны использовать структуру GBufferSpecular и конструктор GBufferSpecularDefault () соответственно).

The following example shows the way of creating GBuffer structure for both workflows by using #ifdef #else #endif preprocessor statements. В следующем примере показан способ создания структуры GBuffer для обоих рабочих процессов с использованием инструкций препроцессора #ifdef #else #endif.

UUSL
/* ... */
	#ifdef METALNESS
		GBuffer gbuffer = GBufferDefault();
		#define GBUFFER gbuffer
	#else
		GBufferSpecular gbuffer_s = GBufferSpecularDefault();
		#define GBUFFER gbuffer_s
	#endif
/* ... */
Примечание
Defining the GBUFFER with #define directive is handy to get access to GBuffer structure, no matter what type of the workflow is used. Определение GBUFFER с помощью директивы #define удобно для получения доступа к структуре GBuffer, независимо от того, какой тип рабочего процесса используется.

Filling the GBuffer StructureЗаполнение структуры GBuffer#

After defining and initializing the GBuffer structure (like in an example above), you can easily fill the GBuffer's fields. You can fill the specific channel of the GBuffer texture. После определения и инициализации структуры GBuffer (как в примере выше) вы можете легко заполнить поля GBuffer. Вы можете заполнить определенный канал текстуры GBuffer.

UUSL
/* ... */
	#ifdef METALNESS
		GBUFFER.albedo		= color.rgb;
		GBUFFER.metalness	= shading.r;
		GBUFFER.roughness	= shading.g;
		
	#else
		GBUFFER.diffuse		= color.rgb;
		GBUFFER.specular	= shading.rgb;
		GBUFFER.gloss		= shading.a;
		GBUFFER.microfiber	= m_microfiber;
		
	#endif
/* ... */

Loading Textures to GBuffer StructureЗагрузка текстур в структуру GBuffer#

Another way of filling the GBuffer structure is using GBuffer functions for textures loading. Другой способ заполнения структуры GBuffer - использование функций GBuffer для загрузки текстур.

In case of changing GBuffer structure fields, these loading functions will perform the same function, preventing possible errors during migration to another UNIGINE Engine version. В случае изменения полей структуры GBuffer эти функции загрузки будут выполнять ту же функцию, предотвращая возможные ошибки во время миграции на другую версию UNIGINE Engine.

UUSL
// initialize textures
/* ... */
INIT_TEXTURE(1,TEX_NORMAL)
INIT_TEXTURE(2,TEX_ALBEDO)
INIT_TEXTURE(3,TEX_SHADING)
/* ... */

/* ... */
GBuffer gbuffer = GBufferDefault();
loadGBufferAlbedo(gbuffer, TEXTURE_OUT(TEX_ALBEDO),uv);
loadGBufferShading(gbuffer, TEXTURE_OUT(TEX_SHADING),uv);
loadGBufferNormal(gbuffer, TEXTURE_OUT(TEX_NORMAL),uv);
/* ... */
Последнее обновление: 11.11.2020