Skip to content

Commit

Permalink
Refactorings and clean up
Browse files Browse the repository at this point in the history
Signed-off-by: Levi Pesin <[email protected]>
  • Loading branch information
LeviPesin committed Jan 5, 2024
1 parent 04bafef commit 3bc087f
Show file tree
Hide file tree
Showing 134 changed files with 2,371 additions and 2,312 deletions.
68 changes: 35 additions & 33 deletions examples/jsm/nodes/Nodes.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@
export * from './core/constants.js';

// core
export { default as Node, addNodeClass, createNodeFromType } from './core/Node.js';
export * from './shadernode/ShaderNode.js';

export { default as ArrayUniformNode /* @TODO: arrayUniform */ } from './core/ArrayUniformNode.js';
export { default as AssignNode, assign } from './core/AssignNode.js';
export { default as AttributeNode, attribute } from './core/AttributeNode.js';
Expand All @@ -13,20 +16,8 @@ export { default as CacheNode, cache } from './core/CacheNode.js';
export { default as ConstNode } from './core/ConstNode.js';
export { default as ContextNode, context, label } from './core/ContextNode.js';
export { default as IndexNode, vertexIndex, instanceIndex } from './core/IndexNode.js';
export { default as LightingModel } from './core/LightingModel.js';
export { default as Node, addNodeClass, createNodeFromType } from './core/Node.js';
export { default as VarNode, temp } from './core/VarNode.js';
export { default as NodeAttribute } from './core/NodeAttribute.js';
export { default as NodeBuilder } from './core/NodeBuilder.js';
export { default as NodeCache } from './core/NodeCache.js';
export { default as NodeCode } from './core/NodeCode.js';
export { default as NodeFrame } from './core/NodeFrame.js';
export { default as NodeFunctionInput } from './core/NodeFunctionInput.js';
export { default as NodeKeywords } from './core/NodeKeywords.js';
export { default as NodeUniform } from './core/NodeUniform.js';
export { default as NodeVar } from './core/NodeVar.js';
export { default as NodeVarying } from './core/NodeVarying.js';
export { default as PropertyNode, property, output, diffuseColor, roughness, metalness, specularColor, shininess } from './core/PropertyNode.js';
export { default as PropertyNode, property, vertexPosition, output, position, normal, tangent, diffuseColor, roughness, metalness, specularColor, shininess } from './core/PropertyNode.js';
export { default as StackNode, stack } from './core/StackNode.js';
export { default as TempNode } from './core/TempNode.js';
export { default as UniformNode, uniform } from './core/UniformNode.js';
Expand All @@ -37,11 +28,19 @@ import * as NodeUtils from './core/NodeUtils.js';
export { NodeUtils };

// math
export { default as MathNode, EPSILON, INFINITY, radians, degrees, exp, exp2, log, log2, sqrt, inverseSqrt, floor, ceil, normalize, fract, sin, cos, tan, asin, acos, atan, abs, sign, length, negate, oneMinus, dFdx, dFdy, round, reciprocal, trunc, fwidth, atan2, min, max, mod, step, reflect, distance, difference, dot, cross, pow, pow2, pow3, pow4, transformDirection, mix, clamp, saturate, refract, smoothstep, faceForward } from './math/MathNode.js';
export { default as MathNode, EPSILON, INFINITY, radians, degrees, exp, exp2, log, log2, sqrt, inverseSqrt, floor, ceil, normalize, fract, sin, cos, tan, asin, acos, atan, abs, sign, length, negate, oneMinus, dFdx, dFdy, round, reciprocal, trunc, fwidth, atan2, min, max, mod, step, reflect, distance, difference, dot, cross, pow, pow2, pow3, pow4, transformDirection, mix, clamp, saturate, refract, smoothstep, faceForward, mixElement, smoothstepElement } from './math/MathNode.js';
export { default as OperatorNode, add, sub, mul, div, remainder, equal, lessThan, greaterThan, lessThanEqual, greaterThanEqual, and, or, xor, bitAnd, bitOr, bitXor, shiftLeft, shiftRight } from './math/OperatorNode.js';
export { default as CondNode, cond } from './math/CondNode.js';
export { default as HashNode, hash } from './math/HashNode.js';

// code
export { default as ExpressionNode, expression } from './code/ExpressionNode.js';
export { default as CodeNode, code, js, wgsl, glsl } from './code/CodeNode.js';
export { default as FunctionCallNode, call } from './code/FunctionCallNode.js';
export { default as FunctionNode, nativeFn, wgslFn, glslFn } from './code/FunctionNode.js';
export { default as ScriptableNode, scriptable, global } from './code/ScriptableNode.js';
export { default as ScriptableValueNode, scriptableValue } from './code/ScriptableValueNode.js';

// utils
export { default as ArrayElementNode } from './utils/ArrayElementNode.js';
export { default as ConvertNode } from './utils/ConvertNode.js';
Expand All @@ -53,18 +52,15 @@ export { default as MatcapUVNode, matcapUV } from './utils/MatcapUVNode.js';
export { default as MaxMipLevelNode, maxMipLevel } from './utils/MaxMipLevelNode.js';
export { default as OscNode, oscSine, oscSquare, oscTriangle, oscSawtooth } from './utils/OscNode.js';
export { default as PackingNode, directionToColor, colorToDirection } from './utils/PackingNode.js';
export { default as RemapNode, remap, remapClamp } from './utils/RemapNode.js';
export { default as RemapNode, remap, remapClamp, remapIn, remapInClamp } from './utils/RemapNode.js';
export { default as RotateUVNode, rotateUV } from './utils/RotateUVNode.js';
export { default as SetNode } from './utils/SetNode.js';
export { default as SpecularMIPLevelNode, specularMIPLevel } from './utils/SpecularMIPLevelNode.js';
export { default as SpecularMipLevelNode, specularMipLevel } from './utils/SpecularMipLevelNode.js';
export { default as SplitNode } from './utils/SplitNode.js';
export { default as SpriteSheetUVNode, spritesheetUV } from './utils/SpriteSheetUVNode.js';
export { default as TimerNode, timerLocal, timerGlobal, timerDelta, frameId } from './utils/TimerNode.js';
export { default as TriplanarTexturesNode, triplanarTextures, triplanarTexture } from './utils/TriplanarTexturesNode.js';

// shadernode
export * from './shadernode/ShaderNode.js';

// accessors
export { default as BitangentNode, bitangentGeometry, bitangentLocal, bitangentView, bitangentWorld, transformedBitangentView, transformedBitangentWorld } from './accessors/BitangentNode.js';
export { default as BufferAttributeNode, bufferAttribute, dynamicBufferAttribute, instancedBufferAttribute, instancedDynamicBufferAttribute } from './accessors/BufferAttributeNode.js';
Expand Down Expand Up @@ -92,6 +88,7 @@ export { default as SceneNode, backgroundBlurriness, backgroundIntensity } from
export { default as StorageBufferNode, storage } from './accessors/StorageBufferNode.js';
export { default as TangentNode, tangentGeometry, tangentLocal, tangentView, tangentWorld, transformedTangentView, transformedTangentWorld } from './accessors/TangentNode.js';
export { default as TextureNode, texture, /*textureLevel,*/ sampler } from './accessors/TextureNode.js';
export { default as TextureSizeNode, textureSize } from './accessors/TextureSizeNode.js';
export { default as TextureStoreNode, textureStore } from './accessors/TextureStoreNode.js';
export { default as UVNode, uv } from './accessors/UVNode.js';
export { default as UserDataNode, userData } from './accessors/UserDataNode.js';
Expand All @@ -111,14 +108,6 @@ export { default as ViewportSharedTextureNode, viewportSharedTexture } from './d
export { default as ViewportDepthTextureNode, viewportDepthTexture } from './display/ViewportDepthTextureNode.js';
export { default as ViewportDepthNode, viewZToOrthographicDepth, orthographicDepthToViewZ, viewZToPerspectiveDepth, perspectiveDepthToViewZ, depth, depthTexture } from './display/ViewportDepthNode.js';

// code
export { default as ExpressionNode, expression } from './code/ExpressionNode.js';
export { default as CodeNode, code, js, wgsl, glsl } from './code/CodeNode.js';
export { default as FunctionCallNode, call } from './code/FunctionCallNode.js';
export { default as FunctionNode, wgslFn, glslFn } from './code/FunctionNode.js';
export { default as ScriptableNode, scriptable, global } from './code/ScriptableNode.js';
export { default as ScriptableValueNode, scriptableValue } from './code/ScriptableValueNode.js';

// fog
export { default as FogNode, fog } from './fog/FogNode.js';
export { default as FogRangeNode, rangeFog } from './fog/FogRangeNode.js';
Expand All @@ -131,15 +120,16 @@ export { default as RangeNode, range } from './geometry/RangeNode.js';
export { default as ComputeNode, compute } from './gpgpu/ComputeNode.js';

