Glossary
This is a collection of terms used in the Atom renderer, their definition, and the system they belong to.
- Attachment
- An attachment is a buffer or image instance associated with a unique name. Attachments are used by the Render Hardware Interface (RHI) and Frame Scheduler for state management inside of a scope.
Related to: Render Hardware Interface (RHI), Frame Scheduler
- AZSL (Amazon Shading Language)
- The Atom renderer uses a custom shading language called Amazon Shading Language (AZSL). AZSL is an extension of HLSL Shader Model 6, with some specialized features. The most significant special features are Shader Resource Groups (SRG) and shader options.
*Related to: AZSL, The Amazon Shading Language
- AZSLc (AZSL Compiler)
- The AZSLc is the compiler application for AZSL shaders. The compiler translates AZSL shader files into HLSL code, then other standard compilers (like DXC and SPRIV-Cross) compile the HLSL code into native shader bytecode for the target platforms.
Related to: AZSLc, The Amazon Shading Language Compiler
- Command list
- A command list in the RHI provides an interface that allows users to submit GPU commands to a scope. This includes binding Shader Resource Groups; scissoring or viewing port states; building top or bottom level acceleration structures; beginning or ending predications; and submitting draw, dispatch, or copy items.
Related to:
Render Hardware Interface (RHI),
CommandList
API Reference
- Draw item
- A draw call for a given object in a given pass. An object that needs to be drawn in several passes results in several draw items. The collection of draw items pertaining to the same object constitutes a draw packet. For example, opaque objects need to be rendered in shadows, pre-depth, and forward+ passes; this results in a draw packet containing three draw items.
Related to:
Render Hardware Interface (RHI),
DrawItem
API Reference
- Draw list context
- A thread-safe container that accepts draw packets from multiple threads, sorts the draw packets into draw lists, and merges the draw lists. The resulting context is immutable and the lists are accessible in the RHI.
Related to:
Render Hardware Interface (RHI),
DrawListContext
API Reference
- Draw list mask
- A bit mask used for rapid culling by indicating which draw lists are relevant to the class that holds the mask. In a view, a draw list mask indicates which draw lists are in the view. In a draw packet, a draw list mask indicates which draw lists that the draw packet’s draw items renders to.
Related to: Render Hardware Interface (RHI)
- Draw list tag
- Draw list tags are unique identifiers for a list of draw items that belong to the same draw packet.
Related to: Render Hardware Interface (RHI)
- Draw packet
- A draw packet is a collection of draw items for a specific object. It ensures that the draw items are properly dispatched across the different passes.
Related to:
Render Hardware Interface (RHI),
Frame Rendering,
DrawPacket
API Reference
- Dynamic branching
- Dynamic branching is when conditional statements must be evaluated at runtime. This can cause negative performance impacts. For example, the code statement
if(sampledColor.a > 0.5)
is a dynamic branch and a common source of shader performance issues.
- Frame Graph
- The Frame Graph is a graph-based tasking model that describes how the Frame Scheduler manages GPU work submissions in the RHI.
Related to:
Render Hardware Interface (RHI),
Frame Scheduler,
FrameGraph
API Reference
- Feature Processor
- Feature processors are responsible for receiving data from the simulation and processing it into a form that’s consumable by the renderer. Each feature processor handles a specific type of data, like static meshes or hair. Feature processors own render proxies and convert them into draw packets that are consumed by the RHI. For example, an Animated Mesh Feature Processor owns all the animated mesh render proxies in a given scene. Feature processors are owned by scenes and there can be at most one feature processor of a given type per scene.
Related to: Render Pipeline Interface (RPI), RPI System, Frame Rendering, Features
- Material
- A material is a data item that can be applied to a single mesh, describing how it should be rendered. Each material references a material type that defines the material’s behavior and properties. In the Atom documentation, the term “material data” is used to disambiguate from the general concept of a “material”.
Materials are stored in files with the .material
extension.
Related to: Materials, Material System
- Material asset
- A material asset is generated from material data into a form that is consumable by the simulation. Material assets are stored in files with the
.azmaterial
extension and are stored in the engine’s cache for use at runtime.
Related to: Material System
- Material functor
- Material functors are function objects that apply custom logic and calculations to material data, configuring the material’s shaders, render states, or Material Editor metadata. Material functors can be programmed in C++ or Lua.
Related to: Material System
- Material instance
- A material instance is an active material, bound to one or more meshes at runtime for actual rendering. Instances are created from material assets in the cache.
Related to: Material System
- Material property
- Material properties are data that configure a material to achieve a particular appearance. Material properties are defined in the material type, and are then assigned property values in the material.
Related to: Material System
- Material shader
- A shader referenced by a material type and used to render a mesh at runtime. In the Atom documentation, “shader” normally refers to a material shader, but the term “material shader” is used to disambiguate when necessary.
Related to: Material System
- Material type
- A material type defines how a material behaves and what properties the material has. Every material must have a material type. Some general examples of a material type are hair, skin, stone, and car paint. Atom provides physically based rendered (PBR) material types, such as StandardPBR and EnhancedPBR. In the Atom documentation, the term “material type data” is used to disambiguate from the general concept of a “material type”.
Material types are stored in files with the .materialtype
extension.
Related to: Materials, Material System
- Material type asset
- A material type asset is generated from material type data into a form that is consumable by the simulation. Material type assets are stored in files with the
.azmaterialtype
extension and are stored in the engine’s cache for use at runtime.
Related to: Material System, Material System
- Pass
- A pass is a logical grouping of render work with a defined input and output. Passes are organized into a tree hierarchy, where each pass belongs to a parent pass. Passes live in the RPI and are similar to scopes in the RHI.
Related to: Pass System, Authoring Passes
- Render component
- A render component is a feature that pushes data to the Atom renderer via its corresponding feature processor. For example, at every frame, an Animated Mesh Component sends bone matrix updates to its Feature Processor.
Related to: Open 3D Engine - Components, Frame Rendering
- Render Hardware Interface (RHI)
- The Render Hardware Interface (RHI) is a hardware abstraction layer, and is the lowest layer of the Atom renderer. The RHI manages GPU resources, handles GPU fences, schedules work on the GPU queues, and handles synchronization between the GPU work.
Related to: Render Hardware Interface (RHI)
- Render pipeline
- A render pipeline describes how to render a scene and contains passes and views for rendering. More than one render pipeline can exist in a scene.
Related to:
Render Pipeline Interface (RPI),
RenderPipeline
API Reference
- Render Pipeline Interface (RPI)
- The Render Pipeline Interface (RPI) layer sits above the RHI. The RPI is responsible for interfacing with simulation logic and pushing draw items through the render pipeline and down to the RHI. The RPI contains feature processors, pipelines, passes, scenes, and views.
Related to: Render Pipeline Interface (RPI)
- Root constant
- A special shader variable that provides a very fast and small amount of uniform data. A root constant is more optimal than a constant buffer, but is limited in size (generally limited to around 128 or 256 bytes for all root constants).
*Related to: Root Constants
- Root shader variant
- The root shader variant has the main shader bytecode that is always generated by default for each shader. Since shader options are passed to the shader at runtime (rather than during shader compile time), the root shader variant can be used to render any combination of shader options. It is called the “root” variant because it appears at the top-level of the shader variant tree.
Related to: Render Hardware Interface (RHI)
- Scene
- A scene is a conceptual representation of a ‘world’ to be rendered in the simulation. It contains feature processors and render pipelines.
Related to:
Render Pipeline Interface (RPI),
RPI System,
Scene
API Reference
- Scope
- A scope is a logical grouping of uninterruptible render work with a defined input and output. Scopes live in the RHI and are similar to passes in the RPI.
Related to:
Render Hardware Interface (RHI),
Frame Scheduler,
Scope
API Reference
- Shader
- A shader is any program that’s run on the GPU. The “shader” definition varies depending on the context. Here are some common ways “shader” is used in Atom:
- A
.azsl
file contains shader code. - A
.shader
file references the .azsl file and attaches metadata to configure the AZSLc. - The
Shader
class in C++. - Material shaders are often referred to as “shaders”.
Related to: Shaders, Shader System
- Shader asset
- A shader asset is generated from shader data into a form that is consumable by the simulation. Shader assets are stored in files with the
.azshader
extension and are stored in the engine’s cache for use at runtime. The shader asset does not contain any shader bytecode. Instead, it contains metadata about the shader and links to one or more shader variant assets, which contain the bytecode.
Related to: Shader System, Shader Build Pipeline
- Shader Resource Group (SRG)
- A Shader Resource Group (SRG) is a collection of shader resources (textures, buffers, samplers, and loose constants) that are automatically packed into an implicit constant buffer. SRGs are bound at specific frequencies (such as per scene, per view, per pass, per material).
Related to: Shader Resource Groups
- Shader bytecode
- A compiled shader program ready to be passed to a GPU for execution.
Related to: Shader System
- Shader constant
- A shader constant refers to the data fields in a Shader Resource Group (SRG) that use primitive data types. These data types are automatically packed into an implicit constant buffer within the SRG. They can be easily accessed at runtime by name or index using the
RPI::ShaderResourceGroup
class.
Related to: Declaring Shader Constants
- Shader option
- A shader option is a special kind of variable in a shader that makes it easy to define and configure shader variants. The value for a shader option can be supplied either at build time or at runtime. If the shader option is supplied at build time through a shader variant, the value is baked into the shader bytecode for better performance. Otherwise, the value is passed to the shader at runtime, giving the same visual result.
Related to: Shader Variant Options
- Shader variant
- A shader variant is similar to shader permutations, which are common in other renderers. The shader variant is an alternate version of shader bytecode, and is optimized for a specific set of input values. For example, the original shader code might have branching logic (
if
statements) to perform different calculations depending on some shader input flag. Rather than evaluate these branches dynamically (which has performance penalties), the system can pre-compile multiple shader variants. Each shader variant is hardcoded to use the alternate calculations. At runtime, the system selects an appropriate variant based on the input flag, rather than passing the input flag to the shader.
Related to: Shader System, Shader Variant Options
- Shader variant asset
- The shader variant asset contains the actual bytecode for a compiled shader that is stored in the engine’s cache for use at runtime. The shader variant asset is stored in a file with the
.azshadervariant
extension. There must be one shader variant asset for each.shader
file to hold the root shader variant. Numerous shader variant assets can be generated from a.shadervariantlist
file.
Related to: Shader System, Shader Variant Options
- Shader variant tree
- The shader variant tree is a data structure that organizes a shader’s collection of shader variants. It allows fast lookup of shader variants at runtime, as well as automatic fallback to more generalized variants if a specific variant is not found.
A shader variant tree is stored in a file with the .shadervariantlist
extension.
Related to: Shader System, Shader Variant Options
- Shader variant tree asset
- A shader variant tree asset is generated from shader variant tree data into a form that is consumable by the simulation. Shader variant tree assets are stored in files with the
.azshadervarianttree
extension and are stored in the engine’s cache for use at runtime. The shader variant tree asset contains links to all of the shader variant assets for a particular shader.
Related to: Shader System, Shader Variant Options
- System shader option
- A system shader option is any shader option in a material shader that is not owned by the material type. When a material type connects to a shader option in one of its shaders, that option is owned by the material type; only the material is allowed to set the value for that option. All other options are called system shader options, and these are set directly in code by calling the method
Material::SetSystemShaderOption()
.
Related to: Shader System, Shader Variant Options