OGRE: Ogre::HlmsPbsDatablock Class Reference

| OGRE 2.2.4 Object-Oriented Graphics Rendering Engine

Public Types | Public Member Functions | Static Public Attributes | Friends | List of all members
Ogre::HlmsPbsDatablock Class Reference
Core » Resources

Contains information needed by PBS (Physically Based Shading) for OpenGL 3+ & D3D11+. More...

`#include <OgreHlmsPbsDatablock.h>`

Inheritance diagram for Ogre::HlmsPbsDatablock:
[legend]

## Public Types
enum | TransparencyModes { None, Transparent, Fade, Refractive }
enum | Workflows { SpecularWorkflow, SpecularAsFresnelWorkflow, MetallicWorkflow }

## Public Member Functions
| HlmsPbsDatablock (IdString name, HlmsPbs *creator, const HlmsMacroblock *macroblock, const HlmsBlendblock *blendblock, const HlmsParamVec &params)
| Valid parameters in params: More...
virtual | ~HlmsPbsDatablock ()
bool | _hasEmissive (void) const
| Returns true if getEmissive is non-zero or if there is an emissive texture set. More...
virtual void | calculateHash ()
ColourValue | getBackgroundDiffuse (void) const
uint32 | getBrdf (void) const
CubemapProbe * | getCubemapProbe (void) const
PbsBlendModes | getDetailMapBlendMode (uint8 detailMapIdx) const
Vector4 | getDetailMapOffsetScale (uint8 detailMap) const
Real | getDetailMapWeight (uint8 detailMap) const
Real | getDetailNormalWeight (uint8 detailNormalMapIdx) const
| Returns the detail normal maps' weight. More...
Vector3 | getDiffuse (void) const
virtual ColourValue | getDiffuseColour (void) const
virtual TextureGpu * | getDiffuseTexture (void) const
Vector3 | getEmissive (void) const
virtual ColourValue | getEmissiveColour (void) const
virtual TextureGpu * | getEmissiveTexture (void) const
Vector3 | getFresnel (void) const
| Returns the current fresnel. More...
float | getMetalness (void) const
Real | getNormalMapWeight (void) const
| Returns the detail normal maps' weight. More...
bool | getReceiveShadows (void) const
float | getRefractionStrength (void) const
float | getRoughness (void) const
Vector3 | getSpecular (void) const
uint8 | getTextureUvSource (PbsTextureTypes sourceType) const
float | getTransparency (void) const
TransparencyModes | getTransparencyMode (void) const
bool | getTwoSidedLighting (void) const
bool | getUseAlphaFromTextures (void) const
bool | getUseDiffuseMapAsGrayscale (void) const
bool | getUseEmissiveAsLightmap (void) const
Vector4 | getUserValue (uint8 userValueIdx) const
Workflows | getWorkflow (void) const
virtual bool | hasCustomShadowMacroblock (void) const
bool | hasEmissiveConstant (void) const
| Returns true iif getEmissive is non-zero. More...
bool | hasSeparateFresnel (void) const
| Whether the same fresnel term is used for RGB, or individual ones for each channel. More...
void | importUnity (const Vector3 &colour, Real metallic, Real roughness, bool changeBrdf)
| Helper function to import values from Unity (metallic workflow). More...
void | importUnity (const Vector3 &diffuse, const Vector3 &specular, Real roughness, bool changeBrdf)
| Helper function to import & convert values from Unity (specular workflow). More...
virtual void | notifyTextureChanged (TextureGpu *texture, TextureGpuListener::Reason reason, void *extraData)
virtual void | setAlphaTestThreshold (float threshold)
void | setBackgroundDiffuse (const ColourValue &bgDiffuse)
| Sets the diffuse background colour. More...
void | setBrdf (PbsBrdf::PbsBrdf brdf)
| Changes the BRDF in use. More...
void | setCubemapProbe (CubemapProbe *probe)
| Manually set a probe to affect this particular material. More...
void | setDetailMapBlendMode (uint8 detailMapIdx, PbsBlendModes blendMode)
| Changes the blend mode of the detail map. More...
void | setDetailMapOffsetScale (uint8 detailMap, const Vector4 &offsetScale)
| Sets the scale and offset of the detail map. More...
void | setDetailMapWeight (uint8 detailMap, Real weight)
| Sets the weight of detail map. More...
void | setDetailNormalWeight (uint8 detailNormalMapIdx, Real weight)
| Sets the normal mapping weight. More...
void | setDiffuse (const Vector3 &diffuseColour)
| Sets the diffuse colour (final multiplier). The colour will be divided by PI for energy conservation. More...
void | setEmissive (const Vector3 &emissiveColour)
| Sets emissive colour (e.g. More...
void | setFresnel (const Vector3 &fresnel, bool separateFresnel)
| Sets the fresnel (F0) directly, instead of using the IOR. More...
void | setIndexOfRefraction (const Vector3 &refractionIdx, bool separateFresnel)
| Calculates fresnel (F0 in most books) based on the IOR. More...
void | setMetalness (float metalness)
| Sets the metalness in a metallic workflow. More...
void | setNormalMapWeight (Real weight)
| @See setDetailNormalWeight. This is the same, but for the main normal map. More...
void | setReceiveShadows (bool receiveShadows)
| When false, objects with this material will not receive shadows (independent of whether they case shadows or not) More...
void | setRefractionStrength (float strength)
| Sets the strength of the refraction, i.e. More...
void | setRoughness (float roughness)
| Sets the roughness. More...
void | setSpecular (const Vector3 &specularColour)
| Sets the specular colour. More...
void | setTexture (PbsTextureTypes texUnit, const String &name, const HlmsSamplerblock *refParams=0)
void | setTextureUvSource (PbsTextureTypes sourceType, uint8 uvSet)
| Sets which UV set to use for the given texture. More...
void | setTransparency (float transparency, TransparencyModes mode=Transparent, bool useAlphaFromTextures=true, bool changeBlendblock=true)
| Makes the material transparent, and sets the amount of transparency. More...
void | setTwoSidedLighting (bool twoSided, bool changeMacroblock=true, CullingMode oneSidedShadowCast=CULL_ANTICLOCKWISE)
| Allows support for two sided lighting. More...
void | setUseDiffuseMapAsGrayscale (bool bUseDiffuseMapAsGrayscale)
| When set, it treats the diffuse map as a grayscale map; which means it will spread red component to all rgb channels. More...
void | setUseEmissiveAsLightmap (bool bUseEmissiveAsLightmap)
| When set, it treats the emissive map as a lightmap; which means it will be multiplied against the diffuse component. More...
void | setUserValue (uint8 userValueIdx, const Vector4 &value)
| Sets the value of the userValue, this can be used in a custom piece. More...
void | setWorkflow (Workflows workflow)
| Sets whether to use a specular workflow, or a metallic workflow. More...
uint32 | suggestFiltersForType (PbsTextureTypes type) const
bool | suggestUsingSRGB (PbsTextureTypes type) const
| Suggests the TextureMapType (aka texture category) for each type of texture (i.e. More...

## Static Public Attributes
static const size_t | MaterialSizeInGpu
static const size_t | MaterialSizeInGpuAligned

## Friends
class | HlmsPbs

## Detailed Description

Contains information needed by PBS (Physically Based Shading) for OpenGL 3+ & D3D11+.

## Member Enumeration Documentation

## ◆ TransparencyModes

enum Ogre::HlmsPbsDatablock::TransparencyModes

Enumerator
None | No alpha blending. Default.
Transparent | Realistic transparency that preserves lighting reflections (particularly specular on the edges). Great for glass, transparent plastic, most stuff. Note that at transparency = 0 the object may not be fully invisible.
Fade | Good 'ol regular alpha blending. Ideal for just fading out an object until it completely disappears.
Refractive | Similar to transparent, but also performs refractions. The compositor scene pass must be set to render refractive objects in its own pass. See Samples/2.0/ApiUsage/Refractions

## ◆ Workflows

enum Ogre::HlmsPbsDatablock::Workflows

Enumerator
SpecularWorkflow | Specular workflow. Many popular PBRs use SpecularAsFresnelWorkflow though. See also setWorkflow
SpecularAsFresnelWorkflow | Specular workflow where the specular texture is addressed to the fresnel instead of kS. This is normally referred as simply Specular workflow in many other PBRs. See also setWorkflow
MetallicWorkflow |

## Constructor & Destructor Documentation

## ◆ HlmsPbsDatablock()

Ogre::HlmsPbsDatablock::HlmsPbsDatablock | ( | IdString | name,
|  | HlmsPbs * | creator,
|  | const HlmsMacroblock * | macroblock,
|  | const HlmsBlendblock * | blendblock,
|  | const HlmsParamVec & | params
| ) |  |

Valid parameters in params:

Parameters

  params | fresnel <value [g, b]> The IOR. @See setIndexOfRefraction When specifying three values, the fresnel is separate for each colour component

fresnel_coeff <value [g, b]> Directly sets the fresnel values, instead of using IORs "F0" in most books about PBS

roughness

Specifies the roughness value. Should be in range (0; inf) Note: Values extremely close to zero could cause NaNs and INFs in the pixel shader, also depends on the GPU's precision.

background_diffuse <r g b a> Specifies diffuse colour to use as a background when diffuse texture are not present. Does not replace 'diffuse <r g b>' Default: background_diffuse 1 1 1 1

diffuse <r g b> Specifies the RGB diffuse colour. "kD" in most books about PBS Default: diffuse 1 1 1 1 Note: Internally the diffuse colour is divided by PI.

diffuse_map <texture name> Name of the diffuse texture for the base image (optional)

diffuse_map_grayscale <true, false> When set to true diffuse map would be sampled with .rrra swizzle Default: false

specular <r g b> Specifies the RGB specular colour. "kS" in most books about PBS Default: specular 1 1 1 1

specular_map <texture name> Name of the specular texture for the base image (optional).

roughness_map <texture name> Name of the roughness texture for the base image (optional) Note: Only the Red channel will be used, and the texture will be converted to an efficient monochrome representation.

normal_map <texture name> Name of the normal texture for the base image (optional) for normal mapping

detail_weight_map <texture name> Texture that when present, will be used as mask/weight for the 4 detail maps. The R channel is used for detail map #0; the G for detail map #1, B for #2, and Alpha for #3. This affects both the diffuse and normal-mapped detail maps.

detail_map0 <texture name> Similar: detail_map1, detail_map2, detail_map3 Name of the detail map to be used on top of the diffuse colour. There can be gaps (i.e. set detail maps 0 and 2 but not 1)

detail_blend_mode0 <blend_mode> Similar: detail_blend_mode1, detail_blend_mode2, detail_blend_mode3 Blend mode to use for each detail map. Valid values are: "NormalNonPremul", "NormalPremul", "Add", "Subtract", "Multiply", "Multiply2x", "Screen", "Overlay", "Lighten", "Darken", "GrainExtract", "GrainMerge", "Difference"

detail_offset_scale0 <offset_u> <offset_v> <scale_u> <scale_v> Similar: detail_offset_scale1, detail_offset_scale2, detail_offset_scale3 Sets the UV offset and scale of the detail maps.

detail_normal_map0 <texture name> Similar: detail_normal_map1, detail_normal_map2, detail_normal_map3 Name of the detail map's normal map to be used. It's not affected by blend mode. May be used even if there is no detail_map

detail_normal_offset_scale0 <offset_u> <offset_v> <scale_u> <scale_v> Similar: detail_normal_offset_scale1, detail_normal_offset_scale2, detail_normal_offset_scale3 Sets the UV offset and scale of the detail normal maps.

reflection_map <texture name> Name of the reflection map. Must be a cubemap. Doesn't use an UV set because the tex. coords are automatically calculated.

uv_diffuse_map <uv> Similar: uv_specular_map, uv_normal_map, uv_detail_mapN, uv_detail_normal_mapN, uv_detail_weight_map where N is a number between 0 and 3. UV set to use for the particular texture map. The UV value must be in range [0; 8)

transparency

Specifies the transparency amount. Value in range [0; 1] where 0 = full transparency and 1 = fully opaque.

transparency_mode <transparent, none, fade> Specifies the transparency mode.

See also
  TransparencyModes

alpha_from_textures <true, false> When set to false transparency calculations ignore the alpha channel in the textures

## ◆ ~HlmsPbsDatablock()

virtual Ogre::HlmsPbsDatablock::~HlmsPbsDatablock | ( |  | ) |
| virtual

## Member Function Documentation

## ◆ _hasEmissive()

bool Ogre::HlmsPbsDatablock::_hasEmissive | ( | void |  | ) | const

Returns true if getEmissive is non-zero or if there is an emissive texture set.

## ◆ calculateHash()

virtual void Ogre::HlmsPbsDatablock::calculateHash | ( |  | ) |
| virtual

## ◆ getBackgroundDiffuse()

ColourValue Ogre::HlmsPbsDatablock::getBackgroundDiffuse | ( | void |  | ) | const

## ◆ getBrdf()

uint32 Ogre::HlmsPbsDatablock::getBrdf | ( | void |  | ) | const

## ◆ getCubemapProbe()

CubemapProbe* Ogre::HlmsPbsDatablock::getCubemapProbe | ( | void |  | ) | const

## ◆ getDetailMapBlendMode()

PbsBlendModes Ogre::HlmsPbsDatablock::getDetailMapBlendMode | ( | uint8 | detailMapIdx | ) | const

## ◆ getDetailMapOffsetScale()

Vector4 Ogre::HlmsPbsDatablock::getDetailMapOffsetScale | ( | uint8 | detailMap | ) | const

## ◆ getDetailMapWeight()

Real Ogre::HlmsPbsDatablock::getDetailMapWeight | ( | uint8 | detailMap | ) | const

## ◆ getDetailNormalWeight()

Real Ogre::HlmsPbsDatablock::getDetailNormalWeight | ( | uint8 | detailNormalMapIdx | ) | const

Returns the detail normal maps' weight.

## ◆ getDiffuse()

Vector3 Ogre::HlmsPbsDatablock::getDiffuse | ( | void |  | ) | const

## ◆ getDiffuseColour()

virtual ColourValue Ogre::HlmsPbsDatablock::getDiffuseColour | ( | void |  | ) | const
| virtual

## ◆ getDiffuseTexture()

virtual TextureGpu* Ogre::HlmsPbsDatablock::getDiffuseTexture | ( | void |  | ) | const
| virtual

## ◆ getEmissive()

Vector3 Ogre::HlmsPbsDatablock::getEmissive | ( | void |  | ) | const

## ◆ getEmissiveColour()

virtual ColourValue Ogre::HlmsPbsDatablock::getEmissiveColour | ( | void |  | ) | const
| virtual

## ◆ getEmissiveTexture()

virtual TextureGpu* Ogre::HlmsPbsDatablock::getEmissiveTexture | ( | void |  | ) | const
| virtual

## ◆ getFresnel()

Vector3 Ogre::HlmsPbsDatablock::getFresnel | ( | void |  | ) | const

Returns the current fresnel.

Note: when hasSeparateFresnel returns false, the Y and Z components still correspond to mFresnelG & mFresnelB just in case you want to preserve this data (i.e. toggling separate fresnel often (which is not a good idea though, in terms of performance)

## ◆ getMetalness()

float Ogre::HlmsPbsDatablock::getMetalness | ( | void |  | ) | const

## ◆ getNormalMapWeight()

Real Ogre::HlmsPbsDatablock::getNormalMapWeight | ( | void |  | ) | const

Returns the detail normal maps' weight.

## ◆ getReceiveShadows()

bool Ogre::HlmsPbsDatablock::getReceiveShadows | ( | void |  | ) | const

## ◆ getRefractionStrength()

float Ogre::HlmsPbsDatablock::getRefractionStrength | ( | void |  | ) | const
| inline

## ◆ getRoughness()

float Ogre::HlmsPbsDatablock::getRoughness | ( | void |  | ) | const

## ◆ getSpecular()

Vector3 Ogre::HlmsPbsDatablock::getSpecular | ( | void |  | ) | const

## ◆ getTextureUvSource()

uint8 Ogre::HlmsPbsDatablock::getTextureUvSource | ( | PbsTextureTypes | sourceType | ) | const

## ◆ getTransparency()

float Ogre::HlmsPbsDatablock::getTransparency | ( | void |  | ) | const
| inline

## ◆ getTransparencyMode()

TransparencyModes Ogre::HlmsPbsDatablock::getTransparencyMode | ( | void |  | ) | const
| inline

## ◆ getTwoSidedLighting()

bool Ogre::HlmsPbsDatablock::getTwoSidedLighting | ( | void |  | ) | const

## ◆ getUseAlphaFromTextures()

bool Ogre::HlmsPbsDatablock::getUseAlphaFromTextures | ( | void |  | ) | const
| inline

## ◆ getUseDiffuseMapAsGrayscale()

bool Ogre::HlmsPbsDatablock::getUseDiffuseMapAsGrayscale | ( | void |  | ) | const

## ◆ getUseEmissiveAsLightmap()

bool Ogre::HlmsPbsDatablock::getUseEmissiveAsLightmap | ( | void |  | ) | const

## ◆ getUserValue()

Vector4 Ogre::HlmsPbsDatablock::getUserValue | ( | uint8 | userValueIdx | ) | const

## ◆ getWorkflow()

Workflows Ogre::HlmsPbsDatablock::getWorkflow | ( | void |  | ) | const

## ◆ hasCustomShadowMacroblock()

virtual bool Ogre::HlmsPbsDatablock::hasCustomShadowMacroblock | ( | void |  | ) | const
| virtual

## ◆ hasEmissiveConstant()

bool Ogre::HlmsPbsDatablock::hasEmissiveConstant | ( | void |  | ) | const

Returns true iif getEmissive is non-zero.

## ◆ hasSeparateFresnel()

bool Ogre::HlmsPbsDatablock::hasSeparateFresnel | ( | void |  | ) | const

Whether the same fresnel term is used for RGB, or individual ones for each channel.

## ◆ importUnity() [1/2]

void Ogre::HlmsPbsDatablock::importUnity | ( | const Vector3 & | colour,
|  | Real | metallic,
|  | Real | roughness,
|  | bool | changeBrdf
| ) |  |

Helper function to import values from Unity (metallic workflow).

Remarks
  The metallic parameter will be converted to a specular workflow.

## ◆ importUnity() [2/2]

void Ogre::HlmsPbsDatablock::importUnity | ( | const Vector3 & | diffuse,
|  | const Vector3 & | specular,
|  | Real | roughness,
|  | bool | changeBrdf
| ) |  |

Helper function to import & convert values from Unity (specular workflow).

Parameters

  changeBrdf | True if you want us to select a BRDF that closely matches that of Unity. It will change the BRDF to PbsBrdf::DefaultUncorrelated. For best realism though, it is advised that you use that you actually use PbsBrdf::Default.

## ◆ notifyTextureChanged()

virtual void Ogre::HlmsPbsDatablock::notifyTextureChanged | ( | TextureGpu * | texture,
|  | TextureGpuListener::Reason | reason,
|  | void * | extraData
| ) |  |
| virtual

## ◆ setAlphaTestThreshold()

virtual void Ogre::HlmsPbsDatablock::setAlphaTestThreshold | ( | float | threshold | ) |
| virtual

See also
  HlmsDatablock::setAlphaTest

Remarks
  Alpha testing works on the alpha channel of the diffuse texture. If there is no diffuse texture, the first diffuse detail map after applying the blend weights (texture + params) is used. If there are no diffuse nor detail-diffuse maps, the alpha test is compared against the value 1.0

## ◆ setBackgroundDiffuse()

void Ogre::HlmsPbsDatablock::setBackgroundDiffuse | ( | const ColourValue & | bgDiffuse | ) |

Sets the diffuse background colour.

When no diffuse texture is present, this solid colour replaces it, and can act as a background for the detail maps.

## ◆ setBrdf()

void Ogre::HlmsPbsDatablock::setBrdf | ( | PbsBrdf::PbsBrdf | brdf | ) |

Changes the BRDF in use.

Calling this function may trigger an HlmsDatablock::flushRenderables

## ◆ setCubemapProbe()

void Ogre::HlmsPbsDatablock::setCubemapProbe | ( | CubemapProbe * | probe | ) |

Manually set a probe to affect this particular material.

Remarks
  PCC (Parallax Corrected Cubemaps) have two main forms of operation: Auto and manual. They both have advantages and disadvantages. This method allows you to enable the manual mode of operation.

  Manual Advantages: It's independent of camera position. The reflections are always visible and working on the object. Works best for static objects Also works well on dynamic objects that you can guarantee are going to be constrained to the probe's area. Manual Disadvantages: Needs to be manually applied on the material by the user. Can produce harsh lighting/reflection seams when two objects affected by different probes are close together. Sucks for dynamic objects.

To use manual probes just call: datablock->setCubemapProbe( probe );

  Auto Advantages: Smoothly blends between probes, making smooth transitions Avoids seams. No need to change anything on the material or the object, you don't need to do anything. Works best for dynamic objects (eg. characters) Also works well on static objects if the camera is inside rooms/corridors, thus blocking the view from distant rooms that aren't receiving reflections. Auto Disadvantages: Objects that are further away won't have reflections as only one probe can be active. It depends on the camera's position. Doesn't work well if the user can see many distant objects at once, as they won't have reflections until you get close.

To use Auto you don't need to do anything. Just enable PCC: hlmsPbs->setParallaxCorrectedCubemap( mParallaxCorrectedCubemap ); and leave PBSM_REFLECTION empty and don't enable manual mode.

  When other reflection methods can be used as fallback (Planar reflections, SSR), then usually auto will be the preferred choice. But if multiple reflections/fallbacks aren't available, you'll likely have to make good use of manual and auto

Parameters

  probe | The probe that should affect this material to enable manual mode. Null pointer to disable manual mode and switch to auto.

## ◆ setDetailMapBlendMode()

void Ogre::HlmsPbsDatablock::setDetailMapBlendMode | ( | uint8 | detailMapIdx,
|  | PbsBlendModes | blendMode
| ) |  |

Changes the blend mode of the detail map.

Calling this function triggers a HlmsDatablock::flushRenderables even if you never use detail maps (they affect the cache's hash)

Remarks
  This parameter only affects the diffuse detail map. Not the normal map.

Parameters

  detailMapIdx | Value in the range [0; 4)
  blendMode | Blend mode

## ◆ setDetailMapOffsetScale()

void Ogre::HlmsPbsDatablock::setDetailMapOffsetScale | ( | uint8 | detailMap,
|  | const Vector4 & | offsetScale
| ) |  |

Sets the scale and offset of the detail map.

Remarks
  A value of Vector4( 0, 0, 1, 1 ) will cause a flushRenderables as we remove the code from the shader.

Parameters

  detailMap | Value in the range [0; 4)
  offsetScale | XY = Contains the UV offset. ZW = Constains the UV scale. Default value is Vector4( 0, 0, 1, 1 )

## ◆ setDetailMapWeight()

void Ogre::HlmsPbsDatablock::setDetailMapWeight | ( | uint8 | detailMap,
|  | Real | weight
| ) |  |

Sets the weight of detail map.

Affects both diffuse and normal at the same time.

Remarks
  A value of 1 will cause a flushRenderables as we remove the code from the shader. The weight from

See also
  setNormalMapWeight is multiplied against this value when it comes to the detail normal map.

Parameters

  detailMap | Value in the range [0; 4)
  weight | The weight for the detail map. Usual values are in range [0; 1] but any value is accepted and valid. Default value is 1

## ◆ setDetailNormalWeight()

void Ogre::HlmsPbsDatablock::setDetailNormalWeight | ( | uint8 | detailNormalMapIdx,
|  | Real | weight
| ) |  |

Sets the normal mapping weight.

The range doesn't necessarily have to be in [0; 1]

Remarks
  An exact value of 1 will generate a shader without the weighting math, while any other value will generate another shader that uses this weight (i.e. will cause a flushRenderables)

Parameters

  detailNormalMapIdx | Value in the range [0; 4)
  weight | The weight for the normal map. A value of 0 means no effect (tangent space normal is 0, 0, 1); and would be the same as disabling the normal map texture. A value of 1 means full normal map effect. A value outside the [0; 1] range extrapolates. Default value is 1.

## ◆ setDiffuse()

void Ogre::HlmsPbsDatablock::setDiffuse | ( | const Vector3 & | diffuseColour | ) |

Sets the diffuse colour (final multiplier). The colour will be divided by PI for energy conservation.

## ◆ setEmissive()

void Ogre::HlmsPbsDatablock::setEmissive | ( | const Vector3 & | emissiveColour | ) |

Sets emissive colour (e.g.

a firefly). Emissive colour has no physical basis. Though in HDR, if you're working in lumens, this value should probably be in lumens too. To disable emissive, setEmissive( Vector3::ZERO ) and unset any texture in PBSM_EMISSIVE slot.

## ◆ setFresnel()

void Ogre::HlmsPbsDatablock::setFresnel | ( | const Vector3 & | fresnel,
|  | bool | separateFresnel
| ) |  |

Sets the fresnel (F0) directly, instead of using the IOR.

@See setIndexOfRefraction

Remarks
  If "separateFresnel" was different from the current setting, it will call

See also
  HlmsDatablock::flushRenderables. If the another shader must be created, it could cause a stall.

Parameters

  refractionIdx | The fresnel of the material for each colour component. When separateFresnel = false, the Y and Z components are ignored.
  separateFresnel | Whether to use the same fresnel term for RGB channel, or individual ones.

## ◆ setIndexOfRefraction()

void Ogre::HlmsPbsDatablock::setIndexOfRefraction | ( | const Vector3 & | refractionIdx,
|  | bool | separateFresnel
| ) |  |

Calculates fresnel (F0 in most books) based on the IOR.

The formula used is ( (1 - idx) / (1 + idx) )²

Remarks
  If "separateFresnel" was different from the current setting, it will call

See also
  HlmsDatablock::flushRenderables. If the another shader must be created, it could cause a stall.

Parameters

  refractionIdx | The index of refraction of the material for each colour component. When separateFresnel = false, the Y and Z components are ignored.
  separateFresnel | Whether to use the same fresnel term for RGB channel, or individual ones.

## ◆ setMetalness()

void Ogre::HlmsPbsDatablock::setMetalness | ( | float | metalness | ) |

Sets the metalness in a metallic workflow.

Remarks
  Overrides any fresnel value. Should be in Metallic mode.

See also
  setWorkflow;

Parameters

  metalness | Value in range [0; 1]

## ◆ setNormalMapWeight()

void Ogre::HlmsPbsDatablock::setNormalMapWeight | ( | Real | weight | ) |

@See setDetailNormalWeight. This is the same, but for the main normal map.

## ◆ setReceiveShadows()

void Ogre::HlmsPbsDatablock::setReceiveShadows | ( | bool | receiveShadows | ) |

When false, objects with this material will not receive shadows (independent of whether they case shadows or not)

Remarks
  Changing this parameter will cause a flushRenderables Shadow casting lights (which are normally processed in a Forward way) will still lit the object, it just won't have shadows in it.

Parameters

  receiveShadows | Whether to enable or disable receiving shadows.

## ◆ setRefractionStrength()

void Ogre::HlmsPbsDatablock::setRefractionStrength | ( | float | strength | ) |

Sets the strength of the refraction, i.e.

how much displacement in screen space.

This value is not physically based. Only used when HlmsPbsDatablock::setTransparency was set to HlmsPbsDatablock::Refractive

Parameters

  strength | Refraction strength. Useful range is often (0; 1) but any value is valid (even negative), but the bigger the number, the more likely glitches will appear (with large values we have to fallback to regular alpha blending due to the screen space pixel landing outside the screen)

## ◆ setRoughness()

void Ogre::HlmsPbsDatablock::setRoughness | ( | float | roughness | ) |

Sets the roughness.

## ◆ setSpecular()

void Ogre::HlmsPbsDatablock::setSpecular | ( | const Vector3 & | specularColour | ) |

Sets the specular colour.

## ◆ setTexture()

void Ogre::HlmsPbsDatablock::setTexture | ( | PbsTextureTypes | texUnit,
|  | const String & | name,
|  | const HlmsSamplerblock * | refParams = `0`
| ) |  |

## ◆ setTextureUvSource()

void Ogre::HlmsPbsDatablock::setTextureUvSource | ( | PbsTextureTypes | sourceType,
|  | uint8 | uvSet
| ) |  |

Sets which UV set to use for the given texture.

Calling this function triggers a HlmsDatablock::flushRenderables.

Parameters

  sourceType | Source texture to modify. Note that we don't enforce PBSM_SOURCE_DETAIL0 = PBSM_SOURCE_DETAIL_NM0, but you probably want to have both textures using the same UV source. Must be lower than NUM_PBSM_SOURCES.
  uvSet | UV coordinate set. Value must be between in range [0; 8)

## ◆ setTransparency()

void Ogre::HlmsPbsDatablock::setTransparency | ( | float | transparency,
|  | TransparencyModes | mode = `Transparent`,
|  | bool | useAlphaFromTextures = `true`,
|  | bool | changeBlendblock = `true`
| ) |  |

Makes the material transparent, and sets the amount of transparency.

Parameters

  transparency | Value in range [0; 1] where 0 = full transparency and 1 = fully opaque.
  mode |

See also
  TransparencyModes

Parameters

  useAlphaFromTextures | When false, the alpha channel of the diffuse maps and detail maps will be ignored. It's a GPU performance optimization.
  changeBlendblock | When true, the routine prepares the ideal blendblock to use according to the selected mode. When false, the user is expected to change the blendblock manually before calling this function to prevent false warnings. Useful for advanced experiments or artistic license.

## ◆ setTwoSidedLighting()

void Ogre::HlmsPbsDatablock::setTwoSidedLighting | ( | bool | twoSided,
|  | bool | changeMacroblock = `true`,
|  | CullingMode | oneSidedShadowCast = `CULL_ANTICLOCKWISE`
| ) |  |

Allows support for two sided lighting.

Disabled by default (faster)

Remarks
  Changing this parameter will cause a flushRenderables

Parameters

  twoSided | Whether to enable or disable.
  changeMacroblock | Whether to change the current macroblock for one that has cullingMode = CULL_NONE or set it to false to leave the current macroblock as is.
  oneSidedShadowCast | If changeMacroblock == true; this parameter controls the culling mode of the shadow caster (the setting of HlmsManager::setShadowMappingUseBackFaces is ignored!). While oneSidedShadowCast == CULL_NONE is usually the "correct" option, setting oneSidedShadowCast=CULL_ANTICLOCKWISE can prevent ugly self-shadowing on interiors.

## ◆ setUseDiffuseMapAsGrayscale()

void Ogre::HlmsPbsDatablock::setUseDiffuseMapAsGrayscale | ( | bool | bUseDiffuseMapAsGrayscale | ) |

When set, it treats the diffuse map as a grayscale map; which means it will spread red component to all rgb channels.

Remarks
  With this option you can use PFG_R8_UNORM for diffuse map in the same way as old PF_L8 format

## ◆ setUseEmissiveAsLightmap()

void Ogre::HlmsPbsDatablock::setUseEmissiveAsLightmap | ( | bool | bUseEmissiveAsLightmap | ) |

When set, it treats the emissive map as a lightmap; which means it will be multiplied against the diffuse component.

Remarks
  Note that HlmsPbsDatablock::setEmissive still applies, thus set it to 1 to avoid surprises.

## ◆ setUserValue()

void Ogre::HlmsPbsDatablock::setUserValue | ( | uint8 | userValueIdx,
|  | const Vector4 & | value
| ) |  |

Sets the value of the userValue, this can be used in a custom piece.

Parameters

  userValueIdx | Which userValue to modify, in the range [0; 3)

## ◆ setWorkflow()

void Ogre::HlmsPbsDatablock::setWorkflow | ( | Workflows | workflow | ) |

Sets whether to use a specular workflow, or a metallic workflow.

Remarks
  The texture types PBSM_SPECULAR & PBSM_METALLIC map to the same value.

  When in metal workflow, the texture is used as a metallic texture, and is expected to be a monochrome texture. Global specularity's strength can still be affected via setSpecular. The fresnel settings should not be used (metalness is stored where fresnel used to).

  When in specular workflow, the texture is used as a specular texture, and is expected to be either coloured or monochrome. setMetalness should not be called in this mode.

  If "workflow" was different from the current setting, it will call

See also
  HlmsDatablock::flushRenderables. If the another shader must be created, it could cause a stall.

Parameters

  bEnableMetallic |

## ◆ suggestFiltersForType()

uint32 Ogre::HlmsPbsDatablock::suggestFiltersForType | ( | PbsTextureTypes | type | ) | const

## ◆ suggestUsingSRGB()

bool Ogre::HlmsPbsDatablock::suggestUsingSRGB | ( | PbsTextureTypes | type | ) | const

Suggests the TextureMapType (aka texture category) for each type of texture (i.e.

normals should load from TEXTURE_TYPE_NORMALS).

Remarks
  Remember that if "myTexture" was loaded as TEXTURE_TYPE_DIFFUSE and then you try to load it as TEXTURE_TYPE_NORMALS, the first one will prevail until it's removed. You could create an alias however, and thus have two copies of the same texture with different loading parameters.

## Friends And Related Function Documentation

## ◆ HlmsPbs

friend class HlmsPbs
| friend

## Member Data Documentation

## ◆ MaterialSizeInGpu

const size_t Ogre::HlmsPbsDatablock::MaterialSizeInGpu
| static

## ◆ MaterialSizeInGpuAligned

const size_t Ogre::HlmsPbsDatablock::MaterialSizeInGpuAligned
| static

The documentation for this class was generated from the following file:

- OgreHlmsPbsDatablock.h