You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The following is a sandcastle that loads an embedded glTF that defines a property texture with a 3-element fixed-length normalized UINT8 array property that defines an offset/scale in its class property:
An error occurred while rendering. Rendering has stopped.
DeveloperError: Invalid vec3 value for uniform "u_example_fixed_length_normalized_UINT8_SCALAR_array_offset".
Error
at new DeveloperError (https://sandcastle.cesium.com/CesiumUnminified/Cesium.js:10062:13)
at UniformFloatVec3.set (https://sandcastle.cesium.com/CesiumUnminified/Cesium.js:37305:13)
at ShaderProgram._setUniforms (https://sandcastle.cesium.com/CesiumUnminified/Cesium.js:38269:19)
...
According to the specification, this should be possible.
Some starting points for examining the reason and possible solutions:
When offset/scale are defined, then u_<name>_offset and u_<name>_scale unforms are inserted in the shader code at
// fixed-sized arrays of length 2-4 UINT8s are represented as vectors as the
The offset/scale properties that serve as the values for the unform there are arrays. (They would have to be Cartesian3 for that assignment to work)
While addressing the PR linked above, I've been thrown off a little bit by some "surprising" aspects of the implementation. It is not always apparent what the type of offset/scale should be. One specific aspect that surprised me is that ...
MetadataClassProperty.offset uses array types (e.g. a 3-element array for a 3D vector)
PropertyTextureProperty.offset uses object types (e.g. a Cartesian3 for a 3D vector)
Depending on where and how these values are supposed to be used, both can make sense. (Using different types of types in both places maybe not so much...). But in any case, if the "other" type of type is required for a certain task, then this implies some clumsy back-and-forth conversions, and the special handling of "3-element arrays as vec3 in shaders" require additional attention here.
(This came up while creating specs for #12237 )
The following is a sandcastle that loads an embedded glTF that defines a property texture with a 3-element fixed-length normalized UINT8 array property that defines an
offset/scale
in its class property:https://sandcastle.cesium.com/index.html#c=tVhbc9o4FP4rGp7IJDVgSEpI0lkHSEtKIFybCx1GtoVRKsuOLIfQnfz3lWwcbGxn027XD2Cf66dzjqQjGQ71OHjCaIUYOAMUrUATedi3lWlAK84KRvDddCiHmCI2KxyAv2cUAIs4OmqABSQeOpjRl72TGZ3RhU8Njh0KDIYgR21bR6aJzM+EL4p7oaIR+GTI8wkXPgMaAOiZI+oJTa8RkQBo34znHme+wX0GydxGHJqQw5gEAJ6xRHaSBAA2G2BWaD9D2yVoFEgI4HEJg0DPQ96OnsQR6DQlO8UEgEIbxUyHZnZMy8dljosYxyjLyKuX+QI/I3NOELX4ck4dZkOCfwrKpNMb1+ejptbVhnPIGFxnmknjCQx+CA2CUB8E+hGiNVhhwdr6AtKVSIrtOhRRnjUY+fC1GzgKbeYIvVoZb6SDceQIb4Yl0otyjPmUN0A1k7nF/4YFZ7HwkDBxXymXD4Aqf6rl8vdMWc+AREC+V4XMAahlCb2kaLuU5Hf8K/4eZWIsat5nskLu42o7eTbCSpwV4pWZCumb9faHqg1TEz03QDkjNBw9Nx2HmdlcYwkpRUQOVKSgIlLx/T+EcqsbUaP/7Roy8WRh3It5kb2CzAqRFWiIBc5zWDwLsbHr/mKBmFwMk0PT1xz1N+UVp+/MgMOKWk1wg5I+ipHemFc2FNG+r8ZjZWMqg5gOQS7oym+BPkqDrmWAnrab1QzIlSDJ5Qzggppg/Db8Wv1/xB/CrOThr/wB/MdHfwi/mhP/bPBp5K/zwAtwvQ7DQmKzh9xh0s+lRcYXYMEcGyw5d71GqWSJXcTXFQG99ACfoEVKgVAMzRNici5KfVUpvzIix2GUcqadz7DUCzZ76LoEG1B2FSVL9BEfQs0THXroqHagadq5pnU0baC1gv/U09SuV2mq1aon+Nvv2NPRSr/7/S77GfgS+ZQl0w3Wa1FKh0e52duW3Jvr2PvWsIRTNV52kFlSuFo7Pqq+Zw7k+0vYTTis1XY4I86wid6AouaGBdvQQu8osUCu5FIrKio8Pe8PV+Wvny1H5qQ3mizbEyssNfEMmtqt/F/US8dL+YLLpD2YDmuqrw4ngyPtSlu2zGq/X3oc8Pr0ut4bfnnouYsyQZ1D5j/e6L1pt2Yct+h+u04epvu4C2+go91WbltQa8E1PbdU6+KuO6zsrzTzsv3tzv1W0TrTR/uhKfTX+qr2SNuXuj44/2J+c0bqTWdyY7r7F/VWb9J3r8q8c9f0vcEl+/mlN6Zef626F+O7j8/u1+XtxcSvXVWe9vtPzBx81s4f2+5I/THqyvFp55fDyWGb/bi0LOvsLLm4YBtFjd1rxGISu9G3xQGAYUhyEuDq7Epsx0RM7qHjW0uKUh23zEbTIQ67gEawFG22lt0FTvjaWIoEk20Ii+xH7EpOawaJu4RXjhmMsX+tDSbtRAhMx9fFgULU427fmRo88pZ5pecybGOOn/6t9cs8E0XPe85Gb3Sc5V9twURwuJiJus8ze8zr/qgz7vR7ydiGT68/vNK6DaCmOOP2TbPfH7bm5XSjv+tetJ/YkL53W8yozjI4QSZrv9BKRhQqNHOyJzMbd7Wr6gXNdt7OJubNBSZcro3HH9V6cpfO5KTsG2Jr3gIIPnOcRaN4Y9/n6UNI/HAdjiUZWc/xmYGyQvB+3UoOoJcT+cuQwEQ3dwSC8iKvFsJ7A5lSAs4AXEHMo8sKOWOJIvsTedGgeWtqFAMkcgG5hnJfmRWi9/msAPbBlXhTGKSmYxf3DsILDb5oZN5bRNcb4T2JEkRc2U5iBZpmMcAV3oGEQA1xMmdQIE1ohVQhFr4oruPh4L4kcfnShEzMMgxptbhpOct7Wx0TM2RslFIKCkWWGEBRjijNnPQ64/ldMNxsd3szGvPku5kuDCK61WKO9VupXzgonHp8TdCnKM1/YdHjMi62XVJUlBJHojgETq+k+8YPxBXD8/ZOQuHTUlz11MRPAJtnGTdR4dlYcBY+ISNxlJ0VPp2WhHxKlTjQxNTqi56UwLUUW1Y+dUOioiinJfGZrckdh+iQ7Vj+Bw
It bails out with
According to the specification, this should be possible.
Some starting points for examining the reason and possible solutions:
u_<name>_offset
andu_<name>_scale
unforms are inserted in the shader code atcesium/packages/engine/Source/Scene/Model/MetadataPipelineStage.js
Line 650 in 7aefae9
vec3
, even when the type is an array (!), based oncesium/packages/engine/Source/Scene/PropertyTextureProperty.js
Line 247 in 7aefae9
offset/scale
properties that serve as the values for the unform there are arrays. (They would have to beCartesian3
for that assignment to work)While addressing the PR linked above, I've been thrown off a little bit by some "surprising" aspects of the implementation. It is not always apparent what the type of
offset/scale
should be. One specific aspect that surprised me is that ...MetadataClassProperty.offset
uses array types (e.g. a 3-element array for a 3D vector)PropertyTextureProperty.offset
uses object types (e.g. aCartesian3
for a 3D vector)Depending on where and how these values are supposed to be used, both can make sense. (Using different types of types in both places maybe not so much...). But in any case, if the "other" type of type is required for a certain task, then this implies some clumsy back-and-forth conversions, and the special handling of "3-element arrays as
vec3
in shaders" require additional attention here.Edit: When this is fixed, specs that follow the pattern of the one that is now about to be omitted at ed6ad00#diff-e7104646fcc3649a63c2a9e7468b5143778439156f8f4c56fc0e20a8256c4823R3594 may be added.
The text was updated successfully, but these errors were encountered: