|
@@ -19,6 +19,7 @@ namespace SharpGLTF.Schema2
|
|
|
|
|
|
|
|
this.RemoveExtensions<MaterialPBRSpecularGlossiness>();
|
|
this.RemoveExtensions<MaterialPBRSpecularGlossiness>();
|
|
|
this.RemoveExtensions<MaterialUnlit>();
|
|
this.RemoveExtensions<MaterialUnlit>();
|
|
|
|
|
+ this.RemoveExtensions<MaterialClearCoat>();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/// <summary>
|
|
/// <summary>
|
|
@@ -37,9 +38,26 @@ namespace SharpGLTF.Schema2
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
this.RemoveExtensions<MaterialUnlit>();
|
|
this.RemoveExtensions<MaterialUnlit>();
|
|
|
|
|
+ this.RemoveExtensions<MaterialClearCoat>();
|
|
|
this.SetExtension(new MaterialPBRSpecularGlossiness(this));
|
|
this.SetExtension(new MaterialPBRSpecularGlossiness(this));
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ public void InitializeClearCoat(bool useFallback = false)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (useFallback)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (this._pbrMetallicRoughness == null) this._pbrMetallicRoughness = new MaterialPBRMetallicRoughness();
|
|
|
|
|
+ }
|
|
|
|
|
+ else
|
|
|
|
|
+ {
|
|
|
|
|
+ this._pbrMetallicRoughness = null;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ this.RemoveExtensions<MaterialUnlit>();
|
|
|
|
|
+ this.RemoveExtensions<MaterialPBRSpecularGlossiness>();
|
|
|
|
|
+ this.SetExtension(new MaterialClearCoat(this));
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
/// <summary>
|
|
/// <summary>
|
|
|
/// Initializes this <see cref="Material"/> instance with Unlit attributes.
|
|
/// Initializes this <see cref="Material"/> instance with Unlit attributes.
|
|
|
/// </summary>
|
|
/// </summary>
|
|
@@ -66,6 +84,13 @@ namespace SharpGLTF.Schema2
|
|
|
foreach (var c in channels) yield return c;
|
|
foreach (var c in channels) yield return c;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ var clearCoat = this.GetExtension<MaterialClearCoat>();
|
|
|
|
|
+ if (clearCoat != null)
|
|
|
|
|
+ {
|
|
|
|
|
+ var channels = clearCoat.GetChannels(this);
|
|
|
|
|
+ foreach (var c in channels) yield return c;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
yield return new MaterialChannel
|
|
yield return new MaterialChannel
|
|
|
(
|
|
(
|
|
|
this, "Normal",
|
|
this, "Normal",
|
|
@@ -262,4 +287,62 @@ namespace SharpGLTF.Schema2
|
|
|
{
|
|
{
|
|
|
internal MaterialUnlit(Material material) { }
|
|
internal MaterialUnlit(Material material) { }
|
|
|
}
|
|
}
|
|
|
|
|
+
|
|
|
|
|
+ internal sealed partial class MaterialClearCoat
|
|
|
|
|
+ {
|
|
|
|
|
+ internal MaterialClearCoat(Material material) { }
|
|
|
|
|
+
|
|
|
|
|
+ protected override IEnumerable<ExtraProperties> GetLogicalChildren()
|
|
|
|
|
+ {
|
|
|
|
|
+ return base.GetLogicalChildren().ConcatItems(_clearcoatTexture, _clearcoatRoughnessTexture, _clearcoatNormalTexture);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private TextureInfo _GetClearCoatTexture(bool create)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (create && _clearcoatTexture == null) _clearcoatTexture = new TextureInfo();
|
|
|
|
|
+ return _clearcoatTexture;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private TextureInfo _GetClearCoatRoughnessTexture(bool create)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (create && _clearcoatRoughnessTexture == null) _clearcoatRoughnessTexture = new TextureInfo();
|
|
|
|
|
+ return _clearcoatRoughnessTexture;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ private MaterialNormalTextureInfo _GetClearCoatNormalTexture(bool create)
|
|
|
|
|
+ {
|
|
|
|
|
+ if (create && _clearcoatNormalTexture == null) _clearcoatNormalTexture = new MaterialNormalTextureInfo();
|
|
|
|
|
+ return _clearcoatNormalTexture;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+ public IEnumerable<MaterialChannel> GetChannels(Material material)
|
|
|
|
|
+ {
|
|
|
|
|
+ yield return new MaterialChannel
|
|
|
|
|
+ (
|
|
|
|
|
+ material, "ClearCoat",
|
|
|
|
|
+ _GetClearCoatTexture,
|
|
|
|
|
+ (float)_clearcoatFactorDefault,
|
|
|
|
|
+ () => (float)this._clearcoatFactor.AsValue(_clearcoatFactorDefault),
|
|
|
|
|
+ value => this._clearcoatFactor = value
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ yield return new MaterialChannel
|
|
|
|
|
+ (
|
|
|
|
|
+ material, "ClearCoatRoughness",
|
|
|
|
|
+ _GetClearCoatRoughnessTexture,
|
|
|
|
|
+ (float)_clearcoatRoughnessFactorDefault,
|
|
|
|
|
+ () => (float)this._clearcoatRoughnessFactor.AsValue(_clearcoatRoughnessFactorDefault),
|
|
|
|
|
+ value => this._clearcoatRoughnessFactor = value
|
|
|
|
|
+ );
|
|
|
|
|
+
|
|
|
|
|
+ yield return new MaterialChannel
|
|
|
|
|
+ (
|
|
|
|
|
+ material, "ClearCoatNormal",
|
|
|
|
|
+ _GetClearCoatNormalTexture,
|
|
|
|
|
+ MaterialNormalTextureInfo.ScaleDefault,
|
|
|
|
|
+ () => _GetClearCoatNormalTexture(false)?.Scale ?? MaterialNormalTextureInfo.ScaleDefault,
|
|
|
|
|
+ value => _GetClearCoatNormalTexture(true).Scale = value
|
|
|
|
|
+ );
|
|
|
|
|
+ }
|
|
|
|
|
+ }
|
|
|
}
|
|
}
|