I’ve released a new build of Fragmentarium, version 0.9 (“Sun Ra”).
Download at Github.
(As of now only Windows builds are available)
New features
- New high resolution output dialog (with auto-naming and auto-backup of scripts and parameters)
- Locking of parameters (makes rendering considerably faster in some cases by turning uniforms into constants)
Minor improvements
- Mouse wheel now changes camera position, not FOV
- Default raytracer improvements:
- Removed ‘AntiAliasBlur’,’MaxRayStepDiv’, and ‘NormalDetail’ settings
- Added reflection
- Shadows (hard, and pseudo-soft shadows)
- Added dithering (for banding removal) and very simple RNG functionality.
- Added new ambient occlusion method (similar to Rrola/Subblue – sample along normal for proximity).
- Added a simpler, but faster version of my raytracer. Just include “Fast-Raytracer.frag” instead of “DE-Raytracer.frag”
- Added a port of Subblues Fractal Labs (fractal.io) raytracer (GPL). Just include “Subblue-Raytracer.frag” instead of “DE-Raytracer.frag”
- Added vertical scroll bars to user parameter groups.
- Added ‘#define providesInit’, ‘#define providesColor’ (to provide custom coloring)
- Added vec4 GUI slider type
- Now disables uniforms which are not used in shader.
- Compiler warnings are now shown in output, also if there is no errors.
- Bugfix: resize of window now updates aspect ratio.
- Bugfix: handling of specular exponent = 0
- BugFix: fixed fps timer for >500ms renders
- BugFix: Tile Render now works in manual mode.
- BugFix: Using mouse and key movement at the same time, would result in distance between eye and target getting smaller and smaller.
New fragments
- A whole collection of new fragments from Knighty!
- Some of my own new fragments: GraphPlotter, KaliSet, BurningShip, Spudsville, Mandelbrot2D, Terrain.
- 2DJulia.frag and Complex.frag to make 2D fractals easier.
- New raytracers: Subblue-Raytracer.frag, Fast-Raytracer.frag
- QuilezLib with Iñigo Quilez’s collection of sphere tracing primitives
- Ashima-Noise.frag, a library of Noise functions.
Comments
Some of the new utility libraries make fractals very easy to explore. For instance, 2D escape time fractals are very easy to explore now.
Here is an example:
#include "2DJulia.frag" #include "Complex.frag" // 'Ducks' fractal by Samuel Monnier vec2 formula(vec2 z, vec2 c) { return cLog(vec2(z.x,abs(z.y)))+c; }
which produces this:
Other examples:
Terrain example – example of the new noise library
Mandelbrot heightmap example – based on Knighty’s example
For more example of images generated with the new version, take a look at the Flickr Fragmentarium stream.
Notice for ATI users
Several fragments fail on ATI cards. This seems to be due to faulty GLSL driver optimizations. A workaround is to lock the ‘iterations’ variable (click the padlock next to it). Adding a bailout check inside the main DE loop (e.g. ‘if (length(z)>1000.0) break;’) also seems to do the job.
Ca you clarify were to but that ATI bug fix as on my Mac it looks like it’s causing Fragmentarium to crash on startup.
Hi David, I tested on a Window 7 machine with an ATI card, but here the startup fragment (the Mandelbulb) worked. The ones that didn’t work, were several of the Kaleidoscopic IFS’s.
Could I get you to try renaming the Mandelbulb.frag to something else (so that it is not loaded on startup), and then test if you can run any of the other fragments?
Hi
If I rename Mandlebulb.frag then run Fragmentarium I get the following results.
If I run QuaternionJulia.frag – I get a crash
If I run Mandlebulb.frag – I get a crash
If I run Mandlebox.frag then the mandlebox renders.
The 2D fragments render, as do Knighty’s, well the ones that compile (ATI compiler).
The IFS fragments also crash.
Interestingly sometimes, very, very occasionally, Mandelbulb and QuaternionJulia.frag do work, but never when they are the first fragment to run, only if I run them second or later. Its not consistent, for example the first time it happened I ran MandelBox first then the other two worked, the next time I tried I ran Mandelbox first, Mandelbulb and QJ failed.
Dave
Perhaps these are GPU timeouts, because the rendering takes too long?
What happens, if you change:
#include “DE-Raytracer.frag”
to
#include “Fast-Raytracer.frag”
in some of fragments, that crashes?
Him
I’ve tried on or two and they work with the Fast-Raytracer.frag and Subblue-Raytracer.frag too.
Interesting. Do you have any idea of whether the standard ray-tracer times out (because rendering takes too long?) or if it crashes because of a GLSL compiler error? Do you get any error messages? What happens, if you enable preview – does it still crash?
Hi,
I get crashes with preview, even 5x, given how quick it crashes with preview this high I’d guess that is isn’t a timeout.
I don’t think OSX has a timeout, I’ve pretty sure I’ve had stuff running in Subblues fractal lab for well over a minute.
I’m going to try compiling it with anolder version of Qt just incase it’s a Qt 4.8.0 problem.
Crash Report below.
Exception Type: EXC_BAD_ACCESS (SIGBUS)
Exception Codes: KERN_PROTECTION_FAILURE at 0x0000000000000004
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Thread 0 Crashed: Dispatch queue: com.apple.main-thread
0 …pple.ATIRadeonX1000GLDriver 0x16344537 gldModifyTexSubImage + 407511
1 …pple.ATIRadeonX1000GLDriver 0x163bd7ab gldModifyTexSubImage + 903755
2 …pple.ATIRadeonX1000GLDriver 0x1634752c gldModifyTexSubImage + 419788
3 …pple.ATIRadeonX1000GLDriver 0x163476e9 gldModifyTexSubImage + 420233
4 …pple.ATIRadeonX1000GLDriver 0x1634821e gldModifyTexSubImage + 423102
5 …pple.ATIRadeonX1000GLDriver 0x1632c828 gldModifyTexSubImage + 309960
6 …pple.ATIRadeonX1000GLDriver 0x162eb92d gldModifyTexSubImage + 43981
7 …pple.ATIRadeonX1000GLDriver 0x16305deb gldModifyTexSubImage + 151691
8 …pple.ATIRadeonX1000GLDriver 0x162e74ed gldModifyTexSubImage + 26509
9 …pple.ATIRadeonX1000GLDriver 0x1630723f gldModifyTexSubImage + 156895
10 …pple.ATIRadeonX1000GLDriver 0x1630748f gldModifyTexSubImage + 157487
11 …pple.ATIRadeonX1000GLDriver 0x162c62be gldInitDispatch + 24366
12 …pple.ATIRadeonX1000GLDriver 0x162b03c4 gldCreateProgram + 996
13 …pple.ATIRadeonX1000GLDriver 0x162b094b gldCreatePipelineProgram + 1211
14 …pple.ATIRadeonX1000GLDriver 0x162bfafa gldUpdateDispatch + 842
15 GLEngine 0x161e2193 gleDoSelectiveDispatchNoErrorCore + 227
16 GLEngine 0x161e747b gleCheckFramebufferStatus + 185
17 libGL.dylib 0x9ab6e5ab glCheckFramebufferStatusEXT + 31
18 QtOpenGL 0x00fa55b5 QGLFramebufferObjectPrivate::checkFramebufferStatus() const + 69
19 QtOpenGL 0x00fa5a7c QGLFramebufferObject::bind() + 92
20 …ompany.Fragmentarium-Source 0x0001515b Fragmentarium::GUI::DisplayWidget::drawToFrameBufferObject() + 139
21 …ompany.Fragmentarium-Source 0x00015417 Fragmentarium::GUI::DisplayWidget::paintGL() + 87
22 QtOpenGL 0x00f8dc4b QGLWidget::glDraw() + 107
23 QtOpenGL 0x00f8c5cb QGLWidget::paintEvent(QPaintEvent*) + 43
24 QtGui 0x001a1213 QWidget::event(QEvent*) + 2547
25 QtOpenGL 0x00f8f561 QGLWidget::event(QEvent*) + 65
26 QtGui 0x001467fc QApplicationPrivate::notify_helper(QObject*, QEvent*) + 188
27 QtGui 0x0014d028 QApplication::notify(QObject*, QEvent*) + 248
28 QtCore 0x00da5b7c QCoreApplication::notifyInternal(QObject*, QEvent*) + 108
29 QtGui 0x00199b1a QWidgetPrivate::drawWidget(QPaintDevice*, QRegion const&, QPoint const&, int, QPainter*, QWidgetBackingStore*) + 1962
30 QtGui 0x000e91b9 -[QCocoaView drawRect:] + 1385
31 com.apple.AppKit 0x9531e61e -[NSView _drawRect:clip:] + 3510
32 com.apple.AppKit 0x9531d2bc -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 1600
33 com.apple.AppKit 0x9531d5f1 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
34 com.apple.AppKit 0x9531d5f1 -[NSView _recursiveDisplayAllDirtyWithLockFocus:visRect:] + 2421
35 com.apple.AppKit 0x9531b7db -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 711
36 com.apple.AppKit 0x9531c750 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4668
37 com.apple.AppKit 0x9531c750 -[NSView _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 4668
38 com.apple.AppKit 0x9531b34f -[NSThemeFrame _recursiveDisplayRectIfNeededIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:topView:] + 265
39 com.apple.AppKit 0x95317c96 -[NSView _displayRectIgnoringOpacity:isVisibleRect:rectIsVisibleRectForView:] + 3309
40 com.apple.AppKit 0x9527884b -[NSView displayIfNeeded] + 818
41 com.apple.AppKit 0x95241b64 -[NSWindow displayIfNeeded] + 204
42 com.apple.AppKit 0x9527307e _handleWindowNeedsDisplay + 696
43 com.apple.CoreFoundation 0x92968dd2 __CFRunLoopDoObservers + 1186
44 com.apple.CoreFoundation 0x92924ced __CFRunLoopRun + 557
45 com.apple.CoreFoundation 0x929243c4 CFRunLoopRunSpecific + 452
46 com.apple.CoreFoundation 0x929241f1 CFRunLoopRunInMode + 97
47 com.apple.HIToolbox 0x909f9e04 RunCurrentEventLoopInMode + 392
48 com.apple.HIToolbox 0x909f9af5 ReceiveNextEventCommon + 158
49 com.apple.HIToolbox 0x909f9a3e BlockUntilNextEventMatchingListInMode + 81
50 com.apple.AppKit 0x95249595 _DPSNextEvent + 847
51 com.apple.AppKit 0x95248dd6 -[NSApplication nextEventMatchingMask:untilDate:inMode:dequeue:] + 156
52 com.apple.AppKit 0x9520b1f3 -[NSApplication run] + 821
53 QtGui 0x000fd88a QEventDispatcherMac::processEvents(QFlags) + 1786
54 QtCore 0x00da4a31 QEventLoop::processEvents(QFlags) + 65
55 QtCore 0x00da4e0a QEventLoop::exec(QFlags) + 314
56 QtCore 0x00da7196 QCoreApplication::exec() + 182
57 …ompany.Fragmentarium-Source 0x00004aa9 main + 585
58 …ompany.Fragmentarium-Source 0x0000482a start + 54
First off – Fun program mate! Great work!
The terrain demo is neat. With a little tweaking to the parameters and a reflection hack and added functionality for setting the offset to ‘time’ you can have a basic ocean shader.
http://img585.imageshack.us/img585/2382/fragmentariumocean.jpg
Modified Code: http://pastebin.com/whTVzJDm