buddhi1980 / mandelbulber2

Official repository for Mandelbulber v2
GNU General Public License v3.0
905 stars 115 forks source link

Randomize Design #278

Closed ghost closed 4 years ago

ghost commented 7 years ago

We love the randomize color palette option. How about another option for the fractal solid voxels. Please implement a random button that selects from the different formulas and transforms and populates parameter data.
Each click of the new "Randomize Design" button uses pseudo-random number generators to assure creation of unique content.

buddhi1980 commented 7 years ago

Have you seen Mutagen in JWildfire program?

ghost commented 7 years ago

I havevt seen it, but I like the name. Maybe we can call it 'transmutate' button

mclarekin commented 7 years ago

Apohysis also has a mutagen type thing.

I would suggest that Mandelbulber is much more complex for the simplified approach used in other programs The working range of a specific parameter is sometimes very dependent on other parameter settings.

There :

I consider it to be low priority at the moment.

On Mon, Apr 3, 2017 at 9:00 AM, mancoast notifications@github.com wrote:

I havevt seen it, but I like the name. Maybe we can call it 'transmutate' button

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/buddhi1980/mandelbulber2/issues/278#issuecomment-291014764, or mute the thread https://github.com/notifications/unsubscribe-auth/AMLZHOFbXX5z31E-w0Lz1I84P05_VIa7ks5rsAx9gaJpZM4Mw4qB .

ghost commented 7 years ago

Reference mandelbulb 3D source code: https://github.com/thargor6/mb3d/blob/master/mutagen/MutaGen.pas

This enables beginners to immediately dive in and make original content.

ghost commented 7 years ago

@buddhi1980 Can we 'pseudo' implement this feature by simply loading a random example, then randomizing the color palette, and randomizing the camera target?

zebastian commented 7 years ago

my five cents on this topic:

its hard / impossible to make educated guesses about a fractal formula parameter and its effect in the first place. A fine tuned Trial and error machine could help:

A randomizer could be implemented the following way iterate till 'cool':

  1. take a random parameter and change by random amount
  2. apply heuristics and check if result is better than before (than keep changes) else discard

the heuristics can be managable by the user and may include

with this hill climbing (https://en.wikipedia.org/wiki/Hill_climbing) algorithm it should be possible to find interesting absolutely new settings. This way all possible parameters are taken into account (though there should be a blacklist of parameters which should not be taken into account like stereoscopic rendering). Should be moderate programming effort. How well this will work i dont know. What do you think?

mclarekin commented 7 years ago

a) I think we would need to make several randomizers. Basic (controlled limited randomization) to Complex (suitable for an experienced user.)

. basic is UIs that will cover the situations that are most likely to produce good results. Maybe a few analytical linear and log ones. OpenCL implementation makes this feasible .

The heuristics control with bad DE may need to take into account the proportion of fractal surface in the image.

b) There are so many different methods ( to find good settings I use to test the combinations by making morphing animations )

We can use groupboxes or populate a table like we do for animation table i.e. add_parameter to the Randomizer UI table,

The user can randomize parameter between either, a coded default max & min, or user defined.

For a basic UI the choice of transforms would be restricted to ones that will work well together.

I would suggest trialling some basic methods once we have openCL speed.

c) Apophysis had a 2 way approach.

First you could load a random batch ie 50. These were displayed as a column of thumbnails. You would look at them at see that maybe only 1 looked interesting. The batch was all randomly constructed from a user defined preference list of transforms. (An experienced used could get a better success rate,)

Secondly, you could then mutate the chosen random image. The original image was in the UI center , and surrounded by 8 different mutated images. You could then tweak a parameter and see the way that parameter interacted with the mutations. There were quite a lot of user controls for the two stage process, however Apophysis is much simpler than Mandelbulber.

On Fri, Apr 14, 2017 at 9:22 PM, Sebastian Jennen notifications@github.com wrote:

my five cents on this topic:

its hard / impossible to make educated guesses about a fractal formula parameter and its effect in the first place. A fine tuned Trial and error machine could help:

A randomizer could be implemented the following way iterate till 'cool':

  1. take a random parameter and change by random amount
  2. apply heuristics and check if result is better than before (than keep changes) else discard

the heuristics can be managable by the user and may include

  • render time
  • amount bad DE
  • color diversity (areas of same color and areas of changing color)
  • distance diversity (close points and far away points)
  • ... there should be reasonable ways to measure these heuristics and the user should be able to weigh each heuristic.

with this hill climbing (https://en.wikipedia.org/wiki/Hill_climbing) algorithm it should be possible to find interesting absolutely new settings. This way all possible parameters are taken into account (though there should be a blacklist of parameters which should not be taken into account like stereoscopic rendering). Should be moderate programming effort. How well this will work i dont know. What do you think?

— You are receiving this because you commented. Reply to this email directly, view it on GitHub https://github.com/buddhi1980/mandelbulber2/issues/278#issuecomment-294123632, or mute the thread https://github.com/notifications/unsubscribe-auth/AMLZHBmnkI6HQwQ7vFs39fJplrq8sFb3ks5rvzrugaJpZM4Mw4qB .

taurus66 commented 7 years ago

I use random fields for several values. They are currently generated in a simple spread sheet. They depend on the initial value and the amount of variation. So in this case an additional input slot would be needed for the wanted variation - maybe global within the measurement module. With the following simple calculation, I make sure, to get a randomized value (or vector), that has a range of initial value +- variation: p--initial value; v--variation; r--random number between 0 and 1 p(new)=p-v+2vr Easy to see that at r 0-0.5 -> new value below initial and r 0.5-1 -> new value above initial. As I was pretty happy with Mandelbulber v1, I don't need any slider to input variation. A float with enough digits would do much better for me. I hope it is not a problem, that some values (like rotations or constant multiplier) only accept values, with a limited number of digits. I also do not need a full featured module like the mutagen in m3d 1.91. I need full control and not that slider ease of use - not a popular point of view, but my humble opinion.

ghost commented 7 years ago

The ability to randomize that enables everyone to instantly create.

TasMania17 commented 5 years ago

I found an easy way to achieve this. I used the Unix 'rand' utility to choose say 3 fractals from a possible 98. (It's over 100 now). I made a list of all the primary fractals (not Formulas 4D, transforms 4D, Transforms 4D or Hybrid colouring). Then I ran the command: rand -N 3 -M 98 -e -d '\n' and looked up the 3 fractals from my list. I did produce fairly good results. There are a possible 152,000 combinations of 3 from 98. I'm sure there are equivalent Windows utilities to rand. https://fractalforums.org/mandelbulber/14/experiment-using-a-random-number-generator-to-choose-fractals/2501

buddhi1980 commented 4 years ago

Randomizer is already implemented.