Skip to content

Commit 16a1f69

Browse files
committed
Adding overview and glossary doc for OpenExec
(Internal change: 2374505)
1 parent 5d1ba5b commit 16a1f69

File tree

4 files changed

+533
-9
lines changed

4 files changed

+533
-9
lines changed

docs/glossary.rst

Lines changed: 74 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -702,6 +702,59 @@ list: :usda:`[ @file1.usd@, @file3.usd@ ]`
702702
{
703703
}
704704
705+
.. _usdglossary-inputparameters:
706+
707+
Computation Input Parameters
708+
****************************
709+
710+
An :ref:`OpenExec <usdglossary-openexec>` *computation input parameter* is a
711+
specification of an input data source for a
712+
:ref:`computation <usdglossary-computation>`. Input parameters are
713+
used by computations to ingest source data from resolved attribute values or
714+
output values from other computations.
715+
716+
Input parameters can source values from the outputs of other computations, and
717+
sourced computations need not be published on the same scene object as the
718+
consuming computation. OpenExec may need to, for example, traverse a
719+
relationship, or look up or down the namespace hierarchy, to properly resolve
720+
the source for the input parameter. Input parameters encode information used to
721+
resolve input sources, such as a computation name, the scene object used to look
722+
up the computation by name, and the input value data type, which must match the
723+
data type of the output value returned from the source computation or resolved
724+
attribute value.
725+
726+
Every input parameter provides zero or more input values to the computation
727+
callback. A relationship-targeted input may not resolve to any source
728+
computations if the specified relationship does not have authored targets, or if
729+
the targeted objects do not publish a computation with the specified name or
730+
result type. Conversely, the input parameter can resolve to more than one source
731+
computation if there are multiple authored targets.
732+
733+
See :ref:`openexec_computation_input_parameters` for more information on
734+
computation input parameters.
735+
736+
.. _usdglossary-computation:
737+
738+
Computation
739+
***********
740+
741+
An :ref:`OpenExec <usdglossary-openexec>` *computation* is a function,
742+
provided by a scene object, that computes one or more output values from a set
743+
of input values.
744+
745+
A computation will take zero or more
746+
:ref:`input parameters <usdglossary-inputparameters>` (typically
747+
at least one), and a C++ computation callback responsible for reading input
748+
values, performing the computational work, and outputting the result values
749+
(typically one). A computation instance is also associated with a computation
750+
provider, a scene object used as an anchor for sourcing input values.
751+
752+
Computations can be **Built-in computations** (provided by USD schemas) or
753+
**Plugin computations** (custom computations registered as part of the schema
754+
registration process)
755+
756+
See :ref:`openexec_computations` for more information on computations.
757+
705758
.. _usdglossary-connection:
706759

707760
Connection
@@ -1957,6 +2010,27 @@ namespace of prims, each Stage possesses a `PseudoRoot
19572010
<#usdglossary-pseudoroot>`_ prim that is the parent of all authored root prims,
19582011
represented by the path :sdfpath:`/`.
19592012

2013+
.. _usdglossary-openexec:
2014+
2015+
OpenExec
2016+
********
2017+
2018+
*OpenExec* is a general-purpose framework for expressing and evaluating
2019+
computational behaviors in a USD scene. This framework is built on top of USD
2020+
and includes a fast, multi-threaded evaluation engine, and data management
2021+
features for automatically caching and invalidating computed values.
2022+
2023+
OpenExec introduces new features, such as
2024+
:ref:`named computations <usdglossary-computation>` and
2025+
:ref:`input parameters <usdglossary-inputparameters>`, that can be associated
2026+
with USD scene objects.
2027+
2028+
Behind the scenes, OpenExec builds and maintains a dataflow network with
2029+
computational tasks encoded as nodes within this network, and data traveling
2030+
between computations encoded as edges.
2031+
2032+
See :ref:`intro_to_openexec` for more details.
2033+
19602034
.. _usdglossary-opinions:
19612035

19622036
Opinions

docs/intro.rst

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -324,7 +324,10 @@ following plugin-points:
324324
your pipeline or package, with which you will be able to interact in your
325325
application-level plugins just as if they were native USD schemas. For
326326
typed schemas that are conceptually imageable, you can also teach Hydra
327-
how to image them.
327+
how to image them. You can additionally use
328+
:ref:`OpenExec <intro_to_openexec>` to register computations for schemas
329+
for better performance characteristics in addition to data invalidation
330+
and caching management.
328331

329332
What can't USD do?
330333
==================
@@ -347,16 +350,19 @@ operations run over a collection of assets is worth paying for the ease of asset
347350
construction and aggregation, and readable text asset representations that we
348351
get from namespace-paths as identifiers.
349352

350-
Not an execution or rigging system
351-
**********************************
353+
Not a rigging system
354+
********************
352355

353356
USD provides a lightweight, optimized scenegraph to facilitate authoring and
354-
efficient extraction of composed scene description. However, it provides no
355-
other behaviors than composition of a namespace hierarchy and property
356-
:ref:`glossary:Value Resolution`, and in the tradeoff space between "low-memory
357-
footprint, higher-latency data access" and "high-memory footprint, low-latency
358-
access to data", USD's scenegraph leans more towards the former, whereas a
359-
high-performance execution engine requires the latter.
357+
efficient extraction of composed scene description. However, USD's scenegraph
358+
leans towards a "low-memory footprint, higher-latency data access" tradeoff,
359+
whereas a high-performance rigging system requires more of a "high-memory
360+
footprint, low-latency access to data" tradeoff.
361+
362+
The :ref:`OpenExec <intro_to_openexec>` computation engine does provide a
363+
general purpose computation framework that could be used to develop a rigging
364+
system, but OpenExec by itself is not a rigging system. See
365+
:ref:`openexec_is_not` for more details.
360366

361367
Further, the more rigging behaviors and execution semantics we would add to USD,
362368
the more difficult it would become to interchange the data successfully between

0 commit comments

Comments
 (0)