MeshStandardNode.js 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /**
  2. * @author sunag / http://www.sunag.com.br/
  3. */
  4. THREE.MeshStandardNode = function () {
  5. THREE.StandardNode.call( this );
  6. this.properties = {
  7. color: new THREE.ColorNode( 0xffffff ),
  8. roughness: new THREE.FloatNode( 0.5 ),
  9. metalness: new THREE.FloatNode( 0.5 ),
  10. normalScale: new THREE.Vector2Node( 1, 1 )
  11. };
  12. };
  13. THREE.MeshStandardNode.prototype = Object.create( THREE.StandardNode.prototype );
  14. THREE.MeshStandardNode.prototype.constructor = THREE.MeshStandardNode;
  15. THREE.MeshStandardNode.prototype.build = function ( builder ) {
  16. var material = builder.material,
  17. props = this.properties;
  18. if ( builder.isShader('fragment') ) {
  19. // slots
  20. // * color
  21. // * map
  22. var color = builder.resolve( props.color.value, props.color ),
  23. map = builder.resolve( props.map );
  24. this.color = map ? new THREE.OperatorNode( color, map, THREE.OperatorNode.MUL ) : color;
  25. // slots
  26. // * roughness
  27. // * roughnessMap
  28. var roughness = builder.resolve( props.roughness.value, props.roughness ),
  29. roughnessMap = builder.resolve( props.roughnessMap );
  30. this.roughness = roughnessMap ? new THREE.OperatorNode( roughness, new THREE.SwitchNode( roughnessMap, "g" ), THREE.OperatorNode.MUL ) : roughness;
  31. // slots
  32. // * metalness
  33. // * metalnessMap
  34. var metalness = builder.resolve( props.metalness.value, props.metalness ),
  35. metalnessMap = builder.resolve( props.metalnessMap );
  36. this.metalness = metalnessMap ? new THREE.OperatorNode( metalness, new THREE.SwitchNode( metalnessMap, "b" ), THREE.OperatorNode.MUL ) : metalness;
  37. // slots
  38. // * normalMap
  39. // * normalScale
  40. if ( props.normalMap ) {
  41. this.normal = new THREE.NormalMapNode( builder.resolve( props.normalMap ) );
  42. this.normal.scale = builder.resolve( props.normalScale );
  43. }
  44. // slots
  45. // * envMap
  46. this.environment = builder.resolve( props.envMap );
  47. }
  48. // build code
  49. return THREE.StandardNode.prototype.build.call( this, builder );
  50. };