Skip to content

TSL: Unexpected behavior of nested Loop  #30759

@Mutefish0

Description

@Mutefish0

Description

The value of y should be 0, but instead, it ends up being 1.

const colorNode = Fn( () => {

	const y = float( 0 ).toVar();

	Loop( 1, ( { i } ) => {

		const x = float( i ).mul( 2 ); // x = 0

		Loop( 2, () => {

			y.assign( x );  // y = 0

		} );

	} );

	return vec4( y, 0, 0, 1 );

} )();

Reproduction steps

open the live example

Code

import * as THREE from 'three';
import { vec4, Loop, Fn, float } from 'three/tsl';
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';

let mesh, renderer, scene, camera, controls;


const colorNode = Fn( () => {

  const y = float( 0 ).toVar();

  Loop( 1, ( { i } ) => {

    const x = float( i ).mul( 2 ); // x = 0

    Loop( 2, () => {

      y.assign( x ); // y = 0

    } );

  } );

  return vec4( y, 0, 0, 1 );

} )();


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 );
    
    
    // geometry
    const geometry = new THREE.SphereGeometry( 5, 12, 8 );
    
    // material
    const material = new THREE.MeshBasicNodeMaterial();
    material.colorNode = colorNode;
    
    
    // mesh
    mesh = new THREE.Mesh( geometry, material );
    scene.add( mesh );
    
}

function animate() {

    renderer.render( scene, camera );

}

Live example

Screenshots

No response

Version

174

Device

No response

Browser

No response

OS

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    TSLThree.js Shading Language

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions