mirror of
https://github.com/Ttanasart-pt/Pixel-Composer.git
synced 2024-12-24 14:06:23 +01:00
[Grid] Add random shift and random scale properties.
This commit is contained in:
parent
03a061651f
commit
5a96df270e
3 changed files with 40 additions and 23 deletions
|
@ -68,17 +68,28 @@ function Node_Grid(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
|
|
||||||
newInput(27, nodeValue_Bool("Diagonal", self, false));
|
newInput(27, nodeValue_Bool("Diagonal", self, false));
|
||||||
|
|
||||||
newInput(28, nodeValue_Bool("Uniform height", self, true));
|
newInput(28, nodeValue_Bool("Uniform gap", self, true));
|
||||||
|
|
||||||
newInput(29, nodeValue_Float("Secondary Scale", self, 0));
|
newInput(29, nodeValue_Float("Secondary Scale", self, 0));
|
||||||
|
|
||||||
newInput(30, nodeValue_Float("Secondary Shift", self, 0))
|
newInput(30, nodeValue_Float("Secondary Shift", self, 0))
|
||||||
.setDisplay(VALUE_DISPLAY.slider);
|
.setDisplay(VALUE_DISPLAY.slider);
|
||||||
|
|
||||||
|
newInput(31, nodeValue_Float("Random Shift", self, 0))
|
||||||
|
.setDisplay(VALUE_DISPLAY.slider);
|
||||||
|
|
||||||
|
newInput(32, nodeValueSeed(self, VALUE_TYPE.float, "Shift Seed"));
|
||||||
|
|
||||||
|
newInput(33, nodeValue_Float("Random Scale", self, 0))
|
||||||
|
.setDisplay(VALUE_DISPLAY.slider);
|
||||||
|
|
||||||
|
newInput(34, nodeValueSeed(self, VALUE_TYPE.float, "Scale Seed"));
|
||||||
|
|
||||||
input_display_list = [
|
input_display_list = [
|
||||||
["Output", false], 0,
|
["Output", false], 0,
|
||||||
["Pattern", false], 1, 4, 15, 2, 13, 28, 3, 26, 27, 14, 9, 8, 16,
|
["Pattern", false], 1, 4, 15, 2, 13, 28, 3, 26, 27, 14,
|
||||||
["Secondary", false], 30, 29,
|
["Shift", false], 9, 8, 16, 31, 32, 30,
|
||||||
|
["Scale", false], 29, 33, 34,
|
||||||
["Render", false], 10, 11, 5, 20, 6, 7, 25, 12, 24,
|
["Render", false], 10, 11, 5, 20, 6, 7, 25, 12, 24,
|
||||||
["Truchet", true, 17], 18, 19, 22, 23,
|
["Truchet", true, 17], 18, 19, 22, 23,
|
||||||
];
|
];
|
||||||
|
@ -159,6 +170,11 @@ function Node_Grid(_x, _y, _group = noone) : Node_Processor(_x, _y, _group) cons
|
||||||
shader_set_f("secScale", _data[29]);
|
shader_set_f("secScale", _data[29]);
|
||||||
shader_set_f("secShift", _data[30]);
|
shader_set_f("secShift", _data[30]);
|
||||||
|
|
||||||
|
shader_set_f("randShift", _data[31]);
|
||||||
|
shader_set_f("randShiftSeed", _data[32]);
|
||||||
|
shader_set_f("randScale", _data[33]);
|
||||||
|
shader_set_f("randScaleSeed", _data[34]);
|
||||||
|
|
||||||
shader_set_color("gapCol", _col_gap);
|
shader_set_color("gapCol", _col_gap);
|
||||||
|
|
||||||
shader_set_gradient(_data[5], _data[20], _data[21], inputs[5]);
|
shader_set_gradient(_data[5], _data[20], _data[21], inputs[5]);
|
||||||
|
|
|
@ -3,8 +3,8 @@ function nodeValueMap(_name, _node, _junc = noone) { return new NodeValue(
|
||||||
function nodeValueGradientRange(_name, _node, _junc = noone) { return new NodeValue(_name, _node, CONNECT_TYPE.input, VALUE_TYPE.float, [ 0, 0, 1, 0 ])
|
function nodeValueGradientRange(_name, _node, _junc = noone) { return new NodeValue(_name, _node, CONNECT_TYPE.input, VALUE_TYPE.float, [ 0, 0, 1, 0 ])
|
||||||
.setDisplay(VALUE_DISPLAY.gradient_range).setVisible(false, false).setMapped(_junc); }
|
.setDisplay(VALUE_DISPLAY.gradient_range).setVisible(false, false).setMapped(_junc); }
|
||||||
|
|
||||||
function nodeValueSeed(_node, _type) {
|
function nodeValueSeed(_node, _type, _name = "Seed") {
|
||||||
var _val = new NodeValue("Seed", _node, CONNECT_TYPE.input, _type, seed_random(6), "");
|
var _val = new NodeValue(_name, _node, CONNECT_TYPE.input, _type, seed_random(6), "");
|
||||||
__node_seed_input_value = _val;
|
__node_seed_input_value = _val;
|
||||||
_val.setDisplay(VALUE_DISPLAY._default, { side_button : button(function() /*=>*/ { randomize(); __node_seed_input_value.setValue(seed_random(6)); }).setIcon(THEME.icon_random, 0, COLORS._main_icon) });
|
_val.setDisplay(VALUE_DISPLAY._default, { side_button : button(function() /*=>*/ { randomize(); __node_seed_input_value.setValue(seed_random(6)); }).setIcon(THEME.icon_random, 0, COLORS._main_icon) });
|
||||||
return _val;
|
return _val;
|
||||||
|
|
|
@ -40,6 +40,11 @@ uniform float truchetThresX;
|
||||||
uniform float truchetThresY;
|
uniform float truchetThresY;
|
||||||
uniform vec2 truchetAngle;
|
uniform vec2 truchetAngle;
|
||||||
|
|
||||||
|
uniform float randShift;
|
||||||
|
uniform float randShiftSeed;
|
||||||
|
uniform float randScale;
|
||||||
|
uniform float randScaleSeed;
|
||||||
|
|
||||||
float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(85.456034, 64.54065), vec2(12.9898, 78.233))) * (43758.5453123 + seed) ); }
|
float random (in vec2 st) { return fract(sin(dot(st.xy + vec2(85.456034, 64.54065), vec2(12.9898, 78.233))) * (43758.5453123 + seed) ); }
|
||||||
|
|
||||||
#region //////////////////////////////////// GRADIENT ////////////////////////////////////
|
#region //////////////////////////////////// GRADIENT ////////////////////////////////////
|
||||||
|
@ -247,26 +252,22 @@ void main() {
|
||||||
_pos.x = pos.x * ratio * cos(ang) - pos.y * sin(ang);
|
_pos.x = pos.x * ratio * cos(ang) - pos.y * sin(ang);
|
||||||
_pos.y = pos.x * ratio * sin(ang) + pos.y * cos(ang);
|
_pos.y = pos.x * ratio * sin(ang) + pos.y * cos(ang);
|
||||||
|
|
||||||
if(shiftAxis == 0) {
|
shf /= sca[shiftAxis];
|
||||||
shf /= sca.x;
|
int antiAxis = shiftAxis == 0? 1 : 0;
|
||||||
|
|
||||||
float cellY = floor(_pos.y * sca.y);
|
|
||||||
float _sec = mod(cellY, 2.);
|
|
||||||
float shiftX = _sec * shf;
|
|
||||||
|
|
||||||
_pos.x += shiftX + _sec * secShift;
|
|
||||||
sca.x *= 1. + _sec * secScale;
|
|
||||||
} else {
|
|
||||||
shf /= sca.y;
|
|
||||||
|
|
||||||
float cellX = floor(_pos.x * sca.x);
|
|
||||||
float _sec = mod(cellX, 2.);
|
|
||||||
float shiftY = _sec * shf;
|
|
||||||
|
|
||||||
_pos.y += shiftY + _sec * secShift;
|
float cell = floor(_pos[antiAxis] * sca[antiAxis]);
|
||||||
sca.y *= 1. + _sec * secScale;
|
float _sec = mod(cell, 2.);
|
||||||
}
|
float _shft = (_sec * secShift) + (_sec * shf);
|
||||||
|
float _rdsh = randShift * (random(randShiftSeed / 1000. + vec2(cell / dimension.x)) * 2. - 1.);
|
||||||
|
_shft += _rdsh;
|
||||||
|
|
||||||
|
float _scas = (_sec * secScale) + (1.);
|
||||||
|
float _rdsc = randScale * (random(randScaleSeed / 1000. + vec2(cell / dimension.x)) * 2. - 1.);
|
||||||
|
_scas += _rdsc;
|
||||||
|
|
||||||
|
if(shiftAxis == 0) { _pos.x += _shft; sca.x *= _scas; }
|
||||||
|
else if(shiftAxis == 1) { _pos.y += _shft; sca.y *= _scas; }
|
||||||
|
|
||||||
vec2 sqSt = floor(_pos * sca) / sca;
|
vec2 sqSt = floor(_pos * sca) / sca;
|
||||||
vec2 _dist = _pos - sqSt;
|
vec2 _dist = _pos - sqSt;
|
||||||
vec2 nPos = abs(_dist * sca - vec2(0.5)) * 2.; //distance in x, y axis
|
vec2 nPos = abs(_dist * sca - vec2(0.5)) * 2.; //distance in x, y axis
|
||||||
|
|
Loading…
Reference in a new issue