Differences

This shows you the differences between two versions of the page.

Link to this comparison view

fxfactory_iterator [2014/01/16 19:22]
gds created
fxfactory_iterator [2014/01/16 19:23] (current)
gds
Line 5: Line 5:
 The FxFactory iterator is available as a //​processor//​ patch and as a //​consumer//​ patch. At each iteration, it renders a composition that is embedded in the patch. This differs significantly from the built-in iterator, which is a macro patch that dynamically switches between processor and consumer types. The FxFactory iterator is available as a //​processor//​ patch and as a //​consumer//​ patch. At each iteration, it renders a composition that is embedded in the patch. This differs significantly from the built-in iterator, which is a macro patch that dynamically switches between processor and consumer types.
  
-Start by creating an instance of **NI Iterator** of the consumer or processor type, depending on your design goal:+Start by creating an instance of **FxFactory ​Iterator** of the consumer or processor type, depending on your design goal:
  
 {{ :​qc:​iterator-patches.jpg?​nolink&​ |}} {{ :​qc:​iterator-patches.jpg?​nolink&​ |}}
Line 13: Line 13:
 {{ :​qc:​iterator-settings.jpg?​nolink&​ |}} {{ :​qc:​iterator-settings.jpg?​nolink&​ |}}
  
-Once you've embedded the composition,​ you can click the "​Edit"​ button to open it inside Quartz Composer. When you save your changes to disk, they are automatically picked up by the parent "NI Iterator"​.+Once you've embedded the composition,​ you can click the "​Edit"​ button to open it inside Quartz Composer. When you save your changes to disk, they are automatically picked up by the parent "FxFactory ​Iterator"​.
  
-Much like built-in iterators, any input or output ports you publish in the embedded composition will appear as inputs and outputs in the "NI Iterator"​ patch. ((Due to limitations in Quartz Composer running on Mac %%OS%% X 10.6, if you publish an index port with human-readable menu items, it'll display as a regular index port without the menu items. This limitation does not exist on Mac %%OS%% X 10.7.))+Much like built-in iterators, any input or output ports you publish in the embedded composition will appear as inputs and outputs in the "FxFactory ​Iterator"​ patch. ((Due to limitations in Quartz Composer running on Mac %%OS%% X 10.6, if you publish an index port with human-readable menu items, it'll display as a regular index port without the menu items. This limitation does not exist on Mac %%OS%% X 10.7.))
  
-==== Using NI Iterator to Replace "​Render In Image" ====+==== Using FxFactory ​Iterator to Replace "​Render In Image" ====
  
 Under normal circumstances,​ all processor patches in Quartz Composer cannot render anything to screen. To enforce this rule, the built-in iterator simply doesn'​t let you add renderer patches to an iterator that publishes one or more outputs. Under normal circumstances,​ all processor patches in Quartz Composer cannot render anything to screen. To enforce this rule, the built-in iterator simply doesn'​t let you add renderer patches to an iterator that publishes one or more outputs.
  
-The above is not true for **NI Iterator (Processor)**,​ which allows you embed any composition,​ including one with renderers.+The above is not true for **FxFactory ​Iterator (Processor)**,​ which allows you embed any composition,​ including one with renderers.
  
 By default, any renderers embedded in an iterator produce no output image on screen, but you can enable the **Render in Image** option to capture the outputs of any renderers into separate color and depth buffer images. By default, any renderers embedded in an iterator produce no output image on screen, but you can enable the **Render in Image** option to capture the outputs of any renderers into separate color and depth buffer images.
Line 46: Line 46:
   * **Depth Buffer** contains the depth buffer values, as a grayscale image. This output is only available if the **Disable Depth Buffer** option is off.   * **Depth Buffer** contains the depth buffer values, as a grayscale image. This output is only available if the **Disable Depth Buffer** option is off.
  
-There is little penalty from switching between different bit depths or anti-aliasing methods on the fly. NI Iterator uses some caching mechanisms to guarantee consistent performance and minimal use of VRAM.+There is little penalty from switching between different bit depths or anti-aliasing methods on the fly. FxFactory ​Iterator uses some caching mechanisms to guarantee consistent performance and minimal use of VRAM.
  
-NI Iterator works more consistently across different versions of %%Mac OS X%%, and its ability to capture depth values and render using multisampling makes it a unique and valuable alternative in situations where the built-in iterators and //Render In Image// patches are found to be lacking.+FxFactory ​Iterator works more consistently across different versions of %%Mac OS X%%, and its ability to capture depth values and render using multisampling makes it a unique and valuable alternative in situations where the built-in iterators and //Render In Image// patches are found to be lacking.
  
-Quartz Composer sits atop OpenGL, and certain features of this library only work when rendering at 8-bit. ​NI Iterator may be used to isolate parts of your composition that do not work at 16-bit half-float or 32-bit float by forcing its internal bit depth to be 8-bit integer.+Quartz Composer sits atop OpenGL, and certain features of this library only work when rendering at 8-bit. ​FxFactory ​Iterator may be used to isolate parts of your composition that do not work at 16-bit half-float or 32-bit float by forcing its internal bit depth to be 8-bit integer.
 ==== Iterator Variables and Timing ==== ==== Iterator Variables and Timing ====
  
-You are required to use the "NI Iterator Variables"​ patch instead of the built-in "​Iterator Variables"​ patch. You must add this patch to any composition that is embedded and used inside an iterator:+You are required to use the "FxFactory ​Iterator Variables"​ patch instead of the built-in "​Iterator Variables"​ patch. You must add this patch to any composition that is embedded and used inside an iterator:
  
 {{ :​qc:​iterator-variables.jpg?​nolink&​ |}} {{ :​qc:​iterator-variables.jpg?​nolink&​ |}}
Line 61: Line 61:
 {{ :​qc:​iterator-patch-time-not-valid.jpg?​nolink&​ |}} {{ :​qc:​iterator-patch-time-not-valid.jpg?​nolink&​ |}}
  
-If you're using any time-dependent patches, you'll have to make their timebase "​External",​ and hook it up to the "Patch Time" output of "NI Iterator Variables":​+If you're using any time-dependent patches, you'll have to make their timebase "​External",​ and hook it up to the "Patch Time" output of "FxFactory ​Iterator Variables":​
  
 {{ :​qc:​iterator-timebase-external.jpg?​nolink&​ |}} {{ :​qc:​iterator-timebase-external.jpg?​nolink&​ |}}
  
-Contrary to the built-in patch, "NI Iterator Variables"​ will, by default, animate automatically its outputs to help you test the embedded composition:​+Contrary to the built-in patch, "FxFactory ​Iterator Variables"​ will, by default, animate automatically its outputs to help you test the embedded composition:​
  
 {{ :​qc:​iterator-variables-settings.jpg?​nolink&​ |}} {{ :​qc:​iterator-variables-settings.jpg?​nolink&​ |}}
Line 73: Line 73:
 ==== Caching ==== ==== Caching ====
  
-Because embedding compositions and executing iterators can be expensive, "NI Iterator"​ takes extra measures to make this process faster.+Because embedding compositions and executing iterators can be expensive, "FxFactory ​Iterator"​ takes extra measures to make this process faster.
  
-Any time a composition is loaded by an "NI Iterator",​ it becomes part of a cache. If a second "NI Iterator"​ uses exactly the same composition elsewhere in you graph, both iterators will use the same embedded composition. This reduces memory requirements and reduces loading times.+Any time a composition is loaded by an "FxFactory ​Iterator",​ it becomes part of a cache. If a second "FxFactory ​Iterator"​ uses exactly the same composition elsewhere in you graph, both iterators will use the same embedded composition. This reduces memory requirements and reduces loading times.
  
 This type of aggressive caching may sometimes break if your graph contains cycles or uses certain patches. To avoid automatic sharing of embedded compositions between multiple iterators, make sure that you don't embed the same composition more than once ((Adding an extra, unused patch to a composition is enough to make it unique and thus not shared with any other iterators.)). This type of aggressive caching may sometimes break if your graph contains cycles or uses certain patches. To avoid automatic sharing of embedded compositions between multiple iterators, make sure that you don't embed the same composition more than once ((Adding an extra, unused patch to a composition is enough to make it unique and thus not shared with any other iterators.)).
Trace: