|
@@ -1,8 +1,6 @@
|
|
|
import Node, { addNodeClass } from '../core/Node.js';
|
|
|
-import { uniform } from '../core/UniformNode.js';
|
|
|
import { materialReference } from './MaterialReferenceNode.js';
|
|
|
-import { uv } from './UVNode.js';
|
|
|
-import { nodeImmutable, vec3 } from '../shadernode/ShaderNode.js';
|
|
|
+import { nodeImmutable } from '../shadernode/ShaderNode.js';
|
|
|
|
|
|
class MaterialNode extends Node {
|
|
|
|
|
@@ -27,15 +25,11 @@ class MaterialNode extends Node {
|
|
|
|
|
|
return 'float';
|
|
|
|
|
|
- } else if ( scope === MaterialNode.UV ) {
|
|
|
-
|
|
|
- return 'vec2';
|
|
|
-
|
|
|
- } else if ( scope === MaterialNode.EMISSIVE ) {
|
|
|
+ } else if ( scope === MaterialNode.EMISSIVE || scope === MaterialNode.SHEEN ) {
|
|
|
|
|
|
return 'vec3';
|
|
|
|
|
|
- } else if ( scope === MaterialNode.ROUGHNESS || scope === MaterialNode.METALNESS || scope === MaterialNode.SPECULAR || scope === MaterialNode.SHININESS ) {
|
|
|
+ } else if ( scope === MaterialNode.ROUGHNESS || scope === MaterialNode.METALNESS || scope === MaterialNode.SPECULAR || scope === MaterialNode.SHININESS || scope === MaterialNode.CLEARCOAT_ROUGHNESS || scope === MaterialNode.SHEEN_ROUGHNESS ) {
|
|
|
|
|
|
return 'float';
|
|
|
|
|
@@ -64,7 +58,6 @@ class MaterialNode extends Node {
|
|
|
//@TODO: Check if it can be cached by property name.
|
|
|
|
|
|
const textureRefNode = materialReference( property, 'texture' );
|
|
|
- textureRefNode.node.uvNode = materialUV;
|
|
|
|
|
|
return textureRefNode;
|
|
|
|
|
@@ -201,59 +194,40 @@ class MaterialNode extends Node {
|
|
|
|
|
|
}
|
|
|
|
|
|
- } else if ( scope === MaterialNode.ROTATION ) {
|
|
|
-
|
|
|
- node = this.getFloat( 'rotation' );
|
|
|
-
|
|
|
- } else if ( scope === MaterialNode.UV ) {
|
|
|
+ } else if ( scope === MaterialNode.SHEEN ) {
|
|
|
|
|
|
- // uv repeat and offset setting priorities
|
|
|
+ const sheenNode = this.getColor( 'sheenColor' ).mul( this.getFloat( 'sheen' ) ); // Move this mul() to CPU
|
|
|
|
|
|
- let uvScaleMap =
|
|
|
- material.map ||
|
|
|
- material.specularMap ||
|
|
|
- material.displacementMap ||
|
|
|
- material.normalMap ||
|
|
|
- material.bumpMap ||
|
|
|
- material.roughnessMap ||
|
|
|
- material.metalnessMap ||
|
|
|
- material.alphaMap ||
|
|
|
- material.emissiveMap ||
|
|
|
- material.clearcoatMap ||
|
|
|
- material.clearcoatNormalMap ||
|
|
|
- material.clearcoatRoughnessMap ||
|
|
|
- material.iridescenceMap ||
|
|
|
- material.iridescenceThicknessMap ||
|
|
|
- material.specularIntensityMap ||
|
|
|
- material.specularColorMap ||
|
|
|
- material.transmissionMap ||
|
|
|
- material.thicknessMap ||
|
|
|
- material.sheenColorMap ||
|
|
|
- material.sheenRoughnessMap;
|
|
|
+ if ( material.sheenColorMap && material.sheenColorMap.isTexture === true ) {
|
|
|
|
|
|
- if ( uvScaleMap ) {
|
|
|
+ node = sheenNode.mul( this.getTexture( 'sheenColorMap' ).rgb );
|
|
|
|
|
|
- // backwards compatibility
|
|
|
- if ( uvScaleMap.isWebGLRenderTarget ) {
|
|
|
+ } else {
|
|
|
|
|
|
- uvScaleMap = uvScaleMap.texture;
|
|
|
+ node = sheenNode;
|
|
|
|
|
|
- }
|
|
|
+ }
|
|
|
|
|
|
- if ( uvScaleMap.matrixAutoUpdate === true ) {
|
|
|
+ } else if ( scope === MaterialNode.SHEEN_ROUGHNESS ) {
|
|
|
|
|
|
- uvScaleMap.updateMatrix();
|
|
|
+ const sheenRoughnessNode = this.getFloat( 'sheenRoughness' );
|
|
|
|
|
|
- }
|
|
|
+ if ( material.sheenRoughnessMap && material.sheenRoughnessMap.isTexture === true ) {
|
|
|
|
|
|
- node = uniform( uvScaleMap.matrix ).mul( vec3( uv(), 1 ) );
|
|
|
+ node = sheenRoughnessNode.mul( this.getTexture( 'sheenRoughnessMap' ).a );
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- node = uv();
|
|
|
+ node = sheenRoughnessNode;
|
|
|
|
|
|
}
|
|
|
|
|
|
+ node = node.clamp( 0.07, 1.0 );
|
|
|
+
|
|
|
+ } else if ( scope === MaterialNode.ROTATION ) {
|
|
|
+
|
|
|
+ node = this.getFloat( 'rotation' );
|
|
|
+
|
|
|
} else {
|
|
|
|
|
|
const outputType = this.getNodeType( builder );
|
|
@@ -280,11 +254,11 @@ MaterialNode.CLEARCOAT = 'clearcoat';
|
|
|
MaterialNode.CLEARCOAT_ROUGHNESS = 'clearcoatRoughness';
|
|
|
MaterialNode.EMISSIVE = 'emissive';
|
|
|
MaterialNode.ROTATION = 'rotation';
|
|
|
-MaterialNode.UV = 'uv';
|
|
|
+MaterialNode.SHEEN = 'sheen';
|
|
|
+MaterialNode.SHEEN_ROUGHNESS = 'sheenRoughness';
|
|
|
|
|
|
export default MaterialNode;
|
|
|
|
|
|
-export const materialUV = nodeImmutable( MaterialNode, MaterialNode.UV );
|
|
|
export const materialAlphaTest = nodeImmutable( MaterialNode, MaterialNode.ALPHA_TEST );
|
|
|
export const materialColor = nodeImmutable( MaterialNode, MaterialNode.COLOR );
|
|
|
export const materialShininess = nodeImmutable( MaterialNode, MaterialNode.SHININESS );
|
|
@@ -297,5 +271,7 @@ export const materialMetalness = nodeImmutable( MaterialNode, MaterialNode.METAL
|
|
|
export const materialClearcoat = nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT );
|
|
|
export const materialClearcoatRoughness = nodeImmutable( MaterialNode, MaterialNode.CLEARCOAT_ROUGHNESS );
|
|
|
export const materialRotation = nodeImmutable( MaterialNode, MaterialNode.ROTATION );
|
|
|
+export const materialSheen = nodeImmutable( MaterialNode, MaterialNode.SHEEN );
|
|
|
+export const materialSheenRoughness = nodeImmutable( MaterialNode, MaterialNode.SHEEN_ROUGHNESS );
|
|
|
|
|
|
addNodeClass( MaterialNode );
|