@cesium/engine 9.0.0 → 9.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/Build/ThirdParty/Workers/pako_deflate.min.js +108 -210
  2. package/Build/ThirdParty/Workers/pako_inflate.min.js +466 -568
  3. package/Build/ThirdParty/Workers/z-worker-pako.js +56 -105
  4. package/Build/Workers/{chunk-VR5RBW52.js → chunk-26NE4LRW.js} +7 -7
  5. package/Build/Workers/{chunk-P2YAAMT2.js → chunk-26XJDV3D.js} +15 -15
  6. package/Build/Workers/{chunk-L4BW3RUA.js → chunk-2TRB253J.js} +7 -7
  7. package/Build/Workers/{chunk-NP2GYYE5.js → chunk-3PV5HQ2R.js} +6 -6
  8. package/Build/Workers/{chunk-BCU2LH5T.js → chunk-3VDHTBY5.js} +10 -10
  9. package/Build/Workers/{chunk-WHUSTDIB.js → chunk-4RG6WOXH.js} +10 -10
  10. package/Build/Workers/{chunk-P4XKB3QZ.js → chunk-5OK5JFDP.js} +5 -5
  11. package/Build/Workers/{chunk-2ZBL3MVO.js → chunk-7HLZRYGD.js} +10 -12
  12. package/Build/Workers/chunk-7PFZ4Z7C.js +961 -0
  13. package/Build/Workers/{chunk-24YTYWNB.js → chunk-A5CSB5ZE.js} +11 -13
  14. package/Build/Workers/{chunk-RMOEYCZW.js → chunk-AROLUUGS.js} +2 -2
  15. package/Build/Workers/{chunk-3NCVAGDA.js → chunk-BBBTT36L.js} +14 -14
  16. package/Build/Workers/{chunk-QKBGRKKG.js → chunk-BNT2SNWU.js} +4 -4
  17. package/Build/Workers/{chunk-LQJ5FFFR.js → chunk-CFBGPZU6.js} +11 -13
  18. package/Build/Workers/{chunk-C6OI26DR.js → chunk-CVCVMOQA.js} +1 -1
  19. package/Build/Workers/{chunk-SS4ESNE3.js → chunk-DIVFF6DK.js} +2 -2
  20. package/Build/Workers/{chunk-PXB7T27O.js → chunk-EJZVBTX4.js} +6 -6
  21. package/Build/Workers/{chunk-TZORKRNK.js → chunk-EODIOQ35.js} +1 -1
  22. package/Build/Workers/{chunk-QCQUZGXI.js → chunk-ETC45PHH.js} +5 -6
  23. package/Build/Workers/{chunk-E6WXPSJS.js → chunk-G7IAO7CW.js} +7 -7
  24. package/Build/Workers/{chunk-X2F6BEPY.js → chunk-GOQEANLM.js} +16 -16
  25. package/Build/Workers/{chunk-7COR472O.js → chunk-GUFV24F4.js} +7197 -5096
  26. package/Build/Workers/{chunk-5TIV3L26.js → chunk-GX2BWBN2.js} +13 -13
  27. package/Build/Workers/{chunk-ADOVHYWO.js → chunk-GX5LMUGZ.js} +469 -6
  28. package/Build/Workers/{chunk-2632RVPI.js → chunk-I6CW7ZE5.js} +7 -7
  29. package/Build/Workers/{chunk-YDVSBWEO.js → chunk-IF2OX6R4.js} +3 -5
  30. package/Build/Workers/{chunk-RSJXEO2A.js → chunk-IXYFH7DV.js} +95 -155
  31. package/Build/Workers/{chunk-ZNVSKMQ2.js → chunk-K5F23SZO.js} +6 -6
  32. package/Build/Workers/{chunk-MWV7IZK4.js → chunk-KTZK2UDR.js} +7 -7
  33. package/Build/Workers/{chunk-HBQPB6IH.js → chunk-LZFFO4KB.js} +12 -12
  34. package/Build/Workers/{chunk-GFA4SMXV.js → chunk-OYP23VAL.js} +11 -11
  35. package/Build/Workers/{chunk-ZYPTP7GS.js → chunk-PHT53MCH.js} +11 -11
  36. package/Build/Workers/{chunk-TJBU6GML.js → chunk-PUQR43HZ.js} +6 -6
  37. package/Build/Workers/{chunk-CO35JNNE.js → chunk-QZIWFSRM.js} +4 -4
  38. package/Build/Workers/{chunk-C3XBUYBO.js → chunk-RDR4KVPA.js} +17 -17
  39. package/Build/Workers/{chunk-YV4H2Y7M.js → chunk-RRUO4QEK.js} +4 -4
  40. package/Build/Workers/{chunk-LAQP3SCC.js → chunk-RTIT7UDN.js} +2 -2
  41. package/Build/Workers/{chunk-Z7FQLK6N.js → chunk-SC3TBKST.js} +4 -4
  42. package/Build/Workers/{chunk-GXUXEOE2.js → chunk-TDIGL45B.js} +1 -1
  43. package/Build/Workers/{chunk-EOXYZ34O.js → chunk-TP4FFUAH.js} +2 -2
  44. package/Build/Workers/{chunk-N4KXMWQU.js → chunk-U2LSTOMA.js} +2 -2
  45. package/Build/Workers/{chunk-6WF3KIF5.js → chunk-U6MTSO6A.js} +47 -84
  46. package/Build/Workers/{chunk-I37B3MZ2.js → chunk-UICVDDCQ.js} +1 -1
  47. package/Build/Workers/{chunk-DPUSFA7S.js → chunk-UKJCFXVV.js} +6 -6
  48. package/Build/Workers/{chunk-EPKE7GE3.js → chunk-UYKG3UFK.js} +5 -5
  49. package/Build/Workers/{chunk-RV7ZOSS6.js → chunk-W4OS542B.js} +13 -13
  50. package/Build/Workers/{chunk-DGDUKCJJ.js → chunk-WHDEZSAL.js} +6 -6
  51. package/Build/Workers/{chunk-NZWNZA6S.js → chunk-WOYQB5HM.js} +5 -5
  52. package/Build/Workers/{chunk-M2AYBTNH.js → chunk-WP3LCUOE.js} +13 -13
  53. package/Build/Workers/{chunk-73FKKY52.js → chunk-YGNQJ4YI.js} +5 -5
  54. package/Build/Workers/{chunk-SE4PXOEA.js → chunk-YGTWKLFY.js} +19 -19
  55. package/Build/Workers/{chunk-5R6VWLMH.js → chunk-ZHJDE6JN.js} +6 -6
  56. package/Build/Workers/combineGeometry.js +22 -24
  57. package/Build/Workers/createBoxGeometry.js +16 -18
  58. package/Build/Workers/createBoxOutlineGeometry.js +14 -16
  59. package/Build/Workers/createCircleGeometry.js +24 -26
  60. package/Build/Workers/createCircleOutlineGeometry.js +17 -19
  61. package/Build/Workers/createCoplanarPolygonGeometry.js +33 -34
  62. package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +29 -31
  63. package/Build/Workers/createCorridorGeometry.js +27 -29
  64. package/Build/Workers/createCorridorOutlineGeometry.js +26 -28
  65. package/Build/Workers/createCylinderGeometry.js +18 -20
  66. package/Build/Workers/createCylinderOutlineGeometry.js +16 -18
  67. package/Build/Workers/createEllipseGeometry.js +24 -26
  68. package/Build/Workers/createEllipseOutlineGeometry.js +17 -19
  69. package/Build/Workers/createEllipsoidGeometry.js +17 -19
  70. package/Build/Workers/createEllipsoidOutlineGeometry.js +16 -18
  71. package/Build/Workers/createFrustumGeometry.js +16 -18
  72. package/Build/Workers/createFrustumOutlineGeometry.js +18 -19
  73. package/Build/Workers/createGeometry.js +22 -24
  74. package/Build/Workers/createGroundPolylineGeometry.js +23 -25
  75. package/Build/Workers/createPlaneGeometry.js +14 -16
  76. package/Build/Workers/createPlaneOutlineGeometry.js +13 -15
  77. package/Build/Workers/createPolygonGeometry.js +32 -34
  78. package/Build/Workers/createPolygonOutlineGeometry.js +28 -30
  79. package/Build/Workers/createPolylineGeometry.js +23 -25
  80. package/Build/Workers/createPolylineVolumeGeometry.js +29 -31
  81. package/Build/Workers/createPolylineVolumeOutlineGeometry.js +25 -27
  82. package/Build/Workers/createRectangleGeometry.js +27 -29
  83. package/Build/Workers/createRectangleOutlineGeometry.js +18 -20
  84. package/Build/Workers/createSimplePolylineGeometry.js +21 -23
  85. package/Build/Workers/createSphereGeometry.js +17 -19
  86. package/Build/Workers/createSphereOutlineGeometry.js +16 -18
  87. package/Build/Workers/createTaskProcessorWorker.js +3 -3
  88. package/Build/Workers/createVectorTileClampedPolylines.js +14 -16
  89. package/Build/Workers/createVectorTileGeometries.js +22 -24
  90. package/Build/Workers/createVectorTilePoints.js +12 -12
  91. package/Build/Workers/createVectorTilePolygons.js +20 -22
  92. package/Build/Workers/createVectorTilePolylines.js +14 -16
  93. package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +23 -25
  94. package/Build/Workers/createVerticesFromHeightmap.js +23 -25
  95. package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +19 -22
  96. package/Build/Workers/createWallGeometry.js +22 -24
  97. package/Build/Workers/createWallOutlineGeometry.js +21 -23
  98. package/Build/Workers/decodeDraco.js +11 -11
  99. package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +12 -19
  100. package/Build/Workers/decodeI3S.js +10 -11
  101. package/Build/Workers/transcodeKTX2.js +44 -80
  102. package/Build/Workers/transferTypedArrayTest.js +1 -1
  103. package/Build/Workers/upsampleQuantizedTerrainMesh.js +20 -22
  104. package/Source/Core/Ion.js +1 -1
  105. package/Source/Core/Math.js +0 -5
  106. package/Source/Core/PixelFormat.js +1 -0
  107. package/Source/Core/Rectangle.js +89 -0
  108. package/Source/Core/TaskProcessor.js +19 -3
  109. package/Source/Core/sampleTerrain.js +3 -3
  110. package/Source/DataSources/DataSourceDisplay.js +5 -0
  111. package/Source/Renderer/ShaderBuilder.js +6 -3
  112. package/Source/Scene/ArcGisMapService.js +1 -1
  113. package/Source/Scene/Billboard.js +7 -5
  114. package/Source/Scene/Cesium3DTile.js +65 -0
  115. package/Source/Scene/Cesium3DTileset.js +48 -1
  116. package/Source/Scene/ClippingPolygon.js +212 -0
  117. package/Source/Scene/ClippingPolygonCollection.js +968 -0
  118. package/Source/Scene/Globe.js +14 -0
  119. package/Source/Scene/GlobeSurfaceShaderSet.js +81 -15
  120. package/Source/Scene/GlobeSurfaceTileProvider.js +81 -1
  121. package/Source/Scene/GltfLoader.js +458 -435
  122. package/Source/Scene/GltfLoaderUtil.js +3 -12
  123. package/Source/Scene/GltfPipeline/forEachTextureInMaterial.js +23 -7
  124. package/Source/Scene/GltfStructuralMetadataLoader.js +11 -9
  125. package/Source/Scene/Label.js +1 -1
  126. package/Source/Scene/Model/AlphaPipelineStage.js +1 -1
  127. package/Source/Scene/Model/GeometryPipelineStage.js +15 -43
  128. package/Source/Scene/Model/ImageBasedLightingPipelineStage.js +7 -0
  129. package/Source/Scene/Model/LightingPipelineStage.js +2 -4
  130. package/Source/Scene/Model/MaterialPipelineStage.js +346 -29
  131. package/Source/Scene/Model/Model.js +91 -3
  132. package/Source/Scene/Model/Model3DTileContent.js +21 -0
  133. package/Source/Scene/Model/ModelClippingPolygonsPipelineStage.js +92 -0
  134. package/Source/Scene/Model/ModelSceneGraph.js +5 -0
  135. package/Source/Scene/Model/ModelUtility.js +3 -0
  136. package/Source/Scene/Model/VerticalExaggerationPipelineStage.js +4 -6
  137. package/Source/Scene/ModelComponents.js +169 -1
  138. package/Source/Scene/PickDepth.js +23 -15
  139. package/Source/Scene/ResourceCache.js +41 -50
  140. package/Source/Scene/ResourceCacheKey.js +41 -53
  141. package/Source/Scene/Terrain.js +2 -2
  142. package/Source/Shaders/Builtin/CzmBuiltins.js +6 -8
  143. package/Source/Shaders/Builtin/Functions/clipPolygons.glsl +37 -0
  144. package/Source/Shaders/Builtin/Functions/clipPolygons.js +39 -0
  145. package/Source/Shaders/Builtin/Functions/maximumComponent.glsl +21 -0
  146. package/Source/Shaders/Builtin/Functions/maximumComponent.js +23 -0
  147. package/Source/Shaders/Builtin/Functions/pbrLighting.glsl +108 -44
  148. package/Source/Shaders/Builtin/Functions/pbrLighting.js +108 -44
  149. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.glsl +14 -0
  150. package/Source/Shaders/Builtin/Functions/unpackClippingExtents.js +15 -0
  151. package/Source/Shaders/Builtin/Structs/modelMaterial.glsl +14 -0
  152. package/Source/Shaders/Builtin/Structs/modelMaterial.js +14 -0
  153. package/Source/Shaders/GlobeFS.glsl +13 -1
  154. package/Source/Shaders/GlobeFS.js +13 -1
  155. package/Source/Shaders/GlobeVS.glsl +32 -0
  156. package/Source/Shaders/GlobeVS.js +32 -0
  157. package/Source/Shaders/Model/GeometryStageVS.glsl +1 -1
  158. package/Source/Shaders/Model/GeometryStageVS.js +1 -1
  159. package/Source/Shaders/Model/ImageBasedLightingStageFS.glsl +211 -133
  160. package/Source/Shaders/Model/ImageBasedLightingStageFS.js +212 -133
  161. package/Source/Shaders/Model/LightingStageFS.glsl +113 -48
  162. package/Source/Shaders/Model/LightingStageFS.js +113 -48
  163. package/Source/Shaders/Model/MaterialStageFS.glsl +399 -137
  164. package/Source/Shaders/Model/MaterialStageFS.js +399 -137
  165. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.glsl +6 -0
  166. package/Source/Shaders/Model/ModelClippingPolygonsStageFS.js +8 -0
  167. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.glsl +27 -0
  168. package/Source/Shaders/Model/ModelClippingPolygonsStageVS.js +29 -0
  169. package/Source/Shaders/Model/ModelFS.glsl +6 -0
  170. package/Source/Shaders/Model/ModelFS.js +7 -1
  171. package/Source/Shaders/Model/ModelVS.glsl +4 -0
  172. package/Source/Shaders/Model/ModelVS.js +4 -0
  173. package/Source/Shaders/PolygonSignedDistanceFS.glsl +100 -0
  174. package/Source/Shaders/PolygonSignedDistanceFS.js +101 -0
  175. package/Source/ThirdParty/Workers/z-worker-pako.js +1 -1
  176. package/index.d.ts +230 -4
  177. package/index.js +234 -229
  178. package/package.json +1 -1
  179. package/Build/Workers/chunk-2KACWKS4.js +0 -501
  180. package/Build/Workers/chunk-2XPLH3JY.js +0 -2977
  181. package/Build/Workers/chunk-X6XOMPWL.js +0 -73
  182. package/Source/Shaders/Builtin/Functions/defaultPbrMaterial.glsl +0 -16
  183. package/Source/Shaders/Builtin/Functions/defaultPbrMaterial.js +0 -18
  184. package/Source/Shaders/Builtin/Functions/pbrMetallicRoughnessMaterial.glsl +0 -37
  185. package/Source/Shaders/Builtin/Functions/pbrMetallicRoughnessMaterial.js +0 -39
  186. package/Source/Shaders/Builtin/Functions/pbrSpecularGlossinessMaterial.glsl +0 -30
  187. package/Source/Shaders/Builtin/Functions/pbrSpecularGlossinessMaterial.js +0 -32
  188. package/Source/Shaders/Builtin/Structs/pbrParameters.glsl +0 -16
  189. package/Source/Shaders/Builtin/Structs/pbrParameters.js +0 -18
