@rtzh/engine 0.0.11 → 0.0.12
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.
- package/Build/ThirdParty/Workers/zip-web-worker.js +656 -518
- package/Build/Workers/{chunk-23CHWHW6.js → chunk-2QUYHF2A.js} +4 -4
- package/Build/Workers/{chunk-DHWZGIOA.js → chunk-3J7LZYZG.js} +5 -5
- package/Build/Workers/{chunk-F4Q3VOCC.js → chunk-3KDCIRQI.js} +7 -7
- package/Build/Workers/{chunk-IVDXHQYL.js → chunk-3M6XQXJL.js} +5 -5
- package/Build/Workers/{chunk-K6PDZWHZ.js → chunk-3P5AO3U5.js} +5 -5
- package/Build/Workers/{chunk-FUFHIXPT.js → chunk-4DH5OOWE.js} +4 -4
- package/Build/Workers/{chunk-GDHDJK32.js → chunk-4G6JR2MZ.js} +10 -10
- package/Build/Workers/{chunk-5WKGRIN6.js → chunk-4VMTI2WC.js} +6 -6
- package/Build/Workers/{chunk-5D3ECYS3.js → chunk-55JFCPW4.js} +4 -4
- package/Build/Workers/{chunk-3CD4WIF4.js → chunk-5CVGPIDD.js} +2 -2
- package/Build/Workers/{chunk-FYW5UQ24.js → chunk-6JO3MGIQ.js} +12 -12
- package/Build/Workers/{chunk-DLRIAMQF.js → chunk-6SYRFK5R.js} +2 -2
- package/Build/Workers/{chunk-ATC2WXI4.js → chunk-6TITDWW4.js} +17 -17
- package/Build/Workers/{chunk-7EU3DIKZ.js → chunk-6ZPTOV5S.js} +18 -18
- package/Build/Workers/{chunk-MJVNNURF.js → chunk-74FGX7I7.js} +12 -12
- package/Build/Workers/{chunk-KMZXZUA7.js → chunk-7DG7QQQ6.js} +5 -5
- package/Build/Workers/{chunk-4BJHO56J.js → chunk-7DUCNF2V.js} +6 -6
- package/Build/Workers/{chunk-CTARL7CY.js → chunk-A3KVKXRR.js} +13 -13
- package/Build/Workers/{chunk-6HB2DMC2.js → chunk-A3OQ66NS.js} +16 -16
- package/Build/Workers/{chunk-5SVTAJRH.js → chunk-ADOJA3C4.js} +12 -12
- package/Build/Workers/{chunk-DKJMD2HX.js → chunk-AM7WOPMS.js} +6 -6
- package/Build/Workers/{chunk-6RUDXAFC.js → chunk-AUWAGN3U.js} +16 -16
- package/Build/Workers/{chunk-AEURJQ3B.js → chunk-B3SSRLUO.js} +2 -2
- package/Build/Workers/{chunk-ET7LWDHA.js → chunk-B7PKU4HH.js} +2 -2
- package/Build/Workers/{chunk-GPWELPVQ.js → chunk-B7SQOHFY.js} +7 -7
- package/Build/Workers/{chunk-F7IITURY.js → chunk-BGIF6VMP.js} +3 -3
- package/Build/Workers/{chunk-72YPCD72.js → chunk-BHYR5M4Y.js} +17 -17
- package/Build/Workers/{chunk-243UEBJF.js → chunk-BIPYGVES.js} +10 -10
- package/Build/Workers/{chunk-6BIU5AL4.js → chunk-BU5W4J4F.js} +10 -10
- package/Build/Workers/{chunk-4GPHI5UY.js → chunk-C3DT73MC.js} +10 -10
- package/Build/Workers/{chunk-IXM65GBF.js → chunk-CD2WSWPY.js} +4 -4
- package/Build/Workers/{chunk-HFCJLXTG.js → chunk-CHAPQYGD.js} +1 -1
- package/Build/Workers/{chunk-2UNHFFAZ.js → chunk-CXC4JSSY.js} +5 -5
- package/Build/Workers/{chunk-6MYDYE24.js → chunk-DB2NML4I.js} +1 -1
- package/Build/Workers/{chunk-32ZGDYJY.js → chunk-DKP3PVXJ.js} +18 -18
- package/Build/Workers/{chunk-CV5JLCHF.js → chunk-DLNCIAY5.js} +13 -13
- package/Build/Workers/{chunk-FD62YGTB.js → chunk-DMQ2K2CH.js} +7 -7
- package/Build/Workers/{chunk-J766O3PA.js → chunk-DN54YAFV.js} +4 -4
- package/Build/Workers/{chunk-7AS3X42P.js → chunk-E3YEHNIJ.js} +10 -10
- package/Build/Workers/{chunk-4NAHNN5G.js → chunk-ECYQUWGD.js} +10 -10
- package/Build/Workers/{chunk-54AFUJNV.js → chunk-EUE3UD5F.js} +11 -11
- package/Build/Workers/{chunk-DAYNPAVN.js → chunk-EXMUTZB4.js} +2 -2
- package/Build/Workers/{chunk-54LZ6OUD.js → chunk-F5SRLVVZ.js} +17 -17
- package/Build/Workers/{chunk-EWDHM5NC.js → chunk-FBSLGF4L.js} +1 -1
- package/Build/Workers/{chunk-565HBO3F.js → chunk-FNX2KJDD.js} +6 -6
- package/Build/Workers/{chunk-IYAZCFAC.js → chunk-FPEAW6NQ.js} +6 -6
- package/Build/Workers/{chunk-CQ5PWUMS.js → chunk-GAZENUEZ.js} +1 -1
- package/Build/Workers/{chunk-7BOVULMD.js → chunk-GBB5VIA3.js} +2 -2
- package/Build/Workers/{chunk-7R74V5Z3.js → chunk-HTMJEEON.js} +8 -8
- package/Build/Workers/{chunk-I5JHYEIE.js → chunk-HZ4N44YJ.js} +8 -8
- package/Build/Workers/{chunk-5UKR42KW.js → chunk-I4CJV4A3.js} +14 -14
- package/Build/Workers/{chunk-3L7XBXFS.js → chunk-IB22JEKK.js} +5 -5
- package/Build/Workers/{chunk-F6JVBOM5.js → chunk-IG64RWHT.js} +11 -11
- package/Build/Workers/{chunk-6AUSOZOL.js → chunk-IK5A56IF.js} +7 -7
- package/Build/Workers/{chunk-I3VVEQQ6.js → chunk-IMC7L6CL.js} +9 -9
- package/Build/Workers/{chunk-JRPAFYGJ.js → chunk-IPBVNANG.js} +17 -17
- package/Build/Workers/{chunk-6J63N735.js → chunk-IUIXI2XJ.js} +6 -6
- package/Build/Workers/{chunk-CGAHG2LR.js → chunk-J3WRL2GC.js} +2 -2
- package/Build/Workers/{chunk-AMJRLIO3.js → chunk-JF6HRK66.js} +11 -11
- package/Build/Workers/{chunk-2ZR6KBRW.js → chunk-JFOADEL2.js} +8 -8
- package/Build/Workers/{chunk-KGQGZ7PF.js → chunk-JNSU4PGT.js} +12 -12
- package/Build/Workers/{chunk-6ZF4QOFM.js → chunk-JPORXJB2.js} +6 -6
- package/Build/Workers/{chunk-6YSUD2OH.js → chunk-JTH56QYP.js} +7 -7
- package/Build/Workers/{chunk-G7PGTG3P.js → chunk-K5QIQSHR.js} +13 -13
- package/Build/Workers/{chunk-H33FCT5U.js → chunk-KN3RXSGH.js} +9 -9
- package/Build/Workers/{chunk-4SC4KVID.js → chunk-KTUWGLXR.js} +10 -10
- package/Build/Workers/{chunk-B3FJJGCH.js → chunk-LBVC3PWG.js} +4 -4
- package/Build/Workers/{chunk-6YT2LZ3Z.js → chunk-LKUMU7VD.js} +4 -4
- package/Build/Workers/{chunk-FARHIBOA.js → chunk-LUA5G72O.js} +1 -1
- package/Build/Workers/{chunk-7X6CLAD2.js → chunk-MSYP7LPX.js} +9 -9
- package/Build/Workers/{chunk-LGMONS4O.js → chunk-MZWPVY6R.js} +7 -7
- package/Build/Workers/{chunk-4SZJ3KRD.js → chunk-N557LIW2.js} +3 -3
- package/Build/Workers/{chunk-45SKJP37.js → chunk-NGTONEWG.js} +4 -4
- package/Build/Workers/{chunk-FRUZKVBP.js → chunk-NLAR3AKL.js} +6 -6
- package/Build/Workers/{chunk-APOATHFZ.js → chunk-OF3WIS5R.js} +4 -4
- package/Build/Workers/{chunk-BQRZMSMM.js → chunk-OHWONB5E.js} +4 -4
- package/Build/Workers/{chunk-QDNIPHD7.js → chunk-OTYYR4HA.js} +12 -12
- package/Build/Workers/{chunk-GCZNJHST.js → chunk-OVJADFWR.js} +5 -5
- package/Build/Workers/{chunk-MPHEIDPB.js → chunk-OWR6KGDV.js} +1 -1
- package/Build/Workers/{chunk-7QPQGSS3.js → chunk-PEZ2F4AC.js} +5 -5
- package/Build/Workers/{chunk-553BNJPP.js → chunk-PJEU2YDM.js} +8 -8
- package/Build/Workers/{chunk-7KOMCIWI.js → chunk-PNJB4ARY.js} +8 -8
- package/Build/Workers/{chunk-2CZLDPAQ.js → chunk-PSGQHI7V.js} +2 -2
- package/Build/Workers/{chunk-EDFDPOY6.js → chunk-PTBF7YWH.js} +1 -1
- package/Build/Workers/{chunk-BIJHMMCD.js → chunk-QICSE57I.js} +4 -4
- package/Build/Workers/{chunk-2VN5W6HA.js → chunk-QM26UZ4G.js} +5 -5
- package/Build/Workers/{chunk-4IXXMXPJ.js → chunk-QMUEVSBY.js} +10 -10
- package/Build/Workers/{chunk-HKSICPYV.js → chunk-QNTU5YFH.js} +1 -1
- package/Build/Workers/{chunk-J2S3WMUZ.js → chunk-RLMDD7LI.js} +6 -6
- package/Build/Workers/{chunk-E7SFSMUX.js → chunk-RWZLJD75.js} +2 -2
- package/Build/Workers/{chunk-4UBPBH32.js → chunk-SCDH4DI7.js} +5 -5
- package/Build/Workers/{chunk-CQB3KRGK.js → chunk-SKWZGTC6.js} +7 -7
- package/Build/Workers/{chunk-5W4ISZGQ.js → chunk-SUTV4NUG.js} +14 -14
- package/Build/Workers/{chunk-J2CUNLQP.js → chunk-T3CBEYZZ.js} +9 -9
- package/Build/Workers/{chunk-5T4DXPEL.js → chunk-T6IEXU63.js} +8 -8
- package/Build/Workers/{chunk-DPTYP7J3.js → chunk-TBIPO5CH.js} +1 -1
- package/Build/Workers/{chunk-37WPNI52.js → chunk-TEAYSUTK.js} +1 -1
- package/Build/Workers/{chunk-5L3PEFKO.js → chunk-TSB4I6D6.js} +1 -1
- package/Build/Workers/{chunk-2ZXYLPPT.js → chunk-ULWGQGIU.js} +2 -2
- package/Build/Workers/{chunk-GZMTBQM2.js → chunk-UTAFOZR6.js} +4 -4
- package/Build/Workers/{chunk-6KA3AJM6.js → chunk-V4BLFYXZ.js} +6 -6
- package/Build/Workers/{chunk-3ZDA3MBK.js → chunk-VH4ZDU2H.js} +6 -6
- package/Build/Workers/{chunk-JUJONRWD.js → chunk-WAJ236EA.js} +11 -11
- package/Build/Workers/{chunk-56MKFDJH.js → chunk-WDTR5ZPN.js} +12 -12
- package/Build/Workers/{chunk-FNI64UKI.js → chunk-WJ74Z47X.js} +5 -5
- package/Build/Workers/{chunk-3PWX65TL.js → chunk-WKYBYW6H.js} +14 -14
- package/Build/Workers/{chunk-G6PDJHNG.js → chunk-WTKUVRNG.js} +7 -7
- package/Build/Workers/{chunk-HAR6Y2HP.js → chunk-XH535OLG.js} +2 -2
- package/Build/Workers/{chunk-LSGHTNF5.js → chunk-XMN6BU5T.js} +13 -13
- package/Build/Workers/{chunk-ET7K6FSD.js → chunk-Y6KZOXMR.js} +14 -14
- package/Build/Workers/{chunk-42I3QSKJ.js → chunk-YGPS3DPM.js} +1 -1
- package/Build/Workers/{chunk-6TWMNB7Q.js → chunk-YMGBVMJH.js} +6 -6
- package/Build/Workers/{chunk-32GOIUYC.js → chunk-ZESIYF5P.js} +5 -5
- package/Build/Workers/{chunk-2LMIHR6B.js → chunk-ZSDJVMQL.js} +2 -2
- package/Build/Workers/combineGeometry.js +24 -24
- package/Build/Workers/createBoxGeometry.js +18 -18
- package/Build/Workers/createBoxOutlineGeometry.js +16 -16
- package/Build/Workers/createCircleGeometry.js +26 -26
- package/Build/Workers/createCircleOutlineGeometry.js +19 -19
- package/Build/Workers/createCoplanarPolygonGeometry.js +33 -33
- package/Build/Workers/createCoplanarPolygonOutlineGeometry.js +31 -31
- package/Build/Workers/createCorridorGeometry.js +29 -29
- package/Build/Workers/createCorridorOutlineGeometry.js +28 -28
- package/Build/Workers/createCylinderGeometry.js +20 -20
- package/Build/Workers/createCylinderOutlineGeometry.js +18 -18
- package/Build/Workers/createEllipseGeometry.js +26 -26
- package/Build/Workers/createEllipseOutlineGeometry.js +19 -19
- package/Build/Workers/createEllipsoidGeometry.js +19 -19
- package/Build/Workers/createEllipsoidOutlineGeometry.js +18 -18
- package/Build/Workers/createFrustumGeometry.js +18 -18
- package/Build/Workers/createFrustumOutlineGeometry.js +18 -18
- package/Build/Workers/createGeometry.js +24 -24
- package/Build/Workers/createGroundPolylineGeometry.js +22 -22
- package/Build/Workers/createPlaneGeometry.js +16 -16
- package/Build/Workers/createPlaneOutlineGeometry.js +15 -15
- package/Build/Workers/createPolygonGeometry.js +32 -32
- package/Build/Workers/createPolygonOutlineGeometry.js +30 -30
- package/Build/Workers/createPolylineGeometry.js +25 -25
- package/Build/Workers/createPolylineVolumeGeometry.js +31 -31
- package/Build/Workers/createPolylineVolumeOutlineGeometry.js +27 -27
- package/Build/Workers/createRectangleGeometry.js +27 -27
- package/Build/Workers/createRectangleOutlineGeometry.js +20 -20
- package/Build/Workers/createSimplePolylineGeometry.js +23 -23
- package/Build/Workers/createSphereGeometry.js +19 -19
- package/Build/Workers/createSphereOutlineGeometry.js +18 -18
- package/Build/Workers/createTaskProcessorWorker.js +3 -3
- package/Build/Workers/createVectorTileClampedPolylines.js +14 -14
- package/Build/Workers/createVectorTileGeometries.js +24 -24
- package/Build/Workers/createVectorTilePoints.js +13 -13
- package/Build/Workers/createVectorTilePolygons.js +22 -22
- package/Build/Workers/createVectorTilePolylines.js +14 -14
- package/Build/Workers/createVerticesFromCesium3DTilesTerrain.js +25 -25
- package/Build/Workers/createVerticesFromGoogleEarthEnterpriseBuffer.js +22 -22
- package/Build/Workers/createVerticesFromHeightmap.js +22 -22
- package/Build/Workers/createVerticesFromQuantizedTerrainMesh.js +20 -20
- package/Build/Workers/createWallGeometry.js +24 -24
- package/Build/Workers/createWallOutlineGeometry.js +23 -23
- package/Build/Workers/decodeDraco.js +10 -10
- package/Build/Workers/decodeGoogleEarthEnterprisePacket.js +5 -5
- package/Build/Workers/decodeI3S.js +10 -10
- package/Build/Workers/gaussianSplatSorter.js +4 -4
- package/Build/Workers/gaussianSplatTextureGenerator.js +4 -4
- package/Build/Workers/incrementallyBuildTerrainPicker.js +10 -10
- package/Build/Workers/transcodeKTX2.js +6 -6
- package/Build/Workers/transferTypedArrayTest.js +1 -1
- package/Build/Workers/upsampleQuantizedTerrainMesh.js +22 -22
- package/Build/Workers/upsampleVerticesFromCesium3DTilesTerrain.js +25 -25
- package/README.md +69 -69
- package/Source/Scene/Model/CustomShader.js +5 -4
- package/Source/Scene/Model/CustomShaderPipelineStage.js +11 -5
- package/Source/Scene/Model/CustomShaderTranslucencyMode.js +8 -0
- package/Source/Scene/Model/MaterialPipelineStage.js +919 -919
- package/Source/Scene/Model/ModelDrawCommand.js +8 -2
- package/Source/Shaders/Model/CPUStylingStageFS.glsl +1 -1
- package/Source/Shaders/Model/CPUStylingStageFS.js +1 -1
- package/Source/Shaders/Model/CPUStylingStageVS.glsl +1 -1
- package/Source/Shaders/Model/CPUStylingStageVS.js +1 -1
- package/Source/Shaders/Model/ModelFS.glsl +13 -0
- package/Source/Shaders/Model/ModelFS.js +13 -0
- package/Source/ThirdParty/Workers/zip-web-worker.js +1 -1
- package/index.d.ts +7 -1
- package/index.js +90 -90
- package/package.json +1 -1
- package/Build/Workers/chunk-27JI7F7B.js +0 -101
- package/Build/Workers/chunk-2B7VLWK3.js +0 -58
- package/Build/Workers/chunk-2OWEFNS4.js +0 -97
- package/Build/Workers/chunk-2Y2KA6PM.js +0 -387
- package/Build/Workers/chunk-2YAONTGQ.js +0 -476
- package/Build/Workers/chunk-324L25HV.js +0 -352
- package/Build/Workers/chunk-3EZBCDBK.js +0 -439
- package/Build/Workers/chunk-3JPA6GA3.js +0 -837
- package/Build/Workers/chunk-3NSMZ3XW.js +0 -1067
- package/Build/Workers/chunk-3QLIXW6V.js +0 -778
- package/Build/Workers/chunk-3SVEN5QG.js +0 -288
- package/Build/Workers/chunk-3WRJXCJS.js +0 -497
- package/Build/Workers/chunk-3WT5VKYM.js +0 -101
- package/Build/Workers/chunk-3YO7HM5H.js +0 -476
- package/Build/Workers/chunk-3ZJ6X3BW.js +0 -57
- package/Build/Workers/chunk-4C4UR2S6.js +0 -682
- package/Build/Workers/chunk-4CQDMEZY.js +0 -2058
- package/Build/Workers/chunk-4DIL24GG.js +0 -1460
- package/Build/Workers/chunk-4DQ3ODGO.js +0 -629
- package/Build/Workers/chunk-4FEDW3WT.js +0 -299
- package/Build/Workers/chunk-4GZLJPDW.js +0 -8366
- package/Build/Workers/chunk-52UUGJQ6.js +0 -288
- package/Build/Workers/chunk-53AFSDGM.js +0 -37
- package/Build/Workers/chunk-54SSO7NS.js +0 -352
- package/Build/Workers/chunk-5A4OWIAY.js +0 -511
- package/Build/Workers/chunk-5DPCF65K.js +0 -162
- package/Build/Workers/chunk-5IOA3NCI.js +0 -8366
- package/Build/Workers/chunk-5MCUZL44.js +0 -455
- package/Build/Workers/chunk-5RMI6LFO.js +0 -692
- package/Build/Workers/chunk-5UHIRI2A.js +0 -1800
- package/Build/Workers/chunk-5VDZEVQX.js +0 -788
- package/Build/Workers/chunk-5VWFNSLF.js +0 -44
- package/Build/Workers/chunk-5WAMP6Z4.js +0 -299
- package/Build/Workers/chunk-5ZMMQ7HE.js +0 -37
- package/Build/Workers/chunk-64VDO4BW.js +0 -114
- package/Build/Workers/chunk-664SI23B.js +0 -368
- package/Build/Workers/chunk-6BNIWSFA.js +0 -940
- package/Build/Workers/chunk-6F4HKBHD.js +0 -352
- package/Build/Workers/chunk-6GNLKYQO.js +0 -114
- package/Build/Workers/chunk-72Q33KL6.js +0 -280
- package/Build/Workers/chunk-73EGVDOC.js +0 -398
- package/Build/Workers/chunk-74HENCNJ.js +0 -171
- package/Build/Workers/chunk-763Q2YKY.js +0 -1483
- package/Build/Workers/chunk-7BQLJI3P.js +0 -692
- package/Build/Workers/chunk-7C2MOK27.js +0 -57
- package/Build/Workers/chunk-7EFYX4FL.js +0 -642
- package/Build/Workers/chunk-7MMYV5PM.js +0 -288
- package/Build/Workers/chunk-7RAUHLDW.js +0 -497
- package/Build/Workers/chunk-ADQVXDEJ.js +0 -2719
- package/Build/Workers/chunk-AFZVC5JN.js +0 -778
- package/Build/Workers/chunk-ASGXCLGL.js +0 -97
- package/Build/Workers/chunk-AVNHAFMV.js +0 -114
- package/Build/Workers/chunk-AWMYTHW4.js +0 -101
- package/Build/Workers/chunk-B5ZUBUPB.js +0 -398
- package/Build/Workers/chunk-BCYABDWF.js +0 -3514
- package/Build/Workers/chunk-BGG3BP2R.js +0 -280
- package/Build/Workers/chunk-BHTWF7UG.js +0 -73
- package/Build/Workers/chunk-BJHSYHOQ.js +0 -97
- package/Build/Workers/chunk-BLZILZWF.js +0 -2719
- package/Build/Workers/chunk-BM6ZG63T.js +0 -171
- package/Build/Workers/chunk-BYTLHM7N.js +0 -414
- package/Build/Workers/chunk-C3G2NDXM.js +0 -162
- package/Build/Workers/chunk-CCPKBCZD.js +0 -171
- package/Build/Workers/chunk-CMAG5O53.js +0 -1483
- package/Build/Workers/chunk-CR6BZUQC.js +0 -1443
- package/Build/Workers/chunk-CXDJ7YNS.js +0 -305
- package/Build/Workers/chunk-D3FNWB3Q.js +0 -138
- package/Build/Workers/chunk-DBM2NHJ5.js +0 -352
- package/Build/Workers/chunk-DIA4J2DB.js +0 -497
- package/Build/Workers/chunk-DVTKM7FF.js +0 -256
- package/Build/Workers/chunk-E3NHG3TR.js +0 -1460
- package/Build/Workers/chunk-E5BSDIGY.js +0 -139
- package/Build/Workers/chunk-EDVAQGDJ.js +0 -2719
- package/Build/Workers/chunk-EE4T7VKT.js +0 -368
- package/Build/Workers/chunk-EFHDO3L2.js +0 -102
- package/Build/Workers/chunk-EJVGOIOW.js +0 -1317
- package/Build/Workers/chunk-ENIF6OQ5.js +0 -139
- package/Build/Workers/chunk-EPVJ5OOH.js +0 -8366
- package/Build/Workers/chunk-ERYOZBVC.js +0 -171
- package/Build/Workers/chunk-F2BQY3GT.js +0 -1317
- package/Build/Workers/chunk-FCSN7XOU.js +0 -55
- package/Build/Workers/chunk-FHM3HFYM.js +0 -1045
- package/Build/Workers/chunk-FRF5LWIM.js +0 -299
- package/Build/Workers/chunk-FSYQE5XE.js +0 -55
- package/Build/Workers/chunk-FTHCZAWE.js +0 -44
- package/Build/Workers/chunk-FTXEOX64.js +0 -1067
- package/Build/Workers/chunk-FYZVCB32.js +0 -75
- package/Build/Workers/chunk-G2KELS4I.js +0 -138
- package/Build/Workers/chunk-GAQXLBFJ.js +0 -1483
- package/Build/Workers/chunk-GCPD37SU.js +0 -1054
- package/Build/Workers/chunk-GEH53ULL.js +0 -299
- package/Build/Workers/chunk-GJFIEALZ.js +0 -387
- package/Build/Workers/chunk-GLA2PT5T.js +0 -476
- package/Build/Workers/chunk-GMOKUODV.js +0 -352
- package/Build/Workers/chunk-GNGGEDZK.js +0 -352
- package/Build/Workers/chunk-GNGZG6C6.js +0 -162
- package/Build/Workers/chunk-GWLEBUVI.js +0 -2058
- package/Build/Workers/chunk-GYIGOBV2.js +0 -439
- package/Build/Workers/chunk-H2MM7FMU.js +0 -1054
- package/Build/Workers/chunk-H3BSU65R.js +0 -1067
- package/Build/Workers/chunk-HBL3QZ2L.js +0 -642
- package/Build/Workers/chunk-HC6DDPFU.js +0 -198
- package/Build/Workers/chunk-HEFUSHA6.js +0 -3514
- package/Build/Workers/chunk-HEKLTOOR.js +0 -1443
- package/Build/Workers/chunk-HHN2M3ES.js +0 -682
- package/Build/Workers/chunk-HHUKBKWS.js +0 -414
- package/Build/Workers/chunk-HKII76UV.js +0 -1800
- package/Build/Workers/chunk-HLIXASKN.js +0 -476
- package/Build/Workers/chunk-HM4MH5IG.js +0 -138
- package/Build/Workers/chunk-HWUHUN7Z.js +0 -387
- package/Build/Workers/chunk-I7LWED3Z.js +0 -101
- package/Build/Workers/chunk-IB2XQV6U.js +0 -101
- package/Build/Workers/chunk-IC2JHDCI.js +0 -114
- package/Build/Workers/chunk-IEBTKCMB.js +0 -497
- package/Build/Workers/chunk-IEEHNZ36.js +0 -241
- package/Build/Workers/chunk-IHOM6QXV.js +0 -439
- package/Build/Workers/chunk-IK4D64GY.js +0 -439
- package/Build/Workers/chunk-IKMU6YHA.js +0 -288
- package/Build/Workers/chunk-IRG63TBY.js +0 -55
- package/Build/Workers/chunk-IY53MZW2.js +0 -58
- package/Build/Workers/chunk-IYXLSOLF.js +0 -692
- package/Build/Workers/chunk-J4PNHKWO.js +0 -2719
- package/Build/Workers/chunk-JFLJS4QU.js +0 -1443
- package/Build/Workers/chunk-JJD7S2CV.js +0 -3514
- package/Build/Workers/chunk-JJWMDUOJ.js +0 -44
- package/Build/Workers/chunk-JM4TFRYQ.js +0 -163
- package/Build/Workers/chunk-JNNIPGJU.js +0 -163
- package/Build/Workers/chunk-JOQFYJZ2.js +0 -692
- package/Build/Workers/chunk-JQ7IQ56G.js +0 -837
- package/Build/Workers/chunk-JWEZXKBE.js +0 -73
- package/Build/Workers/chunk-K2PUGKEO.js +0 -2058
- package/Build/Workers/chunk-KFOT2YV5.js +0 -138
- package/Build/Workers/chunk-KMJD5APO.js +0 -162
- package/Build/Workers/chunk-KOVKY3HB.js +0 -198
- package/Build/Workers/chunk-KQ4ET526.js +0 -163
- package/Build/Workers/chunk-KWFCDTXS.js +0 -940
- package/Build/Workers/chunk-KWX3CJFT.js +0 -198
- package/Build/Workers/chunk-L2QIVAZV.js +0 -3514
- package/Build/Workers/chunk-L33HPENB.js +0 -75
- package/Build/Workers/chunk-LENXRROQ.js +0 -398
- package/Build/Workers/chunk-LFQ63ZU4.js +0 -455
- package/Build/Workers/chunk-LHJDLAZT.js +0 -1483
- package/Build/Workers/chunk-LJHG4PJQ.js +0 -305
- package/Build/Workers/chunk-LNS36LUZ.js +0 -2058
- package/Build/Workers/chunk-LPJHTJDQ.js +0 -305
- package/Build/Workers/chunk-LRW2QXMW.js +0 -352
- package/Build/Workers/chunk-LUUEGFLT.js +0 -305
- package/Build/Workers/chunk-LVU4AZC6.js +0 -219
- package/Build/Workers/chunk-LW2VGHDM.js +0 -1800
- package/Build/Workers/chunk-LXM2ZC4V.js +0 -288
- package/Build/Workers/chunk-LXMLERGC.js +0 -1067
- package/Build/Workers/chunk-LXOUU2I5.js +0 -219
- package/Build/Workers/chunk-M7EEEKQE.js +0 -476
- package/Build/Workers/chunk-MB2ZJQR3.js +0 -55
- package/Build/Workers/chunk-MCJRXFRL.js +0 -102
- package/Build/Workers/chunk-MCNY7SPD.js +0 -139
- package/Build/Workers/chunk-MEFWVMG6.js +0 -788
- package/Build/Workers/chunk-MHEKNHOF.js +0 -511
- package/Build/Workers/chunk-MLL4AAXV.js +0 -1460
- package/Build/Workers/chunk-MPCZC3G6.js +0 -414
- package/Build/Workers/chunk-MRLJERN3.js +0 -114
- package/Build/Workers/chunk-MWN26ZEM.js +0 -280
- package/Build/Workers/chunk-MXKQUDTP.js +0 -55
- package/Build/Workers/chunk-NEF7XO5W.js +0 -940
- package/Build/Workers/chunk-NIWB6UMY.js +0 -198
- package/Build/Workers/chunk-NJEG7WRW.js +0 -387
- package/Build/Workers/chunk-NL7US44X.js +0 -171
- package/Build/Workers/chunk-NOJAQPXU.js +0 -102
- package/Build/Workers/chunk-NSRZZEHH.js +0 -455
- package/Build/Workers/chunk-NUMQ72QV.js +0 -55
- package/Build/Workers/chunk-NXZJKIYD.js +0 -97
- package/Build/Workers/chunk-O224ZEA5.js +0 -58
- package/Build/Workers/chunk-O4MZOV3C.js +0 -414
- package/Build/Workers/chunk-O5ICO3AS.js +0 -682
- package/Build/Workers/chunk-O5QH7XD5.js +0 -629
- package/Build/Workers/chunk-O6T3T3V3.js +0 -97
- package/Build/Workers/chunk-OAFZ26QL.js +0 -837
- package/Build/Workers/chunk-OBM2JYMG.js +0 -75
- package/Build/Workers/chunk-OBQVOEPZ.js +0 -124
- package/Build/Workers/chunk-OC63Z35M.js +0 -280
- package/Build/Workers/chunk-OD7UYXFV.js +0 -352
- package/Build/Workers/chunk-ODZZZGXK.js +0 -219
- package/Build/Workers/chunk-OEAC5XUG.js +0 -73
- package/Build/Workers/chunk-OFTWEOW2.js +0 -1483
- package/Build/Workers/chunk-OIJH6LAY.js +0 -497
- package/Build/Workers/chunk-OJFVD5ZS.js +0 -778
- package/Build/Workers/chunk-OJNPKCEL.js +0 -73
- package/Build/Workers/chunk-OOIZ7CHP.js +0 -114
- package/Build/Workers/chunk-OQK27J4J.js +0 -139
- package/Build/Workers/chunk-OTDNJAYJ.js +0 -55
- package/Build/Workers/chunk-OX4DGIUJ.js +0 -788
- package/Build/Workers/chunk-PEEYBEL5.js +0 -2058
- package/Build/Workers/chunk-PEUDXOFI.js +0 -241
- package/Build/Workers/chunk-PGYA2CMO.js +0 -642
- package/Build/Workers/chunk-PKXFFIEZ.js +0 -57
- package/Build/Workers/chunk-PQLZOYZE.js +0 -642
- package/Build/Workers/chunk-PSDWIJMU.js +0 -219
- package/Build/Workers/chunk-PU44PXY2.js +0 -75
- package/Build/Workers/chunk-PW3GQAXA.js +0 -3514
- package/Build/Workers/chunk-Q2X2Z7JH.js +0 -241
- package/Build/Workers/chunk-Q2YRPH7V.js +0 -1067
- package/Build/Workers/chunk-Q36VXWGP.js +0 -57
- package/Build/Workers/chunk-Q4XPVYXJ.js +0 -476
- package/Build/Workers/chunk-QEGQDFX2.js +0 -1045
- package/Build/Workers/chunk-QFN5B75P.js +0 -1054
- package/Build/Workers/chunk-QGXE4VZ3.js +0 -55
- package/Build/Workers/chunk-QIEHP7O4.js +0 -280
- package/Build/Workers/chunk-QOLOPE4O.js +0 -1317
- package/Build/Workers/chunk-QY55DT53.js +0 -97
- package/Build/Workers/chunk-R2AFDOIY.js +0 -778
- package/Build/Workers/chunk-R3PTQZ6H.js +0 -44
- package/Build/Workers/chunk-R5U3MYPS.js +0 -198
- package/Build/Workers/chunk-RBLCJVK6.js +0 -73
- package/Build/Workers/chunk-RGD6RGTH.js +0 -138
- package/Build/Workers/chunk-RJ564LVX.js +0 -398
- package/Build/Workers/chunk-RJIH4MDC.js +0 -241
- package/Build/Workers/chunk-RJVB3K2X.js +0 -511
- package/Build/Workers/chunk-RNZ5L3W4.js +0 -387
- package/Build/Workers/chunk-RO7SDGOD.js +0 -352
- package/Build/Workers/chunk-RORZNBGJ.js +0 -299
- package/Build/Workers/chunk-RRBGLANL.js +0 -55
- package/Build/Workers/chunk-RT7PY6BH.js +0 -2719
- package/Build/Workers/chunk-RTJ6L5O4.js +0 -163
- package/Build/Workers/chunk-SAD42JSM.js +0 -102
- package/Build/Workers/chunk-SBR7MW44.js +0 -139
- package/Build/Workers/chunk-SCF2OVAZ.js +0 -219
- package/Build/Workers/chunk-SCNCHSTQ.js +0 -642
- package/Build/Workers/chunk-SFM3GNS2.js +0 -682
- package/Build/Workers/chunk-SG56ZOPD.js +0 -788
- package/Build/Workers/chunk-SHQEATE2.js +0 -1045
- package/Build/Workers/chunk-SJX7UJNW.js +0 -241
- package/Build/Workers/chunk-SKXE77AM.js +0 -139
- package/Build/Workers/chunk-SLYUIIFB.js +0 -455
- package/Build/Workers/chunk-SPL7JK6K.js +0 -1054
- package/Build/Workers/chunk-SPPYSEH2.js +0 -1460
- package/Build/Workers/chunk-SQSWONTJ.js +0 -241
- package/Build/Workers/chunk-SRLJWNU2.js +0 -368
- package/Build/Workers/chunk-SSE2O2SB.js +0 -1460
- package/Build/Workers/chunk-SX6GJD6B.js +0 -837
- package/Build/Workers/chunk-SXISWCV7.js +0 -58
- package/Build/Workers/chunk-SYCWSSRX.js +0 -1443
- package/Build/Workers/chunk-SZELHE7Q.js +0 -163
- package/Build/Workers/chunk-SZQC2TUH.js +0 -368
- package/Build/Workers/chunk-T4LDJBKR.js +0 -124
- package/Build/Workers/chunk-TAWVKT4B.js +0 -58
- package/Build/Workers/chunk-TBASKFFL.js +0 -124
- package/Build/Workers/chunk-TBEKWAR5.js +0 -73
- package/Build/Workers/chunk-TDGGEIZE.js +0 -398
- package/Build/Workers/chunk-TE277WT3.js +0 -280
- package/Build/Workers/chunk-TEZGNCXH.js +0 -8366
- package/Build/Workers/chunk-TFL2ZV77.js +0 -692
- package/Build/Workers/chunk-THWXTO7B.js +0 -57
- package/Build/Workers/chunk-TIQZUI5N.js +0 -44
- package/Build/Workers/chunk-TKJHRY4V.js +0 -511
- package/Build/Workers/chunk-TLXEQ5QY.js +0 -778
- package/Build/Workers/chunk-TQ63SH2Z.js +0 -352
- package/Build/Workers/chunk-TSNKYHSC.js +0 -305
- package/Build/Workers/chunk-TYQ7MNMK.js +0 -37
- package/Build/Workers/chunk-U267N6IJ.js +0 -299
- package/Build/Workers/chunk-U3VI26GL.js +0 -162
- package/Build/Workers/chunk-U77FLUQF.js +0 -368
- package/Build/Workers/chunk-UIMHSWDJ.js +0 -455
- package/Build/Workers/chunk-UIYQEJ5H.js +0 -1054
- package/Build/Workers/chunk-UJ72JOGF.js +0 -511
- package/Build/Workers/chunk-ULWO6TCN.js +0 -352
- package/Build/Workers/chunk-UO3AWZR3.js +0 -352
- package/Build/Workers/chunk-UQSQNTEF.js +0 -368
- package/Build/Workers/chunk-USWXYJRX.js +0 -1045
- package/Build/Workers/chunk-UTDSEOTC.js +0 -288
- package/Build/Workers/chunk-UTXXZ7XH.js +0 -940
- package/Build/Workers/chunk-UUKLWTJC.js +0 -2719
- package/Build/Workers/chunk-UY7I27VQ.js +0 -1800
- package/Build/Workers/chunk-UZXJSLDO.js +0 -3514
- package/Build/Workers/chunk-V2TRFTCU.js +0 -1317
- package/Build/Workers/chunk-V4I3IKAK.js +0 -1460
- package/Build/Workers/chunk-V7QHEF6O.js +0 -1317
- package/Build/Workers/chunk-VFC54WB7.js +0 -940
- package/Build/Workers/chunk-VG7NX64T.js +0 -37
- package/Build/Workers/chunk-VIMRGSM5.js +0 -256
- package/Build/Workers/chunk-VL4QTEZC.js +0 -138
- package/Build/Workers/chunk-VLB25GGE.js +0 -439
- package/Build/Workers/chunk-VP2OAU4C.js +0 -124
- package/Build/Workers/chunk-VVKDT4J7.js +0 -837
- package/Build/Workers/chunk-VXDOONLH.js +0 -162
- package/Build/Workers/chunk-W2EK42GB.js +0 -75
- package/Build/Workers/chunk-W2OMUTYA.js +0 -1800
- package/Build/Workers/chunk-W3LNGBJU.js +0 -44
- package/Build/Workers/chunk-W4DV7TAL.js +0 -8366
- package/Build/Workers/chunk-WDMHDACX.js +0 -1800
- package/Build/Workers/chunk-WF224D4A.js +0 -642
- package/Build/Workers/chunk-WFTPZ3ZX.js +0 -788
- package/Build/Workers/chunk-WHOEQFL4.js +0 -682
- package/Build/Workers/chunk-WLIQ26XU.js +0 -455
- package/Build/Workers/chunk-WOEPS2UA.js +0 -171
- package/Build/Workers/chunk-WWLWTSMV.js +0 -55
- package/Build/Workers/chunk-WX2ZANQC.js +0 -940
- package/Build/Workers/chunk-WZJEAPEP.js +0 -629
- package/Build/Workers/chunk-XEB4GEXW.js +0 -629
- package/Build/Workers/chunk-XFKTM6GN.js +0 -2058
- package/Build/Workers/chunk-XHGB5IOL.js +0 -1045
- package/Build/Workers/chunk-XHNWVOIJ.js +0 -219
- package/Build/Workers/chunk-XKBR7TJB.js +0 -398
- package/Build/Workers/chunk-XMIENZET.js +0 -256
- package/Build/Workers/chunk-XNKQLSHI.js +0 -629
- package/Build/Workers/chunk-XOXF37BU.js +0 -1317
- package/Build/Workers/chunk-XXD3TQVI.js +0 -837
- package/Build/Workers/chunk-XYRT4RDI.js +0 -1045
- package/Build/Workers/chunk-XZINQPR6.js +0 -124
- package/Build/Workers/chunk-XZN7KCY3.js +0 -1054
- package/Build/Workers/chunk-YC6PFDXQ.js +0 -8366
- package/Build/Workers/chunk-YCTK62TY.js +0 -1483
- package/Build/Workers/chunk-YFJB3US4.js +0 -102
- package/Build/Workers/chunk-YLKTSY65.js +0 -414
- package/Build/Workers/chunk-YLSZYTTO.js +0 -102
- package/Build/Workers/chunk-YMXATXRN.js +0 -57
- package/Build/Workers/chunk-YQXKIGXX.js +0 -414
- package/Build/Workers/chunk-YR3LX3PR.js +0 -497
- package/Build/Workers/chunk-YVRD2PO5.js +0 -124
- package/Build/Workers/chunk-YWPKCFKZ.js +0 -1443
- package/Build/Workers/chunk-YWSB7PZP.js +0 -511
- package/Build/Workers/chunk-Z24A5EMJ.js +0 -387
- package/Build/Workers/chunk-Z4IW5XUY.js +0 -788
- package/Build/Workers/chunk-Z5MHVJGN.js +0 -778
- package/Build/Workers/chunk-ZBRVFEGF.js +0 -256
- package/Build/Workers/chunk-ZCPCQJBX.js +0 -198
- package/Build/Workers/chunk-ZEEVOFG2.js +0 -256
- package/Build/Workers/chunk-ZFHCP7RN.js +0 -692
- package/Build/Workers/chunk-ZHHEFNHL.js +0 -37
- package/Build/Workers/chunk-ZI5GDNEV.js +0 -305
- package/Build/Workers/chunk-ZS7KQSEM.js +0 -439
- package/Build/Workers/chunk-ZVXETFPZ.js +0 -1067
- package/Build/Workers/chunk-ZXZTWDTN.js +0 -682
- package/Build/Workers/chunk-ZYTMDBCR.js +0 -1443
|
@@ -1,919 +1,919 @@
|
|
|
1
|
-
import defined from "../../Core/defined.js";
|
|
2
|
-
import Cartesian3 from "../../Core/Cartesian3.js";
|
|
3
|
-
import Cartesian4 from "../../Core/Cartesian4.js";
|
|
4
|
-
import Matrix3 from "../../Core/Matrix3.js";
|
|
5
|
-
import ShaderDestination from "../../Renderer/ShaderDestination.js";
|
|
6
|
-
import Pass from "../../Renderer/Pass.js";
|
|
7
|
-
import MaterialStageFS from "../../Shaders/Model/MaterialStageFS.js";
|
|
8
|
-
import AlphaMode from "../AlphaMode.js";
|
|
9
|
-
import ModelComponents from "../ModelComponents.js";
|
|
10
|
-
import VertexAttributeSemantic from "../VertexAttributeSemantic.js";
|
|
11
|
-
import LightingModel from "./LightingModel.js";
|
|
12
|
-
import ModelUtility from "./ModelUtility.js";
|
|
13
|
-
|
|
14
|
-
const { Material, MetallicRoughness, SpecularGlossiness, Specular, Clearcoat } =
|
|
15
|
-
ModelComponents;
|
|
16
|
-
|
|
17
|
-
/**
|
|
18
|
-
* The material pipeline stage processes textures and other uniforms needed
|
|
19
|
-
* to render a primitive. This handles the following material types:
|
|
20
|
-
* <ul>
|
|
21
|
-
* <li>Basic glTF materials (PBR metallic roughness model)</li>
|
|
22
|
-
* <li>The `KHR_materials_specular` glTF extension</li>
|
|
23
|
-
* <li>The `KHR_materials_pbrSpecularGlossiness` glTF extension</li>
|
|
24
|
-
* <li>The `KHR_materials_unlit` glTF extension</li>
|
|
25
|
-
* </ul>
|
|
26
|
-
*
|
|
27
|
-
* @namespace MaterialPipelineStage
|
|
28
|
-
*
|
|
29
|
-
* @private
|
|
30
|
-
*/
|
|
31
|
-
const MaterialPipelineStage = {
|
|
32
|
-
name: "MaterialPipelineStage", // Helps with debugging
|
|
33
|
-
|
|
34
|
-
// Expose some methods for testing
|
|
35
|
-
_processTexture: processTexture,
|
|
36
|
-
_processTextureTransform: processTextureTransform,
|
|
37
|
-
};
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Process a primitive. This modifies the following parts of the render
|
|
41
|
-
* resources:
|
|
42
|
-
* <ul>
|
|
43
|
-
* <li>Modifies the shader to include the material processing stage</li>
|
|
44
|
-
* <li>Modifies the shader to include additional uniforms for textures and other rendering details</li>
|
|
45
|
-
* <li>Modifies the lighting options to set either PBR or unlit lighting</li>
|
|
46
|
-
* <li>Sets the render state for back-face culling</li>
|
|
47
|
-
* </ul>
|
|
48
|
-
* @param {PrimitiveRenderResources} renderResources The render resources for the primitive
|
|
49
|
-
* @param {ModelComponents.Primitive} primitive The primitive to be rendered
|
|
50
|
-
* @param {FrameState} frameState The frame state.
|
|
51
|
-
* @private
|
|
52
|
-
*/
|
|
53
|
-
MaterialPipelineStage.process = function (
|
|
54
|
-
renderResources,
|
|
55
|
-
primitive,
|
|
56
|
-
frameState,
|
|
57
|
-
) {
|
|
58
|
-
// gltf-pipeline automatically creates a default material so this will always
|
|
59
|
-
// be defined.
|
|
60
|
-
const material = primitive.material;
|
|
61
|
-
const { model, uniformMap, shaderBuilder } = renderResources;
|
|
62
|
-
|
|
63
|
-
// Classification models only use position and feature ID attributes,
|
|
64
|
-
// so textures should be disabled to avoid compile errors.
|
|
65
|
-
const hasClassification = defined(model.classificationType);
|
|
66
|
-
const disableTextures = hasClassification;
|
|
67
|
-
|
|
68
|
-
// Collect the texture coordinate sets actually present in the geometry.
|
|
69
|
-
// Some models reference a texture whose UV set (e.g. TEXCOORD_0) does not
|
|
70
|
-
// exist on the mesh. If we still generate a `TEXCOORD_*` define for such a
|
|
71
|
-
// texture, the fragment shader would reference an undeclared
|
|
72
|
-
// `v_texCoord_n` varying and fail to compile, so those textures are skipped.
|
|
73
|
-
const texCoordSets = new Set();
|
|
74
|
-
const attributes = primitive.attributes;
|
|
75
|
-
for (let i = 0; i < attributes.length; i++) {
|
|
76
|
-
const attribute = attributes[i];
|
|
77
|
-
if (
|
|
78
|
-
attribute.semantic === VertexAttributeSemantic.TEXCOORD &&
|
|
79
|
-
defined(attribute.setIndex)
|
|
80
|
-
) {
|
|
81
|
-
texCoordSets.add(attribute.setIndex);
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// When textures are loaded incrementally, fall back to a default 1x1 texture
|
|
86
|
-
const { defaultTexture, defaultNormalTexture, defaultEmissiveTexture } =
|
|
87
|
-
frameState.context;
|
|
88
|
-
|
|
89
|
-
processMaterialUniforms(
|
|
90
|
-
material,
|
|
91
|
-
uniformMap,
|
|
92
|
-
shaderBuilder,
|
|
93
|
-
defaultTexture,
|
|
94
|
-
defaultNormalTexture,
|
|
95
|
-
defaultEmissiveTexture,
|
|
96
|
-
disableTextures,
|
|
97
|
-
texCoordSets,
|
|
98
|
-
);
|
|
99
|
-
|
|
100
|
-
if (defined(material.specularGlossiness)) {
|
|
101
|
-
processSpecularGlossinessUniforms(
|
|
102
|
-
material.specularGlossiness,
|
|
103
|
-
uniformMap,
|
|
104
|
-
shaderBuilder,
|
|
105
|
-
defaultTexture,
|
|
106
|
-
disableTextures,
|
|
107
|
-
texCoordSets,
|
|
108
|
-
);
|
|
109
|
-
} else {
|
|
110
|
-
if (
|
|
111
|
-
defined(material.specular) &&
|
|
112
|
-
ModelUtility.supportedExtensions.KHR_materials_specular
|
|
113
|
-
) {
|
|
114
|
-
processSpecularUniforms(
|
|
115
|
-
material.specular,
|
|
116
|
-
uniformMap,
|
|
117
|
-
shaderBuilder,
|
|
118
|
-
defaultTexture,
|
|
119
|
-
disableTextures,
|
|
120
|
-
texCoordSets,
|
|
121
|
-
);
|
|
122
|
-
}
|
|
123
|
-
if (
|
|
124
|
-
defined(material.anisotropy) &&
|
|
125
|
-
ModelUtility.supportedExtensions.KHR_materials_anisotropy
|
|
126
|
-
) {
|
|
127
|
-
processAnisotropyUniforms(
|
|
128
|
-
material.anisotropy,
|
|
129
|
-
uniformMap,
|
|
130
|
-
shaderBuilder,
|
|
131
|
-
defaultTexture,
|
|
132
|
-
disableTextures,
|
|
133
|
-
texCoordSets,
|
|
134
|
-
);
|
|
135
|
-
}
|
|
136
|
-
if (
|
|
137
|
-
defined(material.clearcoat) &&
|
|
138
|
-
ModelUtility.supportedExtensions.KHR_materials_clearcoat
|
|
139
|
-
) {
|
|
140
|
-
processClearcoatUniforms(
|
|
141
|
-
material.clearcoat,
|
|
142
|
-
uniformMap,
|
|
143
|
-
shaderBuilder,
|
|
144
|
-
defaultTexture,
|
|
145
|
-
disableTextures,
|
|
146
|
-
texCoordSets,
|
|
147
|
-
);
|
|
148
|
-
}
|
|
149
|
-
processMetallicRoughnessUniforms(
|
|
150
|
-
material.metallicRoughness,
|
|
151
|
-
uniformMap,
|
|
152
|
-
shaderBuilder,
|
|
153
|
-
defaultTexture,
|
|
154
|
-
disableTextures,
|
|
155
|
-
texCoordSets,
|
|
156
|
-
);
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
// If the primitive does not have normals, fall back to unlit lighting.
|
|
160
|
-
const hasNormals = ModelUtility.getAttributeBySemantic(
|
|
161
|
-
primitive,
|
|
162
|
-
VertexAttributeSemantic.NORMAL,
|
|
163
|
-
);
|
|
164
|
-
|
|
165
|
-
// Disable PointCloud normals if the user explicitly turned them off.
|
|
166
|
-
const disablePointCloudNormals =
|
|
167
|
-
defined(model.pointCloudShading) && !model.pointCloudShading.normalShading;
|
|
168
|
-
|
|
169
|
-
// Classification models will be rendered as unlit.
|
|
170
|
-
const lightingOptions = renderResources.lightingOptions;
|
|
171
|
-
if (
|
|
172
|
-
material.unlit ||
|
|
173
|
-
!hasNormals ||
|
|
174
|
-
hasClassification ||
|
|
175
|
-
disablePointCloudNormals
|
|
176
|
-
) {
|
|
177
|
-
lightingOptions.lightingModel = LightingModel.UNLIT;
|
|
178
|
-
} else {
|
|
179
|
-
lightingOptions.lightingModel = LightingModel.PBR;
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
// Configure back-face culling
|
|
183
|
-
const cull = model.backFaceCulling && !material.doubleSided;
|
|
184
|
-
renderResources.renderStateOptions.cull.enabled = cull;
|
|
185
|
-
|
|
186
|
-
const alphaOptions = renderResources.alphaOptions;
|
|
187
|
-
if (material.alphaMode === AlphaMode.BLEND) {
|
|
188
|
-
alphaOptions.pass = Pass.TRANSLUCENT;
|
|
189
|
-
} else if (material.alphaMode === AlphaMode.MASK) {
|
|
190
|
-
alphaOptions.alphaCutoff = material.alphaCutoff;
|
|
191
|
-
}
|
|
192
|
-
|
|
193
|
-
shaderBuilder.addFragmentLines(MaterialStageFS);
|
|
194
|
-
|
|
195
|
-
if (material.doubleSided) {
|
|
196
|
-
shaderBuilder.addDefine(
|
|
197
|
-
"HAS_DOUBLE_SIDED_MATERIAL",
|
|
198
|
-
undefined,
|
|
199
|
-
ShaderDestination.BOTH,
|
|
200
|
-
);
|
|
201
|
-
}
|
|
202
|
-
};
|
|
203
|
-
|
|
204
|
-
/**
|
|
205
|
-
* Process a single texture transformation and add it to the shader and uniform map.
|
|
206
|
-
*
|
|
207
|
-
* @param {ShaderBuilder} shaderBuilder The shader builder to modify
|
|
208
|
-
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
209
|
-
* @param {ModelComponents.TextureReader} textureReader The texture to add to the shader
|
|
210
|
-
* @param {string} uniformName The name of the sampler uniform such as <code>u_baseColorTexture</code>
|
|
211
|
-
* @param {string} defineName The name of the texture for use in the defines, minus any prefix or suffix. For example, "BASE_COLOR" or "EMISSIVE"
|
|
212
|
-
*
|
|
213
|
-
* @private
|
|
214
|
-
*/
|
|
215
|
-
function processTextureTransform(
|
|
216
|
-
shaderBuilder,
|
|
217
|
-
uniformMap,
|
|
218
|
-
textureReader,
|
|
219
|
-
uniformName,
|
|
220
|
-
defineName,
|
|
221
|
-
) {
|
|
222
|
-
// Add a define to enable the texture transformation code in the shader.
|
|
223
|
-
const transformDefine = `HAS_${defineName}_TEXTURE_TRANSFORM`;
|
|
224
|
-
shaderBuilder.addDefine(
|
|
225
|
-
transformDefine,
|
|
226
|
-
undefined,
|
|
227
|
-
ShaderDestination.FRAGMENT,
|
|
228
|
-
);
|
|
229
|
-
|
|
230
|
-
// Add a uniform for the transformation matrix
|
|
231
|
-
const transformUniformName = `${uniformName}Transform`;
|
|
232
|
-
shaderBuilder.addUniform(
|
|
233
|
-
"mat3",
|
|
234
|
-
transformUniformName,
|
|
235
|
-
ShaderDestination.FRAGMENT,
|
|
236
|
-
);
|
|
237
|
-
uniformMap[transformUniformName] = function () {
|
|
238
|
-
return textureReader.transform;
|
|
239
|
-
};
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
/**
|
|
243
|
-
* Process a single texture scale and add it to the shader and uniform map.
|
|
244
|
-
*
|
|
245
|
-
* @param {ShaderBuilder} shaderBuilder The shader builder to modify
|
|
246
|
-
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
247
|
-
* @param {ModelComponents.TextureReader} textureReader The texture to add to the shader
|
|
248
|
-
* @param {string} uniformName The name of the sampler uniform such as <code>u_baseColorTexture</code>
|
|
249
|
-
* @param {string} defineName The name of the texture for use in the defines, minus any prefix or suffix. For example, "BASE_COLOR" or "EMISSIVE"
|
|
250
|
-
*
|
|
251
|
-
* @private
|
|
252
|
-
*/
|
|
253
|
-
function processTextureScale(
|
|
254
|
-
shaderBuilder,
|
|
255
|
-
uniformMap,
|
|
256
|
-
textureReader,
|
|
257
|
-
uniformName,
|
|
258
|
-
defineName,
|
|
259
|
-
) {
|
|
260
|
-
// Add a define to enable the texture transformation code in the shader.
|
|
261
|
-
const transformDefine = `HAS_${defineName}_TEXTURE_SCALE`;
|
|
262
|
-
shaderBuilder.addDefine(
|
|
263
|
-
transformDefine,
|
|
264
|
-
undefined,
|
|
265
|
-
ShaderDestination.FRAGMENT,
|
|
266
|
-
);
|
|
267
|
-
|
|
268
|
-
// Add a uniform for the transformation matrix
|
|
269
|
-
const scaleUniformName = `${uniformName}Scale`;
|
|
270
|
-
shaderBuilder.addUniform(
|
|
271
|
-
"float",
|
|
272
|
-
scaleUniformName,
|
|
273
|
-
ShaderDestination.FRAGMENT,
|
|
274
|
-
);
|
|
275
|
-
uniformMap[scaleUniformName] = function () {
|
|
276
|
-
return textureReader.scale;
|
|
277
|
-
};
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
/**
|
|
281
|
-
* Process a single texture and add it to the shader and uniform map.
|
|
282
|
-
*
|
|
283
|
-
* @param {ShaderBuilder} shaderBuilder The shader builder to modify
|
|
284
|
-
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
285
|
-
* @param {ModelComponents.TextureReader} textureReader The texture to add to the shader
|
|
286
|
-
* @param {string} uniformName The name of the sampler uniform such as <code>u_baseColorTexture</code>
|
|
287
|
-
* @param {string} defineName The name of the texture for use in the defines, minus any prefix or suffix. For example, "BASE_COLOR" or "EMISSIVE"
|
|
288
|
-
*
|
|
289
|
-
* @private
|
|
290
|
-
*/
|
|
291
|
-
function processTexture(
|
|
292
|
-
shaderBuilder,
|
|
293
|
-
uniformMap,
|
|
294
|
-
textureReader,
|
|
295
|
-
uniformName,
|
|
296
|
-
defineName,
|
|
297
|
-
defaultTexture,
|
|
298
|
-
texCoordSets,
|
|
299
|
-
) {
|
|
300
|
-
// If the texture references a texture coordinate set that is not present in
|
|
301
|
-
// the geometry, skip it entirely. Otherwise the generated fragment shader
|
|
302
|
-
// would use an undeclared `v_texCoord_n` varying and fail to compile.
|
|
303
|
-
if (!texCoordSets.has(textureReader.texCoord)) {
|
|
304
|
-
return;
|
|
305
|
-
}
|
|
306
|
-
|
|
307
|
-
// Add a uniform for the texture itself
|
|
308
|
-
shaderBuilder.addUniform(
|
|
309
|
-
"sampler2D",
|
|
310
|
-
uniformName,
|
|
311
|
-
ShaderDestination.FRAGMENT,
|
|
312
|
-
);
|
|
313
|
-
uniformMap[uniformName] = function () {
|
|
314
|
-
return textureReader.texture ?? defaultTexture;
|
|
315
|
-
};
|
|
316
|
-
|
|
317
|
-
// Add a #define directive to enable using the texture in the shader
|
|
318
|
-
const textureDefine = `HAS_${defineName}_TEXTURE`;
|
|
319
|
-
shaderBuilder.addDefine(textureDefine, undefined, ShaderDestination.FRAGMENT);
|
|
320
|
-
|
|
321
|
-
// Add a #define to tell the shader which texture coordinates varying to use.
|
|
322
|
-
const texCoordIndex = textureReader.texCoord;
|
|
323
|
-
const texCoordVarying = `v_texCoord_${texCoordIndex}`;
|
|
324
|
-
const texCoordDefine = `TEXCOORD_${defineName}`;
|
|
325
|
-
shaderBuilder.addDefine(
|
|
326
|
-
texCoordDefine,
|
|
327
|
-
texCoordVarying,
|
|
328
|
-
ShaderDestination.FRAGMENT,
|
|
329
|
-
);
|
|
330
|
-
|
|
331
|
-
// Some textures have matrix transforms (e.g. for texture atlases). Add those
|
|
332
|
-
// to the shader if present.
|
|
333
|
-
const textureTransform = textureReader.transform;
|
|
334
|
-
if (
|
|
335
|
-
defined(textureTransform) &&
|
|
336
|
-
!Matrix3.equals(textureTransform, Matrix3.IDENTITY)
|
|
337
|
-
) {
|
|
338
|
-
processTextureTransform(
|
|
339
|
-
shaderBuilder,
|
|
340
|
-
uniformMap,
|
|
341
|
-
textureReader,
|
|
342
|
-
uniformName,
|
|
343
|
-
defineName,
|
|
344
|
-
);
|
|
345
|
-
}
|
|
346
|
-
|
|
347
|
-
const { scale } = textureReader;
|
|
348
|
-
if (defined(scale) && scale !== 1.0) {
|
|
349
|
-
processTextureScale(
|
|
350
|
-
shaderBuilder,
|
|
351
|
-
uniformMap,
|
|
352
|
-
textureReader,
|
|
353
|
-
uniformName,
|
|
354
|
-
defineName,
|
|
355
|
-
);
|
|
356
|
-
}
|
|
357
|
-
}
|
|
358
|
-
|
|
359
|
-
function processMaterialUniforms(
|
|
360
|
-
material,
|
|
361
|
-
uniformMap,
|
|
362
|
-
shaderBuilder,
|
|
363
|
-
defaultTexture,
|
|
364
|
-
defaultNormalTexture,
|
|
365
|
-
defaultEmissiveTexture,
|
|
366
|
-
disableTextures,
|
|
367
|
-
texCoordSets,
|
|
368
|
-
) {
|
|
369
|
-
const { emissiveFactor, emissiveTexture, normalTexture, occlusionTexture } =
|
|
370
|
-
material;
|
|
371
|
-
|
|
372
|
-
if (
|
|
373
|
-
defined(emissiveFactor) &&
|
|
374
|
-
!Cartesian3.equals(emissiveFactor, Material.DEFAULT_EMISSIVE_FACTOR)
|
|
375
|
-
) {
|
|
376
|
-
shaderBuilder.addUniform(
|
|
377
|
-
"vec3",
|
|
378
|
-
"u_emissiveFactor",
|
|
379
|
-
ShaderDestination.FRAGMENT,
|
|
380
|
-
);
|
|
381
|
-
uniformMap.u_emissiveFactor = function () {
|
|
382
|
-
return material.emissiveFactor;
|
|
383
|
-
};
|
|
384
|
-
shaderBuilder.addDefine(
|
|
385
|
-
"HAS_EMISSIVE_FACTOR",
|
|
386
|
-
undefined,
|
|
387
|
-
ShaderDestination.FRAGMENT,
|
|
388
|
-
);
|
|
389
|
-
|
|
390
|
-
if (defined(emissiveTexture) && !disableTextures) {
|
|
391
|
-
processTexture(
|
|
392
|
-
shaderBuilder,
|
|
393
|
-
uniformMap,
|
|
394
|
-
emissiveTexture,
|
|
395
|
-
"u_emissiveTexture",
|
|
396
|
-
"EMISSIVE",
|
|
397
|
-
defaultEmissiveTexture,
|
|
398
|
-
texCoordSets,
|
|
399
|
-
);
|
|
400
|
-
}
|
|
401
|
-
}
|
|
402
|
-
|
|
403
|
-
if (defined(normalTexture) && !disableTextures) {
|
|
404
|
-
processTexture(
|
|
405
|
-
shaderBuilder,
|
|
406
|
-
uniformMap,
|
|
407
|
-
normalTexture,
|
|
408
|
-
"u_normalTexture",
|
|
409
|
-
"NORMAL",
|
|
410
|
-
defaultNormalTexture,
|
|
411
|
-
texCoordSets,
|
|
412
|
-
);
|
|
413
|
-
}
|
|
414
|
-
|
|
415
|
-
if (defined(occlusionTexture) && !disableTextures) {
|
|
416
|
-
processTexture(
|
|
417
|
-
shaderBuilder,
|
|
418
|
-
uniformMap,
|
|
419
|
-
occlusionTexture,
|
|
420
|
-
"u_occlusionTexture",
|
|
421
|
-
"OCCLUSION",
|
|
422
|
-
defaultTexture,
|
|
423
|
-
texCoordSets,
|
|
424
|
-
);
|
|
425
|
-
}
|
|
426
|
-
}
|
|
427
|
-
|
|
428
|
-
/**
|
|
429
|
-
* Add uniforms and defines for the KHR_materials_pbrSpecularGlossiness extension
|
|
430
|
-
*
|
|
431
|
-
* @param {ModelComponents.SpecularGlossiness} specularGlossiness
|
|
432
|
-
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
433
|
-
* @param {ShaderBuilder} shaderBuilder
|
|
434
|
-
* @param {Texture} defaultTexture
|
|
435
|
-
* @param {boolean} disableTextures
|
|
436
|
-
* @private
|
|
437
|
-
*/
|
|
438
|
-
function processSpecularGlossinessUniforms(
|
|
439
|
-
specularGlossiness,
|
|
440
|
-
uniformMap,
|
|
441
|
-
shaderBuilder,
|
|
442
|
-
defaultTexture,
|
|
443
|
-
disableTextures,
|
|
444
|
-
texCoordSets,
|
|
445
|
-
) {
|
|
446
|
-
const {
|
|
447
|
-
diffuseTexture,
|
|
448
|
-
diffuseFactor,
|
|
449
|
-
specularGlossinessTexture,
|
|
450
|
-
specularFactor,
|
|
451
|
-
glossinessFactor,
|
|
452
|
-
} = specularGlossiness;
|
|
453
|
-
|
|
454
|
-
shaderBuilder.addDefine(
|
|
455
|
-
"USE_SPECULAR_GLOSSINESS",
|
|
456
|
-
undefined,
|
|
457
|
-
ShaderDestination.FRAGMENT,
|
|
458
|
-
);
|
|
459
|
-
|
|
460
|
-
if (defined(diffuseTexture) && !disableTextures) {
|
|
461
|
-
processTexture(
|
|
462
|
-
shaderBuilder,
|
|
463
|
-
uniformMap,
|
|
464
|
-
diffuseTexture,
|
|
465
|
-
"u_diffuseTexture",
|
|
466
|
-
"DIFFUSE",
|
|
467
|
-
defaultTexture,
|
|
468
|
-
texCoordSets,
|
|
469
|
-
);
|
|
470
|
-
}
|
|
471
|
-
|
|
472
|
-
if (
|
|
473
|
-
defined(diffuseFactor) &&
|
|
474
|
-
!Cartesian4.equals(diffuseFactor, SpecularGlossiness.DEFAULT_DIFFUSE_FACTOR)
|
|
475
|
-
) {
|
|
476
|
-
shaderBuilder.addUniform(
|
|
477
|
-
"vec4",
|
|
478
|
-
"u_diffuseFactor",
|
|
479
|
-
ShaderDestination.FRAGMENT,
|
|
480
|
-
);
|
|
481
|
-
uniformMap.u_diffuseFactor = function () {
|
|
482
|
-
return specularGlossiness.diffuseFactor;
|
|
483
|
-
};
|
|
484
|
-
shaderBuilder.addDefine(
|
|
485
|
-
"HAS_DIFFUSE_FACTOR",
|
|
486
|
-
undefined,
|
|
487
|
-
ShaderDestination.FRAGMENT,
|
|
488
|
-
);
|
|
489
|
-
}
|
|
490
|
-
|
|
491
|
-
if (defined(specularGlossinessTexture) && !disableTextures) {
|
|
492
|
-
processTexture(
|
|
493
|
-
shaderBuilder,
|
|
494
|
-
uniformMap,
|
|
495
|
-
specularGlossinessTexture,
|
|
496
|
-
"u_specularGlossinessTexture",
|
|
497
|
-
"SPECULAR_GLOSSINESS",
|
|
498
|
-
defaultTexture,
|
|
499
|
-
texCoordSets,
|
|
500
|
-
);
|
|
501
|
-
}
|
|
502
|
-
|
|
503
|
-
if (
|
|
504
|
-
defined(specularFactor) &&
|
|
505
|
-
!Cartesian3.equals(
|
|
506
|
-
specularFactor,
|
|
507
|
-
SpecularGlossiness.DEFAULT_SPECULAR_FACTOR,
|
|
508
|
-
)
|
|
509
|
-
) {
|
|
510
|
-
shaderBuilder.addUniform(
|
|
511
|
-
"vec3",
|
|
512
|
-
"u_legacySpecularFactor",
|
|
513
|
-
ShaderDestination.FRAGMENT,
|
|
514
|
-
);
|
|
515
|
-
uniformMap.u_legacySpecularFactor = function () {
|
|
516
|
-
return specularGlossiness.specularFactor;
|
|
517
|
-
};
|
|
518
|
-
shaderBuilder.addDefine(
|
|
519
|
-
"HAS_LEGACY_SPECULAR_FACTOR",
|
|
520
|
-
undefined,
|
|
521
|
-
ShaderDestination.FRAGMENT,
|
|
522
|
-
);
|
|
523
|
-
}
|
|
524
|
-
|
|
525
|
-
if (
|
|
526
|
-
defined(glossinessFactor) &&
|
|
527
|
-
glossinessFactor !== SpecularGlossiness.DEFAULT_GLOSSINESS_FACTOR
|
|
528
|
-
) {
|
|
529
|
-
shaderBuilder.addUniform(
|
|
530
|
-
"float",
|
|
531
|
-
"u_glossinessFactor",
|
|
532
|
-
ShaderDestination.FRAGMENT,
|
|
533
|
-
);
|
|
534
|
-
uniformMap.u_glossinessFactor = function () {
|
|
535
|
-
return specularGlossiness.glossinessFactor;
|
|
536
|
-
};
|
|
537
|
-
shaderBuilder.addDefine(
|
|
538
|
-
"HAS_GLOSSINESS_FACTOR",
|
|
539
|
-
undefined,
|
|
540
|
-
ShaderDestination.FRAGMENT,
|
|
541
|
-
);
|
|
542
|
-
}
|
|
543
|
-
}
|
|
544
|
-
|
|
545
|
-
/**
|
|
546
|
-
* Add uniforms and defines for the KHR_materials_specular extension
|
|
547
|
-
*
|
|
548
|
-
* @param {ModelComponents.Specular} specular
|
|
549
|
-
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
550
|
-
* @param {ShaderBuilder} shaderBuilder
|
|
551
|
-
* @param {Texture} defaultTexture
|
|
552
|
-
* @param {boolean} disableTextures
|
|
553
|
-
* @private
|
|
554
|
-
*/
|
|
555
|
-
function processSpecularUniforms(
|
|
556
|
-
specular,
|
|
557
|
-
uniformMap,
|
|
558
|
-
shaderBuilder,
|
|
559
|
-
defaultTexture,
|
|
560
|
-
disableTextures,
|
|
561
|
-
texCoordSets,
|
|
562
|
-
) {
|
|
563
|
-
const {
|
|
564
|
-
specularTexture,
|
|
565
|
-
specularFactor,
|
|
566
|
-
specularColorTexture,
|
|
567
|
-
specularColorFactor,
|
|
568
|
-
} = specular;
|
|
569
|
-
|
|
570
|
-
shaderBuilder.addDefine(
|
|
571
|
-
"USE_SPECULAR",
|
|
572
|
-
undefined,
|
|
573
|
-
ShaderDestination.FRAGMENT,
|
|
574
|
-
);
|
|
575
|
-
|
|
576
|
-
if (defined(specularTexture) && !disableTextures) {
|
|
577
|
-
processTexture(
|
|
578
|
-
shaderBuilder,
|
|
579
|
-
uniformMap,
|
|
580
|
-
specularTexture,
|
|
581
|
-
"u_specularTexture",
|
|
582
|
-
"SPECULAR",
|
|
583
|
-
defaultTexture,
|
|
584
|
-
texCoordSets,
|
|
585
|
-
);
|
|
586
|
-
}
|
|
587
|
-
|
|
588
|
-
if (
|
|
589
|
-
defined(specularFactor) &&
|
|
590
|
-
specularFactor !== Specular.DEFAULT_SPECULAR_FACTOR
|
|
591
|
-
) {
|
|
592
|
-
shaderBuilder.addUniform(
|
|
593
|
-
"float",
|
|
594
|
-
"u_specularFactor",
|
|
595
|
-
ShaderDestination.FRAGMENT,
|
|
596
|
-
);
|
|
597
|
-
uniformMap.u_specularFactor = function () {
|
|
598
|
-
return specular.specularFactor;
|
|
599
|
-
};
|
|
600
|
-
shaderBuilder.addDefine(
|
|
601
|
-
"HAS_SPECULAR_FACTOR",
|
|
602
|
-
undefined,
|
|
603
|
-
ShaderDestination.FRAGMENT,
|
|
604
|
-
);
|
|
605
|
-
}
|
|
606
|
-
|
|
607
|
-
if (defined(specularColorTexture) && !disableTextures) {
|
|
608
|
-
processTexture(
|
|
609
|
-
shaderBuilder,
|
|
610
|
-
uniformMap,
|
|
611
|
-
specularColorTexture,
|
|
612
|
-
"u_specularColorTexture",
|
|
613
|
-
"SPECULAR_COLOR",
|
|
614
|
-
defaultTexture,
|
|
615
|
-
texCoordSets,
|
|
616
|
-
);
|
|
617
|
-
}
|
|
618
|
-
|
|
619
|
-
if (
|
|
620
|
-
defined(specularColorFactor) &&
|
|
621
|
-
!Cartesian3.equals(
|
|
622
|
-
specularColorFactor,
|
|
623
|
-
Specular.DEFAULT_SPECULAR_COLOR_FACTOR,
|
|
624
|
-
)
|
|
625
|
-
) {
|
|
626
|
-
shaderBuilder.addUniform(
|
|
627
|
-
"vec3",
|
|
628
|
-
"u_specularColorFactor",
|
|
629
|
-
ShaderDestination.FRAGMENT,
|
|
630
|
-
);
|
|
631
|
-
uniformMap.u_specularColorFactor = function () {
|
|
632
|
-
return specular.specularColorFactor;
|
|
633
|
-
};
|
|
634
|
-
shaderBuilder.addDefine(
|
|
635
|
-
"HAS_SPECULAR_COLOR_FACTOR",
|
|
636
|
-
undefined,
|
|
637
|
-
ShaderDestination.FRAGMENT,
|
|
638
|
-
);
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
|
|
642
|
-
const scratchAnisotropy = new Cartesian3();
|
|
643
|
-
|
|
644
|
-
/**
|
|
645
|
-
* Add uniforms and defines for the KHR_materials_anisotropy extension
|
|
646
|
-
*
|
|
647
|
-
* @param {ModelComponents.Anisotropy} anisotropy
|
|
648
|
-
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
649
|
-
* @param {ShaderBuilder} shaderBuilder
|
|
650
|
-
* @param {Texture} defaultTexture
|
|
651
|
-
* @param {boolean} disableTextures
|
|
652
|
-
* @private
|
|
653
|
-
*/
|
|
654
|
-
function processAnisotropyUniforms(
|
|
655
|
-
anisotropy,
|
|
656
|
-
uniformMap,
|
|
657
|
-
shaderBuilder,
|
|
658
|
-
defaultTexture,
|
|
659
|
-
disableTextures,
|
|
660
|
-
texCoordSets,
|
|
661
|
-
) {
|
|
662
|
-
const { anisotropyStrength, anisotropyRotation, anisotropyTexture } =
|
|
663
|
-
anisotropy;
|
|
664
|
-
|
|
665
|
-
shaderBuilder.addDefine(
|
|
666
|
-
"USE_ANISOTROPY",
|
|
667
|
-
undefined,
|
|
668
|
-
ShaderDestination.FRAGMENT,
|
|
669
|
-
);
|
|
670
|
-
|
|
671
|
-
if (defined(anisotropyTexture) && !disableTextures) {
|
|
672
|
-
processTexture(
|
|
673
|
-
shaderBuilder,
|
|
674
|
-
uniformMap,
|
|
675
|
-
anisotropyTexture,
|
|
676
|
-
"u_anisotropyTexture",
|
|
677
|
-
"ANISOTROPY",
|
|
678
|
-
defaultTexture,
|
|
679
|
-
texCoordSets,
|
|
680
|
-
);
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
// Pre-compute cos and sin of rotation, since they are the same for all fragments.
|
|
684
|
-
// Combine with strength as one vec3 uniform.
|
|
685
|
-
const cosRotation = Math.cos(anisotropyRotation);
|
|
686
|
-
const sinRotation = Math.sin(anisotropyRotation);
|
|
687
|
-
shaderBuilder.addUniform("vec3", "u_anisotropy", ShaderDestination.FRAGMENT);
|
|
688
|
-
uniformMap.u_anisotropy = function () {
|
|
689
|
-
return Cartesian3.fromElements(
|
|
690
|
-
cosRotation,
|
|
691
|
-
sinRotation,
|
|
692
|
-
anisotropyStrength,
|
|
693
|
-
scratchAnisotropy,
|
|
694
|
-
);
|
|
695
|
-
};
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
/**
|
|
699
|
-
* Add uniforms and defines for the KHR_materials_clearcoat extension
|
|
700
|
-
*
|
|
701
|
-
* @param {ModelComponents.Clearcoat} clearcoat
|
|
702
|
-
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
703
|
-
* @param {ShaderBuilder} shaderBuilder
|
|
704
|
-
* @param {Texture} defaultTexture
|
|
705
|
-
* @param {boolean} disableTextures
|
|
706
|
-
* @private
|
|
707
|
-
*/
|
|
708
|
-
function processClearcoatUniforms(
|
|
709
|
-
clearcoat,
|
|
710
|
-
uniformMap,
|
|
711
|
-
shaderBuilder,
|
|
712
|
-
defaultTexture,
|
|
713
|
-
disableTextures,
|
|
714
|
-
texCoordSets,
|
|
715
|
-
) {
|
|
716
|
-
const {
|
|
717
|
-
clearcoatFactor,
|
|
718
|
-
clearcoatTexture,
|
|
719
|
-
clearcoatRoughnessFactor,
|
|
720
|
-
clearcoatRoughnessTexture,
|
|
721
|
-
clearcoatNormalTexture,
|
|
722
|
-
} = clearcoat;
|
|
723
|
-
|
|
724
|
-
shaderBuilder.addDefine(
|
|
725
|
-
"USE_CLEARCOAT",
|
|
726
|
-
undefined,
|
|
727
|
-
ShaderDestination.FRAGMENT,
|
|
728
|
-
);
|
|
729
|
-
|
|
730
|
-
if (
|
|
731
|
-
defined(clearcoatFactor) &&
|
|
732
|
-
clearcoatFactor !== Clearcoat.DEFAULT_CLEARCOAT_FACTOR
|
|
733
|
-
) {
|
|
734
|
-
shaderBuilder.addUniform(
|
|
735
|
-
"float",
|
|
736
|
-
"u_clearcoatFactor",
|
|
737
|
-
ShaderDestination.FRAGMENT,
|
|
738
|
-
);
|
|
739
|
-
uniformMap.u_clearcoatFactor = function () {
|
|
740
|
-
return clearcoat.clearcoatFactor;
|
|
741
|
-
};
|
|
742
|
-
shaderBuilder.addDefine(
|
|
743
|
-
"HAS_CLEARCOAT_FACTOR",
|
|
744
|
-
undefined,
|
|
745
|
-
ShaderDestination.FRAGMENT,
|
|
746
|
-
);
|
|
747
|
-
}
|
|
748
|
-
|
|
749
|
-
if (defined(clearcoatTexture) && !disableTextures) {
|
|
750
|
-
processTexture(
|
|
751
|
-
shaderBuilder,
|
|
752
|
-
uniformMap,
|
|
753
|
-
clearcoatTexture,
|
|
754
|
-
"u_clearcoatTexture",
|
|
755
|
-
"CLEARCOAT",
|
|
756
|
-
defaultTexture,
|
|
757
|
-
texCoordSets,
|
|
758
|
-
);
|
|
759
|
-
}
|
|
760
|
-
|
|
761
|
-
if (
|
|
762
|
-
defined(clearcoatRoughnessFactor) &&
|
|
763
|
-
clearcoatFactor !== Clearcoat.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR
|
|
764
|
-
) {
|
|
765
|
-
shaderBuilder.addUniform(
|
|
766
|
-
"float",
|
|
767
|
-
"u_clearcoatRoughnessFactor",
|
|
768
|
-
ShaderDestination.FRAGMENT,
|
|
769
|
-
);
|
|
770
|
-
uniformMap.u_clearcoatRoughnessFactor = function () {
|
|
771
|
-
return clearcoat.clearcoatRoughnessFactor;
|
|
772
|
-
};
|
|
773
|
-
shaderBuilder.addDefine(
|
|
774
|
-
"HAS_CLEARCOAT_ROUGHNESS_FACTOR",
|
|
775
|
-
undefined,
|
|
776
|
-
ShaderDestination.FRAGMENT,
|
|
777
|
-
);
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
if (defined(clearcoatRoughnessTexture) && !disableTextures) {
|
|
781
|
-
processTexture(
|
|
782
|
-
shaderBuilder,
|
|
783
|
-
uniformMap,
|
|
784
|
-
clearcoatRoughnessTexture,
|
|
785
|
-
"u_clearcoatRoughnessTexture",
|
|
786
|
-
"CLEARCOAT_ROUGHNESS",
|
|
787
|
-
defaultTexture,
|
|
788
|
-
texCoordSets,
|
|
789
|
-
);
|
|
790
|
-
}
|
|
791
|
-
|
|
792
|
-
if (defined(clearcoatNormalTexture) && !disableTextures) {
|
|
793
|
-
processTexture(
|
|
794
|
-
shaderBuilder,
|
|
795
|
-
uniformMap,
|
|
796
|
-
clearcoatNormalTexture,
|
|
797
|
-
"u_clearcoatNormalTexture",
|
|
798
|
-
"CLEARCOAT_NORMAL",
|
|
799
|
-
defaultTexture,
|
|
800
|
-
texCoordSets,
|
|
801
|
-
);
|
|
802
|
-
}
|
|
803
|
-
}
|
|
804
|
-
|
|
805
|
-
/**
|
|
806
|
-
* Add uniforms and defines for the PBR metallic roughness model
|
|
807
|
-
*
|
|
808
|
-
* @param {ModelComponents.MetallicRoughness} metallicRoughness
|
|
809
|
-
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
810
|
-
* @param {ShaderBuilder} shaderBuilder
|
|
811
|
-
* @param {Texture} defaultTexture
|
|
812
|
-
* @param {boolean} disableTextures
|
|
813
|
-
* @private
|
|
814
|
-
*/
|
|
815
|
-
function processMetallicRoughnessUniforms(
|
|
816
|
-
metallicRoughness,
|
|
817
|
-
uniformMap,
|
|
818
|
-
shaderBuilder,
|
|
819
|
-
defaultTexture,
|
|
820
|
-
disableTextures,
|
|
821
|
-
texCoordSets,
|
|
822
|
-
) {
|
|
823
|
-
shaderBuilder.addDefine(
|
|
824
|
-
"USE_METALLIC_ROUGHNESS",
|
|
825
|
-
undefined,
|
|
826
|
-
ShaderDestination.FRAGMENT,
|
|
827
|
-
);
|
|
828
|
-
|
|
829
|
-
const baseColorTexture = metallicRoughness.baseColorTexture;
|
|
830
|
-
if (defined(baseColorTexture) && !disableTextures) {
|
|
831
|
-
processTexture(
|
|
832
|
-
shaderBuilder,
|
|
833
|
-
uniformMap,
|
|
834
|
-
baseColorTexture,
|
|
835
|
-
"u_baseColorTexture",
|
|
836
|
-
"BASE_COLOR",
|
|
837
|
-
defaultTexture,
|
|
838
|
-
texCoordSets,
|
|
839
|
-
);
|
|
840
|
-
}
|
|
841
|
-
|
|
842
|
-
const baseColorFactor = metallicRoughness.baseColorFactor;
|
|
843
|
-
if (
|
|
844
|
-
defined(baseColorFactor) &&
|
|
845
|
-
!Cartesian4.equals(
|
|
846
|
-
baseColorFactor,
|
|
847
|
-
MetallicRoughness.DEFAULT_BASE_COLOR_FACTOR,
|
|
848
|
-
)
|
|
849
|
-
) {
|
|
850
|
-
shaderBuilder.addUniform(
|
|
851
|
-
"vec4",
|
|
852
|
-
"u_baseColorFactor",
|
|
853
|
-
ShaderDestination.FRAGMENT,
|
|
854
|
-
);
|
|
855
|
-
uniformMap.u_baseColorFactor = function () {
|
|
856
|
-
return metallicRoughness.baseColorFactor;
|
|
857
|
-
};
|
|
858
|
-
shaderBuilder.addDefine(
|
|
859
|
-
"HAS_BASE_COLOR_FACTOR",
|
|
860
|
-
undefined,
|
|
861
|
-
ShaderDestination.FRAGMENT,
|
|
862
|
-
);
|
|
863
|
-
}
|
|
864
|
-
|
|
865
|
-
const metallicRoughnessTexture = metallicRoughness.metallicRoughnessTexture;
|
|
866
|
-
if (defined(metallicRoughnessTexture) && !disableTextures) {
|
|
867
|
-
processTexture(
|
|
868
|
-
shaderBuilder,
|
|
869
|
-
uniformMap,
|
|
870
|
-
metallicRoughnessTexture,
|
|
871
|
-
"u_metallicRoughnessTexture",
|
|
872
|
-
"METALLIC_ROUGHNESS",
|
|
873
|
-
defaultTexture,
|
|
874
|
-
texCoordSets,
|
|
875
|
-
);
|
|
876
|
-
}
|
|
877
|
-
|
|
878
|
-
const metallicFactor = metallicRoughness.metallicFactor;
|
|
879
|
-
if (
|
|
880
|
-
defined(metallicFactor) &&
|
|
881
|
-
metallicFactor !== MetallicRoughness.DEFAULT_METALLIC_FACTOR
|
|
882
|
-
) {
|
|
883
|
-
shaderBuilder.addUniform(
|
|
884
|
-
"float",
|
|
885
|
-
"u_metallicFactor",
|
|
886
|
-
ShaderDestination.FRAGMENT,
|
|
887
|
-
);
|
|
888
|
-
uniformMap.u_metallicFactor = function () {
|
|
889
|
-
return metallicRoughness.metallicFactor;
|
|
890
|
-
};
|
|
891
|
-
shaderBuilder.addDefine(
|
|
892
|
-
"HAS_METALLIC_FACTOR",
|
|
893
|
-
undefined,
|
|
894
|
-
ShaderDestination.FRAGMENT,
|
|
895
|
-
);
|
|
896
|
-
}
|
|
897
|
-
|
|
898
|
-
const roughnessFactor = metallicRoughness.roughnessFactor;
|
|
899
|
-
if (
|
|
900
|
-
defined(roughnessFactor) &&
|
|
901
|
-
roughnessFactor !== MetallicRoughness.DEFAULT_ROUGHNESS_FACTOR
|
|
902
|
-
) {
|
|
903
|
-
shaderBuilder.addUniform(
|
|
904
|
-
"float",
|
|
905
|
-
"u_roughnessFactor",
|
|
906
|
-
ShaderDestination.FRAGMENT,
|
|
907
|
-
);
|
|
908
|
-
uniformMap.u_roughnessFactor = function () {
|
|
909
|
-
return metallicRoughness.roughnessFactor;
|
|
910
|
-
};
|
|
911
|
-
shaderBuilder.addDefine(
|
|
912
|
-
"HAS_ROUGHNESS_FACTOR",
|
|
913
|
-
undefined,
|
|
914
|
-
ShaderDestination.FRAGMENT,
|
|
915
|
-
);
|
|
916
|
-
}
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
export default MaterialPipelineStage;
|
|
1
|
+
import defined from "../../Core/defined.js";
|
|
2
|
+
import Cartesian3 from "../../Core/Cartesian3.js";
|
|
3
|
+
import Cartesian4 from "../../Core/Cartesian4.js";
|
|
4
|
+
import Matrix3 from "../../Core/Matrix3.js";
|
|
5
|
+
import ShaderDestination from "../../Renderer/ShaderDestination.js";
|
|
6
|
+
import Pass from "../../Renderer/Pass.js";
|
|
7
|
+
import MaterialStageFS from "../../Shaders/Model/MaterialStageFS.js";
|
|
8
|
+
import AlphaMode from "../AlphaMode.js";
|
|
9
|
+
import ModelComponents from "../ModelComponents.js";
|
|
10
|
+
import VertexAttributeSemantic from "../VertexAttributeSemantic.js";
|
|
11
|
+
import LightingModel from "./LightingModel.js";
|
|
12
|
+
import ModelUtility from "./ModelUtility.js";
|
|
13
|
+
|
|
14
|
+
const { Material, MetallicRoughness, SpecularGlossiness, Specular, Clearcoat } =
|
|
15
|
+
ModelComponents;
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* The material pipeline stage processes textures and other uniforms needed
|
|
19
|
+
* to render a primitive. This handles the following material types:
|
|
20
|
+
* <ul>
|
|
21
|
+
* <li>Basic glTF materials (PBR metallic roughness model)</li>
|
|
22
|
+
* <li>The `KHR_materials_specular` glTF extension</li>
|
|
23
|
+
* <li>The `KHR_materials_pbrSpecularGlossiness` glTF extension</li>
|
|
24
|
+
* <li>The `KHR_materials_unlit` glTF extension</li>
|
|
25
|
+
* </ul>
|
|
26
|
+
*
|
|
27
|
+
* @namespace MaterialPipelineStage
|
|
28
|
+
*
|
|
29
|
+
* @private
|
|
30
|
+
*/
|
|
31
|
+
const MaterialPipelineStage = {
|
|
32
|
+
name: "MaterialPipelineStage", // Helps with debugging
|
|
33
|
+
|
|
34
|
+
// Expose some methods for testing
|
|
35
|
+
_processTexture: processTexture,
|
|
36
|
+
_processTextureTransform: processTextureTransform,
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Process a primitive. This modifies the following parts of the render
|
|
41
|
+
* resources:
|
|
42
|
+
* <ul>
|
|
43
|
+
* <li>Modifies the shader to include the material processing stage</li>
|
|
44
|
+
* <li>Modifies the shader to include additional uniforms for textures and other rendering details</li>
|
|
45
|
+
* <li>Modifies the lighting options to set either PBR or unlit lighting</li>
|
|
46
|
+
* <li>Sets the render state for back-face culling</li>
|
|
47
|
+
* </ul>
|
|
48
|
+
* @param {PrimitiveRenderResources} renderResources The render resources for the primitive
|
|
49
|
+
* @param {ModelComponents.Primitive} primitive The primitive to be rendered
|
|
50
|
+
* @param {FrameState} frameState The frame state.
|
|
51
|
+
* @private
|
|
52
|
+
*/
|
|
53
|
+
MaterialPipelineStage.process = function (
|
|
54
|
+
renderResources,
|
|
55
|
+
primitive,
|
|
56
|
+
frameState,
|
|
57
|
+
) {
|
|
58
|
+
// gltf-pipeline automatically creates a default material so this will always
|
|
59
|
+
// be defined.
|
|
60
|
+
const material = primitive.material;
|
|
61
|
+
const { model, uniformMap, shaderBuilder } = renderResources;
|
|
62
|
+
|
|
63
|
+
// Classification models only use position and feature ID attributes,
|
|
64
|
+
// so textures should be disabled to avoid compile errors.
|
|
65
|
+
const hasClassification = defined(model.classificationType);
|
|
66
|
+
const disableTextures = hasClassification;
|
|
67
|
+
|
|
68
|
+
// Collect the texture coordinate sets actually present in the geometry.
|
|
69
|
+
// Some models reference a texture whose UV set (e.g. TEXCOORD_0) does not
|
|
70
|
+
// exist on the mesh. If we still generate a `TEXCOORD_*` define for such a
|
|
71
|
+
// texture, the fragment shader would reference an undeclared
|
|
72
|
+
// `v_texCoord_n` varying and fail to compile, so those textures are skipped.
|
|
73
|
+
const texCoordSets = new Set();
|
|
74
|
+
const attributes = primitive.attributes;
|
|
75
|
+
for (let i = 0; i < attributes.length; i++) {
|
|
76
|
+
const attribute = attributes[i];
|
|
77
|
+
if (
|
|
78
|
+
attribute.semantic === VertexAttributeSemantic.TEXCOORD &&
|
|
79
|
+
defined(attribute.setIndex)
|
|
80
|
+
) {
|
|
81
|
+
texCoordSets.add(attribute.setIndex);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// When textures are loaded incrementally, fall back to a default 1x1 texture
|
|
86
|
+
const { defaultTexture, defaultNormalTexture, defaultEmissiveTexture } =
|
|
87
|
+
frameState.context;
|
|
88
|
+
|
|
89
|
+
processMaterialUniforms(
|
|
90
|
+
material,
|
|
91
|
+
uniformMap,
|
|
92
|
+
shaderBuilder,
|
|
93
|
+
defaultTexture,
|
|
94
|
+
defaultNormalTexture,
|
|
95
|
+
defaultEmissiveTexture,
|
|
96
|
+
disableTextures,
|
|
97
|
+
texCoordSets,
|
|
98
|
+
);
|
|
99
|
+
|
|
100
|
+
if (defined(material.specularGlossiness)) {
|
|
101
|
+
processSpecularGlossinessUniforms(
|
|
102
|
+
material.specularGlossiness,
|
|
103
|
+
uniformMap,
|
|
104
|
+
shaderBuilder,
|
|
105
|
+
defaultTexture,
|
|
106
|
+
disableTextures,
|
|
107
|
+
texCoordSets,
|
|
108
|
+
);
|
|
109
|
+
} else {
|
|
110
|
+
if (
|
|
111
|
+
defined(material.specular) &&
|
|
112
|
+
ModelUtility.supportedExtensions.KHR_materials_specular
|
|
113
|
+
) {
|
|
114
|
+
processSpecularUniforms(
|
|
115
|
+
material.specular,
|
|
116
|
+
uniformMap,
|
|
117
|
+
shaderBuilder,
|
|
118
|
+
defaultTexture,
|
|
119
|
+
disableTextures,
|
|
120
|
+
texCoordSets,
|
|
121
|
+
);
|
|
122
|
+
}
|
|
123
|
+
if (
|
|
124
|
+
defined(material.anisotropy) &&
|
|
125
|
+
ModelUtility.supportedExtensions.KHR_materials_anisotropy
|
|
126
|
+
) {
|
|
127
|
+
processAnisotropyUniforms(
|
|
128
|
+
material.anisotropy,
|
|
129
|
+
uniformMap,
|
|
130
|
+
shaderBuilder,
|
|
131
|
+
defaultTexture,
|
|
132
|
+
disableTextures,
|
|
133
|
+
texCoordSets,
|
|
134
|
+
);
|
|
135
|
+
}
|
|
136
|
+
if (
|
|
137
|
+
defined(material.clearcoat) &&
|
|
138
|
+
ModelUtility.supportedExtensions.KHR_materials_clearcoat
|
|
139
|
+
) {
|
|
140
|
+
processClearcoatUniforms(
|
|
141
|
+
material.clearcoat,
|
|
142
|
+
uniformMap,
|
|
143
|
+
shaderBuilder,
|
|
144
|
+
defaultTexture,
|
|
145
|
+
disableTextures,
|
|
146
|
+
texCoordSets,
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
processMetallicRoughnessUniforms(
|
|
150
|
+
material.metallicRoughness,
|
|
151
|
+
uniformMap,
|
|
152
|
+
shaderBuilder,
|
|
153
|
+
defaultTexture,
|
|
154
|
+
disableTextures,
|
|
155
|
+
texCoordSets,
|
|
156
|
+
);
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
// If the primitive does not have normals, fall back to unlit lighting.
|
|
160
|
+
const hasNormals = ModelUtility.getAttributeBySemantic(
|
|
161
|
+
primitive,
|
|
162
|
+
VertexAttributeSemantic.NORMAL,
|
|
163
|
+
);
|
|
164
|
+
|
|
165
|
+
// Disable PointCloud normals if the user explicitly turned them off.
|
|
166
|
+
const disablePointCloudNormals =
|
|
167
|
+
defined(model.pointCloudShading) && !model.pointCloudShading.normalShading;
|
|
168
|
+
|
|
169
|
+
// Classification models will be rendered as unlit.
|
|
170
|
+
const lightingOptions = renderResources.lightingOptions;
|
|
171
|
+
if (
|
|
172
|
+
material.unlit ||
|
|
173
|
+
!hasNormals ||
|
|
174
|
+
hasClassification ||
|
|
175
|
+
disablePointCloudNormals
|
|
176
|
+
) {
|
|
177
|
+
lightingOptions.lightingModel = LightingModel.UNLIT;
|
|
178
|
+
} else {
|
|
179
|
+
lightingOptions.lightingModel = LightingModel.PBR;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
// Configure back-face culling
|
|
183
|
+
const cull = model.backFaceCulling && !material.doubleSided;
|
|
184
|
+
renderResources.renderStateOptions.cull.enabled = cull;
|
|
185
|
+
|
|
186
|
+
const alphaOptions = renderResources.alphaOptions;
|
|
187
|
+
if (material.alphaMode === AlphaMode.BLEND) {
|
|
188
|
+
alphaOptions.pass = Pass.TRANSLUCENT;
|
|
189
|
+
} else if (material.alphaMode === AlphaMode.MASK) {
|
|
190
|
+
alphaOptions.alphaCutoff = material.alphaCutoff;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
shaderBuilder.addFragmentLines(MaterialStageFS);
|
|
194
|
+
|
|
195
|
+
if (material.doubleSided) {
|
|
196
|
+
shaderBuilder.addDefine(
|
|
197
|
+
"HAS_DOUBLE_SIDED_MATERIAL",
|
|
198
|
+
undefined,
|
|
199
|
+
ShaderDestination.BOTH,
|
|
200
|
+
);
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
|
|
204
|
+
/**
|
|
205
|
+
* Process a single texture transformation and add it to the shader and uniform map.
|
|
206
|
+
*
|
|
207
|
+
* @param {ShaderBuilder} shaderBuilder The shader builder to modify
|
|
208
|
+
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
209
|
+
* @param {ModelComponents.TextureReader} textureReader The texture to add to the shader
|
|
210
|
+
* @param {string} uniformName The name of the sampler uniform such as <code>u_baseColorTexture</code>
|
|
211
|
+
* @param {string} defineName The name of the texture for use in the defines, minus any prefix or suffix. For example, "BASE_COLOR" or "EMISSIVE"
|
|
212
|
+
*
|
|
213
|
+
* @private
|
|
214
|
+
*/
|
|
215
|
+
function processTextureTransform(
|
|
216
|
+
shaderBuilder,
|
|
217
|
+
uniformMap,
|
|
218
|
+
textureReader,
|
|
219
|
+
uniformName,
|
|
220
|
+
defineName,
|
|
221
|
+
) {
|
|
222
|
+
// Add a define to enable the texture transformation code in the shader.
|
|
223
|
+
const transformDefine = `HAS_${defineName}_TEXTURE_TRANSFORM`;
|
|
224
|
+
shaderBuilder.addDefine(
|
|
225
|
+
transformDefine,
|
|
226
|
+
undefined,
|
|
227
|
+
ShaderDestination.FRAGMENT,
|
|
228
|
+
);
|
|
229
|
+
|
|
230
|
+
// Add a uniform for the transformation matrix
|
|
231
|
+
const transformUniformName = `${uniformName}Transform`;
|
|
232
|
+
shaderBuilder.addUniform(
|
|
233
|
+
"mat3",
|
|
234
|
+
transformUniformName,
|
|
235
|
+
ShaderDestination.FRAGMENT,
|
|
236
|
+
);
|
|
237
|
+
uniformMap[transformUniformName] = function () {
|
|
238
|
+
return textureReader.transform;
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
/**
|
|
243
|
+
* Process a single texture scale and add it to the shader and uniform map.
|
|
244
|
+
*
|
|
245
|
+
* @param {ShaderBuilder} shaderBuilder The shader builder to modify
|
|
246
|
+
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
247
|
+
* @param {ModelComponents.TextureReader} textureReader The texture to add to the shader
|
|
248
|
+
* @param {string} uniformName The name of the sampler uniform such as <code>u_baseColorTexture</code>
|
|
249
|
+
* @param {string} defineName The name of the texture for use in the defines, minus any prefix or suffix. For example, "BASE_COLOR" or "EMISSIVE"
|
|
250
|
+
*
|
|
251
|
+
* @private
|
|
252
|
+
*/
|
|
253
|
+
function processTextureScale(
|
|
254
|
+
shaderBuilder,
|
|
255
|
+
uniformMap,
|
|
256
|
+
textureReader,
|
|
257
|
+
uniformName,
|
|
258
|
+
defineName,
|
|
259
|
+
) {
|
|
260
|
+
// Add a define to enable the texture transformation code in the shader.
|
|
261
|
+
const transformDefine = `HAS_${defineName}_TEXTURE_SCALE`;
|
|
262
|
+
shaderBuilder.addDefine(
|
|
263
|
+
transformDefine,
|
|
264
|
+
undefined,
|
|
265
|
+
ShaderDestination.FRAGMENT,
|
|
266
|
+
);
|
|
267
|
+
|
|
268
|
+
// Add a uniform for the transformation matrix
|
|
269
|
+
const scaleUniformName = `${uniformName}Scale`;
|
|
270
|
+
shaderBuilder.addUniform(
|
|
271
|
+
"float",
|
|
272
|
+
scaleUniformName,
|
|
273
|
+
ShaderDestination.FRAGMENT,
|
|
274
|
+
);
|
|
275
|
+
uniformMap[scaleUniformName] = function () {
|
|
276
|
+
return textureReader.scale;
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Process a single texture and add it to the shader and uniform map.
|
|
282
|
+
*
|
|
283
|
+
* @param {ShaderBuilder} shaderBuilder The shader builder to modify
|
|
284
|
+
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
285
|
+
* @param {ModelComponents.TextureReader} textureReader The texture to add to the shader
|
|
286
|
+
* @param {string} uniformName The name of the sampler uniform such as <code>u_baseColorTexture</code>
|
|
287
|
+
* @param {string} defineName The name of the texture for use in the defines, minus any prefix or suffix. For example, "BASE_COLOR" or "EMISSIVE"
|
|
288
|
+
*
|
|
289
|
+
* @private
|
|
290
|
+
*/
|
|
291
|
+
function processTexture(
|
|
292
|
+
shaderBuilder,
|
|
293
|
+
uniformMap,
|
|
294
|
+
textureReader,
|
|
295
|
+
uniformName,
|
|
296
|
+
defineName,
|
|
297
|
+
defaultTexture,
|
|
298
|
+
texCoordSets,
|
|
299
|
+
) {
|
|
300
|
+
// If the texture references a texture coordinate set that is not present in
|
|
301
|
+
// the geometry, skip it entirely. Otherwise the generated fragment shader
|
|
302
|
+
// would use an undeclared `v_texCoord_n` varying and fail to compile.
|
|
303
|
+
if (!texCoordSets.has(textureReader.texCoord)) {
|
|
304
|
+
return;
|
|
305
|
+
}
|
|
306
|
+
|
|
307
|
+
// Add a uniform for the texture itself
|
|
308
|
+
shaderBuilder.addUniform(
|
|
309
|
+
"sampler2D",
|
|
310
|
+
uniformName,
|
|
311
|
+
ShaderDestination.FRAGMENT,
|
|
312
|
+
);
|
|
313
|
+
uniformMap[uniformName] = function () {
|
|
314
|
+
return textureReader.texture ?? defaultTexture;
|
|
315
|
+
};
|
|
316
|
+
|
|
317
|
+
// Add a #define directive to enable using the texture in the shader
|
|
318
|
+
const textureDefine = `HAS_${defineName}_TEXTURE`;
|
|
319
|
+
shaderBuilder.addDefine(textureDefine, undefined, ShaderDestination.FRAGMENT);
|
|
320
|
+
|
|
321
|
+
// Add a #define to tell the shader which texture coordinates varying to use.
|
|
322
|
+
const texCoordIndex = textureReader.texCoord;
|
|
323
|
+
const texCoordVarying = `v_texCoord_${texCoordIndex}`;
|
|
324
|
+
const texCoordDefine = `TEXCOORD_${defineName}`;
|
|
325
|
+
shaderBuilder.addDefine(
|
|
326
|
+
texCoordDefine,
|
|
327
|
+
texCoordVarying,
|
|
328
|
+
ShaderDestination.FRAGMENT,
|
|
329
|
+
);
|
|
330
|
+
|
|
331
|
+
// Some textures have matrix transforms (e.g. for texture atlases). Add those
|
|
332
|
+
// to the shader if present.
|
|
333
|
+
const textureTransform = textureReader.transform;
|
|
334
|
+
if (
|
|
335
|
+
defined(textureTransform) &&
|
|
336
|
+
!Matrix3.equals(textureTransform, Matrix3.IDENTITY)
|
|
337
|
+
) {
|
|
338
|
+
processTextureTransform(
|
|
339
|
+
shaderBuilder,
|
|
340
|
+
uniformMap,
|
|
341
|
+
textureReader,
|
|
342
|
+
uniformName,
|
|
343
|
+
defineName,
|
|
344
|
+
);
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
const { scale } = textureReader;
|
|
348
|
+
if (defined(scale) && scale !== 1.0) {
|
|
349
|
+
processTextureScale(
|
|
350
|
+
shaderBuilder,
|
|
351
|
+
uniformMap,
|
|
352
|
+
textureReader,
|
|
353
|
+
uniformName,
|
|
354
|
+
defineName,
|
|
355
|
+
);
|
|
356
|
+
}
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
function processMaterialUniforms(
|
|
360
|
+
material,
|
|
361
|
+
uniformMap,
|
|
362
|
+
shaderBuilder,
|
|
363
|
+
defaultTexture,
|
|
364
|
+
defaultNormalTexture,
|
|
365
|
+
defaultEmissiveTexture,
|
|
366
|
+
disableTextures,
|
|
367
|
+
texCoordSets,
|
|
368
|
+
) {
|
|
369
|
+
const { emissiveFactor, emissiveTexture, normalTexture, occlusionTexture } =
|
|
370
|
+
material;
|
|
371
|
+
|
|
372
|
+
if (
|
|
373
|
+
defined(emissiveFactor) &&
|
|
374
|
+
!Cartesian3.equals(emissiveFactor, Material.DEFAULT_EMISSIVE_FACTOR)
|
|
375
|
+
) {
|
|
376
|
+
shaderBuilder.addUniform(
|
|
377
|
+
"vec3",
|
|
378
|
+
"u_emissiveFactor",
|
|
379
|
+
ShaderDestination.FRAGMENT,
|
|
380
|
+
);
|
|
381
|
+
uniformMap.u_emissiveFactor = function () {
|
|
382
|
+
return material.emissiveFactor;
|
|
383
|
+
};
|
|
384
|
+
shaderBuilder.addDefine(
|
|
385
|
+
"HAS_EMISSIVE_FACTOR",
|
|
386
|
+
undefined,
|
|
387
|
+
ShaderDestination.FRAGMENT,
|
|
388
|
+
);
|
|
389
|
+
|
|
390
|
+
if (defined(emissiveTexture) && !disableTextures) {
|
|
391
|
+
processTexture(
|
|
392
|
+
shaderBuilder,
|
|
393
|
+
uniformMap,
|
|
394
|
+
emissiveTexture,
|
|
395
|
+
"u_emissiveTexture",
|
|
396
|
+
"EMISSIVE",
|
|
397
|
+
defaultEmissiveTexture,
|
|
398
|
+
texCoordSets,
|
|
399
|
+
);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
403
|
+
if (defined(normalTexture) && !disableTextures) {
|
|
404
|
+
processTexture(
|
|
405
|
+
shaderBuilder,
|
|
406
|
+
uniformMap,
|
|
407
|
+
normalTexture,
|
|
408
|
+
"u_normalTexture",
|
|
409
|
+
"NORMAL",
|
|
410
|
+
defaultNormalTexture,
|
|
411
|
+
texCoordSets,
|
|
412
|
+
);
|
|
413
|
+
}
|
|
414
|
+
|
|
415
|
+
if (defined(occlusionTexture) && !disableTextures) {
|
|
416
|
+
processTexture(
|
|
417
|
+
shaderBuilder,
|
|
418
|
+
uniformMap,
|
|
419
|
+
occlusionTexture,
|
|
420
|
+
"u_occlusionTexture",
|
|
421
|
+
"OCCLUSION",
|
|
422
|
+
defaultTexture,
|
|
423
|
+
texCoordSets,
|
|
424
|
+
);
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/**
|
|
429
|
+
* Add uniforms and defines for the KHR_materials_pbrSpecularGlossiness extension
|
|
430
|
+
*
|
|
431
|
+
* @param {ModelComponents.SpecularGlossiness} specularGlossiness
|
|
432
|
+
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
433
|
+
* @param {ShaderBuilder} shaderBuilder
|
|
434
|
+
* @param {Texture} defaultTexture
|
|
435
|
+
* @param {boolean} disableTextures
|
|
436
|
+
* @private
|
|
437
|
+
*/
|
|
438
|
+
function processSpecularGlossinessUniforms(
|
|
439
|
+
specularGlossiness,
|
|
440
|
+
uniformMap,
|
|
441
|
+
shaderBuilder,
|
|
442
|
+
defaultTexture,
|
|
443
|
+
disableTextures,
|
|
444
|
+
texCoordSets,
|
|
445
|
+
) {
|
|
446
|
+
const {
|
|
447
|
+
diffuseTexture,
|
|
448
|
+
diffuseFactor,
|
|
449
|
+
specularGlossinessTexture,
|
|
450
|
+
specularFactor,
|
|
451
|
+
glossinessFactor,
|
|
452
|
+
} = specularGlossiness;
|
|
453
|
+
|
|
454
|
+
shaderBuilder.addDefine(
|
|
455
|
+
"USE_SPECULAR_GLOSSINESS",
|
|
456
|
+
undefined,
|
|
457
|
+
ShaderDestination.FRAGMENT,
|
|
458
|
+
);
|
|
459
|
+
|
|
460
|
+
if (defined(diffuseTexture) && !disableTextures) {
|
|
461
|
+
processTexture(
|
|
462
|
+
shaderBuilder,
|
|
463
|
+
uniformMap,
|
|
464
|
+
diffuseTexture,
|
|
465
|
+
"u_diffuseTexture",
|
|
466
|
+
"DIFFUSE",
|
|
467
|
+
defaultTexture,
|
|
468
|
+
texCoordSets,
|
|
469
|
+
);
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
if (
|
|
473
|
+
defined(diffuseFactor) &&
|
|
474
|
+
!Cartesian4.equals(diffuseFactor, SpecularGlossiness.DEFAULT_DIFFUSE_FACTOR)
|
|
475
|
+
) {
|
|
476
|
+
shaderBuilder.addUniform(
|
|
477
|
+
"vec4",
|
|
478
|
+
"u_diffuseFactor",
|
|
479
|
+
ShaderDestination.FRAGMENT,
|
|
480
|
+
);
|
|
481
|
+
uniformMap.u_diffuseFactor = function () {
|
|
482
|
+
return specularGlossiness.diffuseFactor;
|
|
483
|
+
};
|
|
484
|
+
shaderBuilder.addDefine(
|
|
485
|
+
"HAS_DIFFUSE_FACTOR",
|
|
486
|
+
undefined,
|
|
487
|
+
ShaderDestination.FRAGMENT,
|
|
488
|
+
);
|
|
489
|
+
}
|
|
490
|
+
|
|
491
|
+
if (defined(specularGlossinessTexture) && !disableTextures) {
|
|
492
|
+
processTexture(
|
|
493
|
+
shaderBuilder,
|
|
494
|
+
uniformMap,
|
|
495
|
+
specularGlossinessTexture,
|
|
496
|
+
"u_specularGlossinessTexture",
|
|
497
|
+
"SPECULAR_GLOSSINESS",
|
|
498
|
+
defaultTexture,
|
|
499
|
+
texCoordSets,
|
|
500
|
+
);
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
if (
|
|
504
|
+
defined(specularFactor) &&
|
|
505
|
+
!Cartesian3.equals(
|
|
506
|
+
specularFactor,
|
|
507
|
+
SpecularGlossiness.DEFAULT_SPECULAR_FACTOR,
|
|
508
|
+
)
|
|
509
|
+
) {
|
|
510
|
+
shaderBuilder.addUniform(
|
|
511
|
+
"vec3",
|
|
512
|
+
"u_legacySpecularFactor",
|
|
513
|
+
ShaderDestination.FRAGMENT,
|
|
514
|
+
);
|
|
515
|
+
uniformMap.u_legacySpecularFactor = function () {
|
|
516
|
+
return specularGlossiness.specularFactor;
|
|
517
|
+
};
|
|
518
|
+
shaderBuilder.addDefine(
|
|
519
|
+
"HAS_LEGACY_SPECULAR_FACTOR",
|
|
520
|
+
undefined,
|
|
521
|
+
ShaderDestination.FRAGMENT,
|
|
522
|
+
);
|
|
523
|
+
}
|
|
524
|
+
|
|
525
|
+
if (
|
|
526
|
+
defined(glossinessFactor) &&
|
|
527
|
+
glossinessFactor !== SpecularGlossiness.DEFAULT_GLOSSINESS_FACTOR
|
|
528
|
+
) {
|
|
529
|
+
shaderBuilder.addUniform(
|
|
530
|
+
"float",
|
|
531
|
+
"u_glossinessFactor",
|
|
532
|
+
ShaderDestination.FRAGMENT,
|
|
533
|
+
);
|
|
534
|
+
uniformMap.u_glossinessFactor = function () {
|
|
535
|
+
return specularGlossiness.glossinessFactor;
|
|
536
|
+
};
|
|
537
|
+
shaderBuilder.addDefine(
|
|
538
|
+
"HAS_GLOSSINESS_FACTOR",
|
|
539
|
+
undefined,
|
|
540
|
+
ShaderDestination.FRAGMENT,
|
|
541
|
+
);
|
|
542
|
+
}
|
|
543
|
+
}
|
|
544
|
+
|
|
545
|
+
/**
|
|
546
|
+
* Add uniforms and defines for the KHR_materials_specular extension
|
|
547
|
+
*
|
|
548
|
+
* @param {ModelComponents.Specular} specular
|
|
549
|
+
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
550
|
+
* @param {ShaderBuilder} shaderBuilder
|
|
551
|
+
* @param {Texture} defaultTexture
|
|
552
|
+
* @param {boolean} disableTextures
|
|
553
|
+
* @private
|
|
554
|
+
*/
|
|
555
|
+
function processSpecularUniforms(
|
|
556
|
+
specular,
|
|
557
|
+
uniformMap,
|
|
558
|
+
shaderBuilder,
|
|
559
|
+
defaultTexture,
|
|
560
|
+
disableTextures,
|
|
561
|
+
texCoordSets,
|
|
562
|
+
) {
|
|
563
|
+
const {
|
|
564
|
+
specularTexture,
|
|
565
|
+
specularFactor,
|
|
566
|
+
specularColorTexture,
|
|
567
|
+
specularColorFactor,
|
|
568
|
+
} = specular;
|
|
569
|
+
|
|
570
|
+
shaderBuilder.addDefine(
|
|
571
|
+
"USE_SPECULAR",
|
|
572
|
+
undefined,
|
|
573
|
+
ShaderDestination.FRAGMENT,
|
|
574
|
+
);
|
|
575
|
+
|
|
576
|
+
if (defined(specularTexture) && !disableTextures) {
|
|
577
|
+
processTexture(
|
|
578
|
+
shaderBuilder,
|
|
579
|
+
uniformMap,
|
|
580
|
+
specularTexture,
|
|
581
|
+
"u_specularTexture",
|
|
582
|
+
"SPECULAR",
|
|
583
|
+
defaultTexture,
|
|
584
|
+
texCoordSets,
|
|
585
|
+
);
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
if (
|
|
589
|
+
defined(specularFactor) &&
|
|
590
|
+
specularFactor !== Specular.DEFAULT_SPECULAR_FACTOR
|
|
591
|
+
) {
|
|
592
|
+
shaderBuilder.addUniform(
|
|
593
|
+
"float",
|
|
594
|
+
"u_specularFactor",
|
|
595
|
+
ShaderDestination.FRAGMENT,
|
|
596
|
+
);
|
|
597
|
+
uniformMap.u_specularFactor = function () {
|
|
598
|
+
return specular.specularFactor;
|
|
599
|
+
};
|
|
600
|
+
shaderBuilder.addDefine(
|
|
601
|
+
"HAS_SPECULAR_FACTOR",
|
|
602
|
+
undefined,
|
|
603
|
+
ShaderDestination.FRAGMENT,
|
|
604
|
+
);
|
|
605
|
+
}
|
|
606
|
+
|
|
607
|
+
if (defined(specularColorTexture) && !disableTextures) {
|
|
608
|
+
processTexture(
|
|
609
|
+
shaderBuilder,
|
|
610
|
+
uniformMap,
|
|
611
|
+
specularColorTexture,
|
|
612
|
+
"u_specularColorTexture",
|
|
613
|
+
"SPECULAR_COLOR",
|
|
614
|
+
defaultTexture,
|
|
615
|
+
texCoordSets,
|
|
616
|
+
);
|
|
617
|
+
}
|
|
618
|
+
|
|
619
|
+
if (
|
|
620
|
+
defined(specularColorFactor) &&
|
|
621
|
+
!Cartesian3.equals(
|
|
622
|
+
specularColorFactor,
|
|
623
|
+
Specular.DEFAULT_SPECULAR_COLOR_FACTOR,
|
|
624
|
+
)
|
|
625
|
+
) {
|
|
626
|
+
shaderBuilder.addUniform(
|
|
627
|
+
"vec3",
|
|
628
|
+
"u_specularColorFactor",
|
|
629
|
+
ShaderDestination.FRAGMENT,
|
|
630
|
+
);
|
|
631
|
+
uniformMap.u_specularColorFactor = function () {
|
|
632
|
+
return specular.specularColorFactor;
|
|
633
|
+
};
|
|
634
|
+
shaderBuilder.addDefine(
|
|
635
|
+
"HAS_SPECULAR_COLOR_FACTOR",
|
|
636
|
+
undefined,
|
|
637
|
+
ShaderDestination.FRAGMENT,
|
|
638
|
+
);
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
|
|
642
|
+
const scratchAnisotropy = new Cartesian3();
|
|
643
|
+
|
|
644
|
+
/**
|
|
645
|
+
* Add uniforms and defines for the KHR_materials_anisotropy extension
|
|
646
|
+
*
|
|
647
|
+
* @param {ModelComponents.Anisotropy} anisotropy
|
|
648
|
+
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
649
|
+
* @param {ShaderBuilder} shaderBuilder
|
|
650
|
+
* @param {Texture} defaultTexture
|
|
651
|
+
* @param {boolean} disableTextures
|
|
652
|
+
* @private
|
|
653
|
+
*/
|
|
654
|
+
function processAnisotropyUniforms(
|
|
655
|
+
anisotropy,
|
|
656
|
+
uniformMap,
|
|
657
|
+
shaderBuilder,
|
|
658
|
+
defaultTexture,
|
|
659
|
+
disableTextures,
|
|
660
|
+
texCoordSets,
|
|
661
|
+
) {
|
|
662
|
+
const { anisotropyStrength, anisotropyRotation, anisotropyTexture } =
|
|
663
|
+
anisotropy;
|
|
664
|
+
|
|
665
|
+
shaderBuilder.addDefine(
|
|
666
|
+
"USE_ANISOTROPY",
|
|
667
|
+
undefined,
|
|
668
|
+
ShaderDestination.FRAGMENT,
|
|
669
|
+
);
|
|
670
|
+
|
|
671
|
+
if (defined(anisotropyTexture) && !disableTextures) {
|
|
672
|
+
processTexture(
|
|
673
|
+
shaderBuilder,
|
|
674
|
+
uniformMap,
|
|
675
|
+
anisotropyTexture,
|
|
676
|
+
"u_anisotropyTexture",
|
|
677
|
+
"ANISOTROPY",
|
|
678
|
+
defaultTexture,
|
|
679
|
+
texCoordSets,
|
|
680
|
+
);
|
|
681
|
+
}
|
|
682
|
+
|
|
683
|
+
// Pre-compute cos and sin of rotation, since they are the same for all fragments.
|
|
684
|
+
// Combine with strength as one vec3 uniform.
|
|
685
|
+
const cosRotation = Math.cos(anisotropyRotation);
|
|
686
|
+
const sinRotation = Math.sin(anisotropyRotation);
|
|
687
|
+
shaderBuilder.addUniform("vec3", "u_anisotropy", ShaderDestination.FRAGMENT);
|
|
688
|
+
uniformMap.u_anisotropy = function () {
|
|
689
|
+
return Cartesian3.fromElements(
|
|
690
|
+
cosRotation,
|
|
691
|
+
sinRotation,
|
|
692
|
+
anisotropyStrength,
|
|
693
|
+
scratchAnisotropy,
|
|
694
|
+
);
|
|
695
|
+
};
|
|
696
|
+
}
|
|
697
|
+
|
|
698
|
+
/**
|
|
699
|
+
* Add uniforms and defines for the KHR_materials_clearcoat extension
|
|
700
|
+
*
|
|
701
|
+
* @param {ModelComponents.Clearcoat} clearcoat
|
|
702
|
+
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
703
|
+
* @param {ShaderBuilder} shaderBuilder
|
|
704
|
+
* @param {Texture} defaultTexture
|
|
705
|
+
* @param {boolean} disableTextures
|
|
706
|
+
* @private
|
|
707
|
+
*/
|
|
708
|
+
function processClearcoatUniforms(
|
|
709
|
+
clearcoat,
|
|
710
|
+
uniformMap,
|
|
711
|
+
shaderBuilder,
|
|
712
|
+
defaultTexture,
|
|
713
|
+
disableTextures,
|
|
714
|
+
texCoordSets,
|
|
715
|
+
) {
|
|
716
|
+
const {
|
|
717
|
+
clearcoatFactor,
|
|
718
|
+
clearcoatTexture,
|
|
719
|
+
clearcoatRoughnessFactor,
|
|
720
|
+
clearcoatRoughnessTexture,
|
|
721
|
+
clearcoatNormalTexture,
|
|
722
|
+
} = clearcoat;
|
|
723
|
+
|
|
724
|
+
shaderBuilder.addDefine(
|
|
725
|
+
"USE_CLEARCOAT",
|
|
726
|
+
undefined,
|
|
727
|
+
ShaderDestination.FRAGMENT,
|
|
728
|
+
);
|
|
729
|
+
|
|
730
|
+
if (
|
|
731
|
+
defined(clearcoatFactor) &&
|
|
732
|
+
clearcoatFactor !== Clearcoat.DEFAULT_CLEARCOAT_FACTOR
|
|
733
|
+
) {
|
|
734
|
+
shaderBuilder.addUniform(
|
|
735
|
+
"float",
|
|
736
|
+
"u_clearcoatFactor",
|
|
737
|
+
ShaderDestination.FRAGMENT,
|
|
738
|
+
);
|
|
739
|
+
uniformMap.u_clearcoatFactor = function () {
|
|
740
|
+
return clearcoat.clearcoatFactor;
|
|
741
|
+
};
|
|
742
|
+
shaderBuilder.addDefine(
|
|
743
|
+
"HAS_CLEARCOAT_FACTOR",
|
|
744
|
+
undefined,
|
|
745
|
+
ShaderDestination.FRAGMENT,
|
|
746
|
+
);
|
|
747
|
+
}
|
|
748
|
+
|
|
749
|
+
if (defined(clearcoatTexture) && !disableTextures) {
|
|
750
|
+
processTexture(
|
|
751
|
+
shaderBuilder,
|
|
752
|
+
uniformMap,
|
|
753
|
+
clearcoatTexture,
|
|
754
|
+
"u_clearcoatTexture",
|
|
755
|
+
"CLEARCOAT",
|
|
756
|
+
defaultTexture,
|
|
757
|
+
texCoordSets,
|
|
758
|
+
);
|
|
759
|
+
}
|
|
760
|
+
|
|
761
|
+
if (
|
|
762
|
+
defined(clearcoatRoughnessFactor) &&
|
|
763
|
+
clearcoatFactor !== Clearcoat.DEFAULT_CLEARCOAT_ROUGHNESS_FACTOR
|
|
764
|
+
) {
|
|
765
|
+
shaderBuilder.addUniform(
|
|
766
|
+
"float",
|
|
767
|
+
"u_clearcoatRoughnessFactor",
|
|
768
|
+
ShaderDestination.FRAGMENT,
|
|
769
|
+
);
|
|
770
|
+
uniformMap.u_clearcoatRoughnessFactor = function () {
|
|
771
|
+
return clearcoat.clearcoatRoughnessFactor;
|
|
772
|
+
};
|
|
773
|
+
shaderBuilder.addDefine(
|
|
774
|
+
"HAS_CLEARCOAT_ROUGHNESS_FACTOR",
|
|
775
|
+
undefined,
|
|
776
|
+
ShaderDestination.FRAGMENT,
|
|
777
|
+
);
|
|
778
|
+
}
|
|
779
|
+
|
|
780
|
+
if (defined(clearcoatRoughnessTexture) && !disableTextures) {
|
|
781
|
+
processTexture(
|
|
782
|
+
shaderBuilder,
|
|
783
|
+
uniformMap,
|
|
784
|
+
clearcoatRoughnessTexture,
|
|
785
|
+
"u_clearcoatRoughnessTexture",
|
|
786
|
+
"CLEARCOAT_ROUGHNESS",
|
|
787
|
+
defaultTexture,
|
|
788
|
+
texCoordSets,
|
|
789
|
+
);
|
|
790
|
+
}
|
|
791
|
+
|
|
792
|
+
if (defined(clearcoatNormalTexture) && !disableTextures) {
|
|
793
|
+
processTexture(
|
|
794
|
+
shaderBuilder,
|
|
795
|
+
uniformMap,
|
|
796
|
+
clearcoatNormalTexture,
|
|
797
|
+
"u_clearcoatNormalTexture",
|
|
798
|
+
"CLEARCOAT_NORMAL",
|
|
799
|
+
defaultTexture,
|
|
800
|
+
texCoordSets,
|
|
801
|
+
);
|
|
802
|
+
}
|
|
803
|
+
}
|
|
804
|
+
|
|
805
|
+
/**
|
|
806
|
+
* Add uniforms and defines for the PBR metallic roughness model
|
|
807
|
+
*
|
|
808
|
+
* @param {ModelComponents.MetallicRoughness} metallicRoughness
|
|
809
|
+
* @param {Object<string, Function>} uniformMap The uniform map to modify.
|
|
810
|
+
* @param {ShaderBuilder} shaderBuilder
|
|
811
|
+
* @param {Texture} defaultTexture
|
|
812
|
+
* @param {boolean} disableTextures
|
|
813
|
+
* @private
|
|
814
|
+
*/
|
|
815
|
+
function processMetallicRoughnessUniforms(
|
|
816
|
+
metallicRoughness,
|
|
817
|
+
uniformMap,
|
|
818
|
+
shaderBuilder,
|
|
819
|
+
defaultTexture,
|
|
820
|
+
disableTextures,
|
|
821
|
+
texCoordSets,
|
|
822
|
+
) {
|
|
823
|
+
shaderBuilder.addDefine(
|
|
824
|
+
"USE_METALLIC_ROUGHNESS",
|
|
825
|
+
undefined,
|
|
826
|
+
ShaderDestination.FRAGMENT,
|
|
827
|
+
);
|
|
828
|
+
|
|
829
|
+
const baseColorTexture = metallicRoughness.baseColorTexture;
|
|
830
|
+
if (defined(baseColorTexture) && !disableTextures) {
|
|
831
|
+
processTexture(
|
|
832
|
+
shaderBuilder,
|
|
833
|
+
uniformMap,
|
|
834
|
+
baseColorTexture,
|
|
835
|
+
"u_baseColorTexture",
|
|
836
|
+
"BASE_COLOR",
|
|
837
|
+
defaultTexture,
|
|
838
|
+
texCoordSets,
|
|
839
|
+
);
|
|
840
|
+
}
|
|
841
|
+
|
|
842
|
+
const baseColorFactor = metallicRoughness.baseColorFactor;
|
|
843
|
+
if (
|
|
844
|
+
defined(baseColorFactor) &&
|
|
845
|
+
!Cartesian4.equals(
|
|
846
|
+
baseColorFactor,
|
|
847
|
+
MetallicRoughness.DEFAULT_BASE_COLOR_FACTOR,
|
|
848
|
+
)
|
|
849
|
+
) {
|
|
850
|
+
shaderBuilder.addUniform(
|
|
851
|
+
"vec4",
|
|
852
|
+
"u_baseColorFactor",
|
|
853
|
+
ShaderDestination.FRAGMENT,
|
|
854
|
+
);
|
|
855
|
+
uniformMap.u_baseColorFactor = function () {
|
|
856
|
+
return metallicRoughness.baseColorFactor;
|
|
857
|
+
};
|
|
858
|
+
shaderBuilder.addDefine(
|
|
859
|
+
"HAS_BASE_COLOR_FACTOR",
|
|
860
|
+
undefined,
|
|
861
|
+
ShaderDestination.FRAGMENT,
|
|
862
|
+
);
|
|
863
|
+
}
|
|
864
|
+
|
|
865
|
+
const metallicRoughnessTexture = metallicRoughness.metallicRoughnessTexture;
|
|
866
|
+
if (defined(metallicRoughnessTexture) && !disableTextures) {
|
|
867
|
+
processTexture(
|
|
868
|
+
shaderBuilder,
|
|
869
|
+
uniformMap,
|
|
870
|
+
metallicRoughnessTexture,
|
|
871
|
+
"u_metallicRoughnessTexture",
|
|
872
|
+
"METALLIC_ROUGHNESS",
|
|
873
|
+
defaultTexture,
|
|
874
|
+
texCoordSets,
|
|
875
|
+
);
|
|
876
|
+
}
|
|
877
|
+
|
|
878
|
+
const metallicFactor = metallicRoughness.metallicFactor;
|
|
879
|
+
if (
|
|
880
|
+
defined(metallicFactor) &&
|
|
881
|
+
metallicFactor !== MetallicRoughness.DEFAULT_METALLIC_FACTOR
|
|
882
|
+
) {
|
|
883
|
+
shaderBuilder.addUniform(
|
|
884
|
+
"float",
|
|
885
|
+
"u_metallicFactor",
|
|
886
|
+
ShaderDestination.FRAGMENT,
|
|
887
|
+
);
|
|
888
|
+
uniformMap.u_metallicFactor = function () {
|
|
889
|
+
return metallicRoughness.metallicFactor;
|
|
890
|
+
};
|
|
891
|
+
shaderBuilder.addDefine(
|
|
892
|
+
"HAS_METALLIC_FACTOR",
|
|
893
|
+
undefined,
|
|
894
|
+
ShaderDestination.FRAGMENT,
|
|
895
|
+
);
|
|
896
|
+
}
|
|
897
|
+
|
|
898
|
+
const roughnessFactor = metallicRoughness.roughnessFactor;
|
|
899
|
+
if (
|
|
900
|
+
defined(roughnessFactor) &&
|
|
901
|
+
roughnessFactor !== MetallicRoughness.DEFAULT_ROUGHNESS_FACTOR
|
|
902
|
+
) {
|
|
903
|
+
shaderBuilder.addUniform(
|
|
904
|
+
"float",
|
|
905
|
+
"u_roughnessFactor",
|
|
906
|
+
ShaderDestination.FRAGMENT,
|
|
907
|
+
);
|
|
908
|
+
uniformMap.u_roughnessFactor = function () {
|
|
909
|
+
return metallicRoughness.roughnessFactor;
|
|
910
|
+
};
|
|
911
|
+
shaderBuilder.addDefine(
|
|
912
|
+
"HAS_ROUGHNESS_FACTOR",
|
|
913
|
+
undefined,
|
|
914
|
+
ShaderDestination.FRAGMENT,
|
|
915
|
+
);
|
|
916
|
+
}
|
|
917
|
+
}
|
|
918
|
+
|
|
919
|
+
export default MaterialPipelineStage;
|