Old 12th November 2010, 22:35   #41
Phat
Major Dude
 
Phat's Avatar
 
Join Date: Nov 2003
Posts: 940
Ops. Double post!
Phat is offline   Reply With Quote
Old 12th November 2010, 22:52   #42
Eo.S.
Milkdrop Moderator
 
Join Date: Oct 2004
Posts: 114
Ok, so I attempted to run the mandelbox preset in order to take a look at the code and see what optimizations might be possible.
Had MD2.1, which it doesn't work in. So I downloaded the newest Winamp to get the newest version of MD2.
The preset runs just fine, but when I go to edit any code [preset, per frame, per pixel, etc]. I get the "f9 for help" thing at the top, but where it should draw the code I get a single line of red garbage characters the goes past the end of the screen. There's multiple lines of text being draw here too as I can see characters on top of characters.

WTF! Computer is a Dell XPS M1710 with Geforce go 7950gtx
Eo.S. is offline   Reply With Quote
Old 12th November 2010, 23:00   #43
Phat
Major Dude
 
Phat's Avatar
 
Join Date: Nov 2003
Posts: 940
Yeah, this mandelbulb stuff is quite interesting. I think Eo.S. can optimize it a bit! Lets hope that pans out.
Phat is offline   Reply With Quote
Old 13th November 2010, 03:12   #44
Eo.S.
Milkdrop Moderator
 
Join Date: Oct 2004
Posts: 114
Here's a version with some optimization in the warp shader. I reduced it from 238 ALU to 172 ALU, so that's about 40% faster. I figured increased the loop count in mbox would increase iterations on the fractal for higher quality, but past 10 I think it just ends up rendering nothing. I haven't read much into the math yet for the mandelbulb fractal.
I commented where I made optimizations.

The primary optimizations were a more optimal usage of the min() function, and removal of pow(x,y) where y was a qxx variable that always has the value of 1

Eo.S.
Attached Files
File Type: milk martin - mandelbox explorer v1 Eo.S. optimize.milk (19.5 KB, 432 views)
Eo.S. is offline   Reply With Quote
Old 13th November 2010, 09:14   #45
Nitorami
Major Dude
 
Join Date: Mar 2008
Location: Erlangen
Posts: 856
@Phat - would like to read your aesthetic guide. Some time ago I thought about writing my own, but then rather stayed with writing presets and just did what seemed to look ok to me. While the perception of visuals is certainly very subjective, some abstraction and reflection about general rules might be useful.

@Eo.S: Thank you ! Very appreciated. I know nothing about shaders beyond that learned from MD. I am surprised that the compiler does not optimise things like a division by a q variable; I would have thought this is precalculated once per frame.
The optimisation of the min() function is interesting, actually this function seemed to be quite ALU heavy, more than the actual fractal which I tried to optimise already (the original mandelbox calculates x,y,z individually such as

if (zz.x > 1) {zz.x = 2-zz.x;} else if (zz.x < -1) {zz.x = -2-zz.x;}
if (zz.y > 1) {zz.y = 2-zz.y;} else if (zz.y < -1) {zz.y = -2-zz.y;}
if (zz.z > 1) {zz.z = 2-zz.z;} else if (zz.z < -1) {zz.z = -2-zz.z;}

which I thought must be very inefficient.)

It would be useful to know the number of ALUs used by the code but MD does not tell me except if 512 are exceeded. How can you tell ???

p.s. the problem with the garbage characters I think was an issue with unicode handling and should be solved.

p.p.s - the reason I do not put the curly brackets where they ought to be is that the editor does not support pgup/pgdn and encourages a poor style, minimising the lines of code
Nitorami is offline   Reply With Quote
Old 13th November 2010, 12:45   #46
Nitorami
Major Dude
 
Join Date: Mar 2008
Location: Erlangen
Posts: 856
Could anybody with an ATI video card please make screenshots of the attached two codes ?

Background is, I need to store a float in high resolution, 12 to 14 bits, for which I use the blue and green colour channel. To ths purpose, PutDist calculates a float2 from a float input, while GetDist reconstructs the float from the float2.