@@ -17,212 +17,474 @@ vec2 computeTextureTransform(vec2 texCoord, mat3 textureTransform)\n\
17
17
  return vec2(textureTransform * vec3(texCoord, 1.0));\n\
18
18
  }\n\
19
19
  \n\
20
- #ifdef HAS_NORMALS\n\
21
- vec3 computeNormal(ProcessedAttributes attributes)\n\
20
+ #ifdef HAS_NORMAL_TEXTURE\n\
21
+ vec2 getNormalTexCoords()\n\
22
22
  {\n\
23
- // Geometry normal. This is already normalized \n\
24
- vec3 ng = attributes.normalEC;\n\
23
+ vec2 texCoord = TEXCOORD_NORMAL;\n\
24
+ #ifdef HAS_NORMAL_TEXTURE_TRANSFORM\n\
25
+ texCoord = vec2(u_normalTextureTransform * vec3(texCoord, 1.0));\n\
26
+ #endif\n\
27
+ return texCoord;\n\
28
+ }\n\
29
+ #endif\n\
25
30
  \n\
26
- vec3 normal = ng;\n\
27
- #if defined(HAS_NORMAL_TEXTURE) && !defined(HAS_WIREFRAME)\n\
28
- vec2 normalTexCoords = TEXCOORD_NORMAL;\n\
29
- #ifdef HAS_NORMAL_TEXTURE_TRANSFORM\n\
30
- normalTexCoords = computeTextureTransform(normalTexCoords, u_normalTextureTransform);\n\
31
- #endif\n\
31
+ #if defined(HAS_NORMAL_TEXTURE) || defined(HAS_CLEARCOAT_NORMAL_TEXTURE)\n\
32
+ vec3 computeTangent(in vec3 position, in vec2 normalTexCoords)\n\
33
+ {\n\
34
+ vec2 tex_dx = dFdx(normalTexCoords);\n\
35
+ vec2 tex_dy = dFdy(normalTexCoords);\n\
36
+ float determinant = tex_dx.x * tex_dy.y - tex_dy.x * tex_dx.y;\n\
37
+ vec3 tangent = tex_dy.t * dFdx(position) - tex_dx.t * dFdy(position);\n\
38
+ return tangent / determinant;\n\
39
+ }\n\
40
+ #endif\n\
32
41
  \n\
33
- // If HAS_BITANGENTS is set, then HAS_TANGENTS is also set\n\
34
- #ifdef HAS_BITANGENTS\n\
35
- vec3 t = attributes.tangentEC;\n\
36
- vec3 b = attributes.bitangentEC;\n\
37
- mat3 tbn = mat3(t, b, ng);\n\
38
- vec3 n = texture(u_normalTexture, normalTexCoords).rgb;\n\
39
- normal = normalize(tbn * (2.0 * n - 1.0));\n\
40
- #elif (__VERSION__ == 300 || defined(GL_OES_standard_derivatives))\n\
41
- // If derivatives are available (not IE 10), compute tangents\n\
42
- vec3 positionEC = attributes.positionEC;\n\
43
- vec3 pos_dx = dFdx(positionEC);\n\
44
- vec3 pos_dy = dFdy(positionEC);\n\
45
- vec3 tex_dx = dFdx(vec3(normalTexCoords,0.0));\n\
46
- vec3 tex_dy = dFdy(vec3(normalTexCoords,0.0));\n\
47
- vec3 t = (tex_dy.t * pos_dx - tex_dx.t * pos_dy) / (tex_dx.s * tex_dy.t - tex_dy.s * tex_dx.t);\n\
48
- t = normalize(t - ng * dot(ng, t));\n\
49
- vec3 b = normalize(cross(ng, t));\n\
50
- mat3 tbn = mat3(t, b, ng);\n\
51
- vec3 n = texture(u_normalTexture, normalTexCoords).rgb;\n\
52
- normal = normalize(tbn * (2.0 * n - 1.0));\n\
53
- #endif\n\
42
+ #ifdef USE_ANISOTROPY\n\
43
+ struct NormalInfo {\n\
44
+ vec3 tangent;\n\
45
+ vec3 bitangent;\n\
46
+ vec3 normal;\n\
47
+ vec3 geometryNormal;\n\
48
+ };\n\
49
+ \n\
50
+ NormalInfo getNormalInfo(ProcessedAttributes attributes)\n\
51
+ {\n\
52
+ vec3 geometryNormal = attributes.normalEC;\n\
53
+ #ifdef HAS_NORMAL_TEXTURE\n\
54
+ vec2 normalTexCoords = getNormalTexCoords();\n\
55
+ #endif\n\
56
+ \n\
57
+ #ifdef HAS_BITANGENTS\n\
58
+ vec3 tangent = attributes.tangentEC;\n\
59
+ vec3 bitangent = attributes.bitangentEC;\n\
60
+ #else // Assume HAS_NORMAL_TEXTURE\n\
61
+ vec3 tangent = computeTangent(attributes.positionEC, normalTexCoords);\n\
62
+ tangent = normalize(tangent - geometryNormal * dot(geometryNormal, tangent));\n\
63
+ vec3 bitangent = normalize(cross(geometryNormal, tangent));\n\
64
+ #endif\n\
65
+ \n\
66
+ #ifdef HAS_NORMAL_TEXTURE\n\
67
+ mat3 tbn = mat3(tangent, bitangent, geometryNormal);\n\
68
+ vec3 normalSample = texture(u_normalTexture, normalTexCoords).rgb;\n\
69
+ vec3 normal = normalize(tbn * (2.0 * normalSample - 1.0));\n\
70
+ #else\n\
71
+ vec3 normal = geometryNormal;\n\
54
72
  #endif\n\
55
73
  \n\
56
74
  #ifdef HAS_DOUBLE_SIDED_MATERIAL\n\
57
- if (czm_backFacing()) {\n\
58
- normal = -normal;\n\
59
- }\n\
75
+ if (czm_backFacing()) {\n\
76
+ tangent *= -1.0;\n\
77
+ bitangent *= -1.0;\n\
78
+ normal *= -1.0;\n\
79
+ geometryNormal *= -1.0;\n\
80
+ }\n\
60
81
  #endif\n\
61
82
  \n\
62
- return normal;\n\
83
+ NormalInfo normalInfo;\n\
84
+ normalInfo.tangent = tangent;\n\
85
+ normalInfo.bitangent = bitangent;\n\
86
+ normalInfo.normal = normal;\n\
87
+ normalInfo.geometryNormal = geometryNormal;\n\
88
+ \n\
89
+ return normalInfo;\n\
63
90
  }\n\
