Skip to content

Commit

Permalink
Fix RasterOverlays sample by unrolling loop
Browse files Browse the repository at this point in the history
  • Loading branch information
lilleyse committed Oct 2, 2024
1 parent 0508a29 commit 52c2559
Show file tree
Hide file tree
Showing 4 changed files with 72 additions and 107 deletions.
150 changes: 64 additions & 86 deletions exts/cesium.omniverse/mdl/cesium.mdl
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
5 changes: 2 additions & 3 deletions src/core/include/cesium/omniverse/FabricMaterial.h
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
2 changes: 0 additions & 2 deletions src/core/include/cesium/omniverse/UsdTokens.h
Original file line number Diff line number Diff line change
Expand Up @@ -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")) \
Expand Down Expand Up @@ -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);
Expand Down
22 changes: 6 additions & 16 deletions src/core/src/FabricMaterial.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
Expand All @@ -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);
}
Expand Down Expand Up @@ -835,32 +835,22 @@ 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();

fabricStage.createPrim(path);

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<int>(path, FabricTokens::inputs_raster_overlay_count);
*rasterOverlayCountFabric = static_cast<int>(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) {
Expand Down

0 comments on commit 52c2559

Please sign in to comment.