From 52c25598710a4e722189a6213ec2553a184fe00c Mon Sep 17 00:00:00 2001 From: Sean Lilley Date: Tue, 1 Oct 2024 21:36:47 -0400 Subject: [PATCH] Fix RasterOverlays sample by unrolling loop --- exts/cesium.omniverse/mdl/cesium.mdl | 150 ++++++++---------- .../include/cesium/omniverse/FabricMaterial.h | 5 +- src/core/include/cesium/omniverse/UsdTokens.h | 2 - src/core/src/FabricMaterial.cpp | 22 +-- 4 files changed, 72 insertions(+), 107 deletions(-) diff --git a/exts/cesium.omniverse/mdl/cesium.mdl b/exts/cesium.omniverse/mdl/cesium.mdl index ed705b91..0562d040 100644 --- a/exts/cesium.omniverse/mdl/cesium.mdl +++ b/exts/cesium.omniverse/mdl/cesium.mdl @@ -1568,103 +1568,81 @@ export material cesium_internal_material( ); export gltf_texture_lookup_value cesium_internal_raster_overlay_resolver( - uniform int raster_overlay_count = 0, - gltf_texture_lookup_value raster_overlay_0 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_1 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_2 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_3 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_4 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_5 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_6 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_7 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_8 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_9 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_10 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_11 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_12 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_13 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_14 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_15 = gltf_texture_lookup_value() + gltf_texture_lookup_value raster_overlay_0 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_1 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_2 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_3 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_4 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_5 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_6 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_7 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_8 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_9 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_10 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_11 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_12 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_13 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_14 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_15 = gltf_texture_lookup_value(false, float4(0.0)) ) [[ anno::hidden() ]] { - // The array length should match MAX_RASTER_OVERLAY_COUNT in FabricMaterial.cpp - gltf_texture_lookup_value[] raster_overlays( - raster_overlay_0, - raster_overlay_1, - raster_overlay_2, - raster_overlay_3, - raster_overlay_4, - raster_overlay_5, - raster_overlay_6, - raster_overlay_7, - raster_overlay_8, - raster_overlay_9, - raster_overlay_10, - raster_overlay_11, - raster_overlay_12, - raster_overlay_13, - raster_overlay_14, - raster_overlay_15, - ); - auto resolved_value = float4(0.0); - for (int i = 0; i < raster_overlay_count; i++) { - auto raster_overlay = raster_overlays[i]; - if (raster_overlay.valid) { - resolved_value = alpha_blend(raster_overlay.value, resolved_value); - } - } + resolved_value = alpha_blend(raster_overlay_0.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_1.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_2.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_3.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_4.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_5.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_6.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_7.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_8.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_9.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_10.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_11.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_12.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_13.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_14.value, resolved_value); + resolved_value = alpha_blend(raster_overlay_15.value, resolved_value); return gltf_texture_lookup_value(true, resolved_value); } export gltf_texture_lookup_value cesium_internal_clipping_raster_overlay_resolver( - uniform int raster_overlay_count = 0, - gltf_texture_lookup_value raster_overlay_0 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_1 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_2 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_3 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_4 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_5 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_6 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_7 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_8 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_9 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_10 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_11 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_12 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_13 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_14 = gltf_texture_lookup_value(), - gltf_texture_lookup_value raster_overlay_15 = gltf_texture_lookup_value() + gltf_texture_lookup_value raster_overlay_0 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_1 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_2 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_3 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_4 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_5 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_6 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_7 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_8 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_9 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_10 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_11 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_12 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_13 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_14 = gltf_texture_lookup_value(false, float4(0.0)), + gltf_texture_lookup_value raster_overlay_15 = gltf_texture_lookup_value(false, float4(0.0)) ) [[ anno::hidden() ]] { - // The array length should match MAX_RASTER_OVERLAY_COUNT in FabricMaterial.cpp - gltf_texture_lookup_value[] raster_overlays( - raster_overlay_0, - raster_overlay_1, - raster_overlay_2, - raster_overlay_3, - raster_overlay_4, - raster_overlay_5, - raster_overlay_6, - raster_overlay_7, - raster_overlay_8, - raster_overlay_9, - raster_overlay_10, - raster_overlay_11, - raster_overlay_12, - raster_overlay_13, - raster_overlay_14, - raster_overlay_15, - ); - auto resolved_value = float4(0.0); - for (int i = 0; i < raster_overlay_count; i++) { - auto raster_overlay = raster_overlays[i]; - if (raster_overlay.valid) { - resolved_value += raster_overlay.value; - } - } + resolved_value += raster_overlay_0.value; + resolved_value += raster_overlay_1.value; + resolved_value += raster_overlay_2.value; + resolved_value += raster_overlay_3.value; + resolved_value += raster_overlay_4.value; + resolved_value += raster_overlay_5.value; + resolved_value += raster_overlay_6.value; + resolved_value += raster_overlay_7.value; + resolved_value += raster_overlay_8.value; + resolved_value += raster_overlay_9.value; + resolved_value += raster_overlay_10.value; + resolved_value += raster_overlay_11.value; + resolved_value += raster_overlay_12.value; + resolved_value += raster_overlay_13.value; + resolved_value += raster_overlay_14.value; + resolved_value += raster_overlay_15.value; return gltf_texture_lookup_value(true, resolved_value); } diff --git a/src/core/include/cesium/omniverse/FabricMaterial.h b/src/core/include/cesium/omniverse/FabricMaterial.h index 8cb61303..c715e28d 100644 --- a/src/core/include/cesium/omniverse/FabricMaterial.h +++ b/src/core/include/cesium/omniverse/FabricMaterial.h @@ -89,10 +89,9 @@ class FabricMaterial { void createRasterOverlay(const omni::fabric::Path& path); void createRasterOverlayResolverCommon( const omni::fabric::Path& path, - uint64_t textureCount, const omni::fabric::Token& subidentifier); - void createRasterOverlayResolver(const omni::fabric::Path& path, uint64_t textureCount); - void createClippingRasterOverlayResolver(const omni::fabric::Path& path, uint64_t textureCount); + void createRasterOverlayResolver(const omni::fabric::Path& path); + void createClippingRasterOverlayResolver(const omni::fabric::Path& path); void createFeatureIdIndex(const omni::fabric::Path& path); void createFeatureIdAttribute(const omni::fabric::Path& path); void createFeatureIdTexture(const omni::fabric::Path& path); diff --git a/src/core/include/cesium/omniverse/UsdTokens.h b/src/core/include/cesium/omniverse/UsdTokens.h index 4149aa52..e09295f7 100644 --- a/src/core/include/cesium/omniverse/UsdTokens.h +++ b/src/core/include/cesium/omniverse/UsdTokens.h @@ -109,7 +109,6 @@ __pragma(warning(push)) __pragma(warning(disable : 4003)) ((inputs_feature_id_set_index, "inputs:feature_id_set_index")) \ ((inputs_has_no_data, "inputs:has_no_data")) \ ((inputs_raster_overlay, "inputs:raster_overlay")) \ - ((inputs_raster_overlay_count, "inputs:raster_overlay_count")) \ ((inputs_raster_overlay_index, "inputs:raster_overlay_index")) \ ((inputs_maximum_value, "inputs:maximum_value")) \ ((inputs_metallic_factor, "inputs:metallic_factor")) \ @@ -226,7 +225,6 @@ const omni::fabric::Type inputs_default_value_int4(omni::fabric::BaseDataType::e const omni::fabric::Type inputs_emissive_factor(omni::fabric::BaseDataType::eFloat, 3, 0, omni::fabric::AttributeRole::eColor); const omni::fabric::Type inputs_excludeFromWhiteMode(omni::fabric::BaseDataType::eBool, 1, 0, omni::fabric::AttributeRole::eNone); const omni::fabric::Type inputs_has_no_data(omni::fabric::BaseDataType::eBool, 1, 0, omni::fabric::AttributeRole::eNone); -const omni::fabric::Type inputs_raster_overlay_count(omni::fabric::BaseDataType::eInt, 1, 0, omni::fabric::AttributeRole::eNone); const omni::fabric::Type inputs_maximum_value_int(omni::fabric::BaseDataType::eInt, 1, 0, omni::fabric::AttributeRole::eNone); const omni::fabric::Type inputs_maximum_value_int2(omni::fabric::BaseDataType::eInt, 2, 0, omni::fabric::AttributeRole::eNone); const omni::fabric::Type inputs_maximum_value_int3(omni::fabric::BaseDataType::eInt, 3, 0, omni::fabric::AttributeRole::eNone); diff --git a/src/core/src/FabricMaterial.cpp b/src/core/src/FabricMaterial.cpp index 7f6991a6..3efd8700 100644 --- a/src/core/src/FabricMaterial.cpp +++ b/src/core/src/FabricMaterial.cpp @@ -669,7 +669,7 @@ void FabricMaterial::initializeDefaultMaterial() { if (overlayRasterOverlayCount > 1) { const auto rasterOverlayResolverPath = FabricUtil::joinPaths(materialPath, FabricTokens::raster_overlay_resolver); - createRasterOverlayResolver(rasterOverlayResolverPath, overlayRasterOverlayCount); + createRasterOverlayResolver(rasterOverlayResolverPath); _overlayRasterOverlayResolverPath = rasterOverlayResolverPath; _allPaths.push_back(rasterOverlayResolverPath); } @@ -678,7 +678,7 @@ void FabricMaterial::initializeDefaultMaterial() { if (clippingRasterOverlayCount > 1) { const auto clippingRasterOverlayResolverPath = FabricUtil::joinPaths(materialPath, FabricTokens::clipping_raster_overlay_resolver); - createClippingRasterOverlayResolver(clippingRasterOverlayResolverPath, clippingRasterOverlayCount); + createClippingRasterOverlayResolver(clippingRasterOverlayResolverPath); _clippingRasterOverlayResolverPath = clippingRasterOverlayResolverPath; _allPaths.push_back(_clippingRasterOverlayResolverPath); } @@ -835,7 +835,6 @@ void FabricMaterial::createRasterOverlay(const omni::fabric::Path& path) { void FabricMaterial::createRasterOverlayResolverCommon( const omni::fabric::Path& path, - uint64_t rasterOverlayCount, const omni::fabric::Token& subidentifier) { auto& fabricStage = _pContext->getFabricStage(); @@ -843,24 +842,15 @@ void FabricMaterial::createRasterOverlayResolverCommon( FabricAttributesBuilder attributes(_pContext); - attributes.addAttribute(FabricTypes::inputs_raster_overlay_count, FabricTokens::inputs_raster_overlay_count); - createAttributes(*_pContext, fabricStage, path, attributes, subidentifier); - - const auto rasterOverlayCountFabric = - fabricStage.getAttributeWr(path, FabricTokens::inputs_raster_overlay_count); - *rasterOverlayCountFabric = static_cast(rasterOverlayCount); } -void FabricMaterial::createRasterOverlayResolver(const omni::fabric::Path& path, uint64_t rasterOverlayCount) { - createRasterOverlayResolverCommon(path, rasterOverlayCount, FabricTokens::cesium_internal_raster_overlay_resolver); +void FabricMaterial::createRasterOverlayResolver(const omni::fabric::Path& path) { + createRasterOverlayResolverCommon(path, FabricTokens::cesium_internal_raster_overlay_resolver); } -void FabricMaterial::createClippingRasterOverlayResolver( - const omni::fabric::Path& path, - uint64_t clippingRasterOverlayCount) { - createRasterOverlayResolverCommon( - path, clippingRasterOverlayCount, FabricTokens::cesium_internal_clipping_raster_overlay_resolver); +void FabricMaterial::createClippingRasterOverlayResolver(const omni::fabric::Path& path) { + createRasterOverlayResolverCommon(path, FabricTokens::cesium_internal_clipping_raster_overlay_resolver); } void FabricMaterial::createFeatureIdIndex(const omni::fabric::Path& path) {