spark-lut-patch icon indicating copy to clipboard operation
spark-lut-patch copied to clipboard

Script version

Open pofulu opened this issue 5 years ago • 0 comments

// FastColorLUT.js
const Shaders = require('Shaders');
const Reactive = require('Reactive');

/**
 * Apply color lut to texture.
 * @param {ShaderSignal} texSignal 
 * @param {ShaderSignal} lutSignal 
 */
export function fastColorLUT(texSignal, lutSignal) {
    const tex = Shaders.composition(Reactive.clamp(texSignal, 0.00781, 0.98438), Shaders.functionVec2());
    const blueY = tex.z.mul(8).floor().div(8);
    const blueX = tex.z.sub(blueY).mul(64).floor().div(8);
    const lut_uv = Reactive.pack2(blueX.add(tex.x.div(8)), blueY.add(tex.y.div(8)));
    const lut = Shaders.composition(lutSignal, lut_uv);
    return Reactive.pack4(lut.x, lut.y, lut.z, lut.w.mul(texSignal.w));
}

Usage

image
// script.js
import { fastColorLUT } from './FastColorLUT';

const Materials = require('Materials');
const Textures = require('Textures');

(async function () {
    // Get required textures and materials
    const [material0, luts, cameraTexture0] = await Promise.all([
        Materials.findFirst('material0'),
        Textures.findFirst('luts'),
        Textures.findFirst('cameraTexture0')
    ]);

    // Convert color with lut texture
    const lut = fastColorLUT(cameraTexture0.signal, luts.signal);

    // Apply result to material
    material0.setTextureSlot('DIFFUSE', lut);
})();

pofulu avatar Jan 06 '21 09:01 pofulu