GithubHelp home page GithubHelp logo

buddhi1980 / mandelbulber2 Goto Github PK

View Code? Open in Web Editor NEW
865.0 46.0 115.0 266.6 MB

Official repository for Mandelbulber v2

License: GNU General Public License v3.0

Shell 0.57% C++ 69.71% QMake 0.09% PHP 1.33% C 26.82% Python 0.73% CMake 0.09% Batchfile 0.59% Inno Setup 0.03% PowerShell 0.01% Dockerfile 0.02%

mandelbulber2's Introduction

Banner

Coverity Scan Build Status Gitter Chat
Coverity Scan Linux: Build Status Linux
Windows: Build Status Windows
OSX: Build Status OSX Circle CI
Azure: Build status Azure
Join the chat

Universal Idea

Mandelbulber creatively generates three-dimensional fractals.

Explore trigonometric, hyper-complex, Mandelbox, IFS, and many other 3D fractals.

Render with a great palette of customizable materials to create stunning images and videos.

The possibilities are literally infinite!

Test Render

Features

  • High-Performance computing with multiple graphics accelerator cards (multi-GPU support via OpenCL)
  • Mathematical Models and Monte Carlo Algorithms for photo-realistic scenes
  • Enlightening Documentation
  • Renders trigonometric, hyper-complex, Mandelbox, IFS, and many other 3D fractals
  • Complex 3D raymarching: hard shadows, ambient occlusion, depth of field, translucency & refraction, etc.
  • Rich GUI in Qt 5 environment
  • Unlimited image resolution on 64-bit systems
  • Program developed for ARM (experimental), x86 and x64 CPUs (Linux, Windows, macOS)
  • Simple 3D navigator
  • Distributed Network Rendering
  • Key-frame animation for all parameters with different interpolations
  • Material management
  • Texture mapping (color, luminosity, diffusion, normal maps, displacement)
  • Exporting of 3D objects
  • Rendering queue
  • Command line interface for headless systems

image image

Keyboard shortcuts

In render window:

  • Shift+Up or Q / Shift+Down or Z: Move Camera Forward / Backward
  • Shift+Left or A / Shift+Right or D: Move Camera Left / Right
  • W / S: Move Camera Up / Down
  • Up / Down / Left / Right: Rotate Camera
  • Ctrl+(Left / Right): Roll Camera Left / Right

Building and Deploying

Download the latest stable version from Releases or clone git repository for actual development version.

After downloading, unpack the file and follow our instructions from the README file. Please see additional information in mandelbulber2/deploy folder.

Easy Preparation for Development

The software is natively developed using Qt Creator for Linux (Debian or Ubuntu).

The file mandelbulber2/qmake/mandelbulber.pro specifies the build system configuration for Qt Creator. To be able to compile the program, the host operating system requires preparation:

Use the following scripts to prepare your Linux environment for development. These scripts install all dependencies, compile the program, and create symbolic links in /usr/share/mandelbulber to your working directory.

Prepare Debian for Development

Prepare Ubuntu for Development

Arch Linux AUR Package (Current release)

Arch Linux AUR Package (Current git snapshot)

Arch Linux AUR Package (Current git snapshot with opencl support)

In addition, there exists an MSVC Solution located in this git package. The solution accommodates all dependencies with NUGET for autonomous compilation of OpenCL accelerated binary.

The system requires the QT5 framework in conjunction with LZO for real-time data compression and GSL for scientific resources.

Official partners

I-love-chaos

I-love-chaos

Resources

Video tutorials

Image Gallery

Forum

Forum Gallery

Compiled Binaries

Coverity Scan

Open Hub

License

GNU GPL v3

mandelbulber2's People

Contributors

albinoz avatar amdmi3 avatar austin-millan avatar bermarte avatar biberino avatar brunetton avatar buddhi1980 avatar cagelight avatar danuni avatar gitter-badger avatar jeroenrijckaert avatar luchansky avatar mclarekin avatar orbitcowboy avatar probonopd avatar psyriccio avatar rikardfalkeborn avatar starmute avatar valera-rozuvan avatar zebastian avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

mandelbulber2's Issues

example settings wrong end frame

In
\examples\keyframe_anim_mandelbulb.fract
is
keyframe_last_to_render 1800;
but last frame can be maximal
keyframe_last_to_render 1700;
This causes the field to default to 0 on load (possibly undesired too, more appropiate to default to max, when max is exceeded?)
TODO: check other example settings of flight and keyframe animation.

Queue and NetRender - can generate conflicts

In GUI mode program hangs when queue is rendered using NetRender and at the same time another image is started to render in main image.
There is needed to add lock of NetRender when is used by queue or main image

Decimal separator on Windows

Some languages like Dutch use a comma for decimal separator symbol. For most programs, the language settings from Windows are used. For example in both M$ Excel and LibreOffice Calc I can use the numerical part of my keyboard to enter numbers pretty fast. The key "Del / dot" below the number 3 is automatically recognized as a comma.

Mandelbulber seems to make chaos on the way fields are entered. Some need a comma, some need a dot. Basically I can't really use the numerical part of the keyboard because of this. It would be nice if all numerical fields can be used in the same way, in the normal way software behaves under M$ Windows.

render of main image can start multiple times

the main image is not thread safe.
If you click very reasonable fast on render. You can produce multiple render jobs at a time.
both renders write to displayed image and modify the progress bar.
This effect only occurs on certain settings. Probably due to how busy qt gui is:

Is it possible to (b)lock the image directly after start?
I tried:

void cInterface::StartRender(void)
{
    WriteLog("cInterface::StartRender(void)");

    stopRequest = true;
    while (mainImage->IsUsed())
    {
    }

    mainImage->BlockImage(); // this should directly block

but this resulted in a tilt, if render button is pressed shortly after another.

steps to reproduce:
with a lot of primitive objects the problem is quite bad.
Here a php script to generate a lot of primitive objects:

sudo apt-get install php5-cli # if not already present

#!/usr/bin/env php
<?php

$out = 'Mandelbulber settings file
# version 2.04
# only modified parameters
[main_parameters]' . PHP_EOL;

for($i = 0; $i < 100; $i++)
    $out .= 'primitive_cylinder_' . $i . '_enabled true;' . PHP_EOL;

$out .= '[fractal_1]
[fractal_2]
[fractal_3]
[fractal_4]';

file_put_contents('settings.fract', $out);
echo PHP_EOL . 'Done' . PHP_EOL;
?>

hybrid booleanoperators

need to be adopted to new formula count (mostly hardcoded to 3, should be NUMBER_OF_FRACTALS - 1)
also missing ui elements

dynamic language support

I saw there is already a translation support on the way 


ui_render_window.h
...
label_26->setText(QApplication::translate("RenderWindow", "z:", 0));
...

Always thought it would be nice to have a language select for the GUI.
eg. another menupoint "language" with onchange -> change language and save 
current language as default

This is how far I know about translation in QT:

You can parse the *.pro file and extract all used words / phrases into a
xml (.ts) file:

lupdate mandelbulber.pro -ts lang/EN.ts

These XML Files you can copy paste to a new new file(obviously):

cp EN.ts PL.ts

and modify them with the qt linguist tool.
[http://qt-project.org/doc/qt-4.8/linguist-manual.html]

You can load the "binaried" version on program start by adding to main.cpp

QTranslator translator;
translator.load(QString("lang/DE"));
mainInterface->application->installTranslator(&translator);

You should be able to change the language dynamically by calling something like:

void cInterface::SetUILang(QString lang)
{
   QTranslator translator;
   translator.load(QString("lang/" +  lang));
   mainWindow->application->installTranslator(&qtTranslator);
   mainWindow->ui->retranslateUi(this);
}

I did not test this yet and i am not sure, if this is the best way to do so.

Anyway i could help out with the german translation if it comes to it.

Original issue reported on code.google.com by [email protected] on 25 Mar 2014 at 7:10

Interpolate Next Keyframes Issue

I have added three key frames, I then right clicked in the white space to the right of the keyframe parameters, and action "Interpolate next keyframes", then program crashed.

Application Output from QT Creator
The program has unexpectedly finished.
/home/graeme/git/mandelbulber2/mandelbulber2/build-mandelbulber-Desktop-Debug/mandelbulber2 crashed

Mandelbulber settings file

version 2.06

only modified parameters

[main_parameters]
ambient_occlusion 1.3;
ambient_occlusion_enabled true;
ambient_occlusion_quality 10;
background_color_1 0000 6700 ac00;
background_color_2 0000 6700 ac00;
background_color_3 0000 6700 ac00;
camera 0 -3.826271362488594 0;
camera_distance_to_target 3.831494817874653;
camera_rotation -2.992139279808613 0 0;
camera_top 0 0 1;
coloring_palette_size 255;
DE_factor 0.35;
flight_last_to_render 0;
formula_1 57;
frames_per_keyframe 25;
image_height 300;
image_width 300;
keyframe_last_to_render 50;
specular 0.4;
surface_color_palette ff0000 698403 fff59c f5bd22 0b5e87 c68876 ff0000 3b9fee d4ffd4 aba53c;
target 0.2 0 0;
[fractal_1]
transform_benesiFastPwr2PineTree1_enabled true;
transform_benesiFastPwr2PineTree1_start_iterations 1;
transform_benesiFastPwr2PineTree1_stop_iterations 3;
transform_benesiMagTransformOne2_enabled true;
transform_benesiMagTransformOne2_stop_iterations 5;
transform_coloringParameters1_stop_iterations 1;
transform_fabsFormulaAB1A 0 1 0;
transform_main_rotation2 0 90 0;
transform_main_rotation2_enabled true;
transform_main_rotation3 45 0 0;
transform_variableConstantMultiplier1_enabled true;
transform_variableConstantMultiplier1_variableConstantMultiplier 2 0 0;
[fractal_2]
[fractal_3]
[fractal_4]
[fractal_5]
[fractal_6]
[fractal_7]
[fractal_8]
[fractal_9]

Program crashes when rendering of keyframe animation is stopped and then started again.

Program crashes when rendering of keyframe animation is stopped and then started again.
The problem is located probably in cMorph class.

To reproduce error:

  • create several keyframes
  • start rendering of animation
  • stop it until first frame is finished
  • start rendering again

Then you will get following call stack:

38 QListData::size() qlist.h:96 0x000000000042831d  
37 QList<cMorph::sMorphParameter>::size() qlist.h:137 0x000000000048ea60    
36 cMorph::findInMorph() morph.cpp:58 0x000000000048a1a0    
35 cKeyframes::GetInterpolatedFrame() keyframes.cpp:59 0x0000000000483ca7   
34 cKeyframes::GetInterpolatedFrameAndConsolidate() keyframes.cpp:74 0x0000000000483ff9 
33 cKeyframeAnimation::RenderKeyframes() animation_keyframes.cpp:455 0x00000000004390b5 
32 cKeyframeAnimation::slotRenderKeyframes() animation_keyframes.cpp:169 0x0000000000436b0f 
31 cKeyframeAnimation::qt_static_metacall() moc_animation_keyframes.cpp:130 0x0000000000575941  
30 QMetaObject::activate() qobject.cpp:3681 0x00007ffff5e2f09d  
29 QMetaObject::activate() qobject.cpp:3547 0x00007ffff5e2f507  
28 QAbstractButton::clicked() moc_qabstractbutton.cpp:297 0x00007ffff6e676d2    
27 QAbstractButtonPrivate::emitClicked() qabstractbutton.cpp:542 0x00007ffff6bd29a5 
26 QAbstractButtonPrivate::click() qabstractbutton.cpp:535 0x00007ffff6bd3619   
25 QAbstractButton::mouseReleaseEvent() qabstractbutton.cpp:1140 0x00007ffff6bd37d4 
24 QWidget::event() qwidget.cpp:8316 0x00007ffff6b15778 
23 QApplicationPrivate::notify_helper() qapplication.cpp:3499 0x00007ffff6ad712c    
22 QApplication::notify() qapplication.cpp:3066 0x00007ffff6adcc0c  
21 QCoreApplication::notifyInternal() qcoreapplication.cpp:935 0x00007ffff5dffe8b   
20 sendSpontaneousEvent() qcoreapplication.h:240 0x00007ffff6adb39a 
19 QApplicationPrivate::sendMouseEvent() qapplication.cpp:2539 0x00007ffff6adb39a   
18 QWidgetWindow::handleMouseEvent() qwidgetwindow.cpp:507 0x00007ffff6b345b7   
17 QWidgetWindow::event() qwidgetwindow.cpp:179 0x00007ffff6b369c3  
16 QApplicationPrivate::notify_helper() qapplication.cpp:3499 0x00007ffff6ad712c    
15 QApplication::notify() qapplication.cpp:3282 0x00007ffff6adc600  
14 QCoreApplication::notifyInternal() qcoreapplication.cpp:935 0x00007ffff5dffe8b   
13 sendSpontaneousEvent() qcoreapplication.h:240 0x00007ffff6346df3 
12 QGuiApplicationPrivate::processMouseEvent() qguiapplication.cpp:1748 0x00007ffff6346df3  
11 QGuiApplicationPrivate::processWindowSystemEvent() qguiapplication.cpp:1549 0x00007ffff6348665   
10 QWindowSystemInterface::sendWindowSystemEvents() qwindowsysteminterface.cpp:579 0x00007ffff632d64f   
9 userEventSourceDispatch() qeventdispatcher_glib.cpp:78 0x00007ffff0132450 
8 g_main_dispatch() gmain.c:3122 0x00007ffff41f7c3d 
7 g_main_context_dispatch() gmain.c:3737 0x00007ffff41f7c3d 
6 g_main_context_iterate() gmain.c:3808 0x00007ffff41f7f20  
5 g_main_context_iteration() gmain.c:3869 0x00007ffff41f7fcc    
4 QEventDispatcherGlib::processEvents() qeventdispatcher_glib.cpp:426 0x00007ffff5e58277    
3 QEventLoop::exec() qeventloop.cpp:212 0x00007ffff5dfd5d2  
2 QCoreApplication::exec() qcoreapplication.cpp:1188 0x00007ffff5e0521c 
1 main() main.cpp:128 0x0000000000486493

-nogui does not work (-ip too?)

compiled successfully on our cluster, unable to start without gui :-(

Log file name: /root/.mandelbulber_log.txt
Detected 8 CPUs
Default data directory: /root/.mandelbulber/
Fatal: QXcbConnection: Could not connect to display
(qxcbconnection.cpp:322, QXcbConnection::QXcbConnection(QXcbNativeInterface_, bool, const char_))
Aborted

logfile
PID: 29490, time: 0.009065, Mandelbulber version, value = 2.05
PID: 29490, time: 0.009145, Mandelbulber compilation date, value = Sep 5 2015 11:07:42
PID: 29490, time: 0.009218, CPUs detected, value = 8
PID: 29490, time: 0.009266, Default data directory, value = /root/.mandelbulber/
PID: 29490, time: 0.009307, Decimal point, value = .
PID: 29490, time: 0.009391, Prepare QApplication

my servers are headless, i am unable to start a gui there

i know it is possible to redirect X but i want to play with mandelbulber on a massive setup ;-)

huge image - memory management

on really huge images (eg 10000 * 50000) the program is not capable of allocating memory in cImage::AllocMem.
But instead of throwing an badalloc error in any way, the program crashes.
It would be good to have a way of reading available memory, checking against GetUsedMB, and then throwing error / allocation. (could still fail, but better than nothing)
There is neither a builtin way for c++ to do that, nor for qt. So we would be forced to use some hackish platform dependent code like:
http://stackoverflow.com/questions/8122277/getting-memory-information-with-qt?answertab=votes#tab-top

Or we could try to use some other allocating method, to prevent the rest of the program to crash.
Opinions appreciated :)

random lights position caching

buddhi: lights position should be cached, because it takes time to calculate new positions of lights when you press render (in Mandelbulber v1 they were cached). When rendering was started it copied positions of lights from cache. New positions of lights should be calculated only when one of parameter of random lights is changed

Netrender Qt

Hi,

I rewrote the old netrender class to qt,
this has the benefits that the code is way shorter and platform unspecific, and 
it is non blocking.

This is a first draft, connection establishing is tested, renderjobs sending / 
receiving not.

@Krzysztof: Please tell me, if you see any drawbacks with this approach, or if 
something is missing.

any ideas where to put the ui elements?

Cheers!

Original issue reported on code.google.com by [email protected] on 25 Mar 2015 at 6:01

Attachments:

Crash during Record flight path

What steps will reproduce the problem?
1. Open settings file (see attached file)
2. Press "Record flight path"
3. Change animation settings (seconds per frame = 1.2)
4. After some +/- 300 or 400 frames the program crashes

Since I was doing a record flight path, I couldn't really watch the cpu/memory 
monitors realtime. Checked diskspace afterwards, which was enough. Maybe the 
frames take longer to render, after getting more into the fractal. But if this 
is the case, I expect a warning that "second per frame" are too fast. 

Perhaps not a bug, but the crash might be prevented by some checks and/or 
warnings.

Will investigate further and might provide additional info in the comments.

Original issue reported on code.google.com by [email protected] on 8 Mar 2015 at 6:54

Attachments:

In .fractlist when mode is not specified it shoud use STILL by default

It would be good if processing of .fractlist file (e.g. loaded from command line) use STILL mode as default, when it's not specified in a line with filename. Now when mode is not specified it generates error ""wrong format in line:..."
I will be good to change it, because will be possible to generate fractlist by just using 'ls' command

Rendered animation frames are skewed and black and white

What steps will reproduce the problem?
1. Record a flight path
2. Tune lots of variables, requiring lots of rendering in between
3. Use "Render flight animation" button

I expect the rendered animation images to look the same as in the main render 
window. But sometimes they are skewed and black and white (see attached files). 
Step 2 above is a little vague, but I really can't be more specific at the 
moment. Hopefully the setting and images files will be of help.

Been using revision 271, but noticed this same thing in version 2.03, both on 
Linux Slackware.

Original issue reported on code.google.com by [email protected] on 22 Feb 2015 at 9:38

Attachments:

Gamepad integration for flight animation

feature request:

  • evaluating library for gamepad recognition and input (SDL2 looks promising)
  • generalization of input for flight control
  • for playstation / xbox like controllers maybe:

left joystick: yaw / pitch

right joystick: move orthogonal to view direction

buttons: start / pause / accelerate / deccelerate / roll right / roll left

Segfault on opening specific file

Current version of Mandelbulber crashes and gives a segmentation fault while opening the attached file. Created with the same version just some minutes ago. Did notice a warning/error:

Warning: slotLogLineEditChanged() error: value from "logedit_aux_light_visibility" is not greater zero

windows cli no output

when the program is started in cmd box on win7 with
mandelbulber.exe -q
the program runs in background and there is no output visible

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.