DarkBeam
Global Moderator
Fractal Senior
Posts: 2512
Fragments of the fractal -like the tip of it
|
|
« Reply #45 on: November 17, 2016, 08:33:12 PM » |
|
Sabine I don't fail to write a one line formula It is another parameter. It has different effects try!
|
|
|
Logged
|
No sweat, guardian of wisdom!
|
|
|
Sabine
|
|
« Reply #46 on: November 17, 2016, 09:02:55 PM » |
|
@Crist-JRoger: already thought you'd found the free-to-use renderfarm for us all;) Will check on your rotations after I have solved the reciprocal mystery;) (OR when I know I have failed miserably ;} ) @Dark-beam: Nono, we have only two limiters (and two muls)! But in your formula you use 3 limiters?? Lim1, Lim2 and Lim? First results has the right forms, vaguely... very very vaguely
|
sabine62.deviantart.com
|
|
|
Crist-JRoger
|
|
« Reply #47 on: November 17, 2016, 09:08:49 PM » |
|
renderfarm yeah )) De-Kn based with M Benesi palette:
|
|
|
Logged
|
|
|
|
Sabine
|
|
« Reply #48 on: November 17, 2016, 11:38:16 PM » |
|
@Crist-JRoger: Have looked at your rotations: Very nice!! I Must try and understand how they work though, especially the RotStart, which is iteration-dependent?? Something else, and I am not at all sure about it: This is a 4D-fractal, but you have only rotations for xyz, not w? Do we Need the w-rotation? (also a question for @Dark-beam and @mclarekin ) And I think we cannot solve it like this? uniform int PreRotStart; slider[0,1,15] uniform vec4 PreRotVector; slider[(0,0,0,0),(1,1,1,1),(1,1,1,1)] uniform float PreRotAngle; slider[0.00,0,180] uniform int RotStart; slider[0,1,15] uniform vec4 RotVector; slider[(0,0,0,0),(1,1,1,1),(1,1,1,1)] uniform float RotAngle; slider[0.00,0,180] mat3 fracRotation1; mat3 fracRotation2; void init() { fracRotation1 = rotationMatrix3(normalize(PreRotVector), PreRotAngle); fracRotation2 = rotationMatrix3(normalize(RotVector), RotAngle); } The fourth slider Does rotate err.. something... And nothing like the other three sliders rotate. Sorry, I Really am new to this:} But if we do it like the mb3d-formula we need the whole thing: yz, xz, xy, xw, yw, zw Ohh and forgot @Crist-JRogers: Great render!
|
|
« Last Edit: November 17, 2016, 11:57:59 PM by Sabine62 »
|
Logged
|
sabine62.deviantart.com
|
|
|
DarkBeam
Global Moderator
Fractal Senior
Posts: 2512
Fragments of the fractal -like the tip of it
|
|
« Reply #49 on: November 18, 2016, 12:42:09 AM » |
|
x' = sign(x)(1/Lim1 + 1/lim2 - 1/(abs(m1 * x)+ Lim ) - 1/(m2 * x*x+ Lim2 ) ) Yeah that lim should be Lim1 but I no longer remember really
|
|
|
Logged
|
No sweat, guardian of wisdom!
|
|
|
mclarekin
|
|
« Reply #50 on: November 18, 2016, 12:49:10 AM » |
|
We all can make same default now, and your images are looking good. The MinPinski4 is a bit more tricky to convert than most M3D formulas. Converting the M3D _transforms rather than the formulas is easier because in most cases we do not have to think about DE. ( orientation of default may depend on how the main program is set up. Like Mandelbulber V1.21OpenCL version produces the image upside down compared to MandelbulberV2 T(he direction of the z axis was reversed) rotation will be 4D when I get back to finishing off coding the 4D rotation. 3D is temporary. There could be a .frag somewhere with 4D rotation already coded ?? This is where I was before I got sidetracked. // 4D r0t /* * mat4 rotationXY ( float angle ) { mat4 rot; rot[0] = CVector4(cos(angle), sin(angle), 0.0, 0.0); rot[1] = CVector4(-sin(angle), cos(angle), 0.0, 0.0); rot[2] = CVector4(0.0, 0.0, 1.0, 0.0); rot[3] = CVector4(0.0, 0.0, 0.0, 1.0); return rot; }
mat4 rotationYZ ( float angle ) { mat4 rot; rot[0] = CVector4(1.0, 0.0, 0.0, 0.0); rot[1] = CVector4(0.0, cos(angle), sin(angle), 0.0); rot[2] = CVector4(0.0, -sin(angle), cos(angle), 0.0); rot[3] = CVector4(0.0, 0.0, 0.0, 1.0); return rot; }
mat4 rotationXZ ( float angle ) { mat4 rot; rot[0] = CVector4(cos(angle), 0.0, -sin(angle), 0.0); rot[1] = CVector4(0.0, 1.0, 0.0, 0.0); rot[2] = CVector4(sin(angle), 0.0, cos(angle), 0.0); rot[3] = CVector4(0.0, 0.0, 0.0, 1.0); return rot; }
mat4 rotationXW ( float angle ) { mat4 rot; rot[0] = CVector4(cos(angle), 0.0, 0.0, sin(angle)); rot[1] = CVector4(0.0, 1.0, 0.0, 0.0); rot[2] = CVector4(0.0, 0.0, 1.0, 0.0); rot[3] = CVector4(-sin(angle), 0.0, 0.0, cos(angle)); return rot; }
mat4 rotationYW ( float angle ) { mat4 rot; rot[0] = CVector4(1.0, 0.0, 0.0, 0.0); rot[1] = CVector4(0.0, cos(angle), 0.0, -sin(angle)); rot[2] = CVector4(0.0, 0.0, 1.0, 0.0); rot[3] = CVector4(0.0, sin(angle), 0.0, cos(angle)); return rot; }
mat4 rotationZW ( float angle ) { mat4 rot; rot[0] = CVector4(1.0, 0.0, 0.0, 0.0); rot[1] = CVector4(0.0, 1.0, 0.0, 0.0); rot[2] = CVector4(0.0, 0.0, cos(angle), -sin(angle)); rot[3] = CVector4(0.0, 0.0, sin(angle), cos(angle)); return rot; }
mat4 scale ( CVector4scale4 ) { mat4 rot; rot[0] = CVector4(scale4.x, 0.0, 0.0, 0.0); rot[1] = CVector4(0.0, scale4.y, 0.0, 0.0); rot[2] = CVector4(0.0, 0.0, scale4.z, 0.0); rot[3] = CVector4(0.0, 0.0, 0.0, scale4.w); return rot; }*/ offsetD is just an experimental thing for me to investigate. Distance Esimate is an "estimate", and we can tweak the estimate to try and get it closer to the real distance. You can be removed from the .frag This is reciprocal3 for the x axis (I have yet to get my sign(z.x) function working so this is longer than it needs to be) float3 tempZ = z; if (RecX_enabled) tempZ.x = (1.0 / Limit.x) - 1.0 / (abs(z.x) + Limit.x); //
tempZ.x += abs(z.x) * Slope.x; // function slope default 0.0
if (z.x > 0.0) { z.x = tempZ.x; } else { z.x = -tempZ.x; }
|
|
|
Logged
|
|
|
|
DarkBeam
Global Moderator
Fractal Senior
Posts: 2512
Fragments of the fractal -like the tip of it
|
|
« Reply #51 on: November 18, 2016, 12:56:11 AM » |
|
For mclarekin: If you use the standard quaternion maths, a 4d rotation should simply be a quaternonic mult by a 4d number of norm 1. Else it is a scaling plus rotating. To set norm=1 you multiply the vector by 1/sqrt(x2+y2+z2+w2) but if magnitude is 0... do nothing Too bad this is far less user friendly than the pretty angles notation ... Plus I made many formulas that offset rotations! Very interesting results if you do this; P = p + offset; P = p * rotmatrix; P = p - offset; You will get fractals of a *new* type because this is a particular combination of things be careful if offset is too big the rotation can sometimes kill the fractal This idea is reported in the original kifs thread in this Sierpinski forum section
|
|
« Last Edit: November 18, 2016, 01:05:13 AM by DarkBeam »
|
Logged
|
No sweat, guardian of wisdom!
|
|
|
mclarekin
|
|
« Reply #52 on: November 18, 2016, 02:23:54 AM » |
|
Random thoughts on Fragmentarium and M3D code.You could have a section in Fragmentarium called "M3D formulas" or better a specific one for "DrakBeam's codes", (and Knighty, Msltoe, Benesi etc). MixPinski could be the first post in the Darkbeam part. Choose some more you want to convert, and together we can do it. It is a good feeling when you get them working . Plus you learn and then start to experiment. For example, by default I always initially install start / stop iteration controls for the individual transforms within the formula ( and then later decide what to keep). With some transforms you will learn that they can be stopped earlier than others in a formula, and hence you can save some render maths time. And every late start and/or early stop setup can produce a variation of the default fractal, they are each a separate conditional mode. But as usual the more you add and tweak the greater the chance that the DE calc will become less accurate.(but not always it can get better). I like the .frag setup as a standard format for a formula/transform "bank" for people to view the maths.
|
|
|
Logged
|
|
|
|
mclarekin
|
|
« Reply #53 on: November 18, 2016, 03:54:10 AM » |
|
@ DarkBeam. Thanks for maths advice.
@ Crist & sarbine The following is a good example of how a lot of fractals work. Convert(map) p, do some maths, then map p back,. Then repeat for each iteration until termination.
P = p + offset; P = p * rotmatrix; P = p - offset;
Rotate folding= rotate P, do some maths, rotate back
Benesi Mag Transforms= magFold forward, do some maths, magFold back
Mbulb= Convert to polar , do some maths, covert back to Cartesian.
|
|
|
Logged
|
|
|
|
3dickulus
|
|
« Reply #54 on: November 18, 2016, 04:20:29 AM » |
|
Random thoughts on Fragmentarium and M3D code.You could have a section in Fragmentarium called "M3D formulas" or better a specific one for "DrakBeam's codes", (and Knighty, Msltoe, Benesi etc). MixPinski could be the first post in the Darkbeam part. Choose some more you want to convert, and together we can do it. It is a good feeling when you get them working . Plus you learn and then start to experiment. ... I like the .frag setup as a standard format for a formula/transform "bank" for people to view the maths. The current list of top level Examples folders... 2D Systems Benesi DarkBeam eiffieGI2 Experimental Historical 3D Fractals Kaleidoscopic IFS Kali's Creations Knighty Collection Theory Tutorials ... contains 209 frag files I think an online repository would be great
|
|
|
Logged
|
|
|
|
mclarekin
|
|
« Reply #55 on: November 18, 2016, 04:30:32 AM » |
|
@ 3dickulus. It is already partly set-up., good (i should have looked) Probably the only main one missing is Msltoe, then we also have Makin, Aexion, Trafassel etc. If there are no msltoe Juliabulbs then we need to code one quickly
|
|
|
Logged
|
|
|
|
3dickulus
|
|
« Reply #56 on: November 18, 2016, 04:41:47 AM » |
|
...my personal collection, 838, contains msltoe.frag dated Jan 28 2016 Msltoes Julia Bulb Distance Estimator ? I recall asking a few members if I could/should include their frags in the distribution but it was a mixed yes/no result at the time so I left it as is, there is currently an Examples.zip on my website that is just the Examples folder, it would be easy to create a repo on github or sourceforge
|
|
|
Logged
|
|
|
|
mclarekin
|
|
« Reply #57 on: November 18, 2016, 05:15:15 AM » |
|
I guess realistically, this will take a lot of time, what I personally would like is an easy to find location for recently converted fractal codes. So whenever we go though the process of converting ,there is a central place for this work in one format. Trawling the achieves is interesting ( for me) , but it takes a lot of time figuring things out, and you can miss important offshoot posts. I am often guilty of posting code in random obscure places, very hard to find again. Lazy habits are hard to break.
|
|
|
Logged
|
|
|
|
Sabine
|
|
« Reply #58 on: November 18, 2016, 09:36:45 AM » |
|
Just a shout in between: Random thoughts on Fragmentarium and M3D code. From a newbie point of view: A online repository would be wonderful! And also: there are many little routines that are already written, there are certain standard ways f.i. to get the colorpalette.frag working, that are easy if you only know how and where to put them into the frag. Maybe in the repository we could also have a place for subroutines and their how-to-'s? Then, if we need a 4D-rotation and it's already been done we can look there instead of going through hundreds of frags on our HD? @mclarekin Will have a closer look at this p-thing, thank you very much for the tip, might get back to you for a bit more info... (like what is p? ) But I might find out on my own with some luck;) @DarkBeam Thank you! And no wonder you forgot, you have coded so many!
|
|
|
Logged
|
sabine62.deviantart.com
|
|
|
mclarekin
|
|
« Reply #59 on: November 18, 2016, 10:10:05 AM » |
|
@sabi, This is my view. vect3 p is pixel,position, or point or something like that. Maybe short for pixel positioning point. When I come across it in formula code I generally change it to z, which i have to do for MandelbulberV2 code. But p is perfect, it goes well with notation p.xyz whereas z.xyz looks confusing.
In reading posts and code you can get confused between z the vector, and z the axis. p is by far preferable.
attached image is using the sierpinski part, once at iteration #3 in a hybrid
|
|
|
Logged
|
|
|
|
|