diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 70b008361aee9b..8c1459d4f39280 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -16,7 +16,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Git checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Install Node
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
@@ -50,7 +50,7 @@ jobs:
CI: ${{ matrix.CI }}
steps:
- name: Git checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Install Node
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
diff --git a/.github/workflows/codeql-code-scanning.yml b/.github/workflows/codeql-code-scanning.yml
index 72bffc6667df38..e9d8a7816c9c0c 100644
--- a/.github/workflows/codeql-code-scanning.yml
+++ b/.github/workflows/codeql-code-scanning.yml
@@ -26,20 +26,20 @@ jobs:
steps:
- name: Checkout repository
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
- uses: github/codeql-action/init@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4
+ uses: github/codeql-action/init@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4
with:
languages: ${{ matrix.language }}
config-file: ./.github/codeql-config.yml
queries: security-and-quality
- name: Autobuild
- uses: github/codeql-action/autobuild@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4
+ uses: github/codeql-action/autobuild@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4
- name: Perform CodeQL Analysis
- uses: github/codeql-action/analyze@b20883b0cd1f46c72ae0ba6d1090936928f9fa30 # v4
+ uses: github/codeql-action/analyze@45cbd0c69e560cd9e7cd7f8c32362050c9b7ded2 # v4
with:
category: "/language:${{matrix.language}}"
diff --git a/.github/workflows/read-size.yml b/.github/workflows/read-size.yml
index 0922828e2a0637..04e22904ec28c0 100644
--- a/.github/workflows/read-size.yml
+++ b/.github/workflows/read-size.yml
@@ -20,7 +20,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Git checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Install Node
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
diff --git a/.github/workflows/report-size.yml b/.github/workflows/report-size.yml
index 41892a3253db81..f7919903afbe6c 100644
--- a/.github/workflows/report-size.yml
+++ b/.github/workflows/report-size.yml
@@ -56,7 +56,7 @@ jobs:
# This runs on the base branch of the PR, meaning "dev"
- name: Git checkout
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6
+ uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
- name: Install Node
uses: actions/setup-node@6044e13b5dc448c55e2357c09f80417699197238 # v6
with:
diff --git a/examples/index.html b/examples/index.html
index ca3bbf887b3d29..db62e4fc725fd7 100644
--- a/examples/index.html
+++ b/examples/index.html
@@ -103,6 +103,7 @@
if ( validRedirects.has( file ) === true ) {
selectFile( file );
+ links[ file ].scrollIntoView( { block: 'center' } );
viewer.src = validRedirects.get( file );
viewer.style.display = 'unset';
@@ -269,7 +270,7 @@
function updateFilter( files, tags ) {
let v = filterInput.value.trim();
- v = v.replace( /\s+/gi, ' ' ); // replace multiple whitespaces with a single one
+ v = v.replace( /[\s_]+/gi, ' ' ); // replace multiple whitespaces or underscores with a single one
if ( v !== '' ) {
diff --git a/examples/screenshots/webgpu_cubemap_adjustments.jpg b/examples/screenshots/webgpu_cubemap_adjustments.jpg
index aaed42d6d057d7..1975d95d8e1772 100644
Binary files a/examples/screenshots/webgpu_cubemap_adjustments.jpg and b/examples/screenshots/webgpu_cubemap_adjustments.jpg differ
diff --git a/examples/screenshots/webgpu_parallax_uv.jpg b/examples/screenshots/webgpu_parallax_uv.jpg
index 1936a033bc2b22..b2770a9dc08703 100644
Binary files a/examples/screenshots/webgpu_parallax_uv.jpg and b/examples/screenshots/webgpu_parallax_uv.jpg differ
diff --git a/examples/textures/equirectangular/752-hdri-skies-com_1k.hdr b/examples/textures/equirectangular/752-hdri-skies-com_1k.hdr
new file mode 100644
index 00000000000000..9da5a0a2314ace
Binary files /dev/null and b/examples/textures/equirectangular/752-hdri-skies-com_1k.hdr differ
diff --git a/examples/webgpu_cubemap_adjustments.html b/examples/webgpu_cubemap_adjustments.html
index fb70fda4274b5d..d0e0215bc54bbe 100644
--- a/examples/webgpu_cubemap_adjustments.html
+++ b/examples/webgpu_cubemap_adjustments.html
@@ -17,7 +17,8 @@
Adjust/modify the scene's background and environment.
- Battle Damaged Sci-fi Helmet by theblueturtle_
+ Battle Damaged Sci-fi Helmet by theblueturtle_.
+ HDR by Poly Haven and HDRI Skies.
@@ -37,7 +38,7 @@
import * as THREE from 'three/webgpu';
import { uniform, mix, pmremTexture, reference, positionLocal, hue, saturation, positionWorld, normalWorld, positionWorldDirection, reflectVector } from 'three/tsl';
- import { HDRCubeTextureLoader } from 'three/addons/loaders/HDRCubeTextureLoader.js';
+ import { HDRLoader } from 'three/addons/loaders/HDRLoader.js';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
@@ -60,23 +61,21 @@
scene = new THREE.Scene();
- // cube textures
+ // HDR textures
- const hdrUrls = [ 'px.hdr', 'nx.hdr', 'py.hdr', 'ny.hdr', 'pz.hdr', 'nz.hdr' ];
- const cube1Texture = await new HDRCubeTextureLoader()
- .setPath( './textures/cube/pisaHDR/' )
- .loadAsync( hdrUrls );
+ const hdr1Texture = await new HDRLoader()
+ .loadAsync( './textures/equirectangular/pedestrian_overpass_1k.hdr' );
- cube1Texture.generateMipmaps = true;
- cube1Texture.minFilter = THREE.LinearMipmapLinearFilter;
+ hdr1Texture.mapping = THREE.EquirectangularReflectionMapping;
+ hdr1Texture.generateMipmaps = true;
+ hdr1Texture.minFilter = THREE.LinearMipmapLinearFilter;
- const cube2Urls = [ 'posx.jpg', 'negx.jpg', 'posy.jpg', 'negy.jpg', 'posz.jpg', 'negz.jpg' ];
- const cube2Texture = await new THREE.CubeTextureLoader()
- .setPath( './textures/cube/Park2/' )
- .loadAsync( cube2Urls );
+ const hdr2Texture = await new HDRLoader()
+ .loadAsync( './textures/equirectangular/752-hdri-skies-com_1k.hdr' );
- cube2Texture.generateMipmaps = true;
- cube2Texture.minFilter = THREE.LinearMipmapLinearFilter;
+ hdr2Texture.mapping = THREE.EquirectangularReflectionMapping;
+ hdr2Texture.generateMipmaps = true;
+ hdr2Texture.minFilter = THREE.LinearMipmapLinearFilter;
// nodes and environment
@@ -101,7 +100,7 @@
const custom1UV = reflectNode.xyz.mul( uniform( rotateY1Matrix ) );
const custom2UV = reflectNode.xyz.mul( uniform( rotateY2Matrix ) );
- const mixCubeMaps = mix( pmremTexture( cube1Texture, custom1UV ), pmremTexture( cube2Texture, custom2UV ), positionNode.y.add( mixNode ).clamp() );
+ const mixCubeMaps = mix( pmremTexture( hdr1Texture, custom1UV ), pmremTexture( hdr2Texture, custom2UV ), positionNode.y.add( mixNode ).clamp() );
const proceduralEnv = mix( mixCubeMaps, normalWorld, proceduralNode );
@@ -156,23 +155,22 @@
// gui
const gui = renderer.inspector.createParameters( 'Settings' );
-
+ gui.add( adjustments, 'mix', - 1, 2, 0.01 );
gui.add( { blurBackground: blurNode.value }, 'blurBackground', 0, 1, 0.01 ).onChange( value => {
blurNode.value = value;
} );
- gui.add( { offsetCube1: 0 }, 'offsetCube1', 0, Math.PI * 2, 0.01 ).onChange( value => {
+ gui.add( { offsetHDR1: 0 }, 'offsetHDR1', 0, Math.PI * 2, 0.01 ).onChange( value => {
rotateY1Matrix.makeRotationY( value );
} );
- gui.add( { offsetCube2: 0 }, 'offsetCube2', 0, Math.PI * 2, 0.01 ).onChange( value => {
+ gui.add( { offsetHDR2: 0 }, 'offsetHDR2', 0, Math.PI * 2, 0.01 ).onChange( value => {
rotateY2Matrix.makeRotationY( value );
} );
- gui.add( adjustments, 'mix', - 1, 2, 0.01 );
gui.add( adjustments, 'procedural', 0, 1, 0.01 );
gui.add( adjustments, 'intensity', 0, 5, 0.01 );
gui.add( adjustments, 'hue', 0, Math.PI * 2, 0.01 );
diff --git a/examples/webgpu_parallax_uv.html b/examples/webgpu_parallax_uv.html
index 2bff1fac4207d1..c3e21b2373d5dc 100644
--- a/examples/webgpu_parallax_uv.html
+++ b/examples/webgpu_parallax_uv.html
@@ -17,6 +17,7 @@
Textures by ambientCG.
+ HDR by HDRI Skies.
@@ -34,9 +35,12 @@