60 lines
		
	
	
		
			918 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			60 lines
		
	
	
		
			918 B
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|  | import { MaterialLoader } from 'three'; | ||
|  | import { createNodeMaterialFromType } from '../materials/Materials.js'; | ||
|  | 
 | ||
|  | const superFromTypeFunction = MaterialLoader.createMaterialFromType; | ||
|  | 
 | ||
|  | MaterialLoader.createMaterialFromType = function ( type ) { | ||
|  | 
 | ||
|  | 	const material = createNodeMaterialFromType( type ); | ||
|  | 
 | ||
|  | 	if ( material !== undefined ) { | ||
|  | 
 | ||
|  | 		return material; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	return superFromTypeFunction.call( this, type ); | ||
|  | 
 | ||
|  | }; | ||
|  | 
 | ||
|  | class NodeMaterialLoader extends MaterialLoader { | ||
|  | 
 | ||
|  | 	constructor( manager ) { | ||
|  | 
 | ||
|  | 		super( manager ); | ||
|  | 
 | ||
|  | 		this.nodes = {}; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	parse( json ) { | ||
|  | 
 | ||
|  | 		const material = super.parse( json ); | ||
|  | 
 | ||
|  | 		const nodes = this.nodes; | ||
|  | 		const inputNodes = json.inputNodes; | ||
|  | 
 | ||
|  | 		for ( const property in inputNodes ) { | ||
|  | 
 | ||
|  | 			const uuid = inputNodes[ property ]; | ||
|  | 
 | ||
|  | 			material[ property ] = nodes[ uuid ]; | ||
|  | 
 | ||
|  | 		} | ||
|  | 
 | ||
|  | 		return material; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | 	setNodes( value ) { | ||
|  | 
 | ||
|  | 		this.nodes = value; | ||
|  | 
 | ||
|  | 		return this; | ||
|  | 
 | ||
|  | 	} | ||
|  | 
 | ||
|  | } | ||
|  | 
 | ||
|  | export default NodeMaterialLoader; |