diff --git a/examples/files.json b/examples/files.json index f12ca37c5e0f4c..966fdbf942759b 100644 --- a/examples/files.json +++ b/examples/files.json @@ -416,6 +416,7 @@ "webgpu_procedural_texture", "webgpu_reflection", "webgpu_reflection_blurred", + "webgpu_reflection_roughness", "webgpu_refraction", "webgpu_rendertarget_2d-array_3d", "webgpu_rtt", diff --git a/examples/jsm/physics/RapierPhysics.js b/examples/jsm/physics/RapierPhysics.js index 423e2ac7f3b279..83a5fc183b3e48 100644 --- a/examples/jsm/physics/RapierPhysics.js +++ b/examples/jsm/physics/RapierPhysics.js @@ -132,18 +132,19 @@ async function RapierPhysics() { shape.setMass( mass ); shape.setRestitution( restitution ); - const body = mesh.isInstancedMesh + const { body, collider } = mesh.isInstancedMesh ? createInstancedBody( mesh, mass, shape ) : createBody( mesh.position, mesh.quaternion, mass, shape ); if ( ! mesh.userData.physics ) mesh.userData.physics = {}; mesh.userData.physics.body = body; + mesh.userData.physics.collider = collider; if ( mass > 0 ) { meshes.push( mesh ); - meshMap.set( mesh, body ); + meshMap.set( mesh, { body, collider } ); } @@ -161,22 +162,10 @@ async function RapierPhysics() { if ( ! mesh.userData.physics ) return; const body = mesh.userData.physics.body; + const collider = mesh.userData.physics.collider; - if ( ! body ) return; - - if ( Array.isArray( body ) ) { - - for ( let i = 0; i < body.length; i ++ ) { - - world.removeRigidBody( body[ i ] ); - - } - - } else { - - world.removeRigidBody( body ); - - } + if ( body ) removeBody( body ); + if ( collider ) removeCollider( collider ); } @@ -187,15 +176,18 @@ async function RapierPhysics() { const array = mesh.instanceMatrix.array; const bodies = []; + const colliders = []; for ( let i = 0; i < mesh.count; i ++ ) { const position = _vector.fromArray( array, i * 16 + 12 ); - bodies.push( createBody( position, null, mass, shape ) ); + const { body, collider } = createBody( position, null, mass, shape ); + bodies.push( body ); + colliders.push( collider ); } - return bodies; + return { body: bodies, collider: colliders }; } @@ -206,15 +198,51 @@ async function RapierPhysics() { if ( quaternion !== null ) desc.setRotation( quaternion ); const body = world.createRigidBody( desc ); - world.createCollider( shape, body ); + const collider = world.createCollider( shape, body ); - return body; + return { body, collider }; + + } + + function removeBody( body ) { + + if ( Array.isArray( body ) ) { + + for ( let i = 0; i < body.length; i ++ ) { + + world.removeRigidBody( body[ i ] ); + + } + + } else { + + world.removeRigidBody( body ); + + } + + } + + function removeCollider( collider ) { + + if ( Array.isArray( collider ) ) { + + for ( let i = 0; i < collider.length; i ++ ) { + + world.removeCollider( collider[ i ] ); + + } + + } else { + + world.removeCollider( collider ); + + } } function setMeshPosition( mesh, position, index = 0 ) { - let body = meshMap.get( mesh ); + let { body } = meshMap.get( mesh ); if ( mesh.isInstancedMesh ) { @@ -230,7 +258,7 @@ async function RapierPhysics() { function setMeshVelocity( mesh, velocity, index = 0 ) { - let body = meshMap.get( mesh ); + let { body } = meshMap.get( mesh ); if ( mesh.isInstancedMesh ) { @@ -278,7 +306,7 @@ async function RapierPhysics() { if ( mesh.isInstancedMesh ) { const array = mesh.instanceMatrix.array; - const bodies = meshMap.get( mesh ); + const { body: bodies } = meshMap.get( mesh ); for ( let j = 0; j < bodies.length; j ++ ) { @@ -296,7 +324,7 @@ async function RapierPhysics() { } else { - const body = meshMap.get( mesh ); + const { body } = meshMap.get( mesh ); mesh.position.copy( body.translation() ); mesh.quaternion.copy( body.rotation() ); diff --git a/examples/screenshots/webgpu_reflection_roughness.jpg b/examples/screenshots/webgpu_reflection_roughness.jpg new file mode 100644 index 00000000000000..feb56d5b0c824a Binary files /dev/null and b/examples/screenshots/webgpu_reflection_roughness.jpg differ diff --git a/examples/webgpu_reflection_roughness.html b/examples/webgpu_reflection_roughness.html new file mode 100644 index 00000000000000..2d1e4834709457 --- /dev/null +++ b/examples/webgpu_reflection_roughness.html @@ -0,0 +1,168 @@ + + + + Codestin Search App + + + + + + +
+ three.js webgpu - dirty reflection +
+ + + + + + + diff --git a/src/core/Clock.js b/src/core/Clock.js index 1706bbcd85c130..5b3966f2ecf356 100644 --- a/src/core/Clock.js +++ b/src/core/Clock.js @@ -61,7 +61,7 @@ class Clock { */ start() { - this.startTime = now(); + this.startTime = performance.now(); this.oldTime = this.startTime; this.elapsedTime = 0; @@ -110,7 +110,7 @@ class Clock { if ( this.running ) { - const newTime = now(); + const newTime = performance.now(); diff = ( newTime - this.oldTime ) / 1000; this.oldTime = newTime; @@ -125,10 +125,4 @@ class Clock { } -function now() { - - return performance.now(); - -} - export { Clock };