64
91
  #endif\n\
65
92
  \n\
66
- void materialStage(inout czm_modelMaterial material, ProcessedAttributes attributes, SelectedFeature feature)\n\
93
+ #if defined(HAS_NORMAL_TEXTURE) && !defined(HAS_WIREFRAME)\n\
94
+ vec3 getNormalFromTexture(ProcessedAttributes attributes, vec3 geometryNormal)\n\
67
95
  {\n\
68
- #ifdef HAS_NORMALS\n\
69
- material.normalEC = computeNormal(attributes);\n\
96
+ vec2 normalTexCoords = getNormalTexCoords();\n\
97
+ \n\
98
+ // If HAS_BITANGENTS is set, then HAS_TANGENTS is also set\n\
99
+ #ifdef HAS_BITANGENTS\n\
100
+ vec3 t = attributes.tangentEC;\n\
101
+ vec3 b = attributes.bitangentEC;\n\
102
+ #else\n\
103
+ vec3 t = computeTangent(attributes.positionEC, normalTexCoords);\n\
104
+ t = normalize(t - geometryNormal * dot(geometryNormal, t));\n\
105
+ vec3 b = normalize(cross(geometryNormal, t));\n\
70
106
  #endif\n\
71
107
  \n\
72
- vec4 baseColorWithAlpha = vec4(1.0);\n\
73
- // Regardless of whether we use PBR, set a base color\n\
74
- #ifdef HAS_BASE_COLOR_TEXTURE\n\
75
- vec2 baseColorTexCoords = TEXCOORD_BASE_COLOR;\n\
108
+ mat3 tbn = mat3(t, b, geometryNormal);\n\
109
+ vec3 n = texture(u_normalTexture, normalTexCoords).rgb;\n\
110
+ vec3 textureNormal = normalize(tbn * (2.0 * n - 1.0));\n\
76
111
  \n\
77
- #ifdef HAS_BASE_COLOR_TEXTURE_TRANSFORM\n\
78
- baseColorTexCoords = computeTextureTransform(baseColorTexCoords, u_baseColorTextureTransform);\n\
79
- #endif\n\
112
+ return textureNormal;\n\
113
+ }\n\
114
+ #endif\n\
80
115
  \n\
81
- baseColorWithAlpha = czm_srgbToLinear(texture(u_baseColorTexture, baseColorTexCoords));\n\
116
+ #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE\n\
117
+ vec3 getClearcoatNormalFromTexture(ProcessedAttributes attributes, vec3 geometryNormal)\n\
118
+ {\n\
119
+ vec2 normalTexCoords = TEXCOORD_CLEARCOAT_NORMAL;\n\
120
+ #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE_TRANSFORM\n\
121
+ normalTexCoords = vec2(u_clearcoatNormalTextureTransform * vec3(normalTexCoords, 1.0));\n\
122
+ #endif\n\
82
123
  \n\
83
- #ifdef HAS_BASE_COLOR_FACTOR\n\
84
- baseColorWithAlpha *= u_baseColorFactor;\n\
85
- #endif\n\
86
- #elif defined(HAS_BASE_COLOR_FACTOR)\n\
87
- baseColorWithAlpha = u_baseColorFactor;\n\
124
+ // If HAS_BITANGENTS is set, then HAS_TANGENTS is also set\n\
125
+ #ifdef HAS_BITANGENTS\n\
126
+ vec3 t = attributes.tangentEC;\n\
127
+ vec3 b = attributes.bitangentEC;\n\
128
+ #else\n\
129
+ vec3 t = computeTangent(attributes.positionEC, normalTexCoords);\n\
130
+ t = normalize(t - geometryNormal * dot(geometryNormal, t));\n\
131
+ vec3 b = normalize(cross(geometryNormal, t));\n\
88
132
  #endif\n\
89
133
  \n\
90
- #ifdef HAS_POINT_CLOUD_COLOR_STYLE\n\
91
- baseColorWithAlpha = v_pointCloudColor;\n\
92
- #elif defined(HAS_COLOR_0)\n\
93
- vec4 color = attributes.color_0;\n\
94
- // .pnts files store colors in the sRGB color space\n\
95
- #ifdef HAS_SRGB_COLOR\n\
96
- color = czm_srgbToLinear(color);\n\
97
- #endif\n\
98
- baseColorWithAlpha *= color;\n\
134
+ mat3 tbn = mat3(t, b, geometryNormal);\n\
135
+ vec3 n = texture(u_clearcoatNormalTexture, normalTexCoords).rgb;\n\
136
+ vec3 textureNormal = normalize(tbn * (2.0 * n - 1.0));\n\
137
+ \n\
138
+ return textureNormal;\n\
139
+ }\n\
140
+ #endif\n\
141
+ \n\
142
+ #ifdef HAS_NORMALS\n\
143
+ vec3 computeNormal(ProcessedAttributes attributes)\n\
144
+ {\n\
145
+ // Geometry normal. This is already normalized \n\
146
+ vec3 normal = attributes.normalEC;\n\
147
+ \n\
148
+ #if defined(HAS_NORMAL_TEXTURE) && !defined(HAS_WIREFRAME)\n\
149
+ normal = getNormalFromTexture(attributes, normal);\n\
99
150
  #endif\n\
100
151
  \n\
101
- material.diffuse = baseColorWithAlpha.rgb;\n\
102
- material.alpha = baseColorWithAlpha.a;\n\
152
+ #ifdef HAS_DOUBLE_SIDED_MATERIAL\n\
153
+ if (czm_backFacing()) {\n\
154
+ normal = -normal;\n\
155
+ }\n\
156
+ #endif\n\
103
157
  \n\
104
- #ifdef USE_CPU_STYLING\n\
105
- material.diffuse = blend(material.diffuse, feature.color.rgb, model_colorBlend);\n\
158
+ return normal;\n\
159
+ }\n\
160
+ #endif\n\
161
+ \n\
162
+ #ifdef HAS_BASE_COLOR_TEXTURE\n\
163
+ vec4 getBaseColorFromTexture()\n\
164
+ {\n\
165
+ vec2 baseColorTexCoords = TEXCOORD_BASE_COLOR;\n\
166
+ #ifdef HAS_BASE_COLOR_TEXTURE_TRANSFORM\n\
167
+ baseColorTexCoords = computeTextureTransform(baseColorTexCoords, u_baseColorTextureTransform);\n\
106
168
  #endif\n\
107
169
  \n\
108
- #ifdef HAS_OCCLUSION_TEXTURE\n\
109
- vec2 occlusionTexCoords = TEXCOORD_OCCLUSION;\n\
110
- #ifdef HAS_OCCLUSION_TEXTURE_TRANSFORM\n\
111
- occlusionTexCoords = computeTextureTransform(occlusionTexCoords, u_occlusionTextureTransform);\n\
112
- #endif\n\
113
- material.occlusion = texture(u_occlusionTexture, occlusionTexCoords).r;\n\
170
+ vec4 baseColorWithAlpha = czm_srgbToLinear(texture(u_baseColorTexture, baseColorTexCoords));\n\
171
+ \n\
172
+ #ifdef HAS_BASE_COLOR_FACTOR\n\
173
+ baseColorWithAlpha *= u_baseColorFactor;\n\
114
174
  #endif\n\
115
175
  \n\
116
- #ifdef HAS_EMISSIVE_TEXTURE\n\
176
+ return baseColorWithAlpha;\n\
177
+ }\n\
178
+ #endif\n\
179
+ \n\
180
+ #ifdef HAS_EMISSIVE_TEXTURE\n\
181
+ vec3 getEmissiveFromTexture()\n\
182
+ {\n\
117
183
  vec2 emissiveTexCoords = TEXCOORD_EMISSIVE;\n\
118
- #ifdef HAS_EMISSIVE_TEXTURE_TRANSFORM\n\
184
+ #ifdef HAS_EMISSIVE_TEXTURE_TRANSFORM\n\
119
185
  emissiveTexCoords = computeTextureTransform(emissiveTexCoords, u_emissiveTextureTransform);\n\
120
- #endif\n\
186
+ #endif\n\
121
187
  \n\
122
188
  vec3 emissive = czm_srgbToLinear(texture(u_emissiveTexture, emissiveTexCoords).rgb);\n\
123
- #ifdef HAS_EMISSIVE_FACTOR\n\
189
+ #ifdef HAS_EMISSIVE_FACTOR\n\
124
190
  emissive *= u_emissiveFactor;\n\
125
- #endif\n\
126
- material.emissive = emissive;\n\
127
- #elif defined(HAS_EMISSIVE_FACTOR)\n\
128
- material.emissive = u_emissiveFactor;\n\
129
191
  #endif\n\
130
192
  \n\
131
- #if defined(LIGHTING_PBR) && defined(USE_SPECULAR_GLOSSINESS)\n\
132
- #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE\n\
193
+ return emissive;\n\
194
+ }\n\
195
+ #endif\n\
196
+ \n\
197
+ #if defined(LIGHTING_PBR) && defined(USE_SPECULAR_GLOSSINESS)\n\
198
+ void setSpecularGlossiness(inout czm_modelMaterial material)\n\
199
+ {\n\
200
+ #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE\n\
133
201
  vec2 specularGlossinessTexCoords = TEXCOORD_SPECULAR_GLOSSINESS;\n\
134
- #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE_TRANSFORM\n\
135
- specularGlossinessTexCoords = computeTextureTransform(specularGlossinessTexCoords, u_specularGlossinessTextureTransform);\n\
136
- #endif\n\
202
+ #ifdef HAS_SPECULAR_GLOSSINESS_TEXTURE_TRANSFORM\n\
203
+ specularGlossinessTexCoords = computeTextureTransform(specularGlossinessTexCoords, u_specularGlossinessTextureTransform);\n\
204
+ #endif\n\
137
205
  \n\
138
206
  vec4 specularGlossiness = czm_srgbToLinear(texture(u_specularGlossinessTexture, specularGlossinessTexCoords));\n\
139
207
  vec3 specular = specularGlossiness.rgb;\n\
140
208
  float glossiness = specularGlossiness.a;\n\
141
- #ifdef HAS_SPECULAR_FACTOR\n\
142
- specular *= u_specularFactor;\n\
143
- #endif\n\
209
+ #ifdef HAS_LEGACY_SPECULAR_FACTOR\n\
210
+ specular *= u_legacySpecularFactor;\n\
211
+ #endif\n\
144
212
  \n\
145
- #ifdef HAS_GLOSSINESS_FACTOR\n\
213
+ #ifdef HAS_GLOSSINESS_FACTOR\n\
146
214
  glossiness *= u_glossinessFactor;\n\
147
- #endif\n\
215
+ #endif\n\
216
+ #else\n\
217
+ #ifdef HAS_LEGACY_SPECULAR_FACTOR\n\
218
+ vec3 specular = clamp(u_legacySpecularFactor, vec3(0.0), vec3(1.0));\n\
148
219
  #else\n\
149
- #ifdef HAS_SPECULAR_FACTOR\n\
150
- vec3 specular = clamp(u_specularFactor, vec3(0.0), vec3(1.0));\n\
151
- #else\n\
152
220
  vec3 specular = vec3(1.0);\n\
153
- #endif\n\
221
+ #endif\n\
154
222
  \n\
155
- #ifdef HAS_GLOSSINESS_FACTOR\n\
223
+ #ifdef HAS_GLOSSINESS_FACTOR\n\
156
224
  float glossiness = clamp(u_glossinessFactor, 0.0, 1.0);\n\
157
- #else\n\
225
+ #else\n\
158
226
  float glossiness = 1.0;\n\
159
- #endif\n\
160
227
  #endif\n\
228
+ #endif\n\
161
229
  \n\
162
- #ifdef HAS_DIFFUSE_TEXTURE\n\
230
+ #ifdef HAS_DIFFUSE_TEXTURE\n\
163
231
  vec2 diffuseTexCoords = TEXCOORD_DIFFUSE;\n\
164
- #ifdef HAS_DIFFUSE_TEXTURE_TRANSFORM\n\
232
+ #ifdef HAS_DIFFUSE_TEXTURE_TRANSFORM\n\
165
233
  diffuseTexCoords = computeTextureTransform(diffuseTexCoords, u_diffuseTextureTransform);\n\
166
- #endif\n\
234
+ #endif\n\
167
235
  \n\
168
236
  vec4 diffuse = czm_srgbToLinear(texture(u_diffuseTexture, diffuseTexCoords));\n\
169
- #ifdef HAS_DIFFUSE_FACTOR\n\
237
+ #ifdef HAS_DIFFUSE_FACTOR\n\
170
238
  diffuse *= u_diffuseFactor;\n\
171
- #endif\n\
172
- #elif defined(HAS_DIFFUSE_FACTOR)\n\
239
+ #endif\n\
240
+ #elif defined(HAS_DIFFUSE_FACTOR)\n\
173
241
  vec4 diffuse = clamp(u_diffuseFactor, vec4(0.0), vec4(1.0));\n\
174
- #else\n\
242
+ #else\n\
175
243
  vec4 diffuse = vec4(1.0);\n\
176
- #endif\n\
177
- czm_pbrParameters parameters = czm_pbrSpecularGlossinessMaterial(\n\
178
- diffuse.rgb,\n\
179
- specular,\n\
180
- glossiness\n\
181
- );\n\
182
- material.diffuse = parameters.diffuseColor;\n\
244
+ #endif\n\
245
+ \n\
246
+ material.diffuse = diffuse.rgb * (1.0 - czm_maximumComponent(specular));\n\
183
247
  // the specular glossiness extension's alpha overrides anything set\n\
184
248
  // by the base material.\n\
185
249
  material.alpha = diffuse.a;\n\
186
- material.specular = parameters.f0;\n\
187
- material.roughness = parameters.roughness;\n\
188
- #elif defined(LIGHTING_PBR)\n\
189
- #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE\n\
250
+ \n\
251
+ material.specular = specular;\n\
252
+ \n\
253
+ // glossiness is the opposite of roughness, but easier for artists to use.\n\
254
+ float roughness = 1.0 - glossiness;\n\
255
+ material.roughness = roughness * roughness;\n\
256
+ }\n\
257
+ #elif defined(LIGHTING_PBR)\n\
258
+ float setMetallicRoughness(inout czm_modelMaterial material)\n\
259
+ {\n\
260
+ #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE\n\
190
261
  vec2 metallicRoughnessTexCoords = TEXCOORD_METALLIC_ROUGHNESS;\n\
191
- #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE_TRANSFORM\n\
262
+ #ifdef HAS_METALLIC_ROUGHNESS_TEXTURE_TRANSFORM\n\
192
263
  metallicRoughnessTexCoords = computeTextureTransform(metallicRoughnessTexCoords, u_metallicRoughnessTextureTransform);\n\
193
- #endif\n\
264
+ #endif\n\
194
265
  \n\
195
266
  vec3 metallicRoughness = texture(u_metallicRoughnessTexture, metallicRoughnessTexCoords).rgb;\n\
196
267
  float metalness = clamp(metallicRoughness.b, 0.0, 1.0);\n\
197
268
  float roughness = clamp(metallicRoughness.g, 0.04, 1.0);\n\
198
- #ifdef HAS_METALLIC_FACTOR\n\
199
- metalness *= u_metallicFactor;\n\
200
- #endif\n\
269
+ #ifdef HAS_METALLIC_FACTOR\n\
270
+ metalness = clamp(metalness * u_metallicFactor, 0.0, 1.0);\n\
271
+ #endif\n\
201
272
  \n\
202
- #ifdef HAS_ROUGHNESS_FACTOR\n\
203
- roughness *= u_roughnessFactor;\n\
204
- #endif\n\
205
- #else\n\
206
- #ifdef HAS_METALLIC_FACTOR\n\
273
+ #ifdef HAS_ROUGHNESS_FACTOR\n\
274
+ roughness = clamp(roughness * u_roughnessFactor, 0.0, 1.0);\n\
275
+ #endif\n\
276
+ #else\n\
277
+ #ifdef HAS_METALLIC_FACTOR\n\
207
278
  float metalness = clamp(u_metallicFactor, 0.0, 1.0);\n\
208
- #else\n\
279
+ #else\n\
209
280
  float metalness = 1.0;\n\
210
- #endif\n\
281
+ #endif\n\
211
282
  \n\
212
- #ifdef HAS_ROUGHNESS_FACTOR\n\
283
+ #ifdef HAS_ROUGHNESS_FACTOR\n\
213
284
  float roughness = clamp(u_roughnessFactor, 0.04, 1.0);\n\
214
- #else\n\
285
+ #else\n\
215
286
  float roughness = 1.0;\n\
216
- #endif\n\
217
- #endif\n\
218
- czm_pbrParameters parameters = czm_pbrMetallicRoughnessMaterial(\n\
219
- material.diffuse,\n\
220
- metalness,\n\
221
- roughness\n\
222
- );\n\
223
- material.diffuse = parameters.diffuseColor;\n\
224
- material.specular = parameters.f0;\n\
225
- material.roughness = parameters.roughness;\n\
287
+ #endif\n\
288
+ #endif\n\
289
+ \n\
290
+ // dielectrics use f0 = 0.04, metals use albedo as f0\n\
291
+ const vec3 REFLECTANCE_DIELECTRIC = vec3(0.04);\n\
292
+ vec3 f0 = mix(REFLECTANCE_DIELECTRIC, material.diffuse, metalness);\n\
293
+ \n\
294
+ material.specular = f0;\n\
295
+ \n\
296
+ // diffuse only applies to dielectrics.\n\
297
+ material.diffuse = material.diffuse * (1.0 - f0) * (1.0 - metalness);\n\
298
+ \n\
299
+ // roughness is authored as perceptual roughness\n\
300
+ // square it to get material roughness\n\
301
+ material.roughness = roughness * roughness;\n\
302
+ \n\
303
+ return metalness;\n\
304
+ }\n\
305
+ #ifdef USE_SPECULAR\n\
306
+ void setSpecular(inout czm_modelMaterial material, in float metalness)\n\
307
+ {\n\
308
+ #ifdef HAS_SPECULAR_TEXTURE\n\
309
+ vec2 specularTexCoords = TEXCOORD_SPECULAR;\n\
310
+ #ifdef HAS_SPECULAR_TEXTURE_TRANSFORM\n\
311
+ specularTexCoords = computeTextureTransform(specularTexCoords, u_specularTextureTransform);\n\
312
+ #endif\n\
313
+ float specularWeight = texture(u_specularTexture, specularTexCoords).a;\n\
314
+ #ifdef HAS_SPECULAR_FACTOR\n\
315
+ specularWeight *= u_specularFactor;\n\
316
+ #endif\n\
317
+ #else\n\
318
+ #ifdef HAS_SPECULAR_FACTOR\n\
319
+ float specularWeight = u_specularFactor;\n\
320
+ #else\n\
321
+ float specularWeight = 1.0;\n\
322
+ #endif\n\
323
+ #endif\n\
324
+ \n\
325
+ #ifdef HAS_SPECULAR_COLOR_TEXTURE\n\
326
+ vec2 specularColorTexCoords = TEXCOORD_SPECULAR_COLOR;\n\
327
+ #ifdef HAS_SPECULAR_COLOR_TEXTURE_TRANSFORM\n\
328
+ specularColorTexCoords = computeTextureTransform(specularColorTexCoords, u_specularColorTextureTransform);\n\
329
+ #endif\n\
330
+ vec3 specularColorSample = texture(u_specularColorTexture, specularColorTexCoords).rgb;\n\
331
+ vec3 specularColorFactor = czm_srgbToLinear(specularColorSample);\n\
332
+ #ifdef HAS_SPECULAR_COLOR_FACTOR\n\
333
+ specularColorFactor *= u_specularColorFactor;\n\
334
+ #endif\n\
335
+ #else\n\
336
+ #ifdef HAS_SPECULAR_COLOR_FACTOR\n\
337
+ vec3 specularColorFactor = u_specularColorFactor;\n\
338
+ #else\n\
339
+ vec3 specularColorFactor = vec3(1.0);\n\
340
+ #endif\n\
341
+ #endif\n\
342
+ material.specularWeight = specularWeight;\n\
343
+ vec3 f0 = material.specular;\n\
344
+ vec3 dielectricSpecularF0 = min(f0 * specularColorFactor, vec3(1.0));\n\
345
+ material.specular = mix(dielectricSpecularF0, material.diffuse, metalness);\n\
346
+ }\n\
347
+ #endif\n\
348
+ #ifdef USE_ANISOTROPY\n\
349
+ void setAnisotropy(inout czm_modelMaterial material, in NormalInfo normalInfo)\n\
350
+ {\n\
351
+ mat2 rotation = mat2(u_anisotropy.xy, -u_anisotropy.y, u_anisotropy.x);\n\
352
+ float anisotropyStrength = u_anisotropy.z;\n\
353
+ \n\
354
+ vec2 direction = vec2(1.0, 0.0);\n\
355
+ #ifdef HAS_ANISOTROPY_TEXTURE\n\
356
+ vec2 anisotropyTexCoords = TEXCOORD_ANISOTROPY;\n\
357
+ #ifdef HAS_ANISOTROPY_TEXTURE_TRANSFORM\n\
358
+ anisotropyTexCoords = computeTextureTransform(anisotropyTexCoords, u_anisotropyTextureTransform);\n\
359
+ #endif\n\
360
+ vec3 anisotropySample = texture(u_anisotropyTexture, anisotropyTexCoords).rgb;\n\
361
+ direction = anisotropySample.rg * 2.0 - vec2(1.0);\n\
362
+ anisotropyStrength *= anisotropySample.b;\n\
363
+ #endif\n\
364
+ \n\
365
+ direction = rotation * direction;\n\
366
+ mat3 tbn = mat3(normalInfo.tangent, normalInfo.bitangent, normalInfo.normal);\n\
367
+ vec3 anisotropicT = tbn * normalize(vec3(direction, 0.0));\n\
368
+ vec3 anisotropicB = cross(normalInfo.geometryNormal, anisotropicT);\n\
369
+ \n\
370
+ material.anisotropicT = anisotropicT;\n\
371
+ material.anisotropicB = anisotropicB;\n\
372
+ material.anisotropyStrength = anisotropyStrength;\n\
373
+ }\n\
374
+ #endif\n\
375
+ #ifdef USE_CLEARCOAT\n\
376
+ void setClearcoat(inout czm_modelMaterial material, in ProcessedAttributes attributes)\n\
377
+ {\n\
378
+ #ifdef HAS_CLEARCOAT_TEXTURE\n\
379
+ vec2 clearcoatTexCoords = TEXCOORD_CLEARCOAT;\n\
380
+ #ifdef HAS_CLEARCOAT_TEXTURE_TRANSFORM\n\
381
+ clearcoatTexCoords = computeTextureTransform(clearcoatTexCoords, u_clearcoatTextureTransform);\n\
382
+ #endif\n\
383
+ float clearcoatFactor = texture(u_clearcoatTexture, clearcoatTexCoords).r;\n\
384
+ #ifdef HAS_CLEARCOAT_FACTOR\n\
385
+ clearcoatFactor *= u_clearcoatFactor;\n\
386
+ #endif\n\
387
+ #else\n\
388
+ #ifdef HAS_CLEARCOAT_FACTOR\n\
389
+ float clearcoatFactor = u_clearcoatFactor;\n\
390
+ #else\n\
391
+ // PERFORMANCE_IDEA: this case should turn the whole extension off\n\
392
+ float clearcoatFactor = 0.0;\n\
393
+ #endif\n\
394
+ #endif\n\
395
+ \n\
396
+ #ifdef HAS_CLEARCOAT_ROUGHNESS_TEXTURE\n\
397
+ vec2 clearcoatRoughnessTexCoords = TEXCOORD_CLEARCOAT_ROUGHNESS;\n\
398
+ #ifdef HAS_CLEARCOAT_ROUGHNESS_TEXTURE_TRANSFORM\n\
399
+ clearcoatRoughnessTexCoords = computeTextureTransform(clearcoatRoughnessTexCoords, u_clearcoatRoughnessTextureTransform);\n\
400
+ #endif\n\
401
+ float clearcoatRoughness = texture(u_clearcoatRoughnessTexture, clearcoatRoughnessTexCoords).g;\n\
402
+ #ifdef HAS_CLEARCOAT_ROUGHNESS_FACTOR\n\
403
+ clearcoatRoughness *= u_clearcoatRoughnessFactor;\n\
404
+ #endif\n\
405
+ #else\n\
406
+ #ifdef HAS_CLEARCOAT_ROUGHNESS_FACTOR\n\
407
+ float clearcoatRoughness = u_clearcoatRoughnessFactor;\n\
408
+ #else\n\
409
+ float clearcoatRoughness = 0.0;\n\
410
+ #endif\n\
411
+ #endif\n\
412
+ \n\
413
+ material.clearcoatFactor = clearcoatFactor;\n\
414
+ // roughness is authored as perceptual roughness\n\
415
+ // square it to get material roughness\n\
416
+ material.clearcoatRoughness = clearcoatRoughness * clearcoatRoughness;\n\
417
+ #ifdef HAS_CLEARCOAT_NORMAL_TEXTURE\n\
418
+ material.clearcoatNormal = getClearcoatNormalFromTexture(attributes, attributes.normalEC);\n\
419
+ #else\n\
420
+ material.clearcoatNormal = attributes.normalEC;\n\
421
+ #endif\n\
422
+ }\n\
423
+ #endif\n\
424
+ #endif\n\
425
+ \n\
426
+ void materialStage(inout czm_modelMaterial material, ProcessedAttributes attributes, SelectedFeature feature)\n\
427
+ {\n\
428
+ #ifdef USE_ANISOTROPY\n\
429
+ NormalInfo normalInfo = getNormalInfo(attributes);\n\
430
+ material.normalEC = normalInfo.normal;\n\
431
+ #elif defined(HAS_NORMALS)\n\
432
+ material.normalEC = computeNormal(attributes);\n\
433
+ #endif\n\
434
+ \n\
435
+ vec4 baseColorWithAlpha = vec4(1.0);\n\
436
+ // Regardless of whether we use PBR, set a base color\n\
437
+ #ifdef HAS_BASE_COLOR_TEXTURE\n\
438
+ baseColorWithAlpha = getBaseColorFromTexture();\n\
439
+ #elif defined(HAS_BASE_COLOR_FACTOR)\n\
440
+ baseColorWithAlpha = u_baseColorFactor;\n\
441
+ #endif\n\
442
+ \n\
443
+ #ifdef HAS_POINT_CLOUD_COLOR_STYLE\n\
444
+ baseColorWithAlpha = v_pointCloudColor;\n\
445
+ #elif defined(HAS_COLOR_0)\n\
446
+ vec4 color = attributes.color_0;\n\
447
+ // .pnts files store colors in the sRGB color space\n\
448
+ #ifdef HAS_SRGB_COLOR\n\
449
+ color = czm_srgbToLinear(color);\n\
450
+ #endif\n\
451
+ baseColorWithAlpha *= color;\n\
452
+ #endif\n\
453
+ \n\
454
+ material.diffuse = baseColorWithAlpha.rgb;\n\
455
+ material.alpha = baseColorWithAlpha.a;\n\
456
+ \n\
457
+ #ifdef USE_CPU_STYLING\n\
458
+ material.diffuse = blend(material.diffuse, feature.color.rgb, model_colorBlend);\n\
459
+ #endif\n\
460
+ \n\
461
+ #ifdef HAS_OCCLUSION_TEXTURE\n\
462
+ vec2 occlusionTexCoords = TEXCOORD_OCCLUSION;\n\
463
+ #ifdef HAS_OCCLUSION_TEXTURE_TRANSFORM\n\
464
+ occlusionTexCoords = computeTextureTransform(occlusionTexCoords, u_occlusionTextureTransform);\n\
465
+ #endif\n\
466
+ material.occlusion = texture(u_occlusionTexture, occlusionTexCoords).r;\n\
467
+ #endif\n\
468
+ \n\
469
+ #ifdef HAS_EMISSIVE_TEXTURE\n\
470
+ material.emissive = getEmissiveFromTexture();\n\
471
+ #elif defined(HAS_EMISSIVE_FACTOR)\n\
472
+ material.emissive = u_emissiveFactor;\n\
473
+ #endif\n\
474
+ \n\
475
+ #if defined(LIGHTING_PBR) && defined(USE_SPECULAR_GLOSSINESS)\n\
476
+ setSpecularGlossiness(material);\n\
477
+ #elif defined(LIGHTING_PBR)\n\
478
+ float metalness = setMetallicRoughness(material);\n\
479
+ #ifdef USE_SPECULAR\n\
480
+ setSpecular(material, metalness);\n\
481
+ #endif\n\
482
+ #ifdef USE_ANISOTROPY\n\
483
+ setAnisotropy(material, normalInfo);\n\
484
+ #endif\n\
485
+ #ifdef USE_CLEARCOAT\n\
486
+ setClearcoat(material, attributes);\n\
487
+ #endif\n\
226
488
  #endif\n\
227
489
  }\n\
