Welcome to Fractal Forums

Fractal Software => Releases => Topic started by: Buddhi on December 28, 2013, 09:34:31 AM




Title: Mandelbulber 1.20
Post by: Buddhi on December 28, 2013, 09:34:31 AM
Mandelbulber 1.20

Open source program (GNU GPL) for rendering photo-realistic 3D fractals
Free download (executables and source): http://sourceforge.net/projects/mandelbulber/
Website:       http://www.mandelbulber.com/
User manual: http://wiki.mandelbulber.com/index.php?title=User_Manual

New features in version 1.20:

- OpenCL - added NoDE rendering engine
- OpenCL - added "limits" feature to rendering engine
- OpenCL - added "interior mode"
- OpecCL - added primitive objects
- OpenCL - next trial to fix the problem with -I option for OpenCL compiler (spaces in path were not passed properly). I hope this time it is permanent fix. There is used completely different method to pass include path.
- OpenCL - added setting for delta for deltaDE algorythm
- added HUD for flight path recording
- simplified code and corrected for "limits" and "interior mode"
- fixed bug: NetRender didn't worked under Windows 7 and Windows Vista. Now connection is limited to IPv4 and works properly.
- fixed problem with visibility of 3D cursor during flight path recording
- fixed resource leaks

Example of primitive object - water, used with Monte Carlo DOF
(http://nocache-nocookies.digitalgott.com/gallery/15/thumb_640_16_12_13_8_59_47.jpeg) (http://www.fractalforums.com/index.php?action=gallery;sa=view;id=15288)

Example of "limits" and "interior mode"
(http://nocache-nocookies.digitalgott.com/gallery/15/thumb_640_29_11_13_5_12_30.jpeg) (http://www.fractalforums.com/index.php?action=gallery;sa=view;id=15219)

SVN repository: http://mandelbulber.googlecode.com/svn/trunk/
This repository is available from Google Code: http://code.google.com/p/mandelbulber/


Title: Re: Mandelbulber 1.20
Post by: mclarekin on December 29, 2013, 12:05:22 AM
Thanks Buddhi, openCL now runs on my CPU Intel i3 2.13 MHz

For attached example:
Not openCL 39sec,
openCL Full: all shaders 22 sec,
openCL Normal 5 sec (wow)
openCL fast 4 sec compared to 13 sec without openCL

Some minor to major colouring differences

Runs on AMD platform but not on Intel platform (error -11),
OpenCL  Build log:   Compilation started
:318:10: error: cannot combine with previous 'type-name' declaration specifier
:318:15: error: expected identifier or '('
:319:8: error: expected identifier or '('
:320:32: error: expected expression
Compilation failed

whereas all CL CPU demos on Geeks 3D GPU Caps Viewer 1.19 work on the Intel platform, but this is all way beyond my limited knowledge ( I do note there are differences with the openCL extensions between the two platforms)

Lots of crashes with hybrids but oops just read post on hybrids

overall its great when it works. I suspect that when I upgrade my laptop and can use the GPU I may not have any problems.

Thanks again.





Title: Re: Mandelbulber 1.20
Post by: mclarekin on December 30, 2013, 11:42:04 AM
I was wondering if anyone can replicate the attached images. One was rendered without openCL the other using openCL Full mode, device type CPU. I found it interesting and a bit weird with my limited understanding



Mandelbulber 1.2;

image_height 800;

view_point_x 1.7579275248484949;

view_point_y -1.9210011098291331;

view_point_z -1.910784442376507;

angle_alfa -168.08092566700719;

angle_beta 14.19831608970291;

angle_gamma -37.64007796152945;

zoom 1.0000000000000001e-015;

perspective 1.2;

formula 8;

fractal_constant_factor 0.88;

brightness 0.80000000000000004;

ambient_occlusion 2;

ambient_occlusion_quality 3;

glow_intensity 0.10000000000000001;

glow_color_1_R 65535;

glow_color_1_G 1935;

glow_color_1_B 0;

glow_color_2_R 64715;

glow_color_2_G 65535;

glow_color_2_B 0;

background_color_1_G 30069;

background_color_2_R 0;

background_color_2_G 30069;

background_color_3_G 30069;

background_color_3_B 65535;

fog_colour_2_G 30069;

background_color_1_G 30069;

ambient_occlusion_enabled 1;

fast_ambient_occlusion_mode 1;

coloring_random_seed 291327;

coloring_palette_offset 137.30000000000001;

post_SSAO_enabled 0;

post_DOF_focus 129.8140237940022;

post_DOF_radius 10.4;

mandelbox_scale -1.5;

mandelbox_folding_min_radius 0.40999999999999998;

mandelbox_folding_fixed_radius 1.03;

mandelbox_rotation_main_alfa 12.000000000000002;

mandelbox_rotation_main_beta 6.0000000000000009;

mandelbox_rotation_main_gamma 2;

mandelbox_color_Sp1 3;

mandelbox_color_Sp2 1;


Title: Re: Mandelbulber 1.20
Post by: Buddhi on December 30, 2013, 02:44:16 PM
Thanks for reporting this problem. You were right. There is a difference which should't be. OpenCL code uses fixed_radius parameter in wrong way.
In OCL code for mandelbox there is:

Code:
		if (rr < mr2)	m = native_divide(scale, mr2);
else if (rr < fr2) m = native_divide(scale,rr);

should be:
Code:
		if (rr < mr2)	m *= native_divide(fr2, mr2);
else if (rr < fr2) m *= native_divide(fr2, rr);

P.S. Next time when you paste parameters use [ code ]  [ /code ]  (# button in editor menu) or attach it as a text file.


Title: Re: Mandelbulber 1.20
Post by: mclarekin on December 31, 2013, 08:04:09 AM
Thanks for showing the corrected code. It gave me enough confidence to update the cl files myself :) rather than waiting for the next version release.  :beer: :beer:

Another thought, if Custom Formulas Example 1 is based on the Mandelbox, should it also have m *= native_divide(fr2, mr2) and m *= native_divide(fr2,rr) in the code?


Title: Re: Mandelbulber 1.20
Post by: Buddhi on December 31, 2013, 10:29:36 AM
Another thought, if Custom Formulas Example 1 is based on the Mandelbox, should it also have m *= native_divide(fr2, mr2) and m *= native_divide(fr2,rr) in the code?
In every OpenCL script is the same mistake


Title: Re: Mandelbulber 1.20 for Win64
Post by: Buddhi on January 01, 2014, 07:00:47 PM
Thanks to quaz0r, now there is also Mandelbulber-OpenCL 1.20 for Windows 64-bit. Download from here: https://sourceforge.net/projects/mandelbulber/files/Mandelbulber%2064-bit%20OpenCL-1.20-Setup.exe/download


Title: Re: Mandelbulber 1.20
Post by: R-TEAM on January 02, 2014, 02:23:17 AM
Hi,

now on my CPU on both systems OpenCL runs .... but not on the GPU ... (on both systems)
Have DL the 64 bit version ... Error:
Code:
  ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(335): error: identifier
          "float3" is undefined
        float3 shadow = 1.0f;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(338): error: identifier
          "float3" is undefined
        float3 point2;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(418): error: identifier
          "float3" is undefined
  float3 MainSpecular(sClShaderInputData *input)
  ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(420): error: identifier
          "float3" is undefined
        float3 specular;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(421): error: identifier
          "float3" is undefined
        float3 half = input->lightVect - input->viewVector;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(431): error: identifier
          "float3" is undefined
  float3 SurfaceColour(__constant sClInConstants *consts, sClShaderInputData *in
put, global cl_float3 *palette)
  ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(433): error: identifier
          "float3" is undefined
        float3 surfaceColour = 0.0f;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(480): error: identifier
          "float3" is undefined
  float3 FastAmbientOcclusion2(__constant sClInConstants *consts, sClShaderInput
Data *input)
  ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(491): error: identifier
          "float3" is undefined
                float3 pointTemp = input->point + input->normal * scan;
                ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(497): error: identifier
          "float3" is undefined
        float3 output = ao;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(770): error: identifier
          "float3" is undefined
  float3 ObjectShader(__constant sClInConstants *consts, sClShaderInputData *inp
ut, float3 *specularOut, global sClInBuff *inBuff)
  ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(770): error: identifier
          "float3" is undefined
  float3 ObjectShader(__constant sClInConstants *consts, sClShaderInputData *inp
ut, float3 *specularOut, global sClInBuff *inBuff)

    ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(772): error: identifier
          "float3" is undefined
        float3 output;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(775): error: identifier
          "float3" is undefined
        float3 vn = CalculateNormals(consts, input);
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(776): error: write to < 32
          bits via pointer not allowed unless cl_khr_byte_addressable_store is
          enabled
        input->normal = vn;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(778): error: identifier
          "float3" is undefined
        float3 mainLight = consts->params.mainLightIntensity * consts->params.ma
inLightColour;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(784): error: identifier
          "float3" is undefined
        float3 shade = shadeTemp;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(787): error: identifier
          "float3" is undefined
        float3 shadow = 1.0f;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(791): error: identifier
          "float3" is undefined
        float3 specular = MainSpecular(input) * consts->params.specularIntensity
;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(794): error: identifier
          "float3" is undefined
        float3 colour = SurfaceColour(consts, input, inBuff->palette);
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(797): error: identifier
          "float3" is undefined
        float3 ambient = 0.0f;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(808): error: identifier
          "float3" is undefined
        float3 ambient2 = ambient * consts->params.ambientOcclusionIntensity;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(811): error: identifier
          "float3" is undefined
        float3 auxLights = 0.0f;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(812): error: identifier
          "float3" is undefined
        float3 auxLightsSpecular = 0.0f;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(818): error: identifier
          "float3" is undefined
        float3 fakeLights = 0.0f;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(819): error: identifier
          "float3" is undefined
        float3 fakeLightsSpecular = 0.0f;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(829): error: identifier
          "float3" is undefined
  float3 BackgroundShader(__constant sClInConstants *consts, sClShaderInputData
*input)
  ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(831): error: identifier
          "float3" is undefined
        float3 vector = { 0.0f, 0.0f, -1.0f };
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(834): error: identifier
          "float3" is undefined
        float3 colour;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(849): error: identifier
          "float3" is undefined
  float3 VolumetricShader(__constant sClInConstants *consts, sClShaderInputData
*input, global sClInBuff *inBuff, float3 oldPixel)
  ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(849): error: identifier
          "float3" is undefined
  float3 VolumetricShader(__constant sClInConstants *consts, sClShaderInputData
*input, global sClInBuff *inBuff, float3 oldPixel)

                                  ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(851): error: identifier
          "float3" is undefined
        float3 output = oldPixel;
        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(863): error: identifier
          "float3" is undefined
    float3 glowColour = (consts->params.glowColour1 * glowN + consts->params.glo
wColour2 * glow);
    ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(888): error: identifier
          "float3" is undefined
                float3 point = input->startPoint + input->viewVector * scan;
                ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(889): error: write to < 32
          bits via pointer not allowed unless cl_khr_byte_addressable_store is
          enabled
                input->point = point;
                ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(923): error: identifier
          "float3" is undefined
                                        float3 lightDistVect = point - inBuff->l
ights[i].position;
                                        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(952): error: identifier
          "float3" is undefined
                                float3 point2 = point + input->viewVector * step
2 * smallStep;
                                ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(958): error: identifier
          "float3" is undefined
                                                float3 lightDistVect = point2 -
inBuff->lights[i].position;
                                                ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(990): error: identifier
          "float3" is undefined
                                float3 shadowOutputTemp = MainShadow(consts, inp
ut);
                                ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1032): error: identifier
          "float3" is undefined
                        float3 fogTemp = (consts->params.fogColour1 * kn + const
s->params.fogColour2 * k);
                        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1052): error: identifier
          "float3" is undefined
                        float3 newColour = 0.0f;
                        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1061): error: identifier
          "float3" is undefined
                                float3 fogCol = (consts->params.fogColour1 * kn
+ consts->params.fogColour2 * k);
                                ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1078): error: identifier
          "float3" is undefined
                                                        float3 shadowOutputTemp
