|
@@ -17,6 +17,7 @@ export interface IMaterialSheenDefines {
|
|
|
SHEEN_TEXTURE: boolean;
|
|
|
SHEEN_TEXTUREDIRECTUV: number;
|
|
|
SHEEN_LINKWITHALBEDO: boolean;
|
|
|
+ SHEEN_ROUGHNESS: boolean;
|
|
|
|
|
|
/** @hidden */
|
|
|
_areTexturesDirty: boolean;
|
|
@@ -65,6 +66,16 @@ export class PBRSheenConfiguration {
|
|
|
@expandToProperty("_markAllSubMeshesAsTexturesDirty")
|
|
|
public texture: Nullable<BaseTexture> = null;
|
|
|
|
|
|
+ private _roughness = 0;
|
|
|
+ /**
|
|
|
+ * Defines the sheen roughness.
|
|
|
+ * It is not taken into account if linkSheenWithAlbedo is true.
|
|
|
+ * To stay backward compatible, material roughness is used instead if sheen roughness = 0
|
|
|
+ */
|
|
|
+ @serialize()
|
|
|
+ @expandToProperty("_markAllSubMeshesAsTexturesDirty")
|
|
|
+ public roughness = 0.0;
|
|
|
+
|
|
|
/** @hidden */
|
|
|
private _internalMarkAllSubMeshesAsTexturesDirty: () => void;
|
|
|
|
|
@@ -110,6 +121,7 @@ export class PBRSheenConfiguration {
|
|
|
if (this._isEnabled) {
|
|
|
defines.SHEEN = this._isEnabled;
|
|
|
defines.SHEEN_LINKWITHALBEDO = this._linkSheenWithAlbedo;
|
|
|
+ defines.SHEEN_ROUGHNESS = this._roughness !== 0;
|
|
|
|
|
|
if (defines._areTexturesDirty) {
|
|
|
if (scene.texturesEnabled) {
|
|
@@ -125,6 +137,7 @@ export class PBRSheenConfiguration {
|
|
|
defines.SHEEN = false;
|
|
|
defines.SHEEN_TEXTURE = false;
|
|
|
defines.SHEEN_LINKWITHALBEDO = false;
|
|
|
+ defines.SHEEN_ROUGHNESS = false;
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -147,6 +160,10 @@ export class PBRSheenConfiguration {
|
|
|
this.color.g,
|
|
|
this.color.b,
|
|
|
this.intensity);
|
|
|
+
|
|
|
+ if (this._roughness !== 0) {
|
|
|
+ uniformBuffer.updateFloat("vSheenRoughness", this._roughness);
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
// Textures
|
|
@@ -229,7 +246,7 @@ export class PBRSheenConfiguration {
|
|
|
* @param uniforms defines the current uniform list.
|
|
|
*/
|
|
|
public static AddUniforms(uniforms: string[]): void {
|
|
|
- uniforms.push("vSheenColor", "vSheenInfos", "sheenMatrix");
|
|
|
+ uniforms.push("vSheenColor", "vSheenRoughness", "vSheenInfos", "sheenMatrix");
|
|
|
}
|
|
|
|
|
|
/**
|
|
@@ -238,6 +255,7 @@ export class PBRSheenConfiguration {
|
|
|
*/
|
|
|
public static PrepareUniformBuffer(uniformBuffer: UniformBuffer): void {
|
|
|
uniformBuffer.addUniform("vSheenColor", 4);
|
|
|
+ uniformBuffer.addUniform("vSheenRoughness", 1);
|
|
|
uniformBuffer.addUniform("vSheenInfos", 2);
|
|
|
uniformBuffer.addUniform("sheenMatrix", 16);
|
|
|
}
|