228
490
  ";
@@ -0,0 +1,6 @@
1
+ void modelClippingPolygonsStage()
2
+ {
3
+ vec2 clippingPosition = v_clippingPosition;
4
+ int regionIndex = v_regionIndex;
5
+ czm_clipPolygons(model_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex);
6
+ }
@@ -0,0 +1,8 @@
1
+ //This file is automatically rebuilt by the Cesium build process.
2
+ export default "void modelClippingPolygonsStage()\n\
3
+ {\n\
4
+ vec2 clippingPosition = v_clippingPosition;\n\
5
+ int regionIndex = v_regionIndex;\n\
6
+ czm_clipPolygons(model_clippingDistance, CLIPPING_POLYGON_REGIONS_LENGTH, clippingPosition, regionIndex);\n\
7
+ }\n\
8
+ ";
@@ -0,0 +1,27 @@
1
+ void modelClippingPolygonsStage(ProcessedAttributes attributes)
2
+ {
3
+ vec2 sphericalLatLong = czm_approximateSphericalCoordinates(v_positionWC);
4
+ sphericalLatLong.y = czm_branchFreeTernary(sphericalLatLong.y < czm_pi, sphericalLatLong.y, sphericalLatLong.y - czm_twoPi);
5
+
6
+ vec2 minDistance = vec2(czm_infinity);
7
+ v_regionIndex = -1;
8
+ v_clippingPosition = vec2(czm_infinity);
9
+
10
+ for (int regionIndex = 0; regionIndex < CLIPPING_POLYGON_REGIONS_LENGTH; regionIndex++) {
11
+ vec4 extents = czm_unpackClippingExtents(model_clippingExtents, regionIndex);
12
+ vec2 rectUv = (sphericalLatLong.yx - extents.yx) * extents.wz;
13
+
14
+ vec2 clamped = clamp(rectUv, vec2(0.0), vec2(1.0));
15
+ vec2 distance = abs(rectUv - clamped) * extents.wz;
16
+
17
+ if (minDistance.x > distance.x || minDistance.y > distance.y) {
18
+ minDistance = distance;
19
+ v_clippingPosition = rectUv;
20
+ }
21
+
22
+ float threshold = 0.01;
23
+ if (rectUv.x > threshold && rectUv.y > threshold && rectUv.x < 1.0 - threshold && rectUv.y < 1.0 - threshold) {
24
+ v_regionIndex = regionIndex;
25
+ }
26
+ }
27
+ }