This page covers:
- What is meant by "material" in Keysight
- The different material modes
- Different material components
- Texture mapping
- Best practices on using materials
What is a material?
Simply put: a surface. Every object must use a shader➚ in order to be visible to the camera, but within the context of Keysight: a Material is specifically this collection of shader options for the following objects:
Materials can use textures (images) to drive their properties on a per-texel level. Keysight follows the PBR shading model➚ used in many engines.
Note
A "texel" is a pixel in a texture. Many final-image pixels may show the same texel.
Material modes
Each mode uses a different internal "shader" (the technical term for a material) to expose different variables. Each mode has a different performance cost, which is paid per pixel rendered of the material (this becomes important for the backdrop especially, if targeting the best possible performance.
Basic
Basic
mode does not use any textures, and has simple values for each material parameter. It is the cheapest material to render, and the simplest material to use.
Advanced
Advanced
mode is the only material mode that uses the Reflections system, as well as the only mode with texture-driven material components. This makes the Advanced
mode enormously flexible, but also the most performance expensive material to render.
Blended
Blended
mode is essentially two Basic
modes blended between using the given Mask (masking is binary; materials are not blended smoothly). It is performance-cheap to render.
Transparent
Transparent
mode is the only mode which allows for semi-transparency. It also does not react to any lighting in the scene, and is entirely driven by Self-emissive colour. Due to semi-transparency, despite being a simple material, it is expensive to render.
Material components
Base colour
Used by: Basic
, Advanced
, Blended
Base colour is the most intuitive material parameter, and is exactly what it sounds like. Resulting pixel colour starts by being calculated from lighting multiplied by Base colour. Be cautious about using coloured lighting with coloured Base colours, as this can result in unintuitive behaviours. Base colour on dynamic objects (like Note objects) is inherited from its Colour settings.
Self-emissive colour
Used by: Basic
, Advanced
, Blended
, Transparent
Self-emissive colour (or just emissive) is an additive colour that is independent to lighting in the scene. A surface will always "shine" its Emissive colour at the given brightness regardless of anything else happening in the scene. This emitted light, however, is not "seen" by the rest of the scene and not treated as a light source. Emissive colour on dynamic objects (like Note objects) is inherited from its Colour settings.
The following image has an increasing-brightness red Emissive colour on top of a white Base colour. Note how once Emissive colour is bright enough, the underlying white material becomes invisible and pixels become blown-out and white.
Masking
Used by: Advanced
, Blended
, Transparent
Different modes use masking in different ways:
-
Advanced
mode: Mask texture will cause any Mask texture pixels under 0.333 brightness to make the corresponding material texel completely invisible. Note: this is binary,Advanced
materials using a Mask texture are either fully opaque or fully transparent. -
Blended
mode: Mask texture will cause any Mask texture pixels under 0.5 brightness to use the second set of material parameters, and any above to use the first set. Blending between parameters is binary. -
Transparent
mode: Mask texture brightness is used as Opacity value. Mask brightness of0.00
will result in a completely invisible pixel; a brightness of1.00
will give a completely opaque pixel. While inTransparent
mode, a material can also simply be given a flat value for Opacity.
Metalness
Used by: Basic
, Advanced
, Blended
Metalness is a difficult concept to put into intuitive terms➚, but broadly speaking: physical materials are either metal or non-metal in how they behave with light. It is not physically accurate to have Metalness somewhere between 0.00 - 1.00
, but sometimes this is desirable from an aesthetics standpoint. The Specularity of a material becomes irrelevant at 1.00
Metalness. Reflected lighting on metal materials will become coloured by the base colour.
The following image moves between 0.00
Metalness to 1.00
. Again, only the outer two spheres are physically accurate, and it is recommended to either be metal or non-metal and use other parameters to achieve the desired visuals.
Specularity
Used by: Basic
, Advanced
, Blended
Specularity is another difficult concept. It is only relevant to non-metal materials, and broadly governs the amount of "shiny highlights" a material shows. These highlights are always white and do not inherit base colour (unlike metal materials). Real materials always have some degree of Specularity; materials that do not appear to have any shiny highlights simply have low Specularity and very high Roughness. Typical "real" Specularity values usually lie between 0.30 - 0.70
.
The following image moves between 0.00
Specularity to 1.00
. At 0.00
, this removes all shiny highlights from a surface, which can potentially be useful for non-physical materials.
Roughness
Used by: Basic
, Advanced
, Blended
Roughness is possibly the most useful material parameter. It governs how polished a surface appears, and is very powerful when driven by a texture in Advanced
mode. At 0.00
Roughness, any light sources(*) in the scene are reflected perfectly. As only light sources(*) are reflected and not any kind of physically-accurate environment, this is usually not desirable. At very high Roughness, a material will appear to stop having "shiny highlights".
The following image moves between 0.00
Roughness to 1.00
. The final sphere uses a Roughness texture instead of a flat value, giving it a lot of character.
Note
These spheres are not rendered in Keysight, hence reflecting an environment clearly in the left-most sphere.
Normal map
Used by: Advanced
Another incredibly powerful parameter. Normal maps are exclusively texture-driven, and determine the "facing direction" of the texel as it responds to lighting and Reflections. This allows surfaces to appear as though they contain a lot more geometry than they actually do. Normal maps must be authored in an incredibly specific way, as the R/G/B channels correspond to X/Y/Z facing directions. The strength of the Normal map influence on facing direction can be configured via the Strength slider.
The following image uses the same Normal map at increasing strengths.
Reflections
Used by: Advanced
Reflections require their own full section due to being, quite frankly, weird and complicated and flexible. Reflections use the geometry of the surface, the Normal map, the camera angle, the Emissive colour, a Reflection map texture, optionally a Mask-type image, and finally some panning/rotation values to create the final visual result. Reflections are an additive layer to the base material.
The base image
A Reflection starts with the Reflection map image. This image, for best results, should be tiling (it can repeat without showing any seams) and either: the target colour, or monochrome. This image is what will be warped into a Reflection by the end of the rendering process. Here is an example of the "Mysterious clouds" image in isolation, tiling 5 times:
When picking a Reflection image, it is important to consider the "texture" of the image. For example: "rough/smooth", "sharp/fuzzy", "high/low contrast". These features will be present in the final appearance.
Size is the next core aspect of a Reflection. At lower sizes, the image is tiled more heavily, giving more high-frequency detail but potentially more visible repeats. This is the same image as before, but using lower Size to give much more tiling:
Colour and brightness
The base Reflection map image is further modified by a few parameters:
- Reflection colour multiplication: this multiplies the base by a given colour.
-
- If Use emissive is selected, this multiplies by the material's Emissive colour.
-
- If Use static is selected, a single given colour is used.
-
- "None" keeps the base image exactly as-is.
-
Hue shift: this shifts the hue of the base image multiplied by the above setting by the given amount. This can be useful for shifting strongly-coloured base images into the desired colour.
-
Brightness: This is a simple final multiplier for pixel brightness. By making this value very large, it is possible to use Reflections in place of an Emissive colour to provide strong glow with less uniformity or more internal motion.
Through restricting colour palette via multiplication and then hue-shifting, it is possible to move almost any Reflection base image into a target colour. However, it is not possible to desaturate a saturated colour with this method. It is often best to simply author the base image to be close to the final desired colour outside of Keysight. This image is using "Mysterious clouds" but hue-shifted and increased in brightness:
Camera angle
This happens automatically, but it worthy of discussion as it explains why a Reflection looks like a reflection. The given Reflection map image is displayed using the camera vector multiplied by a reflection vector, along with the geometry + normal map facing direction. As such, moving geometry (such as Note objects) or moving the camera will warp the Reflection in a convincing way. This image is still using "Mysterious clouds" as the backdrop reflection, but now viewed at a steep angle:
Normal mapping
This is where the real magic happens. Once given a Normal map (or once displayed on curved geometry like Note objects), the Reflection base image will become heavily distorted and almost unrecognisable in most instances. This image uses the "Wavy gold" Normal map and "Mysterious clouds":
The Normal map heavily determines the look of the Reflection. Another example, this time using "Polygons":
Normal map strength is calculated from the base strength multiplied by the strength given in the Reflection sub-section for normals. It is usually advisable to have fairly strong normal strength on Reflections, as Reflections are always mirror-like in how perfectly they are reflected (they have no concept of Roughness). Having a strong normal influence on Reflections breaks up the image without needing to make it fuzzy via Roughness.
Note
Alternatively, if a fuzzy Reflection image is absolutely required, this can be done in an image editor with a Gaussian blur or similar before importing the texture to Keysight.
Movement
Finally, the base Reflection image can be made to pan and/or rotate over time, to create a "warpy" kind of effect in most circumstances. The following uses just Rotation speed:
When rotating, the rotation origin is the point perpendicular to the camera. So in a standard top-down view, this would be the centre of the screen. This means Reflections move faster at the outer edges of the screen when rotating, which is rarely desirable.
The following uses just panning. Positive panning values will move the Reflection base image from right to left:
Combining both Rotation speed and Panning speed can be dangerous, as the pannning offset moves the rotation origin point around erratically and results in highly variable motion (similar to chaotic double-pendulums➚). However, with low values and used on Note objects, using Randomise reflection direction and a combination of Rotation speed and Panning speed can give very non-uniform directions and speeds in a pleasing way.
Randomise reflection direction and Panning speed behave slightly differently between dynamic objects and scene objects.
-
Scene: enabling Randomise reflection direction will cause the "forward" pan direction to become downwards in the Y axis.
-
Dynamic: enabling Randomise reflection direction will add a random amount of rotation for each new instance of the Reflection material.
Texture mapping
Texture mapping describes the way 2D textures (images) used by Advanced
, Blended
and sometimes Transparent
modes are applied to 3D surfaces. Texture mapping always happens by ignoring the Z axis of the scene entirely (so, textures are always "stamped downwards" onto the scene).
Textures are mapped from an origin point "outwards", repeating the texture if its Size is smaller than the available space. This origin point is defined as the point above the centre E/F white key split, with textures aligned to the bottom edge in the Y axis and the centre in the X axis.
This origin point is modified by Note objects based on the Texture mapping and displacement mode available specifically on these objects.
- Global: origin point is moved downwards over time by the speed Note objects are travelling at. This is global and shared between all Note objects. Adjacent notes will show adjacent sections of the texture.
- Local: origin point also moves downwards but is also shifted to be at the origin of the Note object. This means notes always show the same section of the texture, useful for keeping grid-like textures looking the same for all notes.
- Static: origin point is not moved downwards over time, and remains at the E/F centrepoint. This means the surface of a Note object will not "move" with the note. Potentially useful for turning notes into "windows" to an image.
Randomise texture mapping will add a random Offset value for each instance of the material, and Randomise texture rotation will add a random Rotation per instance.
Size
Size is measured in white key widths, and is applied to the X axis of the texture (with the Y axis being proportionally sized to keep the original aspect ratio of the texture). A Size of 52.0
will cause a texture to occupy the full width of the Backdrop.
Warning
Mixing aspect ratios between texture channels on a material can result in stretched images in some situations. Internally, Keysight is mapping images based on 0.00 - 1.00
coordinates in X/Y with no concept of aspect ratio.
This means the same texture mapping is shared by all images, and so one texture channel is chosen as the "aspect ratio source". This is particularly relevant on Advanced
mode materials, as the Base colour channel is chosen to stretch all texture images to correct for aspect ratio. Having a 1:1 aspect Base colour image (even if it is not used, like the default Concrete), will cause any other images (e.g. a 16:9 aspect Self-emissive colour) to be stretched into a 1:1 square aspect ratio.
TL;DR: use the same aspect ratio on base and emissive channels!
Rotation
This rotates the coordinate space in which textures are mapped. It is highly advised to not rotate textures, as doing so on any non-1:1 aspect ratio textures will result in phenomenally broken behaviour.
Stretch
The is a proportional modifier to the Size of a texture. Setting the X-axis Stretch to 0.50
will half the horizontal size while not touching vertical size. This can be used to correct images slightly to fit better in the Backdrop, or override aspect-based stretching.
Offset
This is a proportional shift to the alignment point that textures are mapped using. An X-axis Offset value of 0.50
will change the default horizontal alignment from middle to the corner of the texture. The Y-axis Offset value is very useful for shifting full-width 16:9 images down a little so they display nicely in the Backdrop.
Panning
This feature is only available on the Backdrop, Overlay, Note objects, and Pulse static opacity masking.
Panning will add Offset over time to cause the texture to move. This is a very niche effect, but it can be used creatively. One usecase might be to pan an Overlay material made up of stars very slowly to give a planetarium kind of feel to a preset.
Useful tricks for materials
Image sizing guide
The most common place where Texture mapping comes into play is using an image as a backdrop. Under default Layout settings and at 1920x1080 Keysight display size:
-
1920x837 available Backdrop resolution to display an image.
-
0.775 Y-axis Stretch required to show a whole 16:9 image, but squashed down to fit.
-
-0.1125 Y-axis Offset required to shift a 16:9 image down to be centered in the Backdrop.
When picking texture sizes, try to avoid using much more resolution than you actually need. If rendering 1920x1080 videos, importing a 7680x4320 image to display in the Backdrop would increase Keysight load time and VRAM usage for absolutely no benefit!
Finding good material textures to use
AmbientCG➚ is my favourite resource for Creative Commons (CC0) license texture resources to build materials. Almost all materials included with Keysight come from this site. The 2k JPG option is recommended to keep total Keysight load times under control.
CC0 Textures➚ is another option with a lot of choice and again with CC0 licensing (go figure).
Note that Keysight does not use all texture channels provided by these sites. Keysight only uses:
-
"Metalness" for Metalness (this is a rare texture channel to drive with an image, and rarely provided)
-
"Spec" for Specularity (also a rare channel to actually use)
-
"Rough/Roughness" for Roughness
-
"Normal" for Normal map
It is very common to also be provided AO (ambient occlusion) maps, displacement maps, and bump maps from the given resources. These are not used by Keysight, and should not be imported anywhere.
Avoid using any materials with heavy displacement, as these materials will not render correctly within Keysight due to their normal map being intended to pair with the given displacement map. An example of some materials from AmbientCG➚ with ones to avoid:
Copy/pasting materials
All materials can be easily copy/pasted between objects. Building a material from the ground up is a lot of work, and simply copying an existing material can be a great way of saving time. This is especially useful for Reflections which can be incredibly slow and complex to edit.
Colour deviation from source images
When applying an image as Emissive colour, even with 1.00
Brightness, the image will look slightly different in Keysight. This is due to the original image being passed through a shader, and then rasterising to a potentially-misaligned pixel grid (resampling), and then camera bloom, and then tonemapping.
To get as close as possible to 1:1 colour representation in Keysight, consider using 2x the required resolution on the base image (so, 3840x2160 base image if rendering to 1920x1080) to mitigate resampling removing fine detail. Colour deviation can be mitigated by removing Bloom(*) under (Advanced) Scene > Lighting, but this is not advised due to removing a lot of visual quality from bright particles. Ultimately, there's always going to be a little bit of variation when re-rendering an image in Keysight. If absolutely perfect 1:1 representation is required for some reason, consider using Mask Mode or Transparent video rendering and simply overlaying Keysight onto your target image.