From c6fcdfae4cc0ba715fa90529a2170e3e9ef2bfff Mon Sep 17 00:00:00 2001 From: Nathan Bierema Date: Sat, 18 May 2024 13:57:55 -0400 Subject: [PATCH] WebGPURenderer: NodeMaterial extends Material (#962) * WebGPURenderer: NodeMaterial extends Material * Format * Update three.js and add examples * Update patch * Delete examples --- examples-testing/changes.patch | 17 +++++++++++------ three.js | 2 +- .../nodes/materials/LineBasicNodeMaterial.d.ts | 2 ++ .../nodes/materials/MeshBasicNodeMaterial.d.ts | 6 +++++- .../nodes/materials/MeshMatcapNodeMaterial.d.ts | 1 + .../nodes/materials/MeshNormalNodeMaterial.d.ts | 2 ++ .../nodes/materials/MeshPhongNodeMaterial.d.ts | 6 +++++- .../materials/MeshStandardNodeMaterial.d.ts | 6 +++++- .../nodes/materials/MeshToonNodeMaterial.d.ts | 3 +++ .../jsm/nodes/materials/NodeMaterial.d.ts | 7 +++---- .../jsm/nodes/materials/PointsNodeMaterial.d.ts | 1 + .../jsm/nodes/materials/ShadowNodeMaterial.d.ts | 1 + .../jsm/nodes/materials/SpriteNodeMaterial.d.ts | 1 + 13 files changed, 41 insertions(+), 14 deletions(-) diff --git a/examples-testing/changes.patch b/examples-testing/changes.patch index 40d18a272..5fd7b4098 100644 --- a/examples-testing/changes.patch +++ b/examples-testing/changes.patch @@ -3977,7 +3977,7 @@ index dd2f61f9..6dab1b6e 100644 mouseY = (event.clientY - windowHalfY) * 10; } diff --git a/examples-testing/examples/webgl_framebuffer_texture.ts b/examples-testing/examples/webgl_framebuffer_texture.ts -index 521261a0..5844c437 100644 +index df4acc9d..636f9db9 100644 --- a/examples-testing/examples/webgl_framebuffer_texture.ts +++ b/examples-testing/examples/webgl_framebuffer_texture.ts @@ -3,10 +3,10 @@ import * as THREE from 'three'; @@ -14059,7 +14059,7 @@ index 3a13ab5a..2850b1be 100644 } }); diff --git a/examples-testing/examples/webgpu_multiple_rendertargets_readback.ts b/examples-testing/examples/webgpu_multiple_rendertargets_readback.ts -index 19e195de..e321b7a1 100644 +index 19e195de..6a7d4ceb 100644 --- a/examples-testing/examples/webgpu_multiple_rendertargets_readback.ts +++ b/examples-testing/examples/webgpu_multiple_rendertargets_readback.ts @@ -26,8 +26,14 @@ import WebGPURenderer from 'three/addons/renderers/webgpu/WebGPURenderer.js'; @@ -14079,11 +14079,13 @@ index 19e195de..e321b7a1 100644 const gui = new GUI(); -@@ -38,7 +44,11 @@ const options = { +@@ -38,7 +44,13 @@ const options = { gui.add(options, 'selection', ['mrt', 'diffuse', 'normal']); class WriteGBufferMaterial extends NodeMaterial { - constructor(diffuseTexture) { ++ lights: boolean; ++ fog: boolean; + colorSpaced: boolean; + + diffuseTexture: THREE.Texture; @@ -14092,16 +14094,19 @@ index 19e195de..e321b7a1 100644 super(); this.lights = false; -@@ -62,7 +72,7 @@ class WriteGBufferMaterial extends NodeMaterial { +@@ -62,7 +74,10 @@ class WriteGBufferMaterial extends NodeMaterial { } class ReadGBufferMaterial extends NodeMaterial { - constructor(tDiffuse, tNormal) { ++ lights: boolean; ++ fog: boolean; ++ + constructor(tDiffuse: THREE.Texture, tNormal: THREE.Texture) { super(); this.lights = false; -@@ -159,7 +169,7 @@ function onWindowResize() { +@@ -159,7 +174,7 @@ function onWindowResize() { renderTarget.setSize(window.innerWidth * dpr, window.innerHeight * dpr); } @@ -14110,7 +14115,7 @@ index 19e195de..e321b7a1 100644 const selection = options.selection; torus.rotation.y = (time / 1000) * 0.4; -@@ -189,12 +199,26 @@ async function readback() { +@@ -189,12 +204,26 @@ async function readback() { const selection = options.selection; if (selection === 'diffuse') { diff --git a/three.js b/three.js index a2f068226..db0a63d4f 160000 --- a/three.js +++ b/three.js @@ -1 +1 @@ -Subproject commit a2f0682268790cbd5ed09e29c640b13b9d5afafa +Subproject commit db0a63d4f0c5819267c88a4507471913ad57184f diff --git a/types/three/examples/jsm/nodes/materials/LineBasicNodeMaterial.d.ts b/types/three/examples/jsm/nodes/materials/LineBasicNodeMaterial.d.ts index f1e293223..9ff56f84e 100644 --- a/types/three/examples/jsm/nodes/materials/LineBasicNodeMaterial.d.ts +++ b/types/three/examples/jsm/nodes/materials/LineBasicNodeMaterial.d.ts @@ -10,6 +10,8 @@ export default class LineBasicNodeMaterial extends NodeMaterial { // Properties from LineBasicMaterial readonly isLineBasicMaterial: true; color: Color; + fog: boolean; + linewidth: number; linecap: string; linejoin: string; map: Texture | null; diff --git a/types/three/examples/jsm/nodes/materials/MeshBasicNodeMaterial.d.ts b/types/three/examples/jsm/nodes/materials/MeshBasicNodeMaterial.d.ts index b7cfd907f..175a96b2e 100644 --- a/types/three/examples/jsm/nodes/materials/MeshBasicNodeMaterial.d.ts +++ b/types/three/examples/jsm/nodes/materials/MeshBasicNodeMaterial.d.ts @@ -1,4 +1,4 @@ -import { Color, Combine, MeshBasicMaterialParameters, Texture } from "three"; +import { Color, Combine, Euler, MeshBasicMaterialParameters, Texture } from "three"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; export interface MeshBasicNodeMaterialParameters extends NodeMaterialParameters, MeshBasicMaterialParameters { @@ -18,11 +18,15 @@ export default class MeshBasicNodeMaterial extends NodeMaterial { specularMap: Texture | null; alphaMap: Texture | null; envMap: Texture | null; + envMapRotation: Euler; combine: Combine; reflectivity: number; refractionRatio: number; + wireframe: boolean; + wireframeLinewidth: number; wireframeLinecap: string; wireframeLinejoin: string; + fog: boolean; constructor(parameters?: MeshBasicNodeMaterialParameters); } diff --git a/types/three/examples/jsm/nodes/materials/MeshMatcapNodeMaterial.d.ts b/types/three/examples/jsm/nodes/materials/MeshMatcapNodeMaterial.d.ts index c262f8838..0cabd1c2c 100644 --- a/types/three/examples/jsm/nodes/materials/MeshMatcapNodeMaterial.d.ts +++ b/types/three/examples/jsm/nodes/materials/MeshMatcapNodeMaterial.d.ts @@ -22,6 +22,7 @@ export default class MeshMatcapNodeMaterial extends NodeMaterial { displacementBias: number; alphaMap: Texture | null; flatShading: boolean; + fog: boolean; constructor(paramters: MeshMatcapNodeMaterialParameters); } diff --git a/types/three/examples/jsm/nodes/materials/MeshNormalNodeMaterial.d.ts b/types/three/examples/jsm/nodes/materials/MeshNormalNodeMaterial.d.ts index 278a98ab6..6069d218a 100644 --- a/types/three/examples/jsm/nodes/materials/MeshNormalNodeMaterial.d.ts +++ b/types/three/examples/jsm/nodes/materials/MeshNormalNodeMaterial.d.ts @@ -17,6 +17,8 @@ export default class MeshNormalNodeMaterial extends NodeMaterial { displacementMap: Texture | null; displacementScale: number; displacementBias: number; + wireframe: boolean; + wireframeLinewidth: number; flatShading: boolean; constructor(parameters?: MeshBasicNodeMaterialParameters); diff --git a/types/three/examples/jsm/nodes/materials/MeshPhongNodeMaterial.d.ts b/types/three/examples/jsm/nodes/materials/MeshPhongNodeMaterial.d.ts index 7d65879f8..6698fe0a7 100644 --- a/types/three/examples/jsm/nodes/materials/MeshPhongNodeMaterial.d.ts +++ b/types/three/examples/jsm/nodes/materials/MeshPhongNodeMaterial.d.ts @@ -1,4 +1,4 @@ -import { Color, Combine, MeshPhongMaterialParameters, NormalMapTypes, Texture, Vector2 } from "three"; +import { Color, Combine, Euler, MeshPhongMaterialParameters, NormalMapTypes, Texture, Vector2 } from "three"; import Node from "../core/Node.js"; import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; @@ -36,13 +36,17 @@ export default class MeshPhongNodeMaterial extends NodeMaterial { specularMap: Texture | null; alphaMap: Texture | null; envMap: Texture | null; + envMapRotation: Euler; combine: Combine; reflectivity: number; refractionRatio: number; + wireframe: boolean; + wireframeLinewidth: number; wireframeLinecap: string; wireframeLinejoin: string; flatShading: boolean; metal: boolean; + fog: boolean; constructor(parameters?: MeshPhongNodeMaterialParameters); } diff --git a/types/three/examples/jsm/nodes/materials/MeshStandardNodeMaterial.d.ts b/types/three/examples/jsm/nodes/materials/MeshStandardNodeMaterial.d.ts index d630e0857..3a13f7d5f 100644 --- a/types/three/examples/jsm/nodes/materials/MeshStandardNodeMaterial.d.ts +++ b/types/three/examples/jsm/nodes/materials/MeshStandardNodeMaterial.d.ts @@ -1,4 +1,4 @@ -import { Color, MeshStandardMaterialParameters, NormalMapTypes, Texture, Vector2 } from "three"; +import { Color, Euler, MeshStandardMaterialParameters, NormalMapTypes, Texture, Vector2 } from "three"; import Node from "../core/Node.js"; import { ShaderNodeObject } from "../shadernode/ShaderNode.js"; import NodeMaterial, { NodeMaterialParameters } from "./NodeMaterial.js"; @@ -39,10 +39,14 @@ export default class MeshStandardNodeMaterial extends NodeMaterial { metalnessMap: Texture | null; alphaMap: Texture | null; envMap: Texture | null; + envMapRotation: Euler; envMapIntensity: number; + wireframe: boolean; + wireframeLinewidth: number; wireframeLinecap: string; wireframeLinejoin: string; flatShading: boolean; + fog: boolean; constructor(paramters?: MeshStandardNodeMaterialParameters); } diff --git a/types/three/examples/jsm/nodes/materials/MeshToonNodeMaterial.d.ts b/types/three/examples/jsm/nodes/materials/MeshToonNodeMaterial.d.ts index fb1bcff2f..2efc1d686 100644 --- a/types/three/examples/jsm/nodes/materials/MeshToonNodeMaterial.d.ts +++ b/types/three/examples/jsm/nodes/materials/MeshToonNodeMaterial.d.ts @@ -28,8 +28,11 @@ export default class MeshToonNodeMaterial extends NodeMaterial { displacementScale: number; displacementBias: number; alphaMap: Texture | null; + wireframe: boolean; + wireframeLinewidth: number; wireframeLinecap: string; wireframeLinejoin: string; + fog: boolean; constructor(paramters: MeshToonNodeMaterialParameters); } diff --git a/types/three/examples/jsm/nodes/materials/NodeMaterial.d.ts b/types/three/examples/jsm/nodes/materials/NodeMaterial.d.ts index ba535b156..23edeab88 100644 --- a/types/three/examples/jsm/nodes/materials/NodeMaterial.d.ts +++ b/types/three/examples/jsm/nodes/materials/NodeMaterial.d.ts @@ -1,6 +1,7 @@ import { LineBasicMaterial, Material, + MaterialParameters, MeshBasicMaterial, MeshMatcapMaterial, MeshNormalMaterial, @@ -9,8 +10,6 @@ import { MeshStandardMaterial, MeshToonMaterial, PointsMaterial, - ShaderMaterial, - ShaderMaterialParameters, ShadowMaterial, SpriteMaterial, } from "three"; @@ -32,7 +31,7 @@ import PointsNodeMaterial from "./PointsNodeMaterial.js"; import ShadowNodeMaterial from "./ShadowNodeMaterial.js"; import SpriteNodeMaterial from "./SpriteNodeMaterial.js"; -export interface NodeMaterialParameters extends ShaderMaterialParameters { +export interface NodeMaterialParameters extends MaterialParameters { normals?: boolean | undefined; colorSpaced?: boolean | undefined; @@ -59,7 +58,7 @@ export interface NodeMaterialParameters extends ShaderMaterialParameters { vertexNode?: ShaderNodeObject | null | undefined; } -export default class NodeMaterial extends ShaderMaterial { +export default class NodeMaterial extends Material { readonly isNodeMaterial: true; normals: boolean; diff --git a/types/three/examples/jsm/nodes/materials/PointsNodeMaterial.d.ts b/types/three/examples/jsm/nodes/materials/PointsNodeMaterial.d.ts index ae69b697d..8edc2379a 100644 --- a/types/three/examples/jsm/nodes/materials/PointsNodeMaterial.d.ts +++ b/types/three/examples/jsm/nodes/materials/PointsNodeMaterial.d.ts @@ -14,6 +14,7 @@ export default class PointsNodeMaterial extends NodeMaterial { alphaMap: Texture | null; size: number; sizeAttenuation: boolean; + fog: boolean; constructor(parameters?: PointsNodeMaterialParameters); } diff --git a/types/three/examples/jsm/nodes/materials/ShadowNodeMaterial.d.ts b/types/three/examples/jsm/nodes/materials/ShadowNodeMaterial.d.ts index 1d349354e..6c95e660a 100644 --- a/types/three/examples/jsm/nodes/materials/ShadowNodeMaterial.d.ts +++ b/types/three/examples/jsm/nodes/materials/ShadowNodeMaterial.d.ts @@ -10,6 +10,7 @@ export default class ShadowNodeMaterial extends NodeMaterial { // Properties from ShadowMaterial readonly isShadowMaterial: true; color: Color; + fog: boolean; constructor(parameters?: ShadowNodeMaterialParameters); } diff --git a/types/three/examples/jsm/nodes/materials/SpriteNodeMaterial.d.ts b/types/three/examples/jsm/nodes/materials/SpriteNodeMaterial.d.ts index 336fca83d..d83587ffc 100644 --- a/types/three/examples/jsm/nodes/materials/SpriteNodeMaterial.d.ts +++ b/types/three/examples/jsm/nodes/materials/SpriteNodeMaterial.d.ts @@ -19,6 +19,7 @@ export default class SpriteNodeMaterial extends NodeMaterial { alphaMap: Texture | null; rotation: number; sizeAttenuation: boolean; + fog: boolean; constructor(parameters?: SpriteNodeMaterialParameters); }