Title: How to burn a few teraflops Post by: lycium on August 13, 2015, 11:09:45 PM (http://pre13.deviantart.net/0ddc/th/pre/f/2015/225/c/0/burning_teraflops_by_lyc-d95jefh.png) (http://orig10.deviantart.net/3bed/f/2015/225/c/0/burning_teraflops_by_lyc-d95jefh.png)
(Click for full 4K resolution PNG image.) Pretty sure I'm still doing it wrong: Code: float base_DE = KaleidoIcosaDE(p); Isn't 0.1 "fudge factor" really bad? Anyway, that's 3 bounces diffuse GI (there is a full material system, but only using diffuse/Lambertian), 8 minutes rendering on a single GTX 970 in 34 C ambient temperature :fiery: At some point I wish to beg the gods of distance estimation for help figuring out how I'm doing DE so badly... Title: Re: How to burn a few teraflops Post by: lycium on August 16, 2015, 07:07:47 PM (http://img13.deviantart.net/51ff/i/2015/228/4/0/portrait_of_a_julia_set_by_lyc-d95wxho.jpg) (http://orig10.deviantart.net/e308/f/2015/228/d/c/portrait_of_a_julia_set_by_lyc-d95wxho.jpg)
(Click for full 4K resolution high quality JPG image.) 5 bounces, 1024 samples per pixel, 5 minutes rendering. Title: Re: How to burn a few teraflops Post by: hobold on August 16, 2015, 07:32:56 PM 8 minutes rendering on a single GTX 970 in 34 C ambient temperature :fiery: That's fast; I'm still below two frames per hour. :-)Title: Re: How to burn a few teraflops Post by: lycium on August 16, 2015, 07:37:05 PM I think on a pair of overclocked Titan X this thing would be near realtime at 1080p if using a few spp and temporal reprojection.
The last image is just (?) 5 minutes, again on a single GTX 970 at stock clocks. I can't wait for winter to overclock this GPU, but goddamn is it hot/humid in Berlin at the moment... Title: Re: How to burn a few teraflops Post by: cKleinhuis on August 16, 2015, 07:43:21 PM pics look promising, as far as i understand, the fudge factor can be used to avoid overstepping, having a concrete distance estimation allows it for beeing 1.0 e.g simple geometry like balls/squares and some fractals deliver mostly correct distances, so stepping the amoung returned by the de is just fine
there has been an improvement algorithm to take bigger steps, which has eiffie visualised in this shadertoy and gives 10 percent stepping improvement https://www.shadertoy.com/view/lsBSDK Title: Re: How to burn a few teraflops Post by: lycium on August 16, 2015, 07:50:58 PM I tried the SOR approach from cupe/mercury, but it's sort of tuned for screenspace not indirect rays... will give that another try later (since it's something like cone tracing with analytic LOD, which is great).
What's really needed for specular reflections is root refinement, which he also covers in the paper (http://erleuchtet.org/~cupe/permanent/enhanced_sphere_tracing.pdf). Title: Re: How to burn a few teraflops Post by: lycium on August 16, 2015, 08:20:53 PM (http://img06.deviantart.net/a7b9/i/2015/228/4/2/kaleidoscopic_surface_closeup_by_lyc-d95x949.jpg) (http://orig08.deviantart.net/2486/f/2015/228/6/9/kaleidoscopic_surface_closeup_by_lyc-d95x949.jpg)
Title: Re: How to burn a few teraflops Post by: lycium on August 17, 2015, 12:40:34 AM (http://pre15.deviantart.net/253e/th/pre/i/2015/228/9/0/neutron_star_by_lyc-d95yjxv.jpg) (http://orig09.deviantart.net/fac6/f/2015/228/3/5/neutron_star_by_lyc-d95yjxv.jpg)
Title: Re: How to burn a few teraflops Post by: lycium on August 21, 2015, 05:30:17 AM (deleted)
Title: Re: How to burn a few teraflops Post by: lycium on August 21, 2015, 05:25:14 PM (http://img06.deviantart.net/8951/i/2015/233/a/9/quaternion_gnarl_by_lyc-d96klql.jpg) (http://orig10.deviantart.net/0ebc/f/2015/233/c/6/quaternion_gnarl_by_lyc-d96klql.jpg)
(Click for full 5760 x 3240 resolution high quality JPG image.) Title: Re: How to burn a few teraflops Post by: lycium on August 22, 2015, 04:54:51 PM (http://img03.deviantart.net/aaa5/i/2015/234/0/2/radioactive_julia_by_lyc-d96p7yc.jpg) (http://orig13.deviantart.net/eecd/f/2015/234/8/f/radioactive_julia_by_lyc-d96p7yc.jpg)
Title: Re: How to burn a few teraflops Post by: kram1032 on August 23, 2015, 01:26:36 PM Those are weirdly pretty and pretty weird :D
Title: Re: How to burn a few teraflops Post by: lycium on December 20, 2015, 03:15:24 AM (http://img09.deviantart.net/421f/i/2015/353/8/a/mandelbox_by_lyc-d9kptgi.jpg) (http://orig03.deviantart.net/5ff9/f/2015/353/d/d/mandelbox_by_lyc-d9kptgi.jpg)
Title: Re: How to burn a few teraflops Post by: knighty on December 20, 2015, 11:18:49 AM Cool!
Quote Pretty sure I'm still doing it wrong: For a Kaleidoscopic IFS DE_scale should be set to 1 or a slightly less than that. Could we see KaleidoIcosaDE(p)'s implementation?Code: Code: float base_DE = KaleidoIcosaDE(p); Title: Re: How to burn a few teraflops Post by: lycium on December 23, 2015, 12:16:33 AM // http://www.fractalforums.com/3d-fractal-generation/kaleidoscopic-%28escape-time-ifs%29/
// Return reflection matrix for plane with normal 'n' float3x3 reflectionMatrix(float3 n) { const float3 n1_x = (float3)(1 - 2 * n.x * n.x, -2 * n.y * n.x, -2 * n.z * n.x); const float3 n1_y = (float3)(-2 * n.x * n.y, 1 - 2 * n.y * n.y, -2 * n.z * n.y); const float3 n1_z = (float3)(-2 * n.x * n.z, -2 * n.y * n.z, 1 - 2 * n.z * n.z); } float KaleidoIcosaDE(const float3 z0, float t) { const float scale = 2.393331f; const float phi = 1.6180339887498948482045868343656f; const float3 offset = normalize((float3)(1, phi - 1, 0)); //const float3 n1 = normalize((float3)(-phi, phi - 1, 1)); //const float3 n2 = normalize((float3)(1, -phi, phi + 1)); //const float3 offset = normalize((float3)(1, phi - 1, 0)); //const float3 offset = normalize((float3)(1.01f, phi - 1 + 0.21f + m, -0.1f + q)); const float3 n1 = normalize((float3)(-0.8652f, 0.752f, 1.25f)); const float3 n2 = normalize((float3)(0.6152f, -0.23521f, 1.325f)); //n1Mat = reflectionMatrix(n1); const float3 n1_x = (float3)(1 - 2 * n1.x * n1.x, -2 * n1.y * n1.x, -2 * n1.z * n1.x); const float3 n1_y = (float3)(-2 * n1.x * n1.y, 1 - 2 * n1.y * n1.y, -2 * n1.z * n1.y); const float3 n1_z = (float3)(-2 * n1.x * n1.z, -2 * n1.y * n1.z, 1 - 2 * n1.z * n1.z); //n2Mat = reflectionMatrix(n2); const float3 n2_x = (float3)(1 - 2 * n2.x * n2.x, -2 * n2.y * n2.x, -2 * n2.z * n2.x); const float3 n2_y = (float3)(-2 * n2.x * n2.y, 1 - 2 * n2.y * n2.y, -2 * n2.z * n2.y); const float3 n2_z = (float3)(-2 * n2.x * n2.z, -2 * n2.y * n2.z, 1 - 2 * n2.z * n2.z); const float bailout2 = 1e9f; // 1e32f const int max_iterations = 22; // 28 int n = 0; float3 p = z0; while (n < max_iterations) { p.y = fabs(p.y); p.z = fabs(p.z); if (dot(p, n2) > 0) { //p *= n2Mat; p = (float3)(dot(p, n2_x), dot(p, n2_y), dot(p, n2_z)); } p.x = fabs(p.x); p.z = fabs(p.z); if (dot(p, n1) > 0) { //p *= n1Mat; p = (float3)(dot(p, n1_x), dot(p, n1_y), dot(p, n1_z)); } p = p * scale - offset * (scale - 1); if (dot(p, p) > bailout2) break; n++; } return length(p) * pow(scale, (float)-n); } Title: Re: How to burn a few teraflops Post by: knighty on December 23, 2015, 09:04:13 PM You will need to do:
Code: return length(p) * pow(scale, (float)-n-1.f); Of course you can increment n before testing for bailout instead. A slight scaling down (by a factor say .99) would be necessary to avoid some overstepping. Another way to avoid that slight overstepping is to subtract the radius of the bounding sphere from p: Code: return (length(p) - Bounding_sphere_radius) * pow(scale, (float)-n-1.f); In order to save some CPU cycles: Code: float t=dot(p,n); Code: p-=2.0*max(dot(p,n),0)*n; BTW! happy holydays. :) Title: Re: How to burn a few teraflops Post by: lycium on January 09, 2016, 12:37:28 PM What a huge speed difference that makes :D Thanks for this, I had some fun over the holidays with it:
(http://pre11.deviantart.net/a573/th/pre/f/2016/007/7/5/kaleidoscopic_ii_by_lyc-d9n5qed.jpg) (http://orig07.deviantart.net/af94/f/2016/007/7/5/kaleidoscopic_ii_by_lyc-d9n5qed.jpg) Happy new year to you too mate! Title: Re: How to burn a few teraflops Post by: lycium on July 19, 2016, 02:17:45 AM just a quick quaternion julia with some motion blur in a little toy gpu ray tracer, click for 4K res:
(http://pre02.deviantart.net/7985/th/pre/f/2016/200/f/e/dark_julia_by_lyc-daama04.jpg) (http://orig10.deviantart.net/520b/f/2016/200/f/e/dark_julia_by_lyc-daama04.jpg) Title: Re: How to burn a few teraflops Post by: lycium on August 02, 2016, 10:59:03 PM another simple quaternion julia, to exercise the new gtx 1070. click for 8K res:
(http://pre14.deviantart.net/e112/th/pre/f/2016/215/2/b/dark_julia_iii_by_lyc-dachada.jpg) (http://orig05.deviantart.net/01bb/f/2016/215/2/b/dark_julia_iii_by_lyc-dachada.jpg) Title: Re: How to burn a few teraflops Post by: lycium on August 04, 2016, 02:46:15 PM menger sponge, thanks Aexion for the DE formula! sorry for the noise and over-saturation. click for 4K res:
(http://pre11.deviantart.net/e8b8/th/pre/f/2016/217/9/d/menger_sponge_by_lyc-dacopkb.jpg) (http://orig14.deviantart.net/ddcb/f/2016/217/9/d/menger_sponge_by_lyc-dacopkb.jpg) Title: Re: How to burn a few teraflops Post by: lycium on August 15, 2016, 12:28:32 AM more stuff... click for high res
(http://pre13.deviantart.net/fb46/th/pre/i/2016/227/1/e/kaleidoscopic_iii_by_lyc-dae1dj5.jpg) (http://orig04.deviantart.net/0eed/f/2016/227/a/a/kaleidoscopic_iii_by_lyc-dae1dj5.jpg) (thanks again to Knighty!) (http://pre05.deviantart.net/037c/th/pre/f/2016/227/c/2/kleinian_stuff_by_lyc-dae1bu8.jpg) (http://orig15.deviantart.net/c4dd/f/2016/227/c/2/kleinian_stuff_by_lyc-dae1bu8.jpg) (from the Fragmentarium examples) (http://pre05.deviantart.net/36ac/th/pre/f/2016/227/b/b/portrait_of_a_julia_set_ii_by_lyc-dae1c9u.jpg) (http://orig06.deviantart.net/cd4f/f/2016/227/b/b/portrait_of_a_julia_set_ii_by_lyc-dae1c9u.jpg) some experimental stuff using DEs from Aexion: (http://pre03.deviantart.net/7535/th/pre/f/2016/227/5/7/aexion_box_thingy_by_lyc-dae1c21.jpg) (http://orig06.deviantart.net/5bc7/f/2016/227/5/7/aexion_box_thingy_by_lyc-dae1c21.jpg) (http://pre04.deviantart.net/3936/th/pre/i/2016/227/d/8/aexion_box_thingy_2_by_lyc-dae1c5q.jpg) (http://orig14.deviantart.net/2dc5/f/2016/227/1/f/aexion_box_thingy_2_by_lyc-dae1c5q.jpg) Title: Re: How to burn a few teraflops Post by: lycium on August 15, 2016, 03:53:58 AM 8 minutes rendering, 8 bounces diffuse gi, gtx 1070 @ 2ghz (click for 8K)
Edit: removed image, updated with higher quality below Title: Re: How to burn a few teraflops Post by: hobold on August 15, 2016, 11:57:07 AM At that speed, you could conceivably render animations at that same extreme image and lighting quality. Those should end up looking very real.
Title: Re: How to burn a few teraflops Post by: knighty on August 15, 2016, 04:48:34 PM :o
:wow: :thumbsup1: :w00t: :worm: :worm: :worm: Title: Re: How to burn a few teraflops Post by: lycium on August 15, 2016, 11:23:51 PM glad you like it knighty, you're the hero of the show here with the awesome kaleidoscopic IFS DE :) i'd be honoured to render any other fun stuff you'd like to suggest :D
hobold, what usually happens in this situation is, i do a deeper zoom / crank up the visual quality until it needs an overnight render ;) updated overnight render, click for 8K: (http://pre09.deviantart.net/a11d/th/pre/f/2016/228/8/5/kaleidoscopic_iv_by_lyc-dae2843.jpg) (http://orig10.deviantart.net/df25/f/2016/228/8/5/kaleidoscopic_iv_by_lyc-dae2843.jpg) Title: Re: How to burn a few teraflops Post by: knighty on August 16, 2016, 05:07:21 PM Video plz.
:spgloomy: Title: Re: How to burn a few teraflops Post by: lycium on August 25, 2016, 02:14:21 AM Video plz. Sorry for the delay, I'm upgrading my little shader editing thing into a full animation editing studio thing :) I would love to share it with you (privately) someday! |