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

[hdEmbree] fix for random number generation #2

Merged
merged 51 commits into from
Sep 23, 2024

Conversation

pmolodo
Copy link

@pmolodo pmolodo commented Jul 31, 2024

Description of Change(s)

use of std::bind was copying the underlying random number generator before use, resulting in the exact same sequence getting reused for, ie, every AO calculation within a given tile-group

Fixes Issue(s)

  • non-randomized behavior in hdEmbree - not very noticeable with just AO calculations, but caused significant problems for upcoming hdEmbree + UsdLux changes

NOTE: This chain of PRs was made separate from the PR documenting expected behavior:


  • I have verified that all unit tests pass with the proposed changes
  • I have submitted a signed Contributor License Agreement

beersandrew and others added 30 commits June 17, 2024 14:07
- adding entry into plugInfo.json
- adding tokens
- adding function itself

Note: this does not work for upAxis or metersPerUnit because I'm not sure how to include the reference to UsdGeom
- trimmed down the functionality to only check for a defaultPrim, since the other fields will go in usdGeom
- added a test file, included in CMakeLists.txt
- corrected doc to only include defaultPrim check
- adding all necessary validation pieces including plugInfo.json, valdator tokens, tests, and validator code itself
- added a validation check for when a skel binding property is present but the skel binding api is not applied
- added a validation check for when a skel binding api is applied to a prim that is not parented by a skel root
- added a unit test
- fixed description string in plugInfo.json to be clear about requiring a defaultPrim
- updated validation error message to include the rootLayer identifier
- added the defaultPrim at the end of the unit test to verify the error is cleared when a defaultPrim is set
- add metadata test to validator check
- separate validator check into a new test
- allow validators to be contained in the set rather than requiring matching by name
- update comments to be in sentence form
- remove local path, update to an in memory stage
- remove \ from multi-line strings and wrap them in parenthesis instead
- reduce nesting in validation code
- check parentPrim for null before checking it's type
- reenabled testUsdSkelRoot, accidentally removed in a previous commit
- removed sdr dependency from skel test
- removed unused headers
- added TestUsdSkelValidators test to verify validator existence
- removed SkelBindingApiChecker name from error messages
- refactored how skelPropertyNames are collected, stored, and checked against
- no need to catch multiple errors here
- updated plugInfo description
- updated name to MaterialBindingApiAppliedValidator
- updated how material binding relationships are found to be how the python compliance checker was checking it
-
- switched from using TfToken("SkelBindingAPI") to UsdSkelTokens->SkelBindingAPI
- use const vectors where possible
- refactoring / reordering of code for clarity
- converted hasMaterialBindingRelationship function into a lambda
- changed materialBindingString to be static
…idateFamily()

This ensures that we correctly detect the case where a subset family
consists of subsets that have differing element types, which should
result in a validation failure.
…ement types

Referring to them as "GeomSubset" rather than just "Subset" is more
consistent with the other failure reasons, and both element type values
are now enclosed in single quotes.
…sons

This allows clients more flexibility when using the reason strings.
…ator

We also include a "UsdGeomSubset" keyword token, as there will be a
collection of validators that check various aspects of geom subsets.
This validator performs validation on all geom subset families authored
beneath an Imageable prim.
This validator checks whether a geom subset prim is a direct descendant
of an Imageable prim.
…alidator

This validator checks whether a geom subset has authored material bindings
but no authored subset family name, in which case an error is emitted
indicating that the family name should be set to "materialBind" to ensure
that the material bindings are visible to renderers. The material bindings
will have no effect otherwise.
…dator

This validator checks that if an Imageable prim has GeomSubsets of the
"materialBind" family, the family must be of a restricted type (either
"nonOverlapping" or "partition"), since it is invalid for an element of
geometry to be bound to multiple materials. Those subsets are also checked
to ensure that they are of element type "face", since material bindings may
only be applied to geometric faces.
mattyjams and others added 4 commits July 25, 2024 11:27
…alidator

This validator checks that all properties named "material:binding" or in the
"material:binding" namespace are relationships, as the expectation is that
they target Material prims.
adamrwoodbury and others added 17 commits August 6, 2024 15:47
…sion.

The overloads of this methods that take and return a GfVec3f can cause
inadvertent loss of precision.

This change includes updates to call sites where the result of a call to one of
these overloads now needs to be converted to GfVec3f. The advantage of requiring
these conversions is that the loss of precision is explicit.

(Internal change: 2335357)
This code intended to provide a "non-locking" fork for use in the
signal handlers used to implement crash dumps.  __libc_fork is a
private glibc symbol that, in the very distant past, was a direct fork
syscall.  __libc_fork now refers to the full fork implementation,
including at-fork handlers.  If a multithreaded application aborts
from inside glibc's malloc implementation, fork's attempt to acquire
the malloc lock causes a deadlock.  Starting in glibc 2.34, _Fork
provides an async-signal-safe implementation that does not run
handlers or acquire any malloc locks.

(Internal change: 2335367)
API, found by dsyu.  Move a function out-of-line, and fix up the depth
calculations for popping incremental search state properly.  Add a
regression test case.

(Internal change: 2335372)
(Internal change: 2335376)
(Internal change: 2335391)
…alidators_for_GeomSubsets

usdGeom, usdShade: add validators related to UsdGeomSubsets

(Internal change: 2335400)
…ple can follow along without having to install USD first.

(Internal change: 2335409)
   fix Python binding for USD EditTarget's GetSpecForScenePath

(Internal change: 2335500)
…ddStageMetadataValidation

feat: Add StageMetadataChecker Validator for core USD

(Internal change: 2335527)
…ndingAPIChecker

feat: add validator SkelBindingAPIAppliedChecker

(Internal change: 2335543)
…alBindingAPIAppliedChecker

feat: add MaterialBindingAPIChecker

(Internal change: 2335561)
…TargetPaths/ConnectionPaths

The whole process of SdfCopySpec can be summarized as the following steps:

* Getting all fields to be copied, including value fields and children fields.
* Copying value fields firstly.
* Then copying children fields.

It's possible that the children fields fetched in step 1 is cleared in step 2, so step 3 is failed with copying a non-existent children field. This fix is to delay the fetch of children fields after step 2 so step 3 will be done on the correct children fields.

Fixes PixarAnimationStudios#3095
(github pull request PixarAnimationStudios#3117)

- PR updated internally to enhance SdfCopySpec() to handle overlapping source/destination by copying the source to a temporary anonymous layer first, then copying that temporary to the destination.

(Internal change: 2335761)
material is edited, any prims with that material bound should have their
primvars invalidated. This fixes a bug in which the material is edited in some
way (for example, changing the name of which primvar to use in a primvar reader
shader node), and the expected result does not show up correctly in usdview.

Fixes PixarAnimationStudios#2382

(Internal change: 2335965)
   - Decoupled the logic from skelBindingAPIAppliedValidator
   - This validator applies to any prim which has the UsdSkelBindingAPI applied, unlike the skelBindingAPIAppliedValidator which applies to any prim.
   - This is done so as to make sure that the validator logic can be independenly run on only the prims which have the UsdSkelBindingAPI applied.

(Internal change: 2335967)
…hemas.

The schema is designed to live on a 'material' prim type as a data source of the following structure:
materialOverride.interfaceValues.<publicUIName>.value -> value

Note that 'materialOverride' is a container data source with one member 'interfaceValues'.
Each interfaceValue specifies the overriding data source, which follows the MaterialNodeParameter schema.

(Internal change: 2336028)
use of std::bind was copying the underlying random number generator before
use, resulting in the exact same sequence getting reused for, ie, every
AO calculation within a given tile-group
@pmolodo pmolodo merged commit c219fcf into pr/hdEmbree-random-seed Sep 23, 2024
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.