YOUR ACCOUNT

Sphinx.
Filter Optimizer

Posts: 1750
Filters: 39
Mortar Width 0..99 OK,
Mortar Width 100: Rendering is all wrong

I bet you can find a division by zero somewhere in a dark corner smile:D

Pavement Plus Bug.ffxml
  Details E-Mail
Vladimir Golovin
Administrator
Posts: 3446
Filters: 55
Oh, great. That's definitely a bug. The original code for Bricks / Tiles / Pavements was written almost a decade ago, and is really, really messy. We probably missed something when we refactored it to add slaves. Thanks for reporting.
  Details E-Mail
Alexey Matsinin
Filter Forge, Inc.
Posts: 13
it is not a "bug"!
It is "Optimization"! smile:D smile:D smile:D
  Details E-Mail
Sphinx.
Filter Optimizer

Posts: 1750
Filters: 39
Ah, of course - it optimizes all interpolation logic (and slavery) away with mortar = 100.. yeah I guess the new stuff changes the optimization strategies here and there.
  Details E-Mail
Vladimir Golovin
Administrator
Posts: 3446
Filters: 55
Yep, that was a decade-old optimization that bit us in the arse when we introduced slave components. Another optimization like this is the sample cache: we're currently rewriting it completely.
  Details E-Mail
Sphinx.
Filter Optimizer

Posts: 1750
Filters: 39
Quote
Vladimir Golovin wrote:
Another optimization like this is the sample cache: we're currently rewriting it completely.


Cool. I really hope you will consider the index/channel idea I presented here then. It may be useful with the slave situation too, as you can increase the index as needed.
  Details E-Mail
Sphinx.
Filter Optimizer

Posts: 1750
Filters: 39
Vlad, is the caching mechanism active even if there is just one outbound connection?

If so, there is a pretty significant performance improvement: remove caching mechanism in components that will only deliver a sample once per final sample.
  Details E-Mail
Vladimir Golovin
Administrator
Posts: 3446
Filters: 55
Quote
Sphinx. wrote:
Vlad, is the caching mechanism active even if there is just one outbound connection?


Yes, it is. This saves you a metric ton of rendering time when multiple samples from that connection are requested at the same coordinates (e.g. Checker's colors in Solid Fill mode, a lot of inputs in Bomber / Bomber Plus that are sampled at particle's center coordinates etc.)
  Details E-Mail
Vladimir Golovin
Administrator
Posts: 3446
Filters: 55
Quote
Sphinx. wrote:
Cool. I really hope you will consider the index/channel idea I presented here then. It may be useful with the slave situation too, as you can increase the index as needed.


if I understood that correctly, you're suggesting caching samples per outbound connection, not per component. Am I correct?
  Details E-Mail
Vladimir Golovin
Administrator
Posts: 3446
Filters: 55
(Assuming that my understanding of your idea is correct): Just talked with the guy who works on the sample cache. He says that yes, having different cache bins for each outbound connection is possible. On the other hand, this will disable the most frequent case of cache-hits: multiple connections of the same output to non-distorting components (they sample the output at the same coords, so the more outbound connections to non-distorters the better the cache hit ratio).
  Details E-Mail
Sphinx.
Filter Optimizer

Posts: 1750
Filters: 39
Quote
Vladimir Golovin wrote:
if I understood that correctly, you're suggesting caching samples per outbound connection, not per component. Am I correct?


No, it is a little more sophisticated than that. Even though there is just one connection, any component up the flow may branch out to other components. As long as x,y stays the same it is all good, but if one is a distorter which modifies x or y it will miss the cache, force rendering of a new value and ruin the cache for any subsequent original x,y calls.


Quote
Sphinx. wrote:
Vlad, is the caching mechanism active even if there is just one outbound connection?


Sorry, that was really not what I meant to ask. I was thinking about the sampling calls: if a component is only called once, do you still check and/or set up cache?

(I was thinking about a trivial filter with an Add connected to result and nothing else, and got all focused on that one connection.. forget about the number of outbound connections... its all about the coordinate flow and branchings/iterations)

What I proposed back then was this:
Quote
Any component that changes coordinates, should attach an index/ID number to its sources, making the sources spawn a new sample cache reserved for incoming requests with that ID


Basically any distorter up the flow will change the cache channel index/ID and thereby establish a new isolated cache for anything subsequent to that distorter.. and thereby not ruin the original x,y cache.. follow?
  Details E-Mail
Vladimir Golovin
Administrator
Posts: 3446
Filters: 55
We're currently subjecting our entire sample cache architecture to a profound overhaul. We've already tried and discarded several implementations. The one we're going to try next will use multiple 'bins' for separate sampling paths. That is, when a component is sampled by two other components that distort sample coordinates in two different ways, each of these two sampling paths will get a separate cache bin. It's too early to tell whether this will work or not.
  Details E-Mail

Join Our Community!

Filter Forge has a thriving, vibrant, knowledgeable user community. Feel free to join us and have fun!

33,712 Registered Users
+19 new in 30 days!

153,533 Posts
+31 new in 30 days!

15,348 Topics
+73 new in year!

Create an Account

Online Users Last minute:

99 unregistered users.