Browse Source

WebGPURenderer: Added basic `three.webgpu.nodes.js` (#29273)

sunag 1 year ago
parent
commit
fe3201979b

+ 200 - 0
src/Three.WebGPU.Nodes.js

@@ -0,0 +1,200 @@
+import { REVISION } from './constants.js';
+
+export { WebGLArrayRenderTarget } from './renderers/WebGLArrayRenderTarget.js';
+export { WebGL3DRenderTarget } from './renderers/WebGL3DRenderTarget.js';
+export { WebGLCubeRenderTarget } from './renderers/WebGLCubeRenderTarget.js';
+export { WebGLRenderTarget } from './renderers/WebGLRenderTarget.js';
+//export { WebGLRenderer } from './renderers/WebGLRenderer.js';
+//export { ShaderLib } from './renderers/shaders/ShaderLib.js';
+//export { UniformsLib } from './renderers/shaders/UniformsLib.js';
+//export { UniformsUtils } from './renderers/shaders/UniformsUtils.js';
+//export { ShaderChunk } from './renderers/shaders/ShaderChunk.js';
+export { FogExp2 } from './scenes/FogExp2.js';
+export { Fog } from './scenes/Fog.js';
+export { Scene } from './scenes/Scene.js';
+export { Sprite } from './objects/Sprite.js';
+export { LOD } from './objects/LOD.js';
+export { SkinnedMesh } from './objects/SkinnedMesh.js';
+export { Skeleton } from './objects/Skeleton.js';
+export { Bone } from './objects/Bone.js';
+export { Mesh } from './objects/Mesh.js';
+export { InstancedMesh } from './objects/InstancedMesh.js';
+export { BatchedMesh } from './objects/BatchedMesh.js';
+export { LineSegments } from './objects/LineSegments.js';
+export { LineLoop } from './objects/LineLoop.js';
+export { Line } from './objects/Line.js';
+export { Points } from './objects/Points.js';
+export { Group } from './objects/Group.js';
+export { VideoTexture } from './textures/VideoTexture.js';
+export { FramebufferTexture } from './textures/FramebufferTexture.js';
+export { Source } from './textures/Source.js';
+export { DataTexture } from './textures/DataTexture.js';
+export { DataArrayTexture } from './textures/DataArrayTexture.js';
+export { Data3DTexture } from './textures/Data3DTexture.js';
+export { CompressedTexture } from './textures/CompressedTexture.js';
+export { CompressedArrayTexture } from './textures/CompressedArrayTexture.js';
+export { CompressedCubeTexture } from './textures/CompressedCubeTexture.js';
+export { CubeTexture } from './textures/CubeTexture.js';
+export { CanvasTexture } from './textures/CanvasTexture.js';
+export { DepthTexture } from './textures/DepthTexture.js';
+export { Texture } from './textures/Texture.js';
+export * from './geometries/Geometries.js';
+export * from './materials/Materials.js';
+export { Material } from './materials/Material.js';
+export { AnimationLoader } from './loaders/AnimationLoader.js';
+export { CompressedTextureLoader } from './loaders/CompressedTextureLoader.js';
+export { CubeTextureLoader } from './loaders/CubeTextureLoader.js';
+export { DataTextureLoader } from './loaders/DataTextureLoader.js';
+export { TextureLoader } from './loaders/TextureLoader.js';
+export { ObjectLoader } from './loaders/ObjectLoader.js';
+export { MaterialLoader } from './loaders/MaterialLoader.js';
+export { BufferGeometryLoader } from './loaders/BufferGeometryLoader.js';
+export { DefaultLoadingManager, LoadingManager } from './loaders/LoadingManager.js';
+export { ImageLoader } from './loaders/ImageLoader.js';
+export { ImageBitmapLoader } from './loaders/ImageBitmapLoader.js';
+export { FileLoader } from './loaders/FileLoader.js';
+export { Loader } from './loaders/Loader.js';
+export { LoaderUtils } from './loaders/LoaderUtils.js';
+export { Cache } from './loaders/Cache.js';
+export { AudioLoader } from './loaders/AudioLoader.js';
+export { SpotLight } from './lights/SpotLight.js';
+export { PointLight } from './lights/PointLight.js';
+export { RectAreaLight } from './lights/RectAreaLight.js';
+export { HemisphereLight } from './lights/HemisphereLight.js';
+export { DirectionalLight } from './lights/DirectionalLight.js';
+export { AmbientLight } from './lights/AmbientLight.js';
+export { Light } from './lights/Light.js';
+export { LightProbe } from './lights/LightProbe.js';
+export { StereoCamera } from './cameras/StereoCamera.js';
+export { PerspectiveCamera } from './cameras/PerspectiveCamera.js';
+export { OrthographicCamera } from './cameras/OrthographicCamera.js';
+export { CubeCamera } from './cameras/CubeCamera.js';
+export { ArrayCamera } from './cameras/ArrayCamera.js';
+export { Camera } from './cameras/Camera.js';
+export { AudioListener } from './audio/AudioListener.js';
+export { PositionalAudio } from './audio/PositionalAudio.js';
+export { AudioContext } from './audio/AudioContext.js';
+export { AudioAnalyser } from './audio/AudioAnalyser.js';
+export { Audio } from './audio/Audio.js';
+export { VectorKeyframeTrack } from './animation/tracks/VectorKeyframeTrack.js';
+export { StringKeyframeTrack } from './animation/tracks/StringKeyframeTrack.js';
+export { QuaternionKeyframeTrack } from './animation/tracks/QuaternionKeyframeTrack.js';
+export { NumberKeyframeTrack } from './animation/tracks/NumberKeyframeTrack.js';
+export { ColorKeyframeTrack } from './animation/tracks/ColorKeyframeTrack.js';
+export { BooleanKeyframeTrack } from './animation/tracks/BooleanKeyframeTrack.js';
+export { PropertyMixer } from './animation/PropertyMixer.js';
+export { PropertyBinding } from './animation/PropertyBinding.js';
+export { KeyframeTrack } from './animation/KeyframeTrack.js';
+export { AnimationUtils } from './animation/AnimationUtils.js';
+export { AnimationObjectGroup } from './animation/AnimationObjectGroup.js';
+export { AnimationMixer } from './animation/AnimationMixer.js';
+export { AnimationClip } from './animation/AnimationClip.js';
+export { AnimationAction } from './animation/AnimationAction.js';
+export { RenderTarget } from './core/RenderTarget.js';
+export { Uniform } from './core/Uniform.js';
+export { UniformsGroup } from './core/UniformsGroup.js';
+export { InstancedBufferGeometry } from './core/InstancedBufferGeometry.js';
+export { BufferGeometry } from './core/BufferGeometry.js';
+export { InterleavedBufferAttribute } from './core/InterleavedBufferAttribute.js';
+export { InstancedInterleavedBuffer } from './core/InstancedInterleavedBuffer.js';
+export { InterleavedBuffer } from './core/InterleavedBuffer.js';
+export { InstancedBufferAttribute } from './core/InstancedBufferAttribute.js';
+export { GLBufferAttribute } from './core/GLBufferAttribute.js';
+export * from './core/BufferAttribute.js';
+export { Object3D } from './core/Object3D.js';
+export { Raycaster } from './core/Raycaster.js';
+export { Layers } from './core/Layers.js';
+export { EventDispatcher } from './core/EventDispatcher.js';
+export { Clock } from './core/Clock.js';
+export { QuaternionLinearInterpolant } from './math/interpolants/QuaternionLinearInterpolant.js';
+export { LinearInterpolant } from './math/interpolants/LinearInterpolant.js';
+export { DiscreteInterpolant } from './math/interpolants/DiscreteInterpolant.js';
+export { CubicInterpolant } from './math/interpolants/CubicInterpolant.js';
+export { Interpolant } from './math/Interpolant.js';
+export { Triangle } from './math/Triangle.js';
+export { MathUtils } from './math/MathUtils.js';
+export { Spherical } from './math/Spherical.js';
+export { Cylindrical } from './math/Cylindrical.js';
+export { Plane } from './math/Plane.js';
+export { Frustum } from './math/Frustum.js';
+export { Sphere } from './math/Sphere.js';
+export { Ray } from './math/Ray.js';
+export { Matrix4 } from './math/Matrix4.js';
+export { Matrix3 } from './math/Matrix3.js';
+export { Matrix2 } from './math/Matrix2.js';
+export { Box3 } from './math/Box3.js';
+export { Box2 } from './math/Box2.js';
+export { Line3 } from './math/Line3.js';
+export { Euler } from './math/Euler.js';
+export { Vector4 } from './math/Vector4.js';
+export { Vector3 } from './math/Vector3.js';
+export { Vector2 } from './math/Vector2.js';
+export { Quaternion } from './math/Quaternion.js';
+export { Color } from './math/Color.js';
+export { ColorManagement } from './math/ColorManagement.js';
+export { SphericalHarmonics3 } from './math/SphericalHarmonics3.js';
+export { SpotLightHelper } from './helpers/SpotLightHelper.js';
+export { SkeletonHelper } from './helpers/SkeletonHelper.js';
+export { PointLightHelper } from './helpers/PointLightHelper.js';
+export { HemisphereLightHelper } from './helpers/HemisphereLightHelper.js';
+export { GridHelper } from './helpers/GridHelper.js';
+export { PolarGridHelper } from './helpers/PolarGridHelper.js';
+export { DirectionalLightHelper } from './helpers/DirectionalLightHelper.js';
+export { CameraHelper } from './helpers/CameraHelper.js';
+export { BoxHelper } from './helpers/BoxHelper.js';
+export { Box3Helper } from './helpers/Box3Helper.js';
+export { PlaneHelper } from './helpers/PlaneHelper.js';
+export { ArrowHelper } from './helpers/ArrowHelper.js';
+export { AxesHelper } from './helpers/AxesHelper.js';
+export * from './extras/curves/Curves.js';
+export { Shape } from './extras/core/Shape.js';
+export { Path } from './extras/core/Path.js';
+export { ShapePath } from './extras/core/ShapePath.js';
+export { CurvePath } from './extras/core/CurvePath.js';
+export { Curve } from './extras/core/Curve.js';
+export { Controls } from './extras/Controls.js';
+export { DataUtils } from './extras/DataUtils.js';
+export { ImageUtils } from './extras/ImageUtils.js';
+export { ShapeUtils } from './extras/ShapeUtils.js';
+//export { PMREMGenerator } from './extras/PMREMGenerator.js';
+//export { WebGLUtils } from './renderers/webgl/WebGLUtils.js';
+export { createCanvasElement } from './utils.js';
+export * from './constants.js';
+export * from './Three.Legacy.js';
+
+export * from './materials/nodes/NodeMaterials.js';
+export { default as WebGPURenderer } from './renderers/webgpu/WebGPURenderer.Nodes.js';
+export { default as QuadMesh } from './renderers/common/QuadMesh.js';
+export { default as PMREMGenerator } from './renderers/common/extras/PMREMGenerator.js';
+export { default as PostProcessing } from './renderers/common/PostProcessing.js';
+export { default as StorageTexture } from './renderers/common/StorageTexture.js';
+export { default as StorageBufferAttribute } from './renderers/common/StorageBufferAttribute.js';
+export { default as StorageInstancedBufferAttribute } from './renderers/common/StorageInstancedBufferAttribute.js';
+export { default as IESSpotLight } from './lights/webgpu/IESSpotLight.js';
+export { default as NodeLoader } from './loaders/nodes/NodeLoader.js';
+export { default as NodeObjectLoader } from './loaders/nodes/NodeObjectLoader.js';
+export { default as NodeMaterialLoader } from './loaders/nodes/NodeMaterialLoader.js';
+export * from './nodes/Nodes.js';
+export * from './nodes/TSL.js';
+
+if ( typeof __THREE_DEVTOOLS__ !== 'undefined' ) {
+
+	__THREE_DEVTOOLS__.dispatchEvent( new CustomEvent( 'register', { detail: {
+		revision: REVISION,
+	} } ) );
+
+}
+
+if ( typeof window !== 'undefined' ) {
+
+	if ( window.__THREE__ ) {
+
+		console.warn( 'WARNING: Multiple instances of Three.js being imported.' );
+
+	} else {
+
+		window.__THREE__ = REVISION;
+
+	}
+
+}

+ 1 - 1
src/Three.WebGPU.js

@@ -40,7 +40,6 @@ export { DepthTexture } from './textures/DepthTexture.js';
 export { Texture } from './textures/Texture.js';
 export * from './geometries/Geometries.js';
 export * from './materials/Materials.js';
-export * from './materials/nodes/NodeMaterials.js';
 export { Material } from './materials/Material.js';
 export { AnimationLoader } from './loaders/AnimationLoader.js';
 export { CompressedTextureLoader } from './loaders/CompressedTextureLoader.js';
@@ -163,6 +162,7 @@ export { createCanvasElement } from './utils.js';
 export * from './constants.js';
 export * from './Three.Legacy.js';
 
+export * from './materials/nodes/NodeMaterials.js';
 export { default as WebGPURenderer } from './renderers/webgpu/WebGPURenderer.js';
 export { default as QuadMesh } from './renderers/common/QuadMesh.js';
 export { default as PMREMGenerator } from './renderers/common/extras/PMREMGenerator.js';

+ 1 - 1
src/nodes/lighting/LightsNode.js

@@ -106,7 +106,7 @@ class LightsNode extends Node {
 
 					const lightNodeClass = nodeLibrary.getLightNodeClass( light.constructor );
 
-					if ( lightNodeClass === undefined ) {
+					if ( lightNodeClass === null ) {
 
 						console.warn( `LightsNode.setupNodeLights: Light node not found for ${ light.constructor.name }` );
 						continue;

+ 0 - 18
src/renderers/common/StandardRenderer.js

@@ -1,18 +0,0 @@
-import Renderer from './Renderer.js';
-import StandardNodeLibrary from './nodes/StandardNodeLibrary.js';
-
-class StandardRenderer extends Renderer {
-
-	constructor( backend, parameters = {} ) {
-
-		super( backend, parameters );
-
-		this.isStandardRenderer = true;
-
-		this.nodes.library = new StandardNodeLibrary();
-
-	}
-
-}
-
-export default StandardRenderer;

+ 42 - 0
src/renderers/webgpu/WebGPURenderer.Nodes.js

@@ -0,0 +1,42 @@
+import Renderer from '../common/Renderer.js';
+import WebGLBackend from '../webgl-fallback/WebGLBackend.js';
+import WebGPUBackend from './WebGPUBackend.js';
+import BasicNodeLibrary from './nodes/BasicNodeLibrary.js';
+
+class WebGPURenderer extends Renderer {
+
+	constructor( parameters = {} ) {
+
+		let BackendClass;
+
+		if ( parameters.forceWebGL ) {
+
+			BackendClass = WebGLBackend;
+
+		} else {
+
+			BackendClass = WebGPUBackend;
+
+			parameters.getFallback = () => {
+
+				console.warn( 'THREE.WebGPURenderer: WebGPU is not available, running under WebGL2 backend.' );
+
+				return new WebGLBackend( parameters );
+
+			};
+
+		}
+
+		const backend = new BackendClass( parameters );
+
+		super( backend, parameters );
+
+		this.nodes.library = new BasicNodeLibrary();
+
+		this.isWebGPURenderer = true;
+
+	}
+
+}
+
+export default WebGPURenderer;

+ 5 - 2
src/renderers/webgpu/WebGPURenderer.js

@@ -1,6 +1,7 @@
-import StandardRenderer from '../common/StandardRenderer.js';
+import Renderer from '../common/Renderer.js';
 import WebGLBackend from '../webgl-fallback/WebGLBackend.js';
 import WebGPUBackend from './WebGPUBackend.js';
+import StandardNodeLibrary from './nodes/StandardNodeLibrary.js';
 /*
 const debugHandler = {
 
@@ -15,7 +16,7 @@ const debugHandler = {
 
 };
 */
-class WebGPURenderer extends StandardRenderer {
+class WebGPURenderer extends Renderer {
 
 	constructor( parameters = {} ) {
 
@@ -44,6 +45,8 @@ class WebGPURenderer extends StandardRenderer {
 		//super( new Proxy( backend, debugHandler ) );
 		super( backend, parameters );
 
+		this.nodes.library = new StandardNodeLibrary();
+
 		this.isWebGPURenderer = true;
 
 	}

+ 59 - 0
src/renderers/webgpu/nodes/BasicNodeLibrary.js

@@ -0,0 +1,59 @@
+import NodeLibrary from '../../common/nodes/NodeLibrary.js';
+
+// Lights
+import { PointLight } from '../../../lights/PointLight.js';
+import { PointLightNode } from '../../../nodes/Nodes.js';
+import { DirectionalLight } from '../../../lights/DirectionalLight.js';
+import { DirectionalLightNode } from '../../../nodes/Nodes.js';
+import { RectAreaLight } from '../../../lights/RectAreaLight.js';
+import { RectAreaLightNode } from '../../../nodes/Nodes.js';
+import { SpotLight } from '../../../lights/SpotLight.js';
+import { SpotLightNode } from '../../../nodes/Nodes.js';
+import { AmbientLight } from '../../../lights/AmbientLight.js';
+import { AmbientLightNode } from '../../../nodes/Nodes.js';
+import { HemisphereLight } from '../../../lights/HemisphereLight.js';
+import { HemisphereLightNode } from '../../../nodes/Nodes.js';
+import { LightProbe } from '../../../lights/LightProbe.js';
+import { LightProbeNode } from '../../../nodes/Nodes.js';
+import IESSpotLight from '../../../lights/webgpu/IESSpotLight.js';
+import { IESSpotLightNode } from '../../../nodes/Nodes.js';
+
+// Tone Mapping
+import { LinearToneMapping, ReinhardToneMapping, CineonToneMapping, ACESFilmicToneMapping, AgXToneMapping, NeutralToneMapping } from '../../../constants.js';
+import * as TMF from '../../../nodes/display/ToneMappingFunctions.js';
+
+// Color Space
+import { LinearSRGBColorSpace, SRGBColorSpace } from '../../../constants.js';
+import { getColorSpaceMethod } from '../../../nodes/display/ColorSpaceNode.js';
+import * as CSF from '../../../nodes/display/ColorSpaceFunctions.js';
+
+class BasicNodeLibrary extends NodeLibrary {
+
+	constructor() {
+
+		super();
+
+		this.addLight( PointLightNode, PointLight );
+		this.addLight( DirectionalLightNode, DirectionalLight );
+		this.addLight( RectAreaLightNode, RectAreaLight );
+		this.addLight( SpotLightNode, SpotLight );
+		this.addLight( AmbientLightNode, AmbientLight );
+		this.addLight( HemisphereLightNode, HemisphereLight );
+		this.addLight( LightProbeNode, LightProbe );
+		this.addLight( IESSpotLightNode, IESSpotLight );
+
+		this.addToneMapping( TMF.LinearToneMapping, LinearToneMapping );
+		this.addToneMapping( TMF.ReinhardToneMapping, ReinhardToneMapping );
+		this.addToneMapping( TMF.CineonToneMapping, CineonToneMapping );
+		this.addToneMapping( TMF.ACESFilmicToneMapping, ACESFilmicToneMapping );
+		this.addToneMapping( TMF.AgXToneMapping, AgXToneMapping );
+		this.addToneMapping( TMF.NeutralToneMapping, NeutralToneMapping );
+
+		this.addColorSpace( CSF.LinearTosRGB, getColorSpaceMethod( LinearSRGBColorSpace, SRGBColorSpace ) );
+		this.addColorSpace( CSF.sRGBToLinear, getColorSpaceMethod( SRGBColorSpace, LinearSRGBColorSpace ) );
+
+	}
+
+}
+
+export default BasicNodeLibrary;

+ 1 - 1
src/renderers/common/nodes/StandardNodeLibrary.js → src/renderers/webgpu/nodes/StandardNodeLibrary.js

@@ -1,4 +1,4 @@
-import NodeLibrary from './NodeLibrary.js';
+import NodeLibrary from '../../common/nodes/NodeLibrary.js';
 
 // Materials
 import { MeshPhongMaterial } from '../../../materials/MeshPhongMaterial.js';

+ 40 - 15
utils/build/rollup.config.js

@@ -75,43 +75,40 @@ const builds = [
 		]
 	},
 	{
-		input: 'src/Three.js',
+		input: 'src/Three.WebGPU.js',
 		plugins: [
-			glsl(),
-			header(),
-			terser()
+			header()
 		],
 		output: [
 			{
 				format: 'esm',
-				file: 'build/three.module.min.js'
+				file: 'build/three.webgpu.js'
 			}
 		]
 	},
 	{
-		input: 'src/Three.js',
+		input: 'src/Three.WebGPU.Nodes.js',
 		plugins: [
-			glsl(),
 			header()
 		],
 		output: [
 			{
-				format: 'cjs',
-				name: 'THREE',
-				file: 'build/three.cjs',
-				indent: '\t'
+				format: 'esm',
+				file: 'build/three.webgpu.nodes.js'
 			}
 		]
 	},
 	{
-		input: 'src/Three.WebGPU.js',
+		input: 'src/Three.js',
 		plugins: [
-			header()
+			glsl(),
+			header(),
+			terser()
 		],
 		output: [
 			{
 				format: 'esm',
-				file: 'build/three.webgpu.js'
+				file: 'build/three.module.min.js'
 			}
 		]
 	},
@@ -127,7 +124,35 @@ const builds = [
 				file: 'build/three.webgpu.min.js'
 			}
 		]
+	},
+	{
+		input: 'src/Three.WebGPU.Nodes.js',
+		plugins: [
+			header(),
+			terser()
+		],
+		output: [
+			{
+				format: 'esm',
+				file: 'build/three.webgpu.nodes.min.js'
+			}
+		]
+	},
+	{
+		input: 'src/Three.js',
+		plugins: [
+			glsl(),
+			header()
+		],
+		output: [
+			{
+				format: 'cjs',
+				name: 'THREE',
+				file: 'build/three.cjs',
+				indent: '\t'
+			}
+		]
 	}
 ];
 
-export default ( args ) => args.configOnlyModule ? [ builds[ 0 ], builds[ 3 ] ] : builds;
+export default ( args ) => args.configOnlyModule ? builds.slice( 0, 3 ) : builds;

粤ICP备19079148号