Messages 1 - 45 of 184
First | Prev. | 1 2 3 4 5 | Next | Last |
Crapadilla
![]() |
I just set up a new wiki article (and provided the first entries). Comments and contributions are welcome!
![]() The DOs and DON'Ts of Filter Construction --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 14, 2007 10:13 am | ||||||
Vladimir Golovin
Administrator |
+1024 on the Perlin-into-Blur thing.
My only suggested improvement would be to type it in HUGE BLINKING RED LETTERS. Also, some irritating sound would be nice, something like the NAVY alarm ![]() |
|||||
Posted: December 14, 2007 11:55 am | ||||||
Sjeiti
![]() |
Let's hope HTML 5 will have <blink /> again
![]() |
|||||
Posted: December 14, 2007 12:47 pm | ||||||
StevieJ
![]() |
Dilla, that is excellent!!! Nice work!!!
![]() Steve
"Buzzards gotta eat...same as worms..." - Clint :) |
|||||
Posted: December 14, 2007 12:59 pm | ||||||
Conniekat8 |
oooh, very handy information, especially for us noobs!
THANK YOU! |
|||||
Posted: December 14, 2007 1:05 pm | ||||||
Crapadilla
![]() |
If anyone could assist in wiki markup editing to this end, I'd be grateful. ![]() --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 14, 2007 1:14 pm | ||||||
Crapadilla
![]() |
I'm glad you appreciate it, and I hope to add more items to the article as they cross my mind! ![]() As I stated above, feel free to contribute, all ye who feel like contributing! --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 14, 2007 1:16 pm | ||||||
StevieJ
![]() |
Are you sure you want me involved in this??? You might have to do alot of editting..... ![]() ![]() ![]() I'm holding out for my first Editor's Pick before I go to the next level of contributing..... ![]() ![]() ![]() Steve
"Buzzards gotta eat...same as worms..." - Clint :) |
|||||
Posted: December 14, 2007 1:40 pm | ||||||
Crapadilla
![]() |
If you have a meaningful item to contribute, then yes - by all means - please go ahead! ![]() --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 14, 2007 1:43 pm | ||||||
Sphinx.
![]() |
looks good - the channel trick is something I often use, helps alot not only to speed up the rendering, but also to keep the memory usage down (by limiting the number of components). For example if you are using bitmap based components to process grayscale sources, then you can process 3-4 sources seperately with one component (high pass ignores/bypasses alpha, so its only 3, RGB).
One thing.. in the stuff about Noise and Blur, it does look like a general statement - "never fed your noises to a blur" alike - but as I recently showed, it can speed up the rendering dramatically - specially when worleys are used on a height tree or get distributed out to many post processing branches that breaks with the single sample cache system (like offsets etc). Ofcourse its a special case where the actual purpose not is smoothening, but rather buffering. But if the blur is there in first place to serve as buffer, and you later on figures that it actually looks good with a higher radius, well then you have a blur avail. at no expense since it already sits there for another purpose.. I wouldn't be so angry at those blurs ![]() |
|||||
Posted: December 14, 2007 2:05 pm | ||||||
StevieJ
![]() |
Well, I wouldn't on this subject matter because I'm just a novice compared to your knowledge of it.....but I will help out in other areas.....if I feel that I almost know what I'm talking about.....
![]() ![]() Right now, I'm finishing up a series of B&W photo filters with different types of soft lens effects......and then, ***I can't believe that I'm going to say this ![]() ![]() ![]() ![]() It's extremely nice of you to do this work for FF.....in addition to all the other things you have done here.....which I've certainly benefitted from......so thanks!!! ![]() ![]() ![]() Steve
"Buzzards gotta eat...same as worms..." - Clint :) |
|||||
Posted: December 14, 2007 2:07 pm | ||||||
Mousewrites
![]() |
Ooooo. Thank you muchly. This will be lots of help.
|
|||||
Posted: December 14, 2007 2:10 pm | ||||||
Mousewrites
![]() |
::Reads the wiki::
::Reads it again:: ::Feels like an idiot about 5 times:: |
|||||
Posted: December 14, 2007 2:15 pm | ||||||
Crapadilla
![]() |
Sphinx, would you be willing to supply a short paragraph about this 'caching' behaviour to complement the perspective on blur components that I gave?
Actually I like blurs very much, and I use them often. But! With blur components (and the other the bitmap-based ones) you have to know exactly WHERE and WHEN to use them, or they do more harm than good. Consequently, it is also very beneficial to know when and how you can do WITHOUT them. ![]() --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 14, 2007 2:33 pm | ||||||
Sjeiti
![]() |
I was thinking of contributing something about the height input on surface result but I'm not sure if most people will agree with me on this:
When I assemble a gray scale image for height I make sure the darkest pixels approach black and the lightest pixels approach white, and afterward correct the height using surface height from the lighting tab. Now of course you don't have to do this, you can make a height map that is almost even gray and still have a great looking output. But I can't help feeling these gray height maps are wasting information. When you have a 0-255 range why not use it? It is more accurate, especially when you intend to use the bump map output for 3D. |
|||||
Posted: December 14, 2007 2:57 pm | ||||||
Kraellin
![]() |
one might also mention that blurs can be used with perlins in certain circumstances, like feeding blurred results INTO perlin noise or backgrounds, AND feeding blurred results into the perlin controls themselves. when you take into account how, in your noise lab, you utilize a number of the perlin control slots with other things, those controls often cant blur as you state in the do's and donts. so, a separate blur is sometimes necessary there, also... i think.
sorry, everyone pokes their two cents in AFTER someone makes some excellent points and tutorial helps. and mention shld be made of the ORIGINAL work you've done here, dilla. excellent stuff! so, forgive my mods/two cents, please. If wishes were horses... there'd be a whole lot of horse crap to clean up!
Craig |
|||||
Posted: December 14, 2007 3:11 pm | ||||||
Crapadilla
![]() |
Yes, exactly! I perfectly agree. This would be a good one to add. --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 14, 2007 3:26 pm | ||||||
Sphinx.
![]() |
Well, I would like to hear an "official" statement from Vlad about the buffering method, because it essentially opposes the procedural sampling concept (in that it forces a rasterization of the blur input, and thereby prevents further real subsampling) - I can understand why that might not be considered good practice, and if that is the conception, it should not be promoted. Then again it could just be a "novel" unrelated method for which all the blur/bitmap-based component lynching seen here and there don't apply ![]() However I think the performance gain shown in the snippet argues for it self, and what I really should do is to add a section to the optimization section of the wiki, which we then could add a small note about in the Noise and Blur text (e.g. "This ofcourse don't apply for cases where blurs are used for buffering mechanisms" or something). By the way.. today I played with the method for buffering large curve "systems".. and it works very well there too, and the side effects are perhaps even less visible here (some of the curve components are quite heavy performancewise, specially when controlled by map inputs)
I'm not sure I agree here. FF does range checking and clamping just for about every component output (e.g. if output > 1 then output = 1), so there is a good reason to stay in "safe" mid area ranges to prevent things from getting overblown (resulting in flattened heightmap areas). Since the internal precision level is way higher than 8 bits per channel, it is not a problem at this point. The problem may arise when the user choose to export to an 8 bit per channel format, and that is, I think, the area where the guiding effort should be put. If users want to ensure full exploitation of a given target bit range, they should render the maps to a HDR format, and do the appropiate adjustments afterwards in relation to the target bit depth. It would also make a good feature if FF had an option to maximize heightmaps for a given bitdepth (most relevant 8 bit). |
|||||
Posted: December 14, 2007 4:03 pm | ||||||
Sjeiti
![]() |
Well I always use the 'threshold trick' to prevent clamping. I'm not saying high and low should be within a three pixel range of white and black. I'm just saying that almost evenly gray height maps is a waste of ones and zeros. I'll just add the height map point to the page, refer to the danger of clamping, explain the 'threshold trick', and also add that you don't have to do this to create a good filter.
As for HDR, I know nothing about that, so feel free to add that. (OT: hey wow I just learned Phong is actually a person, I always thought it had something to do with plastic) |
|||||
Posted: December 14, 2007 4:27 pm | ||||||
Crapadilla
![]() |
Well, personally, I prefer my height maps sprawling fully between the 0..1 range; call it an old 8-bit habit, if you will, but I think it feels somewhat clean and tidy this way. It is true though that - with the advent of HDR formats and floating point precision - this becomes somewhat less of an issue.
--- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 14, 2007 4:59 pm | ||||||
Sphinx.
![]() |
I just took a closer look on how the bump map and normal are rendered - I actually thought that the Surface Height slider also affected the rendered bump map (that flattening could occur even if the height input is valid with high Surface Height settings). It is not the case, only the normal map is affected by that slider.
With that knowledge I agree.. the heightmap input should be as close to full range as possible - how does that "threshold trick" work? Is it simply a fixed "safe" distance from the range limits, black and white? I really think that the histostretch ought to be handled by FF and not our guestimate of a "universal" stretch (which can only be safe if the heightmap contrast is not controlled by any user controls directly or indirectly). When FF is set to render a bump map, it should do this to an intermediate hdr map, search for min/max values and adjust the levels accordingly to those when saving the bumpmap to 8 bit formats. Perhaps a good feature request?
I wonder how this works when some of the outbound connections end up in offsets, refractions or noise distortions at some point, and others don't. Consider the following case: we have a perlin noise with two outbound connections one that goes directly to the reflectivity input and one that goes to an offset which then goes to the surface input: [perlin]----------------->[surface result (reflect.)] . . . . . | . . . . . |---->[offset]--->[surface result (surface)] the offset alters the coordinate passed down to the perlin when rendered (i.e. it will fetch samples from an offset location). Will this "thrash" the sample cache, because the last fetched sample constantly shifts because of the coordinate changing? |
|||||
Posted: December 15, 2007 3:18 am | ||||||
Sjeiti
![]() |
||||||
Posted: December 15, 2007 4:20 am | ||||||
Sphinx.
![]() |
ahh. I see.. its a guide for adjusting to maximum contrast. Nice!
I thought you had some sort of automatic solution (which is not possible without knowing the global min and max levels, thats why FF should handle it in a post render step). |
|||||
Posted: December 15, 2007 4:41 am | ||||||
Sjeiti
![]() |
Damn Wiki... how do you apply breaks? <br/>
|
|||||
Posted: December 15, 2007 5:03 am | ||||||
Sjeiti
![]() |
Hey wow... I love that 'Channels trick'.
|
|||||
Posted: December 15, 2007 5:22 am | ||||||
Crapadilla
![]() |
As I understand it, the sample cache for a component with multiple outbound connections is 'located' at its output, and each component with multiple outputs has its very own sample cache. The component gets rendered once and the result is then cached for other components to quickly 'look up' as needed. --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 15, 2007 5:56 am | ||||||
Sphinx.
![]() |
Yeah, but doesn't that imply that the cache is invalid (and thus a new rendering is needed) if we have different offsets for the outbound connections? Lets consider a simple hypothetic rendering case for that simple setup I mentioned (changed a bit here):
We are rendering a 2x2 pixel texture, and the result component starts rendering at position (0,0), meaning that it will request a sample from this position: 1. result[surface] passes (0,0) to perlin, which returns this sample and caches it for future (0,0) requests 2. result[reflect.] passes (0,0) to offset, which adds its offset, lets say (+1,+1), to the coordinate it recieved, resulting in (1, 1) 2.1 offset passes (1, 1) to the perlin to get a sample from this new offset coordinate 2.2 perlin checks if the request is in its sample cache (if current coordiate = previous coordinate then return cached sample), but since last coordinate was (0, 0) and new coordinate (due to the offset) is (1, 1), the cache is invalid and a new sample rendering is needed See what I mean? If this is how the sample cache stuff works, hooking up many branches to the same leaf component will only be faster when the coordinates remain unaltered, so in there is a reason not to do so in many situations. The question is which components changes the coordinates? I think that is Offset, Noise Distortion, Refraction, Components in Jumble Fill Mode.. is there others? |
|||||
Posted: December 15, 2007 6:26 am | ||||||
Crapadilla
![]() |
I don't think so. If you connect a 'sample cached' perlin noise into three different offsets, the same sample cache is read by all three offsets, and SUBSEQUENTLY each offset calculates its own coordinate transformations using the cache as its source. --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 15, 2007 6:34 am | ||||||
Sphinx.
![]() |
Hmm, but that implies that there is more than one cached sample - thats not how I understood the concept - I'll do some testing an reading ![]() |
|||||
Posted: December 15, 2007 6:39 am | ||||||
Crapadilla
![]() |
Yes, the way I understand it, each component that has multiple outbound connections maintains its own sample cache. Continuing the example of the perlin and three offsets in my post above, if you were to connect one of those offsets to three other components in the filter tree, this offset component would in turn be enabled for sample caching and build its very own cache. I presume that any given component's sample cache remains valid until the components' source input or its parameter values change. This means that depending on where the sample cached component is located in the filter tree, tweaking filter controls may force a whole cascade of caches to be rebuilt. --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 15, 2007 6:44 am | ||||||
Sphinx.
![]() |
I read this is *one* single sample is cached in the output.
I don't think the fact that there are multiple outbound connections over just one affects wether sample caching is active. Seems like its a generic mechanism: last coordinate and sample is cached at the output, and if next sample request has the same coordinate, it will return the cached sample, and implicitly if the coordinate doesn't match, a new sample will be calculated and saved as the new cached sample.. |
|||||
Posted: December 15, 2007 7:06 am | ||||||
Crapadilla
![]() |
That is a question for Vlad or a programmer to answer. Sadly, there is not much info on FF's sample architecture available, so I'm just deducing how all this might work from the help file, Vlad's postings, etc. ... ![]() --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 15, 2007 7:12 am | ||||||
Sphinx.
![]() |
LOL, yeah, same here ![]() Ok check out this test filter.. its not a very large filter graph, but it still shows a significant difference. The filter has one option "Duplicated Perlins", which if checked uses two seperate perlin components on each "coordinate branch" - when the checkbox is changed I made it force a variation and color shift too so its easier to see the difference.. on my single core nutcracker, the duplicated chain is faster.. how does it perform on your CPU octopus? ![]() (edit - updated file, this one shows more significant difference) Sample Cache Test 2.ffxml |
|||||
Posted: December 15, 2007 7:36 am | ||||||
Crapadilla
![]() |
I've added some general guidelines for contributors...
*** nudge nudge Sjeiti nudge *** ![]() ![]() And it seems the article is growing! ![]() --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 15, 2007 8:16 am | ||||||
Crapadilla
![]() |
I'm currently not in the studio, so I only have an old athlon 1,0 GHz snail at my disposal. No performance testing until monday. ![]() --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 15, 2007 8:34 am | ||||||
Sjeiti
![]() |
Ok... consider my contribution guided
Maybe a good idea to put these general 'guidelines for contributors' on the main page. Add to it a link to the Wiki help. A lot of the people on the fora might feel a bit reluctant to contribute to the Wiki (the FF Wiki was my first too) so some small pointers on how a Wiki works might convince them it's not all that hard. |
|||||
Posted: December 15, 2007 8:38 am | ||||||
Sphinx.
![]() |
Ok.. You should check it out anyways, as it seems to verify that we're dealing with single sample cache - the example shows that using two seperate perlins with rather expensive settings is faster than using just one perlin with those settings! It will be interesting to see if this holds true for multicore systems too - anyone out there with a dual/quad core is more than welcome to test if which of the modes render faster, "red" or "green" (duplicated perlins). |
|||||
Posted: December 15, 2007 8:42 am | ||||||
Crapadilla
![]() |
Great! And how about adding an image? ![]() ![]()
Well, people have different opinions on how to design and structure things, so currently I feel it is sufficient if the originator of an article provides some guidelines. --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 15, 2007 8:49 am | ||||||
Sjeiti
![]() |
mumble mumble adding image.. the things I do for humanity
One thing I never quite understood about FF's Perlin noise: The Perlin noise I know has octaves and persistence. Octaves being the number of calculated noise maps, each of which has a doubled frequency (1,2,4,8...). And persistence (or falloff) is the amount in which these maps are blended with each other (persistence of .5 means 1*map1+.5*map2+.25*map3+.125*map4...). If FF's roughness and detail relates to octaves and persistence, then how can detail increase render time? They must have found some other exciting way to render Perlin noise, otherwise I really don't get it. |
|||||
Posted: December 15, 2007 4:30 pm | ||||||
Sphinx.
![]() |
as I see it roughness defines how the different octaves are mixed, and details control how many octaves are in play, but moreover it controls the contribution of the last added octave (given some sort of fractional range). What I'd like to know is how many octaves are in play when Details is = 100...
|
|||||
Posted: December 15, 2007 6:31 pm | ||||||
Crapadilla
![]() |
It's eleven according to the help file... ![]() --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 15, 2007 6:42 pm | ||||||
Crapadilla
![]() |
The article has been updated significantly...
Time to get some close-eye! ![]() --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 15, 2007 8:25 pm | ||||||
Sjeiti
![]() |
Ah 'help file' never thought of that.
So roughness is persistence and details is octaves. Oh wow, they even explain why roughness has can influence speed (which normally wouldn't happen). And how in details floating points are used while octaves are integers. Good help file. Maybe a good thing to refer to it from the wiki more often. For instance: each time the Perlin noise component is mentioned link to it. |
|||||
Posted: December 16, 2007 3:59 am | ||||||
Crapadilla
![]() |
Yes, good idea! --- Crapadilla says: "Damn you, stupid redundant feature requests!" ;) |
|||||
Posted: December 16, 2007 5:28 am | ||||||
Sphinx.
![]() |
Added some info on how to get Sharpen and High Passes from a blur (and more..).. its my first real wiki edit, is it allright?
One Blur does it all |
|||||
Posted: December 16, 2007 10:28 am |
Filter Forge has a thriving, vibrant, knowledgeable user community. Feel free to join us and have fun!
33,711 Registered Users
+18 new in 30 days!
153,533 Posts
+31 new in 30 days!
15,348 Topics
+73 new in year!
27 unregistered users.