// lighting
export { default as LightingModel } from './core/LightingModel.js';
export { default as LightNode, lightTargetDirection } from './lighting/LightNode.js';
export { default as LightsNode, lights, lightsWithoutWrap, addLightNode } from './lighting/LightsNode.js';
export { default as LightingNode /* @TODO: lighting (abstract), light */ } from './lighting/LightingNode.js';
export { default as LightingContextNode, lightingContext } from './lighting/LightingContextNode.js';
export { default as PointLightNode } from './lighting/PointLightNode.js';
export { default as DirectionalLightNode } from './lighting/DirectionalLightNode.js';
export { default as SpotLightNode } from './lighting/SpotLightNode.js';
export { default as IESSpotLightNode } from './lighting/IESSpotLightNode.js';
export { default as AmbientLightNode } from './lighting/AmbientLightNode.js';
export { default as LightsNode, lights, lightsWithoutWrap, addLightNode } from './lighting/LightsNode.js';
export { default as LightingNode /* @TODO: lighting (abstract), light */ } from './lighting/LightingNode.js';
export { default as LightingContextNode, lightingContext } from './lighting/LightingContextNode.js';
export { default as HemisphereLightNode } from './lighting/HemisphereLightNode.js';
export { default as EnvironmentNode } from './lighting/EnvironmentNode.js';
export { default as AONode } from './lighting/AONode.js';
Expand All @@ -153,9 +143,6 @@ export { default as NodeLoader } from './loaders/NodeLoader.js';
export { default as NodeObjectLoader } from './loaders/NodeObjectLoader.js';
export { default as NodeMaterialLoader } from './loaders/NodeMaterialLoader.js';

// parsers
export { default as GLSLNodeParser } from './parsers/GLSLNodeParser.js'; // @TODO: Move to jsm/renderers/webgl.

// materials
export * from './materials/Materials.js';

Expand All @@ -178,3 +165,18 @@ export { default as getRoughness } from './functions/material/getRoughness.js';

export { default as PhongLightingModel } from './functions/PhongLightingModel.js';
export { default as PhysicalLightingModel } from './functions/PhysicalLightingModel.js';

// node builder
export { default as NodeBuilder } from './core/NodeBuilder.js';
export { default as NodeAttribute } from './core/NodeAttribute.js';
export { default as NodeCache } from './core/NodeCache.js';
export { default as NodeCode } from './core/NodeCode.js';
export { default as NodeFrame } from './core/NodeFrame.js';
export { default as NodeFunction } from './core/NodeFunction.js';
export { default as NodeFunctionInput } from './core/NodeFunctionInput.js';
export { default as NodeKeywords } from './core/NodeKeywords.js';
export { default as NodeParser } from './core/NodeParser.js';
export { default as NodeUniform } from './core/NodeUniform.js';
export { default as NodeVar } from './core/NodeVar.js';
export { default as NodeVarying } from './core/NodeVarying.js';
export { default as GLSLNodeParser } from './parsers/GLSLNodeParser.js'; // @TODO: Move to jsm/renderers/webgl.
32 changes: 19 additions & 13 deletions examples/jsm/nodes/accessors/BitangentNode.js
Original file line number Diff line number Diff line change
@@ -1,12 +1,10 @@
import Node, { addNodeClass } from '../core/Node.js';
import { varying } from '../core/VaryingNode.js';
import { normalize } from '../math/MathNode.js';
import { cameraViewMatrix } from './CameraNode.js';
import { normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView } from './NormalNode.js';
import { tangentGeometry, tangentLocal, tangentView, tangentWorld, transformedTangentView } from './TangentNode.js';
import TempNode from '../core/TempNode.js';
import { addNodeClass } from '../core/Node.js';
import { normalGeometry, normalLocal, normalView, normalWorld, transformedNormalView, transformedNormalWorld } from './NormalNode.js';
import { tangentGeometry, tangentLocal, tangentView, tangentWorld, transformedTangentView, transformedTangentWorld } from './TangentNode.js';
import { nodeImmutable } from '../shadernode/ShaderNode.js';

class BitangentNode extends Node {
class BitangentNode extends TempNode {

constructor( scope = BitangentNode.LOCAL ) {

Expand All @@ -22,7 +20,7 @@ class BitangentNode extends Node {

}

generate( builder ) {
setup( /*builder*/ ) {

const scope = this.scope;

Expand All @@ -44,13 +42,19 @@ class BitangentNode extends Node {

crossNormalTangent = normalWorld.cross( tangentWorld );

} else if ( scope === BitangentNode.TRANSFORMED_VIEW ) {

crossNormalTangent = transformedNormalView.cross( transformedTangentView );

} else if ( scope === BitangentNode.TRANSFORMED_WORLD ) {

crossNormalTangent = transformedNormalWorld.cross( transformedTangentWorld );

}

const vertexNode = crossNormalTangent.mul( tangentGeometry.w ).xyz;

const outputNode = normalize( varying( vertexNode ) );

return outputNode.build( builder, this.getNodeType( builder ) );
return vertexNode.varying().normalize();

}

Expand All @@ -76,14 +80,16 @@ BitangentNode.GEOMETRY = 'geometry';
BitangentNode.LOCAL = 'local';
BitangentNode.VIEW = 'view';
BitangentNode.WORLD = 'world';
BitangentNode.TRANSFORMED_VIEW = 'transformedView';
BitangentNode.TRANSFORMED_WORLD = 'transformedWorld';

export default BitangentNode;

export const bitangentGeometry = nodeImmutable( BitangentNode, BitangentNode.GEOMETRY );
export const bitangentLocal = nodeImmutable( BitangentNode, BitangentNode.LOCAL );
export const bitangentView = nodeImmutable( BitangentNode, BitangentNode.VIEW );
export const bitangentWorld = nodeImmutable( BitangentNode, BitangentNode.WORLD );
export const transformedBitangentView = normalize( transformedNormalView.cross( transformedTangentView ).mul( tangentGeometry.w ) );
export const transformedBitangentWorld = normalize( transformedBitangentView.transformDirection( cameraViewMatrix ) );
export const transformedBitangentView = nodeImmutable( BitangentNode, BitangentNode.TRANSFORMED_VIEW );
export const transformedBitangentWorld = nodeImmutable( BitangentNode, BitangentNode.TRANSFORMED_WORLD );

addNodeClass( 'BitangentNode', BitangentNode );
23 changes: 5 additions & 18 deletions examples/jsm/nodes/accessors/BufferAttributeNode.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import InputNode from '../core/InputNode.js';
import { addNodeClass } from '../core/Node.js';
import { varying } from '../core/VaryingNode.js';
import { nodeObject, addNodeElement } from '../shadernode/ShaderNode.js';
import { InterleavedBufferAttribute, InterleavedBuffer, StaticDrawUsage, DynamicDrawUsage } from 'three';

Expand Down Expand Up @@ -61,30 +60,18 @@ class BufferAttributeNode extends InputNode {
this.attribute = bufferAttribute;
this.attribute.isInstancedBufferAttribute = this.instanced; // @TODO: Add a possible: InstancedInterleavedBufferAttribute

if ( builder.getShaderStage() !== 'vertex' ) return this.varying();

}

generate( builder ) {

const nodeType = this.getNodeType( builder );
if ( builder.getShaderStage() !== 'vertex' ) return super.generate( builder );

const nodeUniform = builder.getBufferAttributeFromNode( this, nodeType );
const nodeUniform = builder.getBufferAttributeFromNode( this );
const propertyName = builder.getPropertyName( nodeUniform );

let output = null;

if ( builder.shaderStage === 'vertex' ) {

output = propertyName;

} else {

const nodeVarying = varying( this );

output = nodeVarying.build( builder, nodeType );

}

return output;
return propertyName;

}

Expand Down
6 changes: 6 additions & 0 deletions examples/jsm/nodes/accessors/BufferNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,12 @@ class BufferNode extends UniformNode {

}

getNodeType() {

return `${ this.bufferType }[ ${ this.bufferCount } ]`;

}

}

export default BufferNode;
Expand Down
7 changes: 3 additions & 4 deletions examples/jsm/nodes/accessors/CameraNode.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
import Object3DNode from './Object3DNode.js';
import { addNodeClass } from '../core/Node.js';
import { label } from '../core/ContextNode.js';
import { nodeImmutable } from '../shadernode/ShaderNode.js';

class CameraNode extends Object3DNode {
Expand Down Expand Up @@ -61,7 +60,7 @@ class CameraNode extends Object3DNode {

}

generate( builder ) {
setup() {

const scope = this.scope;

Expand All @@ -75,7 +74,7 @@ class CameraNode extends Object3DNode {

}

return super.generate( builder );
return super.setup();

}

Expand All @@ -87,7 +86,7 @@ CameraNode.FAR = 'far';

export default CameraNode;

export const cameraProjectionMatrix = label( nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX ), 'projectionMatrix' );
export const cameraProjectionMatrix = nodeImmutable( CameraNode, CameraNode.PROJECTION_MATRIX ).label( 'projectionMatrix' );
export const cameraNear = nodeImmutable( CameraNode, CameraNode.NEAR );
export const cameraFar = nodeImmutable( CameraNode, CameraNode.FAR );
export const cameraViewMatrix = nodeImmutable( CameraNode, CameraNode.VIEW_MATRIX );
Expand Down
Loading

0 comments on commit 3bc087f

Please sign in to comment.