I do remember a post by Matt Hoffman on the EITG forums mentioning the difficulties of multithreading Camera. Their attempts failed and they ended up with the solution we’re using at the moment.
EIAS 7 Wishlist
Hi, Brian
Here is a seldom case when we agree with you
Yes, we also think that a multithreaded Camera would be nice.
Mutithreading is a parallel code execution in bounds of same process (same address space). It can be implemented with a single processor as well, that’s a problem of OS which processor takes care about which thread. Application is responsible for threads’ initializing, running and killing.
IMO it’s better to ask: Is Camera’s architecture suitable for multithreading? We think that yes, same as any render task. The problem is that multithreading is not a thing can be applied to anything to speed up.
"I’ve 180% speed up with my dual Mac!!!:applause:
"I’ve 115% speed up with my dual Mac :sad:
Both experiments/results are fully true, and percents are not even min/max values. Just a lot depends from what kind of work is processed. Not all can be multithreaded/parallelized. If, for example, you’ve a large MrBlobby in your prj, then most probably it remains same slow no matter how many processors are involved. Cause implicit surface should be built step by step, sequentially, not parallel. That’s true for absolute most geometry generation actions.
However, the shading phase can be parallelized well. It would be especially effective for most RT aspects, count GI. But not for all: building BSP, creating photon maps and some other things should be performed sequentially.
Alas, it’s a very hard work. SDK’s of mutithreaded apps typically gives very short advices, like:
- compile as mutithreaded DLL
- avoid to write in static variables
- that’s absolute enough for your plug-in/shader to be mutithreaded
That’s true, but only until developer tries to make something not-trivial. And that is only “usage” of host’s pipeline. Difficulties/problems grow tremendously for large app and threads’ “organization”. All memory allocations, writing files and many others should be “surrounded” by semaphores/critical sections. Each thread should be equipped with its own “ray-trace stack”. There are tens and tens problems here
Using more processors is a method of “brute force” (iron instead of brain). Look at RT soft shadows for example. They are poor and slow. One way is to increase a count of samples and add more processors. Another solution is to reorganize the algorithm of shadows calculation. We would like the second way 
We’ve no ideas what could be parallelized in Animator. The preview speed? But it depends more from GPU…
Absolutely. Animator has near instantaneous response for EVERYTHING once the view windows are closed…
The only thing I can think of is Software drawing mode.
Edit: CCN Files? CA’s always complain about them 
As for Camera, I would like to see RT Soft Shadow algorithms ‘massaged’ before ANYTHING else happens with that app 
Ian
As already mentioned, how practical would it be to have previews rendered automatically on 2/ 4 Cameras?
That is to say have a ‘previews’ renderama built into Animator?
So the workflow for the user is the same as now, but 2 Cameras start up and render.
Although, in all seriousness, this would only be practical if Camera could render vertical frame strips, for us, it would be useless otherwise.
Ian
not only CAs! my last project had many, many deformed objects in it. building the control files took around 10min/100frames! even when the deformed objects are turned off.
so, for some utility mask layer renders it looked like this:
writing control files: ~ 30min 
rendering: ~ 10 min
Hi, Ian
Of course, all these things are reasonable, but… they have no any relation with multithreading
Please understand: multithreading is not a “magic” can help for anything isn’t enough fast.
Fair enough, I guess my position is that Multi-threading should not be a priority at the moment. There are other things that should come first.
Hi, Ian
Our opinion is similar (thought very blurred). Other apps have a “bigger material’s ball (or cube, cylinder etc.) with all textures”. IMO it’s still ineffective, a ball is still far away from a real rendered object. Maybe a some kind of simplified render (pre-render) is the best/optimal solution. Not all should be copied 
My work is likely different from others on this forum, so let me elaborate on this subject
As an industrial designer I am producing mainly stills for new products on extremely tight deadlines sometimes only 24 to 48 hrs.
I have many scenes in Animator with many millions of polygons, and often have into the thousands of objects (many, many duplicates) with lots of texture maps.
These projects are unweildy to say the least. Open GL chokes. Even software drawing mode is very slow in outline mode. I am always turning object groups on and off to improve screen redraw.
Rendering for me is pretty fast. I use GI for smaller projects and get render times of 5 to 15 minutes per still (I may produce as many as 30 stills for a project with multiple concepts so as a whole that’s still a lot of render time!). My large projects would take over an hour with GI per still, so I usually fall back on Phong and get good quality in under 5 minutes.
Increasing render speed would be great as I could use more of the “advanced” render features like GI. But slowdowns and workflow in Animator are a legitimate performance bottleneck.
I can appreciate the limits of MP/ Multi-threading, but this is how hardware companies are going to give us more power in the forseeable future. Based on initial 3d benchmarks the latest 3Ghz Xeon from Intel/Apple is roughly equivalent to a 3.2 Ghz G5. Not bad, but that’s only about a 60% performance improvement over my dual 2 Ghz G5 (we’re talking single thread performance) This is WAY off from Moore’s law. Only a 60% performance improvement over a 3 year time frame. However, there are now FOUR of those processors in a single workstation. That’s a lot of untapped potential power.
My point is that the real challenge for software developers is to re-think thier apps, maybe even consider re-writing major parts of them to squeeze every ounce of performance from those extra processors. I understand that much of the calculation in 3D is linear, but being creative with how tasks are divided may yield some good performance improvements.
I will soon get back to the point of this forum with some more practical feature suggestions. Thanks to all for their input. I think this is a great discussion, and I hope Matt, Blair, Igors, and the rest of the EIAS Programming gang are following this and are inspired to make our favorite 3d App better and faster.
My work is likely different from others on this forum, so let me elaborate on this subject
As an industrial designer I am producing mainly stills for new products on extremely tight deadlines sometimes only 24 to 48 hrs.
I have many scenes in Animator with many millions of polygons, and often have into the thousands of objects (many, many duplicates) with lots of texture maps.
These projects are unweildy to say the least. Open GL chokes. Even software drawing mode is very slow in outline mode. I am always turning object groups on and off to improve screen redraw.
Rendering for me is pretty fast. I use GI for smaller projects and get render times of 5 to 15 minutes per still (I may produce as many as 30 stills for a project with multiple concepts so as a whole that’s still a lot of render time!). My large projects would take over an hour with GI per still, so I usually fall back on Phong and get good quality in under 5 minutes.
Increasing render speed would be great as I could use more of the “advanced” render features like GI. But slowdowns and workflow in Animator are a legitimate performance bottleneck.
I can appreciate the limits of MP/ Multi-threading, but this is how hardware companies are going to give us more power in the forseeable future. Based on initial 3d benchmarks the latest 3Ghz Xeon from Intel/Apple is roughly equivalent to a 3.2 Ghz G5. Not bad, but that’s only about a 60% performance improvement over my dual 2 Ghz G5 (we’re talking single thread performance) This is WAY off from Moore’s law. Only a 60% performance improvement over a 3 year time frame. However, there are now FOUR of those processors in a single workstation. That’s a lot of untapped potential power.
My point is that the real challenge for software developers is to re-think thier apps, maybe even consider re-writing major parts of them to squeeze every ounce of performance from those extra processors. I understand that much of the calculation in 3D is linear, but being creative with how tasks are divided may yield some good performance improvements.
I will soon get back to the point of this forum with some more practical feature suggestions. Thanks to all for their input. I think this is a great discussion, and I hope Matt, Blair, Igors, and the rest of the EIAS Programming gang are following this and are inspired to make our favorite 3d App better and faster.
By preview I was meaning ‘Snapshot’. However you bring up an interesting subject! I am very much in favour of this kind of feature.
But by pre-render do you mean a no frills snapshot? Perhaps add a render option to the linking editor 3d view? Then you could render one group at a time with no frills…
Thinking out loud,
Ian
Well, I’d like to see better material previews. A more consistent numerical data input. More feed back during rendering. I’d like to see the product marketed- no-one knows about it. This isn’t healthy.
Martin K
Hi, Ian
We too
We heard many times about “better material preview”, but what is it? No one knows and no one app has an ideal preview. What we do now to setup material? Something like: edit - snapshot - edit - snapshot… many times. Often it needs to simplify scene: turns off other objects, lights, set additional cameras etc.
It would be nice if host does this routine work for us. For example: we are in Texture Window, press F7(?) and let host runs Camera with actual object only, simplified preview lights and actual orbit view. Add some “variants”, for example:
- render a whole material;
- render actual texture only;
- render textures stack up to actual one
Another one: re-render a selected/desired object only in previous screenshot screen. Yes, it will have a jagged edges etc. - that’s only a draft sketch. But IMO it shows enough well how material looks in scene.
And who knows, maybe this set of modest features would give much more than a “super” preview promises “real-time” but ends with 50K of polys. Or with fractal noise with 5 and more octaves. Or with many other things.
Ola,
One of the best ways I think its the way to preview I think Its Fprime:
http://www.worley.com/fprime.html
or L-Pics from Pixar
http://www.vidimce.org/publications/lpics/
If we could have a window (the snapshot preview window) be feeded by camera caches in a loop in the background without camera window lauching… without anti-aliases and using the best of all MP processors we could have a interesting and almost realtime preview.
Tomas Egger
What’s the reason Renderama has that big an impact in local multicamera rendering? The fact that it treats local cameras as networked ones? Or is it just slow managing things?
If producing a multithreaded Camera is so complicated, perhaps it would be better to create sort of an specialized Renderama-like app, say, “MetaCamera”, able to talk more directly to several local Camera copies and do tricks such as dividing the frame into four stripes (would that route produce less overhead than assigning different frames to each pooled Camera? Would it be faster for Renderama to address several networked MetaCameras, each networked PC producing single frames instead of fours by using the striping technique?), or knowing when there is a pending preview job and having some preference for resolving it even if it is in the middle of an animation job (assigning one Camera to it, or pausing the main job to dedicate all Cameras to it)…
For a striped image task division technique, perhaps MetaCamera could be smart enough to try pre-ordering things like precalculated shadows and cubic reflections so that they can be shared among the pooled Cameras: even if they have to wait at idle for one of them to build these, in the end a MetaCamera would be faster than every Camera doing it itself, I guess.
Hi, Juanxer
All is not very complicated was done in previous 10-15 years
LOL
Yes, multithreaded render is hard to implement but same time it promises effective/attractive results. If Tomas and Jens run a serious RT/GI scene on their quads and have got x3 and more speed up - they can say only “wow”
Multithreaded technique does not “duplicate” memory allocation same as models’, plug-ins’ and shaders’ loading for each render instance. The discussion sorta “what’s better: MP or network render” is obsolete IMO - now it’s time when 3d app should have both
Interesting note about rumored multi-threaded OpenGl for OSX.
I don’t know the limitations of this, or if graphics cards more of a bottleneck, but it is rumored to have significant impact for games.
Perhaps this could bode well for increased redraw performance for Animator?
http://www.insidemacgames.com/features/tuncersblog.php?ID=106
What I wish for is an integrated sub-D modeling - maybe Silo/Nevercenter & EIAS should partner and that would also create many more users for both sides.
If not EI should make their own - I think this may be one of the reasons that potential new users may pass it by.
But even still it is a pain to go back and forth between apps as it stands.