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…

