| 
28 | 28 | 			import * as THREE from 'three';  | 
29 | 29 | 			import { Fn, vec2, vec4, texture, uv, textureBicubic, rangeFogFactor, reflector, time } from 'three/tsl';  | 
30 | 30 | 
 
  | 
31 |  | -			import { RGBELoader } from 'three/addons/loaders/RGBELoader.js';  | 
32 |  | - | 
33 | 31 | 			import { OrbitControls } from 'three/addons/controls/OrbitControls.js';  | 
 | 32 | +			import { UltraHDRLoader } from 'three/addons/loaders/UltraHDRLoader.js';  | 
34 | 33 | 
 
  | 
35 | 34 | 			import Stats from 'three/addons/libs/stats.module.js';  | 
36 | 35 | 
 
  | 
 | 
43 | 42 | 			async function init() {  | 
44 | 43 | 
 
  | 
45 | 44 | 				camera = new THREE.PerspectiveCamera( 50, window.innerWidth / window.innerHeight, 0.25, 30 );  | 
46 |  | -				camera.position.set( - 4, 2, 4 );  | 
47 |  | -				camera.lookAt( 0, .4, 0 );  | 
 | 45 | +				camera.position.set( - 4, 1, 4 );  | 
48 | 46 | 
 
  | 
49 | 47 | 				scene = new THREE.Scene();  | 
50 | 48 | 
 
  | 
51 |  | -				//  | 
52 |  | - | 
53 |  | -				new RGBELoader()  | 
54 |  | -					.setPath( 'textures/equirectangular/' )  | 
55 |  | -					.load( 'moonless_golf_1k.hdr', function ( texture ) {  | 
 | 49 | +				const loader = new UltraHDRLoader();  | 
 | 50 | +				loader.setDataType( THREE.HalfFloatType );  | 
 | 51 | +				loader.load( `textures/equirectangular/spruit_sunrise_2k.hdr.jpg`, function ( texture ) {  | 
56 | 52 | 
 
  | 
57 |  | -						texture.mapping = THREE.EquirectangularReflectionMapping;  | 
 | 53 | +					texture.mapping = THREE.EquirectangularReflectionMapping;  | 
 | 54 | +					texture.needsUpdate = true;  | 
58 | 55 | 
 
  | 
59 |  | -						scene.background = texture;  | 
60 |  | -						scene.environment = texture;  | 
 | 56 | +					scene.background = texture;  | 
 | 57 | +					scene.environment = texture;  | 
61 | 58 | 
 
  | 
62 |  | -					} );  | 
 | 59 | +				} );  | 
63 | 60 | 
 
  | 
64 | 61 | 				// textures  | 
65 | 62 | 
 
  | 
 | 
73 | 70 | 				perlinMap.wrapT = THREE.RepeatWrapping;  | 
74 | 71 | 				perlinMap.colorSpace = THREE.SRGBColorSpace;  | 
75 | 72 | 
 
  | 
76 |  | -				// uv map for debugging  | 
77 |  | - | 
78 |  | -				const uvMaterial = new THREE.MeshStandardNodeMaterial( {  | 
79 |  | -					map: uvMap,  | 
80 |  | -					emissiveMap: uvMap,  | 
81 |  | -					emissive: 0xffffff,  | 
82 |  | -					side: THREE.DoubleSide  | 
83 |  | -				} );  | 
84 |  | - | 
85 |  | -				const uvMesh = new THREE.Mesh( new THREE.PlaneGeometry( 2, 2 ), uvMaterial );  | 
86 |  | -				uvMesh.position.set( 0, 1, 0 );  | 
87 |  | -				scene.add( uvMesh );  | 
 | 73 | +				// uv box for debugging  | 
 | 74 | +				  | 
 | 75 | +				const mesh = new THREE.Mesh(  | 
 | 76 | +					new THREE.BoxGeometry( 1, 1, 1 ),  | 
 | 77 | +					new THREE.MeshStandardNodeMaterial( {  | 
 | 78 | +						map: uvMap,  | 
 | 79 | +						roughnessMap: uvMap,  | 
 | 80 | +						emissiveMap: uvMap,  | 
 | 81 | +						emissive: 0xffffff  | 
 | 82 | +					} )  | 
 | 83 | +				);  | 
 | 84 | +				mesh.position.set( 0, 1.25, 0 );  | 
 | 85 | +				mesh.scale.setScalar( 2 );  | 
 | 86 | +				scene.add( mesh );  | 
88 | 87 | 
 
  | 
89 | 88 | 				// reflection  | 
90 | 89 | 
 
  | 
 | 
117 | 116 | 
 
  | 
118 | 117 | 				// renderer  | 
119 | 118 | 
 
  | 
120 |  | -				renderer = new THREE.WebGPURenderer();  | 
 | 119 | +				renderer = new THREE.WebGPURenderer( { antialias: true } );  | 
121 | 120 | 				renderer.setPixelRatio( window.devicePixelRatio );  | 
122 | 121 | 				renderer.setSize( window.innerWidth, window.innerHeight );  | 
123 | 122 | 				renderer.setAnimationLoop( animate );  | 
124 | 123 | 				renderer.toneMapping = THREE.NeutralToneMapping;  | 
125 |  | -				renderer.toneMappingExposure = 2;  | 
 | 124 | +				renderer.toneMappingExposure = 1.5;  | 
126 | 125 | 				document.body.appendChild( renderer.domElement );  | 
127 | 126 | 
 
  | 
128 | 127 | 				stats = new Stats();  | 
 | 
134 | 133 | 				controls.maxPolarAngle = Math.PI / 2;  | 
135 | 134 | 				controls.autoRotate = true;  | 
136 | 135 | 				controls.autoRotateSpeed = - .1;  | 
137 |  | -				controls.target.set( 0, .5, 0 );  | 
 | 136 | +				controls.target.set( 0, .75, 0 );  | 
138 | 137 | 				controls.update();  | 
139 | 138 | 
 
  | 
140 | 139 | 				// events  | 
 | 
152 | 151 | 
 
  | 
153 | 152 | 			}  | 
154 | 153 | 
 
  | 
155 |  | -			function animate() {  | 
 | 154 | +			function animate( time ) {  | 
156 | 155 | 
 
  | 
157 | 156 | 				stats.update();  | 
158 | 157 | 
 
  | 
 | 
0 commit comments