That should be easy, but does not work as expected and I don't know why. Would like to know whether this is machine specific.

The presets just calculate a gray pattern in the warp shader and store it in ret.gb via PutDist. In the comp shader, the same pattern is calculated and subtracted from the result of GetDist. That should reconstruct the original value. To reveal any imprecision, the result is amplified so we should see a uniform gray screen, but on my Nvidia card this only works properly for version No1, while I see gray stripes with version No2. Unfortunately No2 would be the more efficient code.
Attached Files
File Type: milk test Put_Get No2.milk (7.5 KB, 334 views)
File Type: milk test Put_Get No1.milk (7.6 KB, 355 views)
Nitorami is offline   Reply With Quote
Old 13th November 2010, 15:22   #47
Flexi
wellspring of milk
Major Dude
 
Flexi's Avatar
 
Join Date: Apr 2007
Location: 54.089866,12.11168,18.75
Posts: 2,058
Send a message via ICQ to Flexi
uniform gray scene approved on my HD3870 for both presets

@Eo.S. get [v2.22 Beta] here: http://stashbox.org/961838/vis_milk2.dll
Flexi is offline   Reply With Quote
Old 14th November 2010, 00:11   #48
Eo.S.
Milkdrop Moderator
 
Join Date: Oct 2004
Posts: 114
Ugh, no pageup or pagedown? I forgot that was just a functionality in the MD 1.5-1.6 betas.

I copied all the code into a shader in Rendermonkey, and did my optimizations from there where I can get ALU count as well as see the disassembly, then manually copied the code back to the preset in a text editor [since I can't see any of the code inside of MD].

As for optimization 1/x, the compiler will catch some of this if shaders are compiled with preshaders [instructions offloaded to CPU before the shader is run], but it's not guaranteed to catch them, so it's more surefire to optimize that manually.

The majority of math operations for shaders take the same amount of time to do a float4 as they do a float, so anytime you can combine variables into a float2/3/4 and combine the math it's a big improvement, thus the big improvement in the reordering the min() functions.

That said, take note that division, sqrt, pow, and log functions only operate on single floats. Which means that rgba * xyzw is 1 ALU, but rgba / xyzw is 5 ALU [ 1.0/n for each of xyzw, then multiplied by rgba ].

Also x*y+n becomes a single instruction, so it helps to design your math around this [ (a+b)*c is 2 ALU, x*y+z is 1 ALU ].
Eo.S. is offline   Reply With Quote
Old 14th November 2010, 08:15   #49
Phat
Major Dude
 
Phat's Avatar
 
Join Date: Nov 2003
Posts: 940
I played with this preset for a little while. I really like what happened. I can't wait till we understand it a little better.
Attached Files
File Type: milk Martin+Anandamide - Mandelbox_Explorer_Ice_Remix.milk (25.0 KB, 426 views)
Phat is offline   Reply With Quote
Old 14th November 2010, 11:02   #50
Flexi
wellspring of milk
Major Dude
 
Flexi's Avatar
 
Join Date: Apr 2007
Location: 54.089866,12.11168,18.75
Posts: 2,058
Send a message via ICQ to Flexi
I played too.
Flexi is offline   Reply With Quote
Old 14th November 2010, 17:30   #51
Flexi
wellspring of milk
Major Dude
 
Flexi's Avatar
 
Join Date: Apr 2007
Location: 54.089866,12.11168,18.75
Posts: 2,058
Send a message via ICQ to Flexi
Minor tweak for a smooth warp without pixel artifacts.

I've changed the last warp shader line from tex2D(sampler_pc_main,uv_orig) to tex2D(sampler_fc_main,uv)
replace the original preset or rename

edit: forgot the file

Speaking of optical flow, i meant something other than estimating the flow from the rendered image, but changing the static error-diffusion layer to a spatio-temporal one, that moves with the perspective of the camera. The formulas are known and they are not more complex than the fractal itself: http://www.centeye.com/technology/optical-flow/ It would be a serious hack though. But I think, with an accurate guidance, a faster flight through the structure can be done. Now, without compensation, you get an overall error for all moving areas and edges. I might be wrong, but I guess, with an accurate optical flow compensation, the overall "motion blur" can be limited to the moving edges.
Quote:
I am still working to increase the linear and rotational speed by movement compensation but there is a limit to it. I think a factor two or three can be achieved while maintaining image quality. We'll see.
The flow must be faster, the nearer the surface is to the camera, logically. I don't understand your code well enough yet, but i hope the link helps you with your attempt.
Flexi is offline   Reply With Quote
Old 14th November 2010, 17:32   #52
Flexi
wellspring of milk
Major Dude
 
Flexi's Avatar
 
Join Date: Apr 2007
Location: 54.089866,12.11168,18.75
Posts: 2,058
Send a message via ICQ to Flexi
now with attachment -.-
Flexi is offline   Reply With Quote
Old 14th November 2010, 18:04   #53
Nitorami
Major Dude
 
Join Date: Mar 2008
Location: Erlangen
Posts: 856
Thank you all. I never tried waves with this preset because I used up all colour channels already, but must admit that looks quite cool. Should benefit from the high speed version available soon I hope.

@Phat: if you are interested I can try to explain the core of the algorithm. No need to reverse engineer it. Or simply ask me on specific details.

@Eo.S: Thanks for the tips ! Will try to keep that in mind.
btw: one reason why almost nothing appears to be rendered at higher iteration depths is that the algorithm relies on reasonably smooth structures - at more iterations, we get a more and more granular structure, making it inefficient.
The other reason is that the "limit" constant needs to be increased exponentially with iteration depth. I define the body of the structure as those points for which length(fractal(uv2.xyz)) < limit. With each additional iteration step, we get higher lengths on average, and limit needs to keep pace with that.
Apart from that, I feel that higher iteration adds not much to the structure, the major effect being a replication of the existing structures into the micro-range. To see it, zoom would need to be increased at the same time. This is not a problem, but it will bring up rather similar structures.
Nitorami is offline   Reply With Quote
Old 14th November 2010, 18:29   #54
Nitorami
Major Dude
 
Join Date: Mar 2008
Location: Erlangen
Posts: 856
Yes. Images with no or almost no movement can be slightly sharper with sampler_pc_main but for any significant movement or warp effect, fc will be better. Do not change it in GetDist though !

On the optical flow, this is exactly what I try. It is not quite as straightforward though, because as you say some sorts of movements, e.g. linear forward, depend on the distance to the camera, which however is only an approximation which gets worse at higher speed. High speed -> insufficient time for rendering -> error in distance approximation -> wrong motion blur compensation etc.



Quote:
Originally Posted by Flexi View Post
Minor tweak for a smooth warp without pixel artifacts.

I've changed the last warp shader line from tex2D(sampler_pc_main,uv_orig) to tex2D(sampler_fc_main,uv)
replace the original preset or rename

edit: forgot the file

Speaking of optical flow, i meant something other than estimating the flow from the rendered image, but changing the static error-diffusion layer to a spatio-temporal one, that moves with the perspective of the camera. The formulas are known and they are not more complex than the fractal itself: http://www.centeye.com/technology/optical-flow/ It would be a serious hack though. But I think, with an accurate guidance, a faster flight through the structure can be done. Now, without compensation, you get an overall error for all moving areas and edges. I might be wrong, but I guess, with an accurate optical flow compensation, the overall "motion blur" can be limited to the moving edges.

The flow must be faster, the nearer the surface is to the camera, logically. I don't understand your code well enough yet, but i hope the link helps you with your attempt.
Nitorami is offline   Reply With Quote
Old 14th November 2010, 20:13   #55
Nitorami
Major Dude
 
Join Date: Mar 2008
Location: Erlangen
Posts: 856
Here is a high speed demo version. Sorry for awful colours, blur, running into obstacles, unused code fragments etc. It just goes to show what can be achieved with motion compensation. I don't find the image quality quite satisfactory but it might lend itself as a background to flashy waves or something. Nevermind the comp shader which is not very elaborate either.

It includes Eo.S.'s code optimisation plus a few tweaks I've been working on, although they don't show very well in this hasty implementation:
- a more efficient code to store the z variable, which unfortunately causes stripe artefacts on my nvidia but which Flexi confirmed to be ok on ATI (and which are not noticable in this image quality anyway)
- random modifier of fractal equation for slightly more variety
- variation of perspective (modest only, because fish eye perspective rather destroys my simple motion (or "optical flow") compensation
- highlighting of specific locations of the fractal

I am tempted to add some swing by second order movement filtering, rather than the simple zig-zag course trying to avoid obstacles, but I can't be bothered right now.

You can take the algorithm beyond its limits by increasing speed as you like but personally I think this is already faster than it should be. Anyway, it is way beyond what I ever thought possible. Have fun mashing it up!
Nitorami is offline   Reply With Quote
Old 14th November 2010, 21:21   #56
Flexi
wellspring of milk
Major Dude
 
Flexi's Avatar
 
Join Date: Apr 2007
Location: 54.089866,12.11168,18.75
Posts: 2,058
Send a message via ICQ to Flexi

Last edited by Flexi; 14th November 2010 at 22:25.
Flexi is offline   Reply With Quote
Old 14th November 2010, 23:11   #57
ravermeister
Senior Member
 
ravermeister's Avatar
 
Join Date: Feb 2009
Location: Cologne
Posts: 198
Send a message via ICQ to ravermeister
Really Emazing new stuff you all are really cool!!!
lookin forward to collect them
greetings raver.
ravermeister is offline   Reply With Quote
Old 15th November 2010, 07:49   #58
fiShbRaiN
Member
 
fiShbRaiN's Avatar
 
Join Date: Jul 2004
Location: Mt. Gambier, South Australia
Posts: 89
...freakin' awesome stuff going on here!

fiShbRaiN is offline   Reply With Quote
Old 15th November 2010, 15:35   #59
Eo.S.
Milkdrop Moderator
 
Join Date: Oct 2004
Posts: 114
Here's another version by Phat and I. Added a texture from context free, made the camera movement respond to music. Some other tidbits too.

Also increased the detail level by using more iterations on the fractal at farther distances where the image moves less, as well as reduce iterations when the camera rotates because the image is moving more. [since the fractal falls apart in fast moving areas].
Eo.S. is offline   Reply With Quote
Old 15th November 2010, 15:44   #60
Amandio C
Senior Member
 
Join Date: Dec 2008
Posts: 400
The new version is very good. I get 58-60fps on a Radeon HD 5770.
Amandio C is offline   Reply With Quote
Old 15th November 2010, 16:31   #61
Phat
Major Dude
 
Phat's Avatar
 
Join Date: Nov 2003
Posts: 940
Thanks. Yeah, it's pulling about 60 on this box as well.
Phat is offline   Reply With Quote
Old 15th November 2010, 17:41   #62
Nitorami
Major Dude
 
Join Date: Mar 2008
Location: Erlangen
Posts: 856
I'm truly honoured

I tried to control the number of iterations before but could not get it work. The shader does not seem to accept a q variable such as

for (int n = 0; n <= q30; n++)

but throws an error "loop does not appear to terminate in a timely manner". I understand this is because the compiler cannot know the value of q1 at compilation time so it is prudent not to accept a potentially unlimited value. But, oddly,

for (int n = 0; n <= clamp(q30,0,10); n++)

works neither, while Eo.S.' trick using saturation does:

for (int n = 0; n <= 10*saturate(q30); n++)

Can't quite see the reason for that - what is the difference really ?

Another question - during earlier Mandelbrot experiments I found the following: I tried to speed up the calculation by using a while loop which stops prematurely when the lenght of the vector exceeds 2, without stupidly continuing until the max number of iterations has been reached:

int n = 0;
while ((n <= maxiter) && (len <=2))

But quite the contrary was the case, the extra condition massively slowed down the whole code (although len was calculated in the loop anyway), the compiler struggled and took ages, the 512 instruction limit was reached for MUCH lower maxiter values, in other words - that was a waste of time. Since then, I avoided other than fixed loop lengths. Why is that so ?

Btw in this preset, I would rather change the "limit" value than the number of iterations; a higher value will generate more bulky structures (for the distance), a lower value results in more filligree structures. Must try that immediately.
Nitorami is offline   Reply With Quote
Old 15th November 2010, 22:42   #63
Phat
Major Dude
 
Phat's Avatar
 
Join Date: Nov 2003
Posts: 940
Thanks. I'm just glad we got to play around with MandelBlub/Box so soon. I downloaded it and was like 'wow' in 2 hours I get one frame.... boring. Heh.
Phat is offline   Reply With Quote
Old 16th November 2010, 03:58   #64
Phat
Major Dude
 
Phat's Avatar
 
Join Date: Nov 2003
Posts: 940
This is a rendering Eo.S. made a while ago. I think it will make for some awesome animations later.



Tom Beddard has some exquisite work that I feel we should aspire to in real time. I would love to have midi controllers and video game controllers to be able to pilot though 3d fractals that respond to music in real time as a visual performance.

Here's a video of his I really like..
http://vimeo.com/10531753

He also writes plug ins. I haven't used them yet but I plan on it.
http://www.subblue.com/projects
Phat is offline   Reply With Quote
Old 16th November 2010, 06:35   #65
Flexi
wellspring of milk
Major Dude
 
Flexi's Avatar
 
Join Date: Apr 2007
Location: 54.089866,12.11168,18.75
Posts: 2,058
Send a message via ICQ to Flexi
I liked the subblue page! This is really good stuff.

As for math and programs, the kinect device (*wink*@Ryan Geiss) has been hacked. There are first drivers for Processing (java) or general open source: http://git.marcansoft.com/?p=libfreenect.git, see http://www.youtube.com/watch?v=rKhW-cvpkks or the interaction in this application: http://www.youtube.com/watch?v=ho6Yhz21BJI
Flexi is offline   Reply With Quote
Old 17th November 2010, 08:21   #66
Eo.S.
Milkdrop Moderator
 
Join Date: Oct 2004
Posts: 114
Quote:
but throws an error "loop does not appear to terminate in a timely manner". I understand this is because the compiler cannot know the value of q1 at compilation time so it is prudent not to accept a potentially unlimited value. But, oddly,
for (int n = 0; n <= clamp(q30,0,10); n++)
works neither, while Eo.S.' trick using saturation does:
for (int n = 0; n <= 10*saturate(q30); n++)

Can't quite see the reason for that - what is the difference really ?
non static variables as the limit inside of for loops are sometimes a definite pain in the ass with Pixel Shader 3.0 and this error. Basically it comes down to this.

If your iteration limit is a constant, then the compiler uses the 'rep' instruction, and a constant register that is specifically for designating loop iterations, if you use the same variable mathematically then it exists in both the "i0" register and separately in a constant register.

When saturate is used in the iteration limit, the compiler actually unrolls the entire loop into a set of ALU instructions for each iteration (to the max# of possible iterations, so even if it only runs for 4 iterations, and the max is 10, you still pay for the remaining 6 even though the result of them is thrown away), which is something MS likely explicitly coded it do when saturate is used to make the iteration limit predictable.

With clamp(q30,0,10) the compiler still uses the "rep" instruction, and just considers the result of the clamp function to make things unpredictable. It's quite annoying since techically it should work. If you coded the shader in assembly you could do it. This one of the reasons I prefer coding shaders for X360, because there is an HLSL command that lets you insert assembly into your HLSL. I'm pretty sure that DX10 allows this command also.

BTW, note that saturate() is a free instruction, i.e. it literally costs nothing [for all practical purposes] because all the standard assembly instructions can be appended _sat and it modifies the output as part of the assembly instruction. Anywhere you can use saturate(), do it. Note that the compiler will actually turn clamp(x,0,1) into saturate().

Aside from that, there are only two ways to avoid the dreaded "loop does terminate in a timely..." error. Neither of which are an option in MD2.
1) use the [unroll(x)] attribute preceeding the "for(){" to force the compiler to unroll the for loop to static code, with x being the max # of iterations. Only works with more recent Microsoft HLSL compilers for DX9 [e.g XNA 4.0], any for DX10, or X360
2) disable compiler optimization [only good for debugging, as turning off optimization usually increases ALU around 3-10x]

Quote:
Another question - during earlier Mandelbrot experiments I found the following: I tried to speed up the calculation by using a while loop which stops prematurely when the lenght of the vector exceeds 2, without stupidly continuing until the max number of iterations has been reached:

int n = 0;
while ((n <= maxiter) && (len <=2))

But quite the contrary was the case, the extra condition massively slowed down the whole code (although len was calculated in the loop anyway), the compiler struggled and took ages, the 512 instruction limit was reached...
This is because you need to use OR rather than AND
while ((n <= maxiter) || (len <=2))

using &&, means that even if n has reached maxiter, it will not terminate unless len is ALSO <= 2
Eo.S. is offline   Reply With Quote
Old 17th November 2010, 08:34   #67
Eo.S.
Milkdrop Moderator
 
Join Date: Oct 2004
Posts: 114
Also, as a side note to dynamic vs static branching.
Prior to pixel shader 3, if() blocks used static branching. if( foo ) {} else {} runs the code on both sides of the branch, then chooses the result based on foo.
In ps3.0+ if will run the code for just one side of the branch, IF all pixels within a pixel vector use the same branch. Typically a pixel vector is an 8x8 block of pixels [depends on the hardware, it's the # of pixels the pixel shader pipeline processes in parallel. Some hardware could be more. X360 is 64pixels/vector].
If some pixels take one path, and some take another within a pixel vector, you pay for both sides of the branch.
Eo.S. is offline   Reply With Quote
Old 17th November 2010, 08:47   #68
Eo.S.
Milkdrop Moderator
 
Join Date: Oct 2004
Posts: 114
As an amendment

when I use clamp(q30,0,10) in Rendermonkey it compiles without error. So I'm assuming MD2 probably uses a much older version of the HLSL compiler, and that since then MS made the compiler smart enough to recognize that clamp(foo,x,y) results in a predictable limit to the number of iterations.
Eo.S. is offline   Reply With Quote
Old 17th November 2010, 08:54   #69
Eo.S.
Milkdrop Moderator
 
Join Date: Oct 2004
Posts: 114
[deleted double post]
Eo.S. is offline   Reply With Quote
Old 18th November 2010, 01:25   #70
Phat
Major Dude
 
Phat's Avatar
 
Join Date: Nov 2003
Posts: 940
http://cec.concordia.ca/econtact/12_4/britton_loop.html

^Interesting article about Venetian Snares' track Szerencsétlen. For those who don't compose music I figure it's a good behind the scenes look at modern EDM that can be challenging to approach for programming music responsiveness.

Phat is offline   Reply With Quote
Old 27th November 2010, 22:35   #71
Nitorami
Major Dude
 
Join Date: Mar 2008
Location: Erlangen
Posts: 856
Yet another remix
Attached Files
File Type: milk martin - mandelbox explorer - wreck diver.milk (21.0 KB, 372 views)
Nitorami is offline   Reply With Quote
Old 28th November 2010, 05:02   #72
Phat
Major Dude
 
Phat's Avatar
 
Join Date: Nov 2003
Posts: 940
Hey good work on Lonely Goose btw. I think we're going to try to remix it at some point, but it will have to wait until we actually have the time to do it right.
Phat is offline   Reply With Quote
Old 28th November 2010, 10:43   #73
Nitorami
Major Dude
 
Join Date: Mar 2008
Location: Erlangen
Posts: 856
Lonely goose is quite complicated, using many control variables. Here is an earlier state which may be useful as a template. It is reasonably commented, and it's quite fun to play around with it.

The landscape is generated in the warp shader while the comp shader does the projection. The quality parameter sets the number of iterations to generate the 3D appearance. I found a value of 4 appropriate. Higher values allow for more profile but cause GPU load.

Only the green channel determines the height profile. Blue was an attempt to make water creep up the hills but is not really necessary.

The control variables for the projection are defined in the frame section.

There is no sky yet in this version.
Attached Files
File Type: milk martin - landscape template.milk (11.9 KB, 366 views)
Nitorami is offline   Reply With Quote
Old 28th November 2010, 14:37   #74
Amandio C
Senior Member
 
Join Date: Dec 2008
Posts: 400
Spectacular, the diving. The remains of atlantis, perhaps?
Btw, chain breaker is the most reactive, dancing preset I've seen.
Amandio C is offline   Reply With Quote
Old 28th November 2010, 16:42   #75
Nitorami
Major Dude
 
Join Date: Mar 2008
Location: Erlangen
Posts: 856
Thank you Amandio. I needed something reactive after all the time I spent with Mandelbox experiments.
Chain breaker is actually a modified representation of the bog standard spectrum delivered by the waves equations. I thought a lot about how to make the standard spectrum, which has been used in so many presets, could be made a bit more interesting, particularly how to expand it into a second and third dimension.
Nitorami is offline   Reply With Quote
Old 28th November 2010, 19:55   #76
Amandio C
Senior Member
 
Join Date: Dec 2008
Posts: 400
I was fascinated by waves with spectrum, in the first days with Md.
This example copies the 512 points of value1 (or 2) to the buffer.
Just write this in any wave per-point code:
i=i+1; i1=i%512; gmegabuf(i1) = value1;
Attached Files
File Type: milk value1 to buffer.milk (5.1 KB, 335 views)
Amandio C is offline   Reply With Quote
Old 28th November 2010, 20:49   #77
Amandio C
Senior Member
 
Join Date: Dec 2008
Posts: 400
polar value
Attached Files
File Type: milk amandio c - polar value.milk (5.7 KB, 334 views)
Amandio C is offline   Reply With Quote
Old 29th November 2010, 09:15   #78
Phat
Major Dude
 
Phat's Avatar
 
Join Date: Nov 2003
Posts: 940
The fact that milkdrop has shaders in it and artists like you are pimping it makes me happy.
Phat is offline   Reply With Quote
Old 29th November 2010, 10:50   #79
Nitorami
Major Dude
 
Join Date: Mar 2008
Location: Erlangen
Posts: 856
@Phat

Hey ! Never heard about parallax occlusion, and never thought that anybody would need algorithms like that outside MD. I dreamt it up because I desparately seeked for a way to bring some depth into the otherwise completely flat MD space. Even wrote a brief tutorial myself

http://forums.winamp.com/attachment....1&d=1257363037

The problem with ATI is that tex2D (sampler_fw_main) does not work as it should, but actually delivers sampler_fc_main. Therefore the image of the fractal is crap. A possible workaround might be to frac the argument... that effectively changes _fc to _fw on my Nvidia but I don't know whether it will work for ATI.

Games programming is definitely an activity I would be passionate about, but my life took a different path, and I'm too old for that now. I played quite a lot (and still do sometimes), often just walking around and enjoying the beautiful scenery, such as in FarCry...often thought it would be even more fun creating these things.
Nitorami is offline   Reply With Quote
Old 29th November 2010, 14:30   #80
Phat
Major Dude
 
Phat's Avatar
 
Join Date: Nov 2003
Posts: 940
Nice, yeah that's a main reason why I'm against software patents. People would ask her why she was going to publish instead of patent parallax occlusion mapping... We kinda view it like patenting math. There's a right way to do it commonly, if it's a solution many people would independently come up with withount even knowing of the other people's work... I just don't feel like someone has the right to tell other people they can't do it because someone else 'did it first'. Things like the "Carmack Reverse" or "One Click Buy" instantly pop into my head. Someone else came up with it independently and called it 'deep parallax' around the same time.

Basically what she was doing was cracks in walls and things like the image I posted before. Instead of having to actually have the geometry it was just a black/white texture, so it made things a lot more efficient. Although I think your procedurally generating the texture instead, which is a cool idea.

Anyway, yeah that's what your doing. The nice thing is that it might be possible to make it self shadow as well. Hopefully some good soft shadows or something.
Phat is offline   Reply With Quote
Reply
Go Back   Winamp & Shoutcast Forums > Visualizations > MilkDrop > MilkDrop Presets

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump