normal map using normalNode with only scene environment

by GnanaSai

HTML

<script type="importmap">
	{
		"imports": {
			"three": "https://unpkg.com/three/build/three.webgpu.js",
      "three/webgpu": "https://unpkg.com/three/build/three.webgpu.js",
      "three/tsl": "https://unpkg.com/three/build/three.tsl.js",
      "three/addons/": "https://unpkg.com/three/examples/jsm/"
		}
	}
</script>

CSS

body {
	margin: 0px;
}

JavaScript

import * as THREE from 'three';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
import { RGBELoader } from 'three/addons/loaders/RGBELoader.js';
import { normalMap, texture } from "three/tsl";
let mesh, renderer, scene, camera, controls;

init();

function init() {

    // renderer
    renderer = new THREE.WebGPURenderer();
    renderer.setSize( window.innerWidth, window.innerHeight );
    renderer.setPixelRatio( window.devicePixelRatio );
    renderer.setAnimationLoop( animate );
    document.body.appendChild( renderer.domElement );

    // scene
    scene = new THREE.Scene();
    scene.background = new THREE.Color( 0x000000 );
    
    // camera
    camera = new THREE.PerspectiveCamera( 40, window.innerWidth / window.innerHeight, 1, 10000 );
    camera.position.set( 20, 20, 20 );

    // controls
    controls = new OrbitControls( camera, renderer.domElement );
    
    // axes
    scene.add( new THREE.AxesHelper( 20 ) );
    
    // ambient
    //scene.add( new THREE.AmbientLight( 0x222222 ) );
    
    // light
 
		//scene.add( new THREE.DirectionalLight( 0xffffff, 0 ) );

		const rgbeLoader = new RGBELoader();
 		rgbeLoader.load(
        'https://cdn.jsdelivr.net/gh/mrdoob/three.js@r171/examples/textures/equirectangular/royal_esplanade_1k.hdr', // Replace with your HDR URL
        (texture) => {
            texture.mapping = THREE.EquirectangularReflectionMapping;
            scene.background = texture;
           	scene.environment = texture;
        }
    );
    


    // geometry
    const geometry = new THREE.BoxGeometry( 5, 5, 5);
    
    // material
    const material = new THREE.MeshStandardNodeMaterial( {
    
    } );
    
     let tex = new THREE.TextureLoader().load("https://i.postimg.cc/Fz4NsfDg/Bricks097-1-K-JPG-Normal-GL-result.jpg")
   material.normalNode = normalMap(texture(tex));
    // mesh
    mesh = new THREE.Mesh( geometry, material );
    scene.add( mesh );
    
}

function animate() {

    renderer.render(...