Join GitHub today
GitHub is home to over 28 million developers working together to host and review code, manage projects, and build software together.
Sign upWishlist
Mandelbulb 4D (M4D)
must have features list
*** List created from discussion at http://www.fractalforums.com/index.php?topic=24293.0 ***
3D scene
- Importing/exporting objects (entire scenes) as Wavefront .obj files:
- The 3D scene setup (all of the different objects, lighting, camera, atmospheric effects) should be editable as a node editor
- It should be possible to save the node configuration as a human readable file.
- Allow for loading custom node graphs - lots of possibilities to programmatically create scenes
- Support for alpha channel:
- OpenGL GLSL alpha channel
- Allow for transparent image background
- Various texture maps
- Diffuse
- Normal
- Specular
- Load texture maps with alpha channel using libpng
- Support for lightmaps
- Lightmap wrapping
- Support for heightmaps
- Be able to load ".map" files for gradients
- Texture parameters. Support standard things from current 3D programs:
- Bump
- Displace
- Reflection
- Refraction
- Fresnel IOR
- Mix multiple images
- Etc. ...
- Ability to precisely modify coordinates (position, rotation) for various scene objects:
- Lights
- Fractals, and non-fractal objects
- Camera
- Heightmaps
- Textures
- Etc.
- Easy controls for camera:
- Allow for easy reset of camera view angle to the basic directions (1, 0, 0), (0, 1, 0), etc.
- Unlimited number of lights
- Real global lights
- Lights that can cast parallel shadows
- Global illumination https://en.wikipedia.org/wiki/Global_illumination
- All of the common light sources from existing 3D systems http://blog.digitaltutors.com/understanding-different-light-types/
- Spot Lights
- Point Lights
- Area Lights
- Volume Light
- Etc.
- Real-world atmospheric effects
- Sun
- Clouds
- Stars
- Snow
- Rain
- Fog
- Earth sky atmosphere
- Unlimited number of objects (fractals, and non-fractal objects)
- Different materials
- Be able to apply different maps to different parts of an object
Rendering
- GPU support:
- When generating fractal data points, use GPU and CPU together.
- Use OpenGL GLSL for rendering simplified preview image. Needs to be real time to allow for exploration of scene (navigator).
- Should be able to run on different hardware. Will use OpenGL 3.2 since it is supported out of the box on latest Windows, Linux, and Mac OS X.
- When rendering high quality image, use GPU and CPU together.
- Some current state of the art things to consider:
- "Implementing a Practical Rendering System using GLSL" by T. Hachisuka (paper can be found on author’s web page http://www.ci.i.u-tokyo.ac.jp/~hachisuka/ ).
- https://launchpad.net/glsl-transform-feedback
- https://www.opengl.org/wiki/Transform_Feedback
- https://www.khronos.org/opencl/
- Some current state of the art things to consider:
- Lighting - global illumination, approximation
- Implement different modes:
- Faster renders for preview and navigation through the scene
- Ambient occlusion
- Phong shading
- Very high quality for the end result render. Several algorithms (far future of project):
- Photon mapping
- Voxel based
- http://gigavoxels.imag.fr/WhatIsGigaVoxels.html
- Three Dimensional Fractal Exploration using a Scale-Adaptive Sparse Voxel Octree
- Some kind of probabilistic method (Monte Carlo based)
- Simple ray-marching with approximated lighting, shadows, and coloring
- Faster renders for preview and navigation through the scene
- Implement different modes:
- More realistic depth of field
- Use a realistic camera model, not a pinhole model
- “A Realistic Camera Model for Computer Graphics”, Craig Kolb, Don Mitchell, Pat Hanrahan [1995] http://dl.acm.org/citation.cfm?id=218463
- “Camera Models and Optical Systems Used in Computer Graphics: Part I, Object-Based Techniques”, https://people.eecs.berkeley.edu/~barsky/VisRendPapers/survey1.pdf
- “Camera Models and Optical Systems Used in Computer Graphics: Part II, Image-Based Techniques”, https://people.eecs.berkeley.edu/~barsky/VisRendPapers/survey2.pdf
- Use a realistic camera model, not a pinhole model
- Selectable rendering modes
- It should be possible to configure the Navigator renderer so that it matches (closely) the high quality end result.
- Allow for controlling level of details of the Navigator
- Allow saving to disk from the navigator window
- Control over far plane and near plane for DOF
- Deferred shading
- Deferred rendering which makes it possible to change coloring ...etc. very fast.
- Post processing (Shadows, Reflections/Transparency and DOF) as well as Lighting and gradient changes after the render.
- http://learnopengl.com/#!Advanced-Lighting/Deferred-Shading
User interface
- Minimalist look and feel if nothing complex is going on
- Cross platform UI toolkit
- UI skins (themes). The program look should be configurable.
- Imgui UI library can be made to use different themes.
- Soon imgui will have different color themes out of the box. See https://github.com/ocornut/imgui/issues/707 (also some older issues https://github.com/ocornut/imgui/issues/184 and https://github.com/ocornut/imgui/issues/438 )
- Node-based editor for hybrid formulas:
- Navigator view:
- A switch to enable/disable camera-object collision checks.
- Allow for a multiple window workspace
- For those with multiple monitors this is a must
- Everything inside a windows can be rearranged (repositioned), or moved to another window
- UI should behave well on a high DPI monitor
- Everything should scale nicely
- Ideally, it should be possible to zoom out/in on any part of the interface
Additional functionality
- Batch render mode
- Setup several scene files (animations), and let them render over night.
- Should be possible to stop and resume a batch processing operation.
- Scripting/plugins
- Create an API which can be used by other applications. This way if someone wants to implement different UI, they can just use the API to get core functionality.
- Python scripts to add new functionality to the main program, or automate tasks
- Embedding Python in Another Application https://docs.python.org/3.5/extending/embedding.html
- Client-server architecture is ideal for separating UI from core logic
- Massive parallelization/render farms
- Be able to easily split work between multiple PCs (cloud virtual instances)
- Handle very large scenes (10-50 gigabytes) by splitting scene into several parts
- Client-server architecture is ideal for scaling application to many PCs
- Real time statistics on application performance
- Mutagen
- The mutation algorithm should be very configurable
- Human readable program configuration files, save files, scene description files.
- Use JSON for the file format
- Ability to import original MB3D save files (parameters, etc).
- It should be possible to recreate almost the same image in the new system
- Output to different image formats
- Portability
- Support out of the box
- Windows
- Linux
- Mac OS X
- Support out of the box
Fractal formulas
- Availability of all original custom formulas from MB3D
- Inside the program, formula browser with preview images.
- Search the formulas database by tags, description text, name.
- Better category tree (categorization) to organize formulas.
- In-program formula editor.
- Use a JIT
- Formulas coded in pure C
- Also possibility to have GLSL formulas
- Formula database separate from main program. In a dedicated formula Git repository.
- Easy update mechanism from within the program. Click a single button - and new formulas will be brought in from the formula repository
- Don’t need to release a new version of the program just to update the formula list.
- Formulas distributed as a set of 5 files:
- C source code
- Additionally (not required) GLSL code for calculating formula on the GPU
- Image preview
- Readme file
- Config file
- Unlimited number of formulas to create a single hybrid fractal
- Hybrid fractals:
- Alternate formulas
- Interpolate between different formulas
- DEcombinate
- Coupled Mandelbrot Set (need to investigate if this is possible)
- Ability to create a new hybrid fractal from several hybrid fractals
Animation
- Easy synchronisation of video and audio
- Video animation timeline in milliseconds
- Much better (improved from the original MB3D) animation support:
- Node based timeline editor for frames, key frames
- Easy tweaking of parameters and their animation curves
- Preview animation
- Update only the frames that actually changed after some fractal formula tweaks
Press h to open a hovercard with more details.