Passes
Specifies shaders and their defines to be used during the specific pass. The shaders are compiled for the specified render pass using the defines specified in attributes.
The syntax is the following:
Pass render_pass_name
{
Vertex = deferred_shader
Fragment = deferred_shader
}
You can specify various types of shaders in the pass (see the list of available shaders in Unigine).
You can check the current pass in the shader using the following defines:
PASS_<pass name>
Types of Passes#
- custom_pass_name (string) — name of a custom rendering pass (up to 32 custom passes are supported)
- wireframe — the wireframe pass
- visualizer_solid — the visualizer solid pass
- lightmap_data — the lightmap baking pass
- deferred — the deferred pass
- auxiliary — the auxiliary pass
- emission — the emission pass
- refraction — the refraction pass
- reflection — the reflection pass
- transparent_blur — the transparent blur pass
- ambient — the ambient pass
- light_environment_probe — the Environment Probe light pass
- light_voxel_probe — the Voxel Probe light pass
- light_omni — the omni-directional light pass
- light_proj — the projected light pass
- light_world — the world light pass (called only when there are more than one WorldLight present in the world)
- light_all — the environment probe, omni-directional light, projected light, world light passes
- depth_pre_pass — the native depth pre-pass
- ms_depth — the SRAA pass
- shadow — the shadows pass
- post — the post-process pass
- object_post — the object post-process pass
- procedural_decals — the procedural decals pass
- procedural_fields — the procedural fields pass
Usage Examples#
Pass deferred
{
Vertex = deferred_shader
Fragment = deferred_shader
}
Pass shadow
{
Vertex = deferred_shader
Fragment = deferred_shader
}
Pass depth_pre_pass
{
Vertex = depth_pre_pass_shader
Fragment = depth_pre_pass_shader
}
Pass ms_depth
{
Vertex = depth_pre_pass_shader
Fragment = depth_pre_pass_shader
}
If the vertex shader isn't specified, the default core/shaders/common/empty.vert shader will be used.
Besides the shader node you can specify the relative path (as a string) to the file containing shader code in UUSL:
Pass lightmap_data
{
Vertex = "core/shaders/mesh/lightmap_data.shader"
Fragment = "core/shaders/mesh/lightmap_data.shader"
}
It is also possible to write inline shaders inside the Pass node (put them inside the #{ … }# construct):
Pass name
{
Geometry =
#{
// UUSL code
}#
}
Arguments#
defines#
String
Definitions that will be passed to the shader.
Usage Example:
defines="MY_DEFINE=32,MY_DEFINE_2"
You can list multiple defines separated by a comma without any space. To specify a value for a define, write the value after the equals sign symbol.
node#
String
Specifies the type of a node for which this pass will be used (by default - all node types).
Available values:
- DecalProj — a projected decal
- DecalOrtho — an orthographic decal
- DecalMesh — a mesh decal
- LandscapeLayerMap — a landscape layer map
- ObjectDummy — a Dummy object
- ObjectDynamic — a dynamic object
- ObjectMeshStatic — a static mesh
- ObjectMeshCluster — a mesh cluster
- ObjectMeshClutter — a mesh clutter
- ObjectMeshSkinned — a Skinned Mesh
- ObjectMeshDynamic — a Dynamic Mesh
- ObjectMeshSplineCluster — a mesh spline cluster
- ObjectLandscapeTerrain — a Landscape Terrain object
- ObjectTerrainGlobal — a Global Terrain object
- ObjectGrass — a Grass object
- ObjectParticles — particles
- ObjectBillboards — billboards
- ObjectVolumeBox — a Volume Box
- ObjectVolumeSphere — a Volume Sphere
- ObjectVolumeOmni — a Volume Omni object
- ObjectVolumeProj — a Volume Projected object
- ObjectGui — a GUI object
- ObjectGuiMesh — a GUI mesh
- ObjectWaterGlobal — a Global Water object
Usage Example#
Pass ambient <defines="BOX,HEIGHT" node=ObjectVolumeBox>
{
Vertex = volume_shader
Fragment = volume_shader
}
Pass ambient <defines="SPHERE,HEIGHT" node=ObjectVolumeSphere>
{
Vertex = volume_shader
Fragment = volume_shader
}
Last update:
13.12.2021
Помогите сделать статью лучше
Была ли эта статья полезной?
(или выберите слово/фразу и нажмите Ctrl+Enter