From f20e8566593e90b5c7821977c1ac22b10a1d1eb1 Mon Sep 17 00:00:00 2001 From: KuraPiee <113711792+KuraPiee@users.noreply.github.com> Date: Sat, 12 Sep 2026 17:17:57 +0300 Subject: [PATCH] feat: add three.js starter for HDRIs (Refs #41) --- src/helpers/code/hdri/three.js | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/src/helpers/code/hdri/three.js b/src/helpers/code/hdri/three.js index ce25608..7ca7ebd 100644 --- a/src/helpers/code/hdri/three.js +++ b/src/helpers/code/hdri/three.js @@ -13,11 +13,32 @@ export const createCode = (hdri) => [ import * as THREE from "three"; import { WebGLRenderer, Scene, PerspectiveCamera, PointLight, AmbientLight } from "three"; import { OrbitControls } from "three/examples/jsm/controls/OrbitControls"; - import { preloader } from "./loader"; + import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader"; ${lightsAndSceneSetup} - /* Add HRDI sample here */ + renderer.toneMapping = THREE.ACESFilmicToneMapping; + renderer.toneMappingExposure = 1; + + const pmremGenerator = new THREE.PMREMGenerator(renderer); + pmremGenerator.compileEquirectangularShader(); + + new RGBELoader().load("${hdri.file}", (texture) => { + const envMap = pmremGenerator.fromEquirectangular(texture).texture; + scene.background = envMap; + scene.environment = envMap; + texture.dispose(); + pmremGenerator.dispose(); + + onResize(); + animate(); + + const sphere = new THREE.Mesh( + new THREE.SphereBufferGeometry(2, 64, 32), + new THREE.MeshStandardMaterial({ metalness: 1, roughness: 0 }) + ); + scene.add(sphere); + }); ${renderSetUp} `,