123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- import { Vector2 } from '../math/Vector2.js';
- import { MeshStandardMaterial } from './MeshStandardMaterial.js';
- import { Color } from '../math/Color.js';
- import * as MathUtils from '../math/MathUtils.js';
- /**
- * parameters = {
- * clearcoat: <float>,
- * clearcoatMap: new THREE.Texture( <Image> ),
- * clearcoatRoughness: <float>,
- * clearcoatRoughnessMap: new THREE.Texture( <Image> ),
- * clearcoatNormalScale: <Vector2>,
- * clearcoatNormalMap: new THREE.Texture( <Image> ),
- *
- * ior: <float>,
- * reflectivity: <float>,
- *
- * sheenTint: <Color>,
- *
- * transmission: <float>,
- * transmissionMap: new THREE.Texture( <Image> ),
- *
- * thickness: <float>,
- * thicknessMap: new THREE.Texture( <Image> ),
- * attenuationDistance: <float>,
- * attenuationTint: <Color>,
- *
- * specularIntensity: <float>,
- * specularIntensityhMap: new THREE.Texture( <Image> ),
- * specularTint: <Color>,
- * specularTintMap: new THREE.Texture( <Image> )
- * }
- */
- class MeshPhysicalMaterial extends MeshStandardMaterial {
- #clearcoat = 0;
- #transmission = 0;
- constructor( parameters ) {
- super();
- this.defines = {
- 'STANDARD': '',
- 'PHYSICAL': ''
- };
- this.type = 'MeshPhysicalMaterial';
- this.clearcoatMap = null;
- this.clearcoatRoughness = 0.0;
- this.clearcoatRoughnessMap = null;
- this.clearcoatNormalScale = new Vector2( 1, 1 );
- this.clearcoatNormalMap = null;
- this.ior = 1.5;
- Object.defineProperty( this, 'reflectivity', {
- get: function () {
- return ( MathUtils.clamp( 2.5 * ( this.ior - 1 ) / ( this.ior + 1 ), 0, 1 ) );
- },
- set: function ( reflectivity ) {
- this.ior = ( 1 + 0.4 * reflectivity ) / ( 1 - 0.4 * reflectivity );
- }
- } );
- this.sheenTint = new Color( 0x000000 );
- this.transmission = 0.0;
- this.transmissionMap = null;
- this.thickness = 0.01;
- this.thicknessMap = null;
- this.attenuationDistance = 0.0;
- this.attenuationTint = new Color( 1, 1, 1 );
- this.specularIntensity = 1.0;
- this.specularIntensityMap = null;
- this.specularTint = new Color( 1, 1, 1 );
- this.specularTintMap = null;
- this.setValues( parameters );
- }
- get clearcoat() {
- return this.#clearcoat;
- }
- set clearcoat( value ) {
- if ( this.#clearcoat > 0 !== value > 0 ) {
- this.version ++;
- }
- this.#clearcoat = value;
- }
- get transmission() {
- return this.#transmission;
- }
- set transmission( value ) {
- if ( this.#transmission > 0 !== value > 0 ) {
- this.version ++;
- }
- this.#transmission = value;
- }
- copy( source ) {
- super.copy( source );
- this.defines = {
- 'STANDARD': '',
- 'PHYSICAL': ''
- };
- this.clearcoat = source.clearcoat;
- this.clearcoatMap = source.clearcoatMap;
- this.clearcoatRoughness = source.clearcoatRoughness;
- this.clearcoatRoughnessMap = source.clearcoatRoughnessMap;
- this.clearcoatNormalMap = source.clearcoatNormalMap;
- this.clearcoatNormalScale.copy( source.clearcoatNormalScale );
- this.ior = source.ior;
- this.sheenTint.copy( source.sheenTint );
- this.transmission = source.transmission;
- this.transmissionMap = source.transmissionMap;
- this.thickness = source.thickness;
- this.thicknessMap = source.thicknessMap;
- this.attenuationDistance = source.attenuationDistance;
- this.attenuationTint.copy( source.attenuationTint );
- this.specularIntensity = source.specularIntensity;
- this.specularIntensityMap = source.specularIntensityMap;
- this.specularTint.copy( source.specularTint );
- this.specularTintMap = source.specularTintMap;
- return this;
- }
- }
- MeshPhysicalMaterial.prototype.isMeshPhysicalMaterial = true;
- export { MeshPhysicalMaterial };
|