Skip to content

Commit

Permalink
Allow validators (prim and stage level) to provide timeCodes to be ev…
Browse files Browse the repository at this point in the history
…aluated for validation

- Adds a isTimeDependent metadata to UsdValidationValidatorMetadata
- Note that Prim and Stage Level Validators can have logic which is time
  dependent. Though its recommended that prim level validators evaluate
  properties within a prim etc. But as Stage has access to all the prims,
  Stage level validators are also provided with TimeCode, if the validation
  logic requires it.
- Introduced UsdValidationTimeRange
  - Class which holds the GfInterval which needs to be validated, + if default time needs to be included.
- Updated various APIs to use UsdValidationTimeRange
- Update UsdValidationContext::Validate(prim) and
  UsdValidationContext::Validate(stage) overloads take in a
  UsdValidationTimeRange parameter
- Update ValidationContext::_ValidateStage and _ValidatePrim logic to use UsdValidationTimeRange
- Added tests showing the same

(Internal change: 2352274)
  • Loading branch information
tallytalwar authored and pixar-oss committed Dec 20, 2024
1 parent a8e2302 commit 5eee5ee
Show file tree
Hide file tree
Showing 25 changed files with 997 additions and 126 deletions.
10 changes: 7 additions & 3 deletions pxr/usdValidation/usdGeomValidators/validators.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
#include "pxr/usdValidation/usdGeomValidators/validatorTokens.h"
#include "pxr/usdValidation/usdValidation/error.h"
#include "pxr/usdValidation/usdValidation/registry.h"
#include "pxr/usdValidation/usdValidation/timeRange.h"
#include "pxr/usdValidation/usdValidation/validator.h"

#include <algorithm>
Expand All @@ -25,7 +26,8 @@
PXR_NAMESPACE_OPEN_SCOPE

static UsdValidationErrorVector
_GetStageMetadataErrors(const UsdStagePtr &usdStage)
_GetStageMetadataErrors(const UsdStagePtr &usdStage,
const UsdValidationTimeRange &/*timeRange*/)
{
UsdValidationErrorVector errors;
if (!usdStage->HasAuthoredMetadata(UsdGeomTokens->metersPerUnit)) {
Expand Down Expand Up @@ -53,7 +55,8 @@ _GetStageMetadataErrors(const UsdStagePtr &usdStage)
}

static UsdValidationErrorVector
_SubsetFamilies(const UsdPrim &usdPrim)
_SubsetFamilies(const UsdPrim &usdPrim,
const UsdValidationTimeRange &/*timeRange*/)
{
if (!(usdPrim
&& usdPrim.IsInFamily<UsdGeomImageable>(
Expand Down Expand Up @@ -111,7 +114,8 @@ _SubsetFamilies(const UsdPrim &usdPrim)
}

static UsdValidationErrorVector
_SubsetParentIsImageable(const UsdPrim &usdPrim)
_SubsetParentIsImageable(const UsdPrim &usdPrim,
const UsdValidationTimeRange &/*timeRange*/)
{
if (!(usdPrim
&& usdPrim.IsInFamily<UsdGeomSubset>(
Expand Down
32 changes: 23 additions & 9 deletions pxr/usdValidation/usdShadeValidators/validators.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@
#include "pxr/usdValidation/usdShadeValidators/validatorTokens.h"
#include "pxr/usdValidation/usdValidation/error.h"
#include "pxr/usdValidation/usdValidation/registry.h"
#include "pxr/usdValidation/usdValidation/timeRange.h"

#include <algorithm>
#include <unordered_map>
Expand All @@ -32,7 +33,8 @@
PXR_NAMESPACE_OPEN_SCOPE

static UsdValidationErrorVector
_EncapsulationValidator(const UsdPrim &usdPrim)
_EncapsulationValidator(const UsdPrim &usdPrim,
const UsdValidationTimeRange &/*timeRange*/)
{
const UsdShadeConnectableAPI &connectable = UsdShadeConnectableAPI(usdPrim);

Expand Down Expand Up @@ -103,7 +105,9 @@ _EncapsulationValidator(const UsdPrim &usdPrim)
}

static UsdValidationErrorVector
_MaterialBindingApiAppliedValidator(const UsdPrim &usdPrim)
_MaterialBindingApiAppliedValidator(
const UsdPrim &usdPrim,
const UsdValidationTimeRange &/*timeRange*/)
{
UsdValidationErrorVector errors;

Expand Down Expand Up @@ -136,7 +140,9 @@ _MaterialBindingApiAppliedValidator(const UsdPrim &usdPrim)
}

static UsdValidationErrorVector
_MaterialBindingRelationships(const UsdPrim &usdPrim)
_MaterialBindingRelationships(
const UsdPrim &usdPrim,
const UsdValidationTimeRange &/*timeRange*/)
{
if (!usdPrim) {
return {};
Expand Down Expand Up @@ -243,7 +249,9 @@ _MaterialBindingCheckCollection(const UsdPrim &prim, const UsdRelationship &rel,
}

static UsdValidationErrorVector
_MaterialBindingCollectionValidator(const UsdPrim &usdPrim)
_MaterialBindingCollectionValidator(
const UsdPrim &usdPrim,
const UsdValidationTimeRange &/*timeRange*/)
{
if (!usdPrim || !usdPrim.HasAPI<UsdShadeMaterialBindingAPI>()) {
return {};
Expand All @@ -267,7 +275,9 @@ _MaterialBindingCollectionValidator(const UsdPrim &usdPrim)
}

static UsdValidationErrorVector
_ShaderPropertyTypeConformance(const UsdPrim &usdPrim)
_ShaderPropertyTypeConformance(
const UsdPrim &usdPrim,
const UsdValidationTimeRange &/*timeRange*/)
{
if (!(usdPrim
&& usdPrim.IsInFamily<UsdShadeShader>(
Expand Down Expand Up @@ -442,7 +452,9 @@ _ShaderPropertyTypeConformance(const UsdPrim &usdPrim)
}

static UsdValidationErrorVector
_SubsetMaterialBindFamilyName(const UsdPrim &usdPrim)
_SubsetMaterialBindFamilyName(
const UsdPrim &usdPrim,
const UsdValidationTimeRange &/*timeRange*/)
{
if (!(usdPrim
&& usdPrim.IsInFamily<UsdGeomSubset>(
Expand Down Expand Up @@ -489,7 +501,8 @@ _SubsetMaterialBindFamilyName(const UsdPrim &usdPrim)
}

static UsdValidationErrorVector
_SubsetsMaterialBindFamily(const UsdPrim &usdPrim)
_SubsetsMaterialBindFamily(const UsdPrim &usdPrim,
const UsdValidationTimeRange &/*timeRange*/)
{
if (!(usdPrim
&& usdPrim.IsInFamily<UsdGeomImageable>(
Expand Down Expand Up @@ -542,8 +555,9 @@ _SubsetsMaterialBindFamily(const UsdPrim &usdPrim)

static
UsdValidationErrorVector
_NormalMapTextureValidator(const UsdPrim& usdPrim) {

_NormalMapTextureValidator(const UsdPrim& usdPrim,
const UsdValidationTimeRange& /*timeRange*/)
{
if (!usdPrim.IsA<UsdShadeShader>()) {
return {};
}
Expand Down
8 changes: 6 additions & 2 deletions pxr/usdValidation/usdSkelValidators/validators.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#include "pxr/usdValidation/usdSkelValidators/validatorTokens.h"
#include "pxr/usdValidation/usdValidation/error.h"
#include "pxr/usdValidation/usdValidation/registry.h"
#include "pxr/usdValidation/usdValidation/timeRange.h"
#include "pxr/usdValidation/usdValidation/validator.h"

#include <algorithm>
Expand All @@ -20,7 +21,9 @@
PXR_NAMESPACE_OPEN_SCOPE

static UsdValidationErrorVector
_SkelBindingApiAppliedValidator(const UsdPrim &usdPrim)
_SkelBindingApiAppliedValidator(
const UsdPrim &usdPrim,
const UsdValidationTimeRange &/*timeRange*/)
{
UsdValidationErrorVector errors;

Expand Down Expand Up @@ -63,7 +66,8 @@ _SkelBindingApiAppliedValidator(const UsdPrim &usdPrim)
}

static UsdValidationErrorVector
_SkelBindingApiValidator(const UsdPrim &usdPrim)
_SkelBindingApiValidator(const UsdPrim &usdPrim,
const UsdValidationTimeRange &/*timeRange*/)
{
UsdValidationErrorVector errors;

Expand Down
9 changes: 7 additions & 2 deletions pxr/usdValidation/usdUtilsValidators/validators.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,16 @@
#include "pxr/usdValidation/usdUtilsValidators/validatorTokens.h"
#include "pxr/usdValidation/usdValidation/error.h"
#include "pxr/usdValidation/usdValidation/registry.h"
#include "pxr/usdValidation/usdValidation/timeRange.h"

#include "pxr/usd/sdf/fileFormat.h"

PXR_NAMESPACE_OPEN_SCOPE

static UsdValidationErrorVector
_PackageEncapsulationValidator(const UsdStagePtr &usdStage)
_PackageEncapsulationValidator(
const UsdStagePtr &usdStage,
const UsdValidationTimeRange &/*timeRange*/)
{
UsdValidationErrorVector errors;

Expand Down Expand Up @@ -100,7 +103,9 @@ _PackageEncapsulationValidator(const UsdStagePtr &usdStage)
}

static UsdValidationErrorVector
_FileExtensionValidator(const UsdStagePtr& usdStage) {
_FileExtensionValidator(const UsdStagePtr& usdStage,
const UsdValidationTimeRange& /*timeRange*/)
{
UsdValidationErrorVector errors;

const std::set<TfToken> validExtensions = {TfToken("usda"),
Expand Down
3 changes: 3 additions & 0 deletions pxr/usdValidation/usdValidation/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ pxr_library(usdValidation
sdf
plug
tf
gf
usd
work
${TBB_tbb_LIBRARY}
Expand All @@ -17,6 +18,7 @@ pxr_library(usdValidation
context
error
registry
timeRange
validator
validatorTokens

Expand All @@ -31,6 +33,7 @@ pxr_library(usdValidation
wrapContext.cpp
wrapError.cpp
wrapRegistry.cpp
wrapTimeRange.cpp
wrapValidator.cpp

PYMODULE_FILES
Expand Down
Loading

0 comments on commit 5eee5ee

Please sign in to comment.