M.pbrmetalmasked
(Created page with "m.pbrmetalmasked is a minor variation on the m.pbrmetal material. It adds a masked alpha channel to allow a complex outline to be created without the use of large ...") |
m (Added notes about AlphaHint tag in texture.txt file, and blend-mode tag in metadata file.) |
||
(14 intermediate revisions by 6 users not shown) | |||
Line 2: | Line 2: | ||
It should be noted that the "metal" in the name of this material refers to the physical property used in the lighting equations; it does not mean that the material is only appropriate for metallic surfaces. | It should be noted that the "metal" in the name of this material refers to the physical property used in the lighting equations; it does not mean that the material is only appropriate for metallic surfaces. | ||
+ | |||
+ | On some hardware, [[masked alpha]] materials may perform substantially worse than an opaque material. This cost is per-[[fragment]], meaning that it may be suitable to use a masked material on low-[[Level of Detail|LOD]] meshes where polygon count must remain low and where fragment count is naturally low. On higher-LOD meshes, especially where the material is expected to fill a reasonable percentage of the screen, masked materials should be avoided in favor of higher polygon detail, or should be used in conjunction with true opaque materials such that the majority of opaque fragments are filled by the opaque materials and only the complex edge detail is filled by the masked material. | ||
This page describes content format v4.6 and assumes that the FBX file format is used as a data source for any meshes. | This page describes content format v4.6 and assumes that the FBX file format is used as a data source for any meshes. | ||
Line 9: | Line 11: | ||
==Albedo== | ==Albedo== | ||
− | RGB: The albedo defines the base color of each texel. The sRGB color space is used. | + | RGB: The [[albedo map]] defines the base color of each texel. The sRGB color space is used. |
A: The alpha channel provides a "black and white" [[masked alpha]] channel. Black indicates full transparency, meaning that the [[fragment]] is discarded. White indicates full opacity, meaning that rendering proceeds as per [[m.pbrmetal]]. If the alpha channel is omitted, this material acts exactly as [[m.pbrmetal]] except with lower performance. Note that unlike legacy Trainz materials, PBR materials do not autodetect opacity mode based on the texture in use. The content creator must select the appropriate material for their desired outcome. Runtime texture replacement should not expect to replace an opaque texture with a blended or masked texture and have the material update automatically. | A: The alpha channel provides a "black and white" [[masked alpha]] channel. Black indicates full transparency, meaning that the [[fragment]] is discarded. White indicates full opacity, meaning that rendering proceeds as per [[m.pbrmetal]]. If the alpha channel is omitted, this material acts exactly as [[m.pbrmetal]] except with lower performance. Note that unlike legacy Trainz materials, PBR materials do not autodetect opacity mode based on the texture in use. The content creator must select the appropriate material for their desired outcome. Runtime texture replacement should not expect to replace an opaque texture with a blended or masked texture and have the material update automatically. | ||
+ | |||
+ | You may need to include an alpha-hint tag in your albedo texture.txt file. See [[.texture.txt_Files]]. If creating a double sided material using metadata you should also consider using a blend-mode tag. See [[Mesh_metadata_file]]. | ||
+ | |||
'''Albedo Texture Example''' | '''Albedo Texture Example''' | ||
− | + | [[File:PortalAlbedowAlpha.png|500px]] | |
+ | |||
+ | Color Channel Separated | ||
+ | |||
+ | [[File:PortalAlbedo.png|500px]] | ||
+ | |||
+ | Alpha Channel Separated | ||
+ | |||
+ | [[File:PortalAlpha.png|500px]] | ||
==Normal== | ==Normal== | ||
− | RGB: Surface normal. This defines which way the surface is facing, relative to the interpolated vertex normals. Since this is an XYZ format rather than color data, it should never be modified in Photoshop. Using Photoshop to add a fourth channel or copy/paste smaller textures into a [[texture atlas]] is acceptable. Per-pixel manipulation or use of filters on the "RGB" channels is not acceptable. | + | RGB: Surface [[normal map]]. This defines which way the surface is facing, relative to the interpolated vertex normals. Since this is an XYZ format rather than color data, it should never be modified in Photoshop. Using Photoshop to add a fourth channel or copy/paste smaller textures into a [[texture atlas]] is acceptable. Per-pixel manipulation or use of filters on the "RGB" channels is not acceptable. |
A: [[Parallax Occlusion Map|Displacement height]]. 0.0 represents the deepest possible value, while 1.0 represents the shallowest possible value. While it is possible to paint this data in Photoshop, a linear color space must be used, and far superior results will be available through other data sources. The parallax height and the surface normal must be kept in sync, which means that a third-party tool must be used to generate the surface normal from the parallax height if you are painting this map manually. | A: [[Parallax Occlusion Map|Displacement height]]. 0.0 represents the deepest possible value, while 1.0 represents the shallowest possible value. While it is possible to paint this data in Photoshop, a linear color space must be used, and far superior results will be available through other data sources. The parallax height and the surface normal must be kept in sync, which means that a third-party tool must be used to generate the surface normal from the parallax height if you are painting this map manually. | ||
Line 44: | Line 57: | ||
[[File:pbrparametersemissivemap1.jpg|border|middle|x200px]] | [[File:pbrparametersemissivemap1.jpg|border|middle|x200px]] | ||
− | G: Roughness. Defines whether the surface reflections are shiny ( | + | G: Roughness. Defines whether the surface reflections are shiny (0.0) or matte (1.0). See the [[Physically Based Rendering|PBR metal workflow]] for details. |
Line 66: | Line 79: | ||
=Examples= | =Examples= | ||
− | + | ||
+ | [[File:trainz_material_pbrmetalmasked.jpg|border|middle|x512px]] | ||
+ | |||
+ | Example asset download: | ||
+ | |||
+ | [http://download.trainzportal.com/tutorials/Trainz_Material_-_pbrmetalmasked.cdp Trainz Material - pbrmetalmasked + emissive] | ||
=3ds Max Material Configuration= | =3ds Max Material Configuration= | ||
Line 72: | Line 90: | ||
'''Texture Assignment''' | '''Texture Assignment''' | ||
− | + | [[File:kosl.png]] | |
+ | |||
+ | =Blender Material Configuration (2.7x)= | ||
+ | You must use the Blender Render option in Blender as the Cycles Render doesn't export the texture names associated with the material. The cycles option is still being investigated. | ||
+ | |||
+ | The albedo must have the "Use Alpha" and Influence->Diffuse->Alpha tag ticked. The normal does not require any special settings. The parameters texture must use the Influence->Specular->Hardness tag (checkbox). The value of the hardness is not exported by the Blender FBX exporter. Sample settings are shown below. All textures except the albedo are using png in this example because they do not require an Alpha channel. | ||
+ | |||
+ | [[File:BlenderFBXmglassAlbedo.png|border|middle|x700px]] [[File:BlenderFBXmglassNormal.png|border|middle|x700px]] [[File:BlenderFBXmglassparameter.png|border|middle|x700px]] | ||
+ | |||
+ | =Blender Material Configuration (2.8+)= | ||
+ | |||
+ | The shader node is a Principled BSDF shader and the FBX exporter supports the export of some texture names but not all. The following connections should be made: | ||
+ | |||
+ | Albedo texture to the Base Color input. | ||
+ | |||
+ | Parameter texture to the Roughness input. | ||
+ | |||
+ | The normal texture, via a normal converter set to Tangent, to the Normal input. | ||
+ | |||
+ | The 3D view of the mesh does not show a true PBR render. | ||
+ | |||
+ | You will need to update the texture.txt files created by the Trainz FBX importer. | ||
+ | |||
+ | |||
+ | [[File:Blender 2.80 shader export nodes.jpg|border|middle|x700px]] | ||
+ | |||
+ | =Using masked material meshes close to other meshes= | ||
+ | |||
+ | Masked material meshes, including logos, names or numbers such as those on the side of a traincar, should match the roughness and metallicity of the adjacent material to mimic the same reflection. This can be an issue when the masked mesh is in shadow. | ||
+ | |||
− | + | [[Category:Material types| ]] | |
− | + | [[Category:Modeling]] | |
+ | [[Category:Content creation]] |
Latest revision as of 15:42, 28 July 2023
m.pbrmetalmasked is a minor variation on the m.pbrmetal material. It adds a masked alpha channel to allow a complex outline to be created without the use of large numbers of polygons. All PBR materials are defined using a multitude of texture channels (not just a simple RGB image) which define various aspects of the material on a per-texel basis. One major advantage of this approach is that a single in-game material can be used to display various different real-world materials, rather than requiring multiple separate in-game materials with different parameters. Trainz uses a Metallic/Roughness style PBR workflow.
It should be noted that the "metal" in the name of this material refers to the physical property used in the lighting equations; it does not mean that the material is only appropriate for metallic surfaces.
On some hardware, masked alpha materials may perform substantially worse than an opaque material. This cost is per-fragment, meaning that it may be suitable to use a masked material on low-LOD meshes where polygon count must remain low and where fragment count is naturally low. On higher-LOD meshes, especially where the material is expected to fill a reasonable percentage of the screen, masked materials should be avoided in favor of higher polygon detail, or should be used in conjunction with true opaque materials such that the majority of opaque fragments are filled by the opaque materials and only the complex edge detail is filled by the masked material.
This page describes content format v4.6 and assumes that the FBX file format is used as a data source for any meshes.
Contents |
[edit] Texture Slots
The following texture slots are used for this material. All textures should typically have the same dimensions unless they represent a uniform color, however this is not strictly enforced.
[edit] Albedo
RGB: The albedo map defines the base color of each texel. The sRGB color space is used.
A: The alpha channel provides a "black and white" masked alpha channel. Black indicates full transparency, meaning that the fragment is discarded. White indicates full opacity, meaning that rendering proceeds as per m.pbrmetal. If the alpha channel is omitted, this material acts exactly as m.pbrmetal except with lower performance. Note that unlike legacy Trainz materials, PBR materials do not autodetect opacity mode based on the texture in use. The content creator must select the appropriate material for their desired outcome. Runtime texture replacement should not expect to replace an opaque texture with a blended or masked texture and have the material update automatically.
You may need to include an alpha-hint tag in your albedo texture.txt file. See .texture.txt_Files. If creating a double sided material using metadata you should also consider using a blend-mode tag. See Mesh_metadata_file.
Albedo Texture Example
Color Channel Separated
Alpha Channel Separated
[edit] Normal
RGB: Surface normal map. This defines which way the surface is facing, relative to the interpolated vertex normals. Since this is an XYZ format rather than color data, it should never be modified in Photoshop. Using Photoshop to add a fourth channel or copy/paste smaller textures into a texture atlas is acceptable. Per-pixel manipulation or use of filters on the "RGB" channels is not acceptable.
A: Displacement height. 0.0 represents the deepest possible value, while 1.0 represents the shallowest possible value. While it is possible to paint this data in Photoshop, a linear color space must be used, and far superior results will be available through other data sources. The parallax height and the surface normal must be kept in sync, which means that a third-party tool must be used to generate the surface normal from the parallax height if you are painting this map manually.
Normal Texture Example with no Alpha Channel (Parallax)
Normal Texture Example with Alpha Channel (Parallax)
[edit] Parameter
This texture is comprised of four separate channels which each form a separate data element. Linear color space (not sRGB) is used for these channels.
R: Emissive. This causes the texture to have an internal glow, even when no external light is present. Used for phosphors, permanently-lit markings, etc. The glow color is based on the albedo. Note that this glow does not cast light upon surrounding surfaces except via the Bloom post-processing effect.
Parameters (Emissive - Red Channel) Texture Example
G: Roughness. Defines whether the surface reflections are shiny (0.0) or matte (1.0). See the PBR metal workflow for details.
Parameters (Roughness - Green Channel) Texture Example
B: Ambient Occlusion. Defines whether the surface is exposed to ambient lighting conditions (1.0) or affected only by direct lighting (0.0).
Parameters (Ambient Occlusion - Blue Channel) Texture Example
A: Metallicity. Defines whether the surface is metallic (1.0) with the albedo used to colorize reflected light, or dielectric (0.0) with the albedo used to colorize the surface. While intermediate values are not physically accurate, they may be used to emulate subsurfaces which are partially metallic. See the PBR metal workflow for details.
Parameters (Metallic - Alpha Channel) Texture Example
[edit] Examples
Example asset download:
Trainz Material - pbrmetalmasked + emissive
[edit] 3ds Max Material Configuration
Texture Assignment
[edit] Blender Material Configuration (2.7x)
You must use the Blender Render option in Blender as the Cycles Render doesn't export the texture names associated with the material. The cycles option is still being investigated.
The albedo must have the "Use Alpha" and Influence->Diffuse->Alpha tag ticked. The normal does not require any special settings. The parameters texture must use the Influence->Specular->Hardness tag (checkbox). The value of the hardness is not exported by the Blender FBX exporter. Sample settings are shown below. All textures except the albedo are using png in this example because they do not require an Alpha channel.
[edit] Blender Material Configuration (2.8+)
The shader node is a Principled BSDF shader and the FBX exporter supports the export of some texture names but not all. The following connections should be made:
Albedo texture to the Base Color input.
Parameter texture to the Roughness input.
The normal texture, via a normal converter set to Tangent, to the Normal input.
The 3D view of the mesh does not show a true PBR render.
You will need to update the texture.txt files created by the Trainz FBX importer.
[edit] Using masked material meshes close to other meshes
Masked material meshes, including logos, names or numbers such as those on the side of a traincar, should match the roughness and metallicity of the adjacent material to mimic the same reflection. This can be an issue when the masked mesh is in shadow.