Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update dev branch to include latest AL develop, and (nearly) latest Pixar dev #18

Merged
merged 636 commits into from
Aug 20, 2019

Conversation

pmolodo
Copy link
Contributor

@pmolodo pmolodo commented Aug 15, 2019

Also includes the PR from Autodesk:

LumaPictures#1

...and merges in the latest changes from master

c64kernal and others added 30 commits May 23, 2019 23:34
Also fixing one case of unused variable in specific build environments.

(Internal change: 1972760)
(Internal change: 1972761)
[usdview] Added currentFrame command line argument

(Internal change: 1972807)
(Internal change: 1972851)
UsdImaging's PointInstancerAdapter was working with singly-
and doubly-nested UsdGeomPoinstInstancer prims, but would
crash when a third level of nesting was added.

The root cause was a mix-up between USD paths and cachePaths.
Specifically, cache paths for instancers may embed variant
selections to disambiguate uses of a USD point instancer in
the cache.  When looking up the backing USD prim, we must
strip off the variant selections -- but this step was missing
in some places.  This was relatively easy to spot after
adjusting variable names to distinguish paths used for
USD vs. cache paths.

Also, UpdateForTime() must check if the parent instancer prim
exists, similar to what UpdateForTimePrep() already does,
an issue revealed once the above was addressed.

Fixes Autodesk#838

(Internal change: 1972877)
Adding support for skipping some subdiv parameters during refinement.
Change the 'addPathAttributes' param of USD unpack methods to instead be included in the GT_RefineParms as key 'usd:addPathAttributes'
Updating GusdGU_PackedUSD::unpackGeometry to take an optional GT_RefineParms
Adding the same, optional parm to GusdGU_USD::ImportPrimUnpacked and various methods in agentUtils.

(Internal change: 1972878)
(Internal change: 1973071)
...did not call _InitGL, like the no-arg constructor. This resulted in an
error: 'GlfContextCaps has not been initialized'
…s from a USD file

This change includes two other main additions. The first is a
UsdAppUtilsFrameRecorder class that wraps a UsdImagingGLEngine and can be
used to output images to disk that are effectively the same as what you
would see in the viewer in usdview. The other is a rendererArgs.py module
that supports added command-line args to a script for specifying the Hydra
renderer plugin to use.

(Internal change: 1972902)
(Internal change: 1973128)
In this crash, we repopulate a native instancer adapter after some
scene edits.  Since this is a top-level Populate() call, the
instanceChainPath is </> and _GetPrimPathFromInstancerChain()
returns a path that does not reflect a real prim:

    instancePath: /__Master_2/obj_0
    parentProxyPath: /
    instanceChainPath: /obj_0

Work around the crash by checking if the returned prim is
valid before querying its modelDrawMode.

Fixes Autodesk#847

(Internal change: 1972953)
…ags.

Prior to this change, tasks has two mechanism to specify render tags to the Execute Phase.
Firstly there was the render tags specified by the collection, which was used in the gathering of draw items.  Each render tag was bucketed into different command buffers.
Secondly, the task could pass a set of render tags to the Execute function, which would be used to select which render tag buckets to draw.

This change, removes the render tag bucketing and instead changes render pass to using a single command buffer.  Instead of using the collections render tags,
the render tags passed to Execute are used to do draw item filtering.

This simplifies the logic and provides a consistent set of render tags across sync and execute.  However, this will impacting render tag change performance as changing
render tags now causing command buffers to be rebuilt.  However, this isn't a high frequency operation and the new performance should be in line with Repr
(display mode switching) performance it was felt to be a good compromise.

Changes:
- Render Index's GetDrawItems() now takes render tags as a parameter and not longer returns a bucketed list of draw items, but instead just a single list of draw items.
- Render Index gather filter will now early out if a tag match is found.
- render tags is now carried separately through the draw item gather code, ignoring render tags in collections (which will soon be removed).
- Removed the various overloads of HdRenderPass::Execute(), as they all ended up just passing a render tag token vector to _Execute().  Now just a single entry point for Execute() exists.
- Most tasks now pass the result of it's own GetRenderTags() method to Execute().
- HdSt_RenderPass, now only contains a single command buffer.  Rebuilding if the render tags change
- Shadow task no longer uses a hard coded set of render tags for execute and instead uses those provided by GetRenderTags().

