@openhps/core
Version:
Open Hybrid Positioning System - Core component
42 lines (41 loc) • 4.07 kB
JavaScript
import { mx_perlin_noise_float, mx_perlin_noise_vec3, mx_worley_noise_float as worley_noise_float, mx_worley_noise_vec2 as worley_noise_vec2, mx_worley_noise_vec3 as worley_noise_vec3, mx_cell_noise_float as cell_noise_float, mx_fractal_noise_float as fractal_noise_float, mx_fractal_noise_vec2 as fractal_noise_vec2, mx_fractal_noise_vec3 as fractal_noise_vec3, mx_fractal_noise_vec4 as fractal_noise_vec4 } from './lib/mx_noise.js';
import { mx_hsvtorgb, mx_rgbtohsv } from './lib/mx_hsv.js';
import { mx_srgb_texture_to_lin_rec709 } from './lib/mx_transform_color.js';
import { mix, smoothstep } from '../math/MathNode.js';
import { uv } from '../accessors/UV.js';
import { float, vec2, vec4, int } from '../tsl/TSLBase.js';
export const mx_aastep = (threshold, value) => {
threshold = float(threshold);
value = float(value);
const afwidth = vec2(value.dFdx(), value.dFdy()).length().mul(0.70710678118654757);
return smoothstep(threshold.sub(afwidth), threshold.add(afwidth), value);
};
const _ramp = (a, b, uv, p) => mix(a, b, uv[p].clamp());
export const mx_ramplr = (valuel, valuer, texcoord = uv()) => _ramp(valuel, valuer, texcoord, 'x');
export const mx_ramptb = (valuet, valueb, texcoord = uv()) => _ramp(valuet, valueb, texcoord, 'y');
const _split = (a, b, center, uv, p) => mix(a, b, mx_aastep(center, uv[p]));
export const mx_splitlr = (valuel, valuer, center, texcoord = uv()) => _split(valuel, valuer, center, texcoord, 'x');
export const mx_splittb = (valuet, valueb, center, texcoord = uv()) => _split(valuet, valueb, center, texcoord, 'y');
export const mx_transform_uv = (uv_scale = 1, uv_offset = 0, uv_geo = uv()) => uv_geo.mul(uv_scale).add(uv_offset);
export const mx_safepower = (in1, in2 = 1) => {
in1 = float(in1);
return in1.abs().pow(in2).mul(in1.sign());
};
export const mx_contrast = (input, amount = 1, pivot = .5) => float(input).sub(pivot).mul(amount).add(pivot);
export const mx_noise_float = (texcoord = uv(), amplitude = 1, pivot = 0) => mx_perlin_noise_float(texcoord.convert('vec2|vec3')).mul(amplitude).add(pivot);
//export const mx_noise_vec2 = ( texcoord = uv(), amplitude = 1, pivot = 0 ) => mx_perlin_noise_vec3( texcoord.convert( 'vec2|vec3' ) ).mul( amplitude ).add( pivot );
export const mx_noise_vec3 = (texcoord = uv(), amplitude = 1, pivot = 0) => mx_perlin_noise_vec3(texcoord.convert('vec2|vec3')).mul(amplitude).add(pivot);
export const mx_noise_vec4 = (texcoord = uv(), amplitude = 1, pivot = 0) => {
texcoord = texcoord.convert('vec2|vec3'); // overloading type
const noise_vec4 = vec4(mx_perlin_noise_vec3(texcoord), mx_perlin_noise_float(texcoord.add(vec2(19, 73))));
return noise_vec4.mul(amplitude).add(pivot);
};
export const mx_worley_noise_float = (texcoord = uv(), jitter = 1) => worley_noise_float(texcoord.convert('vec2|vec3'), jitter, int(1));
export const mx_worley_noise_vec2 = (texcoord = uv(), jitter = 1) => worley_noise_vec2(texcoord.convert('vec2|vec3'), jitter, int(1));
export const mx_worley_noise_vec3 = (texcoord = uv(), jitter = 1) => worley_noise_vec3(texcoord.convert('vec2|vec3'), jitter, int(1));
export const mx_cell_noise_float = (texcoord = uv()) => cell_noise_float(texcoord.convert('vec2|vec3'));
export const mx_fractal_noise_float = (position = uv(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1) => fractal_noise_float(position, int(octaves), lacunarity, diminish).mul(amplitude);
export const mx_fractal_noise_vec2 = (position = uv(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1) => fractal_noise_vec2(position, int(octaves), lacunarity, diminish).mul(amplitude);
export const mx_fractal_noise_vec3 = (position = uv(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1) => fractal_noise_vec3(position, int(octaves), lacunarity, diminish).mul(amplitude);
export const mx_fractal_noise_vec4 = (position = uv(), octaves = 3, lacunarity = 2, diminish = .5, amplitude = 1) => fractal_noise_vec4(position, int(octaves), lacunarity, diminish).mul(amplitude);
export { mx_hsvtorgb, mx_rgbtohsv, mx_srgb_texture_to_lin_rec709 };