= MainShadow(consts, input);
                                                        ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1151): error: identifier
          "float3" is undefined
                const float3 one = (float3) {1.0f, 0.0f, 0.0f};
                      ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1151): error: identifier
          "float3" is undefined
                const float3 one = (float3) {1.0f, 0.0f, 0.0f};
                                    ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1151): error: expected a
          ";"
                const float3 one = (float3) {1.0f, 0.0f, 0.0f};
                                            ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1152): error: "float3" is
          not a type name
                const float3 ones = 1.0f;
                      ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1155): error: write to <
          32 bits via pointer not allowed unless cl_khr_byte_addressable_store
          is enabled
                rot.m1 = (float3){1.0f, 0.0f, 0.0f};
                ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1155): error: expected a
          ";"
                rot.m1 = (float3){1.0f, 0.0f, 0.0f};
                                 ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1156): error: write to <
          32 bits via pointer not allowed unless cl_khr_byte_addressable_store
          is enabled
                rot.m2 = (float3){0.0f, 1.0f, 0.0f};
                ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1156): error: expected a
          ";"
                rot.m2 = (float3){0.0f, 1.0f, 0.0f};
                                 ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1157): error: write to <
          32 bits via pointer not allowed unless cl_khr_byte_addressable_store
          is enabled
                rot.m3 = (float3){0.0f, 0.0f, 1.0f};
                ^

C:\Users\xxx~1\AppData\Local\Temp\OCL4329.tmp.cl(1157): error: expected a
          ";"
                rot.m3 = (float3){0.0f, 0.0f, 1.0f};
                                 ^

Error limit reached.
100 errors detected in the compilation of "C:\Users\xxx~1\AppData\Local\Temp\
OCL4329.tmp.cl".
Compilation terminated.

Internal error: clc compiler invocation failed.

ERROR: Program::build() (-11)

Regards
R-TEAM


Title: Re: Mandelbulber 1.20
Post by: hobold on January 02, 2014, 02:37:48 AM
OpenCL 1.0 did not support "float3" type. That was added in version 1.1 later. Can you find out the OpenCL version that your GPU (or the device driver, respectively) supports?


Title: Re: Mandelbulber 1.20
Post by: R-TEAM on January 02, 2014, 03:06:21 AM
Hi,

OpenCL1.0

Regards
R-TEAM


Title: Re: Mandelbulber 1.20
Post by: KBeezie on January 02, 2014, 09:22:16 AM
Can't seem to get the ATI card selected when I enable OpenCL, no matter what I set for Platform/Device it keeps selecting the primary Nvidia card and resetting Platform/Device to 1/0. Was working in 1.9.

Edit: Seems to do it if I do 0/0 (didn't think zero was a possible option for platform since 1 was default)


Title: Re: Mandelbulber 1.20
Post by: mclarekin on January 02, 2014, 09:42:34 AM
@ quaz0r. A big thanks as always. 64bit is considerably faster. :beer: :beer:

@ Hobold. Thanks for pointing me in the right direction. I now see that even though the platform is 1.2, my GPU device can only handle 1.0. :beer: :beer:


Title: Re: Mandelbulber 1.20
Post by: Buddhi on January 02, 2014, 09:44:17 AM
Can't seem to get the ATI card selected when I enable OpenCL, no matter what I set for Platform/Device it keeps selecting the primary Nvidia card and resetting Platform/Device to 1/0. Was working in 1.9.

Edit: Seems to do it if I do 0/0 (didn't think zero was a possible option for platform since 1 was default)

Platform #1 was last saved value (default is 0). You must set it before (e.g. when you used 1.19). Program saves setting when application is closed, so for you default was 1  ;D


Title: Re: Mandelbulber 1.20
Post by: Buddhi on January 02, 2014, 09:49:15 AM
@ Hobold. Thanks for pointing me in the right direction. I now see that even though the platform is 1.2, my GPU device can only handle 1.0. :beer: :beer:

If it looks like your GFX card doesn't support OpenCL 1.1, try to upgrade drivers. Sometimes it is not a matter of card but software. It is worth to try.


Title: Re: Mandelbulber 1.20
Post by: R-TEAM on January 02, 2014, 05:59:36 PM
Hi,

Hint -> it would be nice to pointing , that the GPU musst handle OpenCL V1.1 or higher at last ....(if this not changed)

So bug reports/errors that come from this side can be closed :)

Regards
R-TEAM


Title: Re: Mandelbulber 1.20
Post by: mclarekin on January 03, 2014, 05:36:00 AM
Thanks even more quaz0r and buddhi  :beer: :beer: :beer:.  The version 1.20-32 wouldn't work on Win7-64  AMD A10-5800GHz 4795 Radeon HD 7660D but 1.20-64 does and wow, default  mandelbulb  with openCL normal setting renders in 3.2 sec on CPU and an amazing 0.68 sec on GPU, faster than I can say "one elephant". ;D (For non English speakers "one elephant, two elephant .... is an approximation for counting seconds)
 
My laptop i3 2.13 takes 8 seconds with openCL using CPU.

Maybe it's time for an animation ;D


Title: Re: Mandelbulber 1.20
Post by: lukesleftleg on January 05, 2014, 05:16:32 PM
Hi Buddhi,

Thank you once again for another version of my favourite fractal renderer. :)

I just thought I'd let you know that I think I'm getting close to understanding my crash problems, and all evidence points to it not being Mandelbulber's fault at all.

I've noticed previously, that the 'random crashes' I was getting in OpenCL mode seemed to happen most often when a ray was going at a very narrow angle to a surface (or in other words, had a lot more steps to march along the ray), which in turn increased the time it took to calculate that ray.

It seemed quite counter-intuitive, but I've found in versions 1.19 and 1.20, if I reduce the GPU RAM usage to something really small, say 16MB, then it was much more likely to render the problem frames without crashing, as it seemed to be rendering in smaller chunks.

Anyway, I was reading around the forum, and it appears that Fragmentarium has some similar issues, and this explanation from Syntopia seems to be entirely consistent with the problem:

The GPU is completely locked until a frame render completes in Fragmentarium. (Which is why Windows just kills the display driver if a GPU operation takes too long - it cannot show a dialog asking if you want to stop the operation).

Theoretically, the new WDDM 1.2 driver model in Windows 8 supports GPU Pre-emption (multitasking as we know it from desktop OS'es), but I don't know if the Nvidia and AMD drivers implement this yet - I don't think so.

The only way to keep the OS responsive is by rendering smaller tiles.
(I'm sure there was another post that went into more detail, where he said that you could adjust the time-out in the control panel, but that it was a bad idea if you didn't know exactly what you were doing, but I can't seem to find it now).

So it looks like we're just going to have to live with it until Nvidia and AMD start writing drivers that can take this into account.

This is actually fine for me. I've mentioned elsewhere that I've been using a macro recorder to just restart the program if it crashes, and it doesn't happen that much anyway. It seems a small price to pay, but it's good to get to the root of the problem. :)


Title: Re: Mandelbulber 1.20
Post by: magixx on January 28, 2014, 01:54:28 AM
Hi, I'm currently considering putting together a rig for rendering stuff like a 4k electricsheep since I already have the hardware from bitcoin mining, however I'm a bit unsure of the performance and what troubles I would run into. Like I have a slight suspicion that a very weak CPU somehow be a bottleneck. Another issues that I foresee is that if I were to set up 4 Radeon 5830 would this and OpenCL use all 4 GPUs at the same time for a frame without crossfire? I'm guessing no and that I would have to just work on 4 frames at once with each frame having a dedicated GPU. Also is there a way I could see what my rig would be able to output using these 4 cards without actually setting it up?


Title: Re: Mandelbulber 1.20
Post by: KBeezie on January 31, 2014, 09:51:58 AM
I can't seem to be able to get netrender to work from one Windows 7 machine to another Windows 7 machine, one being 192.168.1.6 and the other 192.168.1.16 they can ping each other, and windows firewall is turned off on both. when I try it via -nogui it just waits and waits and in the GUI if I click client enable it just waits til it says "No error" but the server side doesn't show any connected clients.


Title: Re: Mandelbulber 1.20
Post by: KBeezie on January 31, 2014, 10:21:10 AM
Same issue trying to connect from Windows 8.1 to the Win7 Server.