MatcapUVNode.js 846 B

123456789101112131415161718192021222324252627282930
  1. import TempNode from '../core/TempNode.js';
  2. import { transformedNormalView } from '../accessors/NormalNode.js';
  3. import { positionViewDirection } from '../accessors/PositionNode.js';
  4. import { nodeImmutable, vec2, vec3 } from '../shadernode/ShaderNode.js';
  5. import { addNodeClass } from '../core/Node.js';
  6. class MatcapUVNode extends TempNode {
  7. constructor() {
  8. super( 'vec2' );
  9. }
  10. setup() {
  11. const x = vec3( positionViewDirection.z, 0, positionViewDirection.x.negate() ).normalize();
  12. const y = positionViewDirection.cross( x );
  13. return vec2( x.dot( transformedNormalView ), y.dot( transformedNormalView ) ).mul( 0.495 ).add( 0.5 ); // 0.495 to remove artifacts caused by undersized matcap disks
  14. }
  15. }
  16. export default MatcapUVNode;
  17. export const matcapUV = nodeImmutable( MatcapUVNode );
  18. addNodeClass( 'MatcapUVNode', MatcapUVNode );