[Simple Noise] Add iterative scale and amplitude properties.

This commit is contained in:
Tanasart 2025-02-25 15:16:15 +07:00
parent 15f8f58a94
commit 69b982a10d
3 changed files with 38 additions and 23 deletions

View file

@ -36,9 +36,15 @@ function Node_Noise_Simplex(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
newInput(10, nodeValue_Rotation("Rotation", self, 0));
newInput(11, nodeValue_Float("Scaling", self, 2.));
newInput(12, nodeValue_Float("Amplitude", self, .5))
.setDisplay(VALUE_DISPLAY.slider);
input_display_list = [
["Output", false], 0,
["Noise", false], 1, 10, 2, 8, 3, 9,
["Advances", true], 11, 12,
["Render", false], 4, 5, 6, 7,
];
@ -71,6 +77,9 @@ function Node_Noise_Simplex(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
var _clb = _data[7];
var _ang = _data[10];
var _adv_scale = _data[11];
var _adv_amplit = _data[12];
_outSurf = surface_verify(_outSurf, _dim[0], _dim[1], attrDepth());
surface_set_shader(_outSurf, sh_simplex);
@ -85,7 +94,10 @@ function Node_Noise_Simplex(_x, _y, _group = noone) : Node_Processor(_x, _y, _gr
shader_set_2("colorRanG", _clg);
shader_set_2("colorRanB", _clb);
draw_sprite_ext(s_fx_pixel, 0, 0, 0, _dim[0], _dim[1], 0, c_white, 1);
shader_set_f("itrAmplitude", _adv_amplit);
shader_set_f("itrScaling", _adv_scale);
draw_empty();
surface_reset_shader();
return _outSurf;

View file

@ -819,7 +819,7 @@ function Panel_Animation() : PanelContent() constructor {
if(sca != timeline_scale) {
var mfb = (mx - bar_x - timeline_shift) / timeline_scale;
var mfa = (mx - bar_x - timeline_shift) / ui(sca);
var mfa = (mx - bar_x - timeline_shift) / sca;
timeline_shift_to = timeline_shift_to - (mfa - mfb) * timeline_scale;
timeline_shift = timeline_shift_to;

View file

@ -15,7 +15,6 @@ varying vec4 v_vColour;
uniform vec2 dimension;
uniform vec3 position;
uniform int layerMode;
uniform float rotation;
uniform vec2 scale;
@ -26,19 +25,24 @@ uniform vec2 iteration;
uniform int iterationUseSurf;
uniform sampler2D iterationSurf;
vec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
vec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
vec4 permute(vec4 x) { return mod289(((x * 34.0) + 10.0) * x); }
vec4 taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }
uniform int colored;
uniform vec2 colorRanR;
uniform vec2 colorRanG;
uniform vec2 colorRanB;
uniform float itrScaling;
uniform float itrAmplitude;
uniform float phase;
vec2 sca;
float itrMax, itr;
vec3 mod289(vec3 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
vec4 mod289(vec4 x) { return x - floor(x * (1.0 / 289.0)) * 289.0; }
vec4 permute(vec4 x) { return mod289(((x * 34.0) + 10.0) * x); }
vec4 taylorInvSqrt(vec4 r) { return 1.79284291400159 - 0.85373472095314 * r; }
vec3 hsv2rgb(vec3 c) {
vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0);
vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www);
@ -71,6 +75,7 @@ float snoise(vec3 vec) {
// Permutations
i = mod289(i);
vec4 p = permute( permute( permute(
i.z + vec4(0.0, i1.z, i2.z, 1.0 ))
+ i.y + vec4(0.0, i1.y, i2.y, 1.0 ))
@ -130,17 +135,13 @@ float simplex(in vec2 st) {
float amp = pow(2., float(itr) - 1.) / (pow(2., float(itr)) - 1.);
float n = 0.;
if(layerMode == 0) n = 0.;
else if(layerMode == 1) n = 1.;
for(float i = 0.; i < itrMax; i++) {
if(i >= itr) break;
if(layerMode == 0) n += snoise(xyz) * amp;
else if(layerMode == 1) n *= (snoise(xyz) * amp) + (1. - amp);
amp *= .5;
xyz *= 2.;
n += snoise(xyz) * amp;
amp *= itrAmplitude;
xyz *= itrScaling;
}
return n;
@ -168,12 +169,14 @@ void main() {
if(colored == 0) {
gl_FragColor = vec4(vec3(simplex(st)), 1.0);
} else if(colored == 1) {
float randR = colorRanR[0] + simplex(st) * (colorRanR[1] - colorRanR[0]);
float randG = colorRanG[0] + simplex(st + vec2(1.7227, 4.55529)) * (colorRanG[1] - colorRanG[0]);
float randB = colorRanB[0] + simplex(st + vec2(6.9950, 6.82063)) * (colorRanB[1] - colorRanB[0]);
gl_FragColor = vec4(randR, randG, randB, 1.0);
} else if(colored == 2) {
float randH = colorRanR[0] + simplex(st) * (colorRanR[1] - colorRanR[0]);
float randS = colorRanG[0] + simplex(st + vec2(1.7227, 4.55529)) * (colorRanG[1] - colorRanG[0]);