Skip to content

⬅️ Back to Table of Contents

📄 GTAOShader.js

📊 Analysis Summary

Metric Count
🔧 Functions 2
📦 Imports 5
📊 Variables & Constants 12

📚 Table of Contents

🛠️ File Location:

📂 examples/jsm/shaders/GTAOShader.js

📦 Imports

Name Source
DataTexture three
Matrix4 three
RepeatWrapping three
Vector2 three
Vector3 three

Variables & Constants

Name Type Kind Value Exported
GTAOShader ShaderMaterial let/var { name: 'GTAOShader', defines: { PERSPECTIVE_CAMERA: 1, SAMPLES: 16, NORMAL_V...
GTAODepthShader any let/var { name: 'GTAODepthShader', defines: { PERSPECTIVE_CAMERA: 1 }, uniforms: { tD...
GTAOBlendShader any let/var { name: 'GTAOBlendShader', uniforms: { tDiffuse: { value: null }, intensity: ...
noiseSize number let/var Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size )
noiseSquareSize number let/var magicSquare.length
data Uint8Array<ArrayBuffer> let/var new Uint8Array( noiseSquareSize * 4 )
iAng any let/var magicSquare[ inx ]
angle number let/var ( 2 * Math.PI * iAng ) / noiseSquareSize
noiseTexture any let/var new DataTexture( data, noiseSize, noiseSize )
noiseSize number let/var Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size )
noiseSquareSize number let/var noiseSize * noiseSize
j number let/var noiseSize - 1

Functions

generateMagicSquareNoise(size: number): any

Parameters:

  • size number

Returns: any

Calls:

  • Math.floor
  • generateMagicSquare
  • new Vector3( Math.cos( angle ), Math.sin( angle ), 0 ).normalize
  • Math.cos
  • Math.sin
Code
function generateMagicSquareNoise( size = 5 ) {

    const noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );
    const magicSquare = generateMagicSquare( noiseSize );
    const noiseSquareSize = magicSquare.length;
    const data = new Uint8Array( noiseSquareSize * 4 );

    for ( let inx = 0; inx < noiseSquareSize; ++ inx ) {

        const iAng = magicSquare[ inx ];
        const angle = ( 2 * Math.PI * iAng ) / noiseSquareSize;
        const randomVec = new Vector3(
            Math.cos( angle ),
            Math.sin( angle ),
            0
        ).normalize();
        data[ inx * 4 ] = ( randomVec.x * 0.5 + 0.5 ) * 255;
        data[ inx * 4 + 1 ] = ( randomVec.y * 0.5 + 0.5 ) * 255;
        data[ inx * 4 + 2 ] = 127;
        data[ inx * 4 + 3 ] = 255;

    }

    const noiseTexture = new DataTexture( data, noiseSize, noiseSize );
    noiseTexture.wrapS = RepeatWrapping;
    noiseTexture.wrapT = RepeatWrapping;
    noiseTexture.needsUpdate = true;

    return noiseTexture;

}

generateMagicSquare(size: any): any[]

Parameters:

  • size any

Returns: any[]

Calls:

  • Math.floor
  • Array( noiseSquareSize ).fill
Code
function generateMagicSquare( size ) {

    const noiseSize = Math.floor( size ) % 2 === 0 ? Math.floor( size ) + 1 : Math.floor( size );
    const noiseSquareSize = noiseSize * noiseSize;
    const magicSquare = Array( noiseSquareSize ).fill( 0 );
    let i = Math.floor( noiseSize / 2 );
    let j = noiseSize - 1;

    for ( let num = 1; num <= noiseSquareSize; ) {

        if ( i === - 1 && j === noiseSize ) {

            j = noiseSize - 2;
            i = 0;

        } else {

            if ( j === noiseSize ) {

                j = 0;

            }

            if ( i < 0 ) {

                i = noiseSize - 1;

            }

        }

        if ( magicSquare[ i * noiseSize + j ] !== 0 ) {

            j -= 2;
            i ++;
            continue;

        } else {

            magicSquare[ i * noiseSize + j ] = num ++;

        }

        j ++;
        i --;

    }

    return magicSquare;

}