spark-lut-patch
spark-lut-patch copied to clipboard
Script version
// 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
// 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);
})();