(Internal change: 1973001)
We needed to move the discovery of node source types from NdrRegistry::_FindAndInstantiateParserPlugins to NdrRegistry::_RunDiscoveryPlugins.  We used to assume that a plugin could only discover nodes of one type; however, this assumption did not hold true, since for example some file formats like 'mtlx' can define a shader for multiple different source types.  Thus, we instead need to discover the node source types after the parser plugins run.

(In the past a parser plugin that returned an "" was returning more than one type)

Changes:
* Don't populate _availableSourceTypes at parser instantiation (_FindAndInstantiateParserPlugins)
* Populate _availableSourceTypes when the parsers run (_RunDiscoveryPlugins)
* In NdrRegistry::GetAllNodeSourceTypes, get the _discoveryResultsMutex lock in order to access _availableSourceTypes, since _availableSourceTypes now gets
  populated in _RunDiscoveryPlugins when we need this lock.
* Update testSdrRegistry to check that we find source types for the registry from the discovery results

(Internal change: 1973110)
(Internal change: 1973168)
…chRenderer

Following the change that removed HdxIntersector, DrawCustomCollection() is
no longer used or needed.

(Internal change: 1973216)
…rom Scene Delegate.

Now, tasks own the render tags; rather than hard coded the render tags in the tasks themselves, it is preferred to obtain them from the application via the Task's Scene Delegate.

The change provides the core infrastructure to support this objective.

Changes:
- Added DirtyRenderTags to list of Task's dirty bits.
- Change tracker now takes an initial set of dirty bits for tasks, matching other prims.  This is obtained from the task's new GetInitialDirtyBitsMask() API.
- Scene Delegate API has new GetTaskRenderTags() method for obtains the render tags for a task.
- To match other prims HdTask, now implements _GetTaskRenderTags() to obtain the render tags from the delegate.

(Internal change: 1973270)
(Internal change: 1974405)
Existing window policies (fit, crop, match verticaly/horizontally) will always adjust a camera's frustum to honor the target (viewport) aspect ratio.
The "DontConform" policy leaves the frustum as-is, meaning that the resulting image may be stretched/squished if it wasn't pre-fit. While this isn't generally what one might want, it may prove useful in a few cases:
- The application has prefitted the camera frustum to the viewport, and doesn't want Hydra to tamper with it. This is mostly cautionary to avoid any changes due to precision.
- The application wants the squishing/stretching effect (quite unlikely in practice).
- Avoid rebaselining of unit tests whose baselines were generated w/o adjusting the camera frustum.

(Internal change: 1973325)
Previously, inherited primvars were supported only for backends using full material networks (e.g. Prman); and they weren't supported for special, "builtin", primvars, such as displayColor/displayOpacity/widths.  This change adds inherited primvar support for all backends, and adds support for displayColor/displayOpacity/widths.

To counteract the performance hit, this change also adds an "inherited primvar cache", an implementation of the UsdImaging inherited cache that stores the inherited primvars at each level.  The design of this cache has been modelled after the coordsys binding cache, which we expect to have similar authoring patterns.

This change also fixes GprimAdapter::TrackVariability to set DirtyPrimvar when any primvar is time-varying; previously, it just checked color and opacity.

(Internal change: 1973330)
(Internal change: 1973452)
Previously, if we had an instance-rate primvar "displayColor" (for example), CodeGen would generate the accessors:
vec3 HdGet_displayColor_0();
vec3 HdGetInstance_displayColor(int level, vec3 default);
... but these aren't discoverable for shading code, which is explicitly ignorant of whether the primvar is instance rate or prototype rate.

Those two accessors are still provided, for the HdSt instancing shaders, but we now generate a user facing accessor:
vec3 HdGet_displayColor() {
  return HdGet_displayColor_0();
}

Prototype primvars take precedence over instance-rate, so this is only defined if there's no prototype-rate displayColor (as tested with #if !defined(HD_HAS_displayColor)).

(Internal change: 1973334)
…ng if a field change is relevant. File formats no longer have to handle this themselves.

(Internal change: 1973387)
…cent_alembic

Fix compatibility for AbcCoreOgawa::ReadArchive with Alembic>=1.7.9

(Internal change: 1973396)
…Task Controller based delegates.

This change implements the new scene delegate API for obtaining render tags from the scene delegate for Task Controller based delegates.

The task controller has a new method, SetRenderTaskRenderTags(), that sets the render tags to use for the render task.
The shadow task currently uses a hard coded render tag of geometry.

Changes:
- Added SetRenderTaskRenderTags() to HdxTaskController, which sets the render tag parameter on the task and marks it dirty in the change tracker.
- Task Controller's Shadow and Render Tasks initialize the render tags to geometry.
- UsdImagingGLEngine and Katana plugin now sets the render tags on the task controller.

(Internal change: 1973453)
Our use of boost::function in tf/pyFunction.h causes placement-new
warnings on newer versions of gcc and older versions of boost.

We can't easily get rid of boost::function yet because of
its pervasive use in the rest of the tree that depends on this
functionality in pxr.

(Internal change: 1973568)
[usdMaya] make UsdMayaTranslatorUtil::CreateShaderNode use shadingNode

(Internal change: 1973640)
…ollection names

The names of the HdRprimCollections managed by Maya/Hydra shape adapters
now need to be sanitized since they are used as part of the SdfPath that
identifies render tasks. This change makes the shape adapters themselves
responsible for that so that the batch renderer does not need to sanitize
every collection name at every draw call.

(Internal change: 1973804)
This makes the data model more consistent between joint anim and blend shapes
Fixing bug in UsdSkelBakeSkinning with skinning transforms being computed
on prims that have no joint influences.
Adding UsdSkelAnimQuery::GetBlendShapeAttributes() method,
matching the interface of UsdSkelAnimQuery::GetJointTransformAttributes().
GetBlendShapeAttributes() is needed for motion sampling in Katana.
Adding UsdSkelBlendShapeQuery::GetBlendShapeIndex, for determining which blendshape
goes with each sub-shape.

(Internal change: 1973864)
Also disabled a "maybe uninitialized" warning in sdf.

(Internal change: 1973935)
…erTask.

This change is primarily to support the Maya scene delegate, but has a nice side effect of simplifying the RenderTask's render tag support
and removes the complex handshacking between setup task and render task.

Previously, the render setup task would be provided the render tags through it's Params structure.  RenderSetupTask would provide the tags
to the Sync algorithm and then communicate them through the task context to the RenderTask for execute.  This was additionaly complicated
by sometimes the RenderTask owned the setup task.

Now, full ownership of render tags is within the RenderTask.  It uses the new RenderTag dirty bit and scene delegate API to obtain them.

As the Maya scene delegate uses one RenderTask per shape, this now means it no longer needs to generate a union of render tags for the setup task.

Due to some dependencies, it was also necessary to convert the Pick task to the new API at the same time.

Changes:
- The pick and render tasks now has seperate ownership of render tags, through a _renderTags attribute.
- When syncing these task, the _renderTags attribute is populated through the new _GetTaskRenderTags() API when HdChangeTracker::DirtyRenderTags is set.
- The task's GetRenderTags() method, now just returns the value of the attribute.
- HdxRenderTask::_GetRenderTagsForExecute() is no longer needed and Execute can just use GetRenderTags() as the values are the same.
- Removed render tags from the HdxRenderTaskParams and HdxPickTaskParams structures.
- Removed _renderTags attribute and getter from HdxRenderSetupTask.
- Updated task controller to not set render tags in params structures.
- Task controller's SetRenderTags() method now sets the render tags parameter for the pick task as well as the render tasks.
- Hdx's renderTags token, which was used for inter-task communication is no longer needed.
- Hdx_UnitTestDelegate and Maya scene delegates now implements the GetTaskRenderTags() scene delegate API.
- UsdImagingGLEngine no longer needs to set render tags in the render params structure.
- UsdImagingGLEngine::TestIntersection() wasn't setting the render tags on the task controller.
- Maya scene delegate's GetPickingTasks() method now takes a collection and uses this to set the render tags for the picking task.
- Maya scene delegate's GetRenderTasks() method now sets the render tags on a per task basis rather than creating a union from all collections.

(Internal change: 1973936)
blevin and others added 17 commits July 15, 2019 10:14
Add support for bools, arrays of bools, and arrays of ints.

(Internal change: 1987406)
…heir input parameters, but the OSL versions of them did. This change fixes these shaders to specify the same default values that are in the OSL versions.

(Internal change: 1987478)
While the Embree buffers are backed by uint8_t* this is not likely going to be the type of data in these buffers for HdSt (e.g. color/depth buffers will be 16F).
I feel void* better communicates the user must carefull cast the return buffer from Map() to the appropriate type.

For some tasks we are alreasy casting from uint8_t to uint32_t, such as ColorizeSelectionTask.

Void* also aligns better opengl's Map() return type, the expect .data input to GlfImage and memcpy.

(Internal change: 1987505)
…e of a

sample. The OIT samples depth value is now in eye space.

Using this in the hdSt volume fragment shader to insert a depth sample with
depth at the first non-empty voxel hit during ray marching instead of the
bounding box.

(Internal change: 1987561)
includRoot and do not need special collection semantics
in UsdLux.

(Internal change: 1987633)
CodeGen was emitting HD_HAS_foo for *all* shader parameter bindings.  This change fixes it so it only emits HD_HAS_foo for cases where it will generate an accessor.

Fixes an issue of instanced-primvar/shader param binding name collision.

Fixes Autodesk#887

(Internal change: 1987665)
Currently, most primvar population lives in the different render delegates, some use the low level buffer system and some use their own. For constant primvars, we still had it in hdRprim even though only Storm is really using it.

This change moves this code to Storm. Having said that, since we don't have a low level hdSt/rprim that can host this, we introduce a helper class to host it. The reason we don't have a low level hdSt/rprim is because we are inheriting hdSt Mesh/Volumes/BasisCurves/Points from Hd Mesh/Volumes/BasisCurves/Points and those inherit from hd/rprim.

(Internal change: 1987674)
…ontrol_api

Adding new APIs to the render delegate for pause, resume, and getting status

(Internal change: 1987739)
This merges in latest dev from pixar usd repo: b29152c
@HamedSabri-adsk HamedSabri-adsk added the do-not-merge-yet Development is not finished, PR not ready for merge label Aug 15, 2019
Copy link
Contributor

@HamedSabri-adsk HamedSabri-adsk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

License header has an extra // at the end of below sentence that needs to be removed.

you may not use this file except in compliance with the License.//

- don't replace lines in replace_lic.py itself
- allow replacing both al + pxr lics at once
- syntax bugfix - missing comma
- also replace python docstrings with trailing //
@pmolodo
Copy link
Contributor Author

pmolodo commented Aug 20, 2019

So, I updated / fixed the "replace_lic.py" utiltity to deal with with converting these licenses from AL. To run it, just cd to the root of the repo, then run:

python replace_lic.py

(with a python-2 interpreter).

I didn't run / commit the results yet, because I wasn't sure if you also wanted to fix the pixar-style modified-apache licenses.

@HamedSabri-adsk
Copy link
Contributor

I haven't seen the additional // with the pixar copyright headers. It is AL only.

I also wrote a similar script like yours internally when I initially had to update these headers. Anyways, if your script handles this case then good.

@pmolodo
Copy link
Contributor Author

pmolodo commented Aug 20, 2019

The issue with the pixar licenses isn't a trailing "//", it's that they have an extra clause which you removed in most of your files.

@HamedSabri-adsk
Copy link
Contributor

Then that has to be fixed too.

@pmolodo
Copy link
Contributor Author

pmolodo commented Aug 20, 2019

Ok, updated!

@HamedSabri-adsk HamedSabri-adsk removed the do-not-merge-yet Development is not finished, PR not ready for merge label Aug 20, 2019
Copy link
Contributor

@HamedSabri-adsk HamedSabri-adsk left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, thank you.

@HamedSabri-adsk HamedSabri-adsk merged commit 9ee837e into Autodesk:dev Aug 20, 2019
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.