pbrSpecularGlossinessMaterial.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. import { __decorate } from "../../tslib.es6.js";
  2. import { serialize, serializeAsColor3, expandToProperty, serializeAsTexture } from "../../Misc/decorators.js";
  3. import { PBRBaseSimpleMaterial } from "./pbrBaseSimpleMaterial.js";
  4. import { RegisterClass } from "../../Misc/typeStore.js";
  5. import { SerializationHelper } from "../../Misc/decorators.serialization.js";
  6. /**
  7. * The PBR material of BJS following the specular glossiness convention.
  8. *
  9. * This fits to the PBR convention in the GLTF definition:
  10. * https://github.com/KhronosGroup/glTF/tree/2.0/extensions/Khronos/KHR_materials_pbrSpecularGlossiness
  11. */
  12. export class PBRSpecularGlossinessMaterial extends PBRBaseSimpleMaterial {
  13. /**
  14. * Specifies if the reflectivity texture contains the glossiness information in its alpha channel.
  15. */
  16. get useMicroSurfaceFromReflectivityMapAlpha() {
  17. return this._useMicroSurfaceFromReflectivityMapAlpha;
  18. }
  19. /**
  20. * Instantiates a new PBRSpecularGlossinessMaterial instance.
  21. *
  22. * @param name The material name
  23. * @param scene The scene the material will be use in.
  24. */
  25. constructor(name, scene) {
  26. super(name, scene);
  27. this._useMicroSurfaceFromReflectivityMapAlpha = true;
  28. }
  29. /**
  30. * @returns the current class name of the material.
  31. */
  32. getClassName() {
  33. return "PBRSpecularGlossinessMaterial";
  34. }
  35. /**
  36. * Makes a duplicate of the current material.
  37. * @param name - name to use for the new material.
  38. * @returns cloned material instance
  39. */
  40. clone(name) {
  41. const clone = SerializationHelper.Clone(() => new PBRSpecularGlossinessMaterial(name, this.getScene()), this);
  42. clone.id = name;
  43. clone.name = name;
  44. this.clearCoat.copyTo(clone.clearCoat);
  45. this.anisotropy.copyTo(clone.anisotropy);
  46. this.brdf.copyTo(clone.brdf);
  47. this.sheen.copyTo(clone.sheen);
  48. this.subSurface.copyTo(clone.subSurface);
  49. return clone;
  50. }
  51. /**
  52. * Serialize the material to a parsable JSON object.
  53. * @returns the JSON object
  54. */
  55. serialize() {
  56. const serializationObject = SerializationHelper.Serialize(this);
  57. serializationObject.customType = "BABYLON.PBRSpecularGlossinessMaterial";
  58. serializationObject.clearCoat = this.clearCoat.serialize();
  59. serializationObject.anisotropy = this.anisotropy.serialize();
  60. serializationObject.brdf = this.brdf.serialize();
  61. serializationObject.sheen = this.sheen.serialize();
  62. serializationObject.subSurface = this.subSurface.serialize();
  63. serializationObject.iridescence = this.iridescence.serialize();
  64. return serializationObject;
  65. }
  66. /**
  67. * Parses a JSON object corresponding to the serialize function.
  68. * @param source - JSON source object.
  69. * @param scene - the scene to parse to.
  70. * @param rootUrl - root url of the assets.
  71. * @returns a new PBRSpecularGlossinessMaterial.
  72. */
  73. static Parse(source, scene, rootUrl) {
  74. const material = SerializationHelper.Parse(() => new PBRSpecularGlossinessMaterial(source.name, scene), source, scene, rootUrl);
  75. if (source.clearCoat) {
  76. material.clearCoat.parse(source.clearCoat, scene, rootUrl);
  77. }
  78. if (source.anisotropy) {
  79. material.anisotropy.parse(source.anisotropy, scene, rootUrl);
  80. }
  81. if (source.brdf) {
  82. material.brdf.parse(source.brdf, scene, rootUrl);
  83. }
  84. if (source.sheen) {
  85. material.sheen.parse(source.sheen, scene, rootUrl);
  86. }
  87. if (source.subSurface) {
  88. material.subSurface.parse(source.subSurface, scene, rootUrl);
  89. }
  90. if (source.iridescence) {
  91. material.iridescence.parse(source.iridescence, scene, rootUrl);
  92. }
  93. return material;
  94. }
  95. }
  96. __decorate([
  97. serializeAsColor3("diffuse"),
  98. expandToProperty("_markAllSubMeshesAsTexturesDirty", "_albedoColor")
  99. ], PBRSpecularGlossinessMaterial.prototype, "diffuseColor", void 0);
  100. __decorate([
  101. serializeAsTexture(),
  102. expandToProperty("_markAllSubMeshesAsTexturesDirty", "_albedoTexture")
  103. ], PBRSpecularGlossinessMaterial.prototype, "diffuseTexture", void 0);
  104. __decorate([
  105. serializeAsColor3("specular"),
  106. expandToProperty("_markAllSubMeshesAsTexturesDirty", "_reflectivityColor")
  107. ], PBRSpecularGlossinessMaterial.prototype, "specularColor", void 0);
  108. __decorate([
  109. serialize(),
  110. expandToProperty("_markAllSubMeshesAsTexturesDirty", "_microSurface")
  111. ], PBRSpecularGlossinessMaterial.prototype, "glossiness", void 0);
  112. __decorate([
  113. serializeAsTexture(),
  114. expandToProperty("_markAllSubMeshesAsTexturesDirty", "_reflectivityTexture")
  115. ], PBRSpecularGlossinessMaterial.prototype, "specularGlossinessTexture", void 0);
  116. RegisterClass("BABYLON.PBRSpecularGlossinessMaterial", PBRSpecularGlossinessMaterial);
  117. //# sourceMappingURL=pbrSpecularGlossinessMaterial.js.map