python-cad-tools 0.1.0rc1__py3-none-any.whl
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.
- python_cad_tools/__init__.py +10 -0
- python_cad_tools/_locking.py +63 -0
- python_cad_tools/_project_loader.py +273 -0
- python_cad_tools/_project_state.py +65 -0
- python_cad_tools/_scaffold.py +66 -0
- python_cad_tools/_transaction.py +208 -0
- python_cad_tools/_viewer_static/app.webmanifest +18 -0
- python_cad_tools/_viewer_static/asset-manifest.json +1 -0
- python_cad_tools/_viewer_static/assets/animationGroup-Sd34ntWg.js +1 -0
- python_cad_tools/_viewer_static/assets/bakedVertexAnimation-Cd_pRdrn.js +316 -0
- python_cad_tools/_viewer_static/assets/basisTextureLoader-DWgvS_1G.js +1 -0
- python_cad_tools/_viewer_static/assets/brdfTextureTools-CWGiG1W2.js +2 -0
- python_cad_tools/_viewer_static/assets/bumpFragment-CWULheF1.js +127 -0
- python_cad_tools/_viewer_static/assets/bumpVertex-DqzFZayE.js +6 -0
- python_cad_tools/_viewer_static/assets/bumpVertexDeclaration-C5EFyTio.js +6 -0
- python_cad_tools/_viewer_static/assets/clipPlaneFragment-BXRtt4jj.js +46 -0
- python_cad_tools/_viewer_static/assets/clipPlaneVertex-B_VhD1oQ.js +37 -0
- python_cad_tools/_viewer_static/assets/cubemapToSphericalPolynomial-DRpaukza.js +1 -0
- python_cad_tools/_viewer_static/assets/dds-Dkb2Cx2N.js +1 -0
- python_cad_tools/_viewer_static/assets/dds.pure-DtvJsKvY.js +1 -0
- python_cad_tools/_viewer_static/assets/ddsTextureLoader-H78xux1g.js +1 -0
- python_cad_tools/_viewer_static/assets/default.fragment-oSQ-tWhe.js +469 -0
- python_cad_tools/_viewer_static/assets/default.vertex-DhFjw_Da.js +209 -0
- python_cad_tools/_viewer_static/assets/defaultUboDeclaration-BMDHNppx.js +5 -0
- python_cad_tools/_viewer_static/assets/dumpTools-BaNZPjUX.js +2 -0
- python_cad_tools/_viewer_static/assets/envTextureLoader-V0YnLcIM.js +1 -0
- python_cad_tools/_viewer_static/assets/exrTextureLoader-CjGyIK3x.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphApplyForceBlock-CW5nuobR.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphApplyImpulseBlock-LFqYIkhj.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphArrayIndexBlock-BMOHUbBm.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphBezierCurveEasingBlock-knmTiuEk.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphBinaryOperationBlock-DFLuCAKJ.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphBranchBlock-BJRHMXMo.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphCachedOperationBlock-Dng-6jE0.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphCancelDelayBlock-CgbK3CQZ.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphCodeExecutionBlock-8zMtq9tg.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphConditionalDataBlock-BiLr2rkI.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphConsoleLogBlock-J1vcCtNP.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphConstantBlock-CFb5nuaV.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphContextBlock-DAeGVzhC.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphCounterBlock-lZlAQiJd.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphDataSwitchBlock-BIzvmbVy.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphDebounceBlock-DvNuMVwy.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphDebugBlock-Dymd2VEE.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphDoNBlock-v68aoNLH.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphEasingBlock-CTnGv92q.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphFlipFlopBlock-DXsO0Chw.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphForLoopBlock-CPpe9T75.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphFunctionReferenceBlock-DjDev4Pq.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphGLTFDataProvider-GIYCz4AQ.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphGetAngularVelocityBlock-BStkOVeL.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphGetAssetBlock-Eiqoivbz.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphGetLinearVelocityBlock-B0cpV5ws.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphGetPhysicsMassPropertiesBlock-B-H64yaI.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphGetPropertyBlock-CUyOsPw0.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphGetSoundVolumeBlock-C0FjrsUz.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphGetVariableBlock-O4597zBl.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphIndexOfBlock-E00Z3KXM.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphInterpolationBlock-DnkA9MNH.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphIsKeyPressedBlock-DDfeuAyf.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphIsSoundPlayingBlock-DMXg8jdM.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphJsonPointerParserBlock-OmCorK0y.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphKeyDownEventBlock-RuVtj6g2.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphKeyUpEventBlock-DO4pAfHi.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphKeyboardEventBlock-Bx3pAzzh.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphMathBlocks-7W1XYOC8.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphMathCombineExtractBlocks-a4f0Kv6e.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphMatrixMathBlocks-C5Z-y1Au.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphMeshPickEventBlock-D4m-I4CS.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphMultiGateBlock-BISVSMw6.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphPauseAnimationBlock-BYP2Z-HG.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphPauseSoundBlock-Drh1EeW6.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphPhysicsCollisionEventBlock-BoziAQ75.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphPlayAnimationBlock-Clry-68M.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphPlaySoundBlock-LbBVxGBE.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphPointerDownEventBlock-DIVXCSHh.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphPointerMoveEventBlock-BNNOzY2W.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphPointerOutEventBlock-B8f2dOFT.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphPointerOverEventBlock-CQr8LCee.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphPointerUpEventBlock-DMg_iEHl.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphReceiveCustomEventBlock-B8GJm9Ai.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSceneReadyEventBlock-Dcdb29K2.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSceneTickEventBlock-BLE5p4mi.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSendCustomEventBlock-BMzDItQ5.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSequenceBlock-DRURovjn.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSetAngularVelocityBlock-Ba8dhkLM.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSetDelayBlock-CnQR--Gn.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSetLinearVelocityBlock-Dm1r3vkh.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSetPhysicsMotionTypeBlock-BNtMLimi.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSetPropertyBlock-C-uv2jhP.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSetSoundVolumeBlock-D9LDx3lg.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSetVariableBlock-DszzRB5X.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSoundEndedEventBlock-DeTDSudb.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphStopAnimationBlock-DWuwoFWr.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphStopSoundBlock-DEnj2cQw.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphSwitchBlock-zs8Fp9ky.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphThrottleBlock-BYAKUQXd.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphTransformCoordinatesSystemBlock-DYP54m5P.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphTypeToTypeBlocks-vFwn79bS.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphUnaryOperationBlock-CaRh4Ef0.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphVectorMathBlocks-BEIhMs-A.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphWaitAllBlock-DFbELP_j.js +1 -0
- python_cad_tools/_viewer_static/assets/flowGraphWhileLoopBlock-C1OKQ-_F.js +1 -0
- python_cad_tools/_viewer_static/assets/fogFragment-DtDlQBnz.js +25 -0
- python_cad_tools/_viewer_static/assets/gaussianSplatting-Cfigjb15.js +242 -0
- python_cad_tools/_viewer_static/assets/gaussianSplatting-DIn8R8oF.js +296 -0
- python_cad_tools/_viewer_static/assets/gaussianSplatting.fragment-BxeRJ2k-.js +38 -0
- python_cad_tools/_viewer_static/assets/gaussianSplatting.fragment-DNDmvRs-.js +37 -0
- python_cad_tools/_viewer_static/assets/gaussianSplatting.vertex-D92z5jYn.js +86 -0
- python_cad_tools/_viewer_static/assets/gaussianSplatting.vertex-DSWfFnKQ.js +86 -0
- python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.fragment-DBQE2gDk.js +12 -0
- python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.fragment-qwx5ntqJ.js +17 -0
- python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.vertex-CP2kd3jU.js +30 -0
- python_cad_tools/_viewer_static/assets/gaussianSplattingVoxel.vertex-Dr-fEg_W.js +19 -0
- python_cad_tools/_viewer_static/assets/geometry.fragment-CsJIm2H0.js +242 -0
- python_cad_tools/_viewer_static/assets/geometry.fragment-Dph3muZt.js +262 -0
- python_cad_tools/_viewer_static/assets/geometry.vertex-BXGMTA_J.js +212 -0
- python_cad_tools/_viewer_static/assets/geometry.vertex-Bm9Wg3Gi.js +214 -0
- python_cad_tools/_viewer_static/assets/glowBlurPostProcess.fragment-BJSwKIJD.js +7 -0
- python_cad_tools/_viewer_static/assets/glowMapGeneration.fragment-DcyS1cTF.js +63 -0
- python_cad_tools/_viewer_static/assets/glowMapGeneration.vertex-BGq1Fakj.js +75 -0
- python_cad_tools/_viewer_static/assets/glowMapMerge.fragment-DxcneU_F.js +25 -0
- python_cad_tools/_viewer_static/assets/glowMapMerge.vertex-DaJJKqMV.js +8 -0
- python_cad_tools/_viewer_static/assets/harmonicsFunctions-DzJcvNWG.js +16 -0
- python_cad_tools/_viewer_static/assets/hdrTextureLoader-BGQvgh0h.js +2 -0
- python_cad_tools/_viewer_static/assets/helperFunctions-Cugfp1Fz.js +87 -0
- python_cad_tools/_viewer_static/assets/iesTextureLoader-CO4G0p2M.js +2 -0
- python_cad_tools/_viewer_static/assets/index-B2zBEWsq.js +7007 -0
- python_cad_tools/_viewer_static/assets/index-DcTTrc-8.css +1 -0
- python_cad_tools/_viewer_static/assets/kernelBlur.fragment-B6CTXTxY.js +57 -0
- python_cad_tools/_viewer_static/assets/kernelBlur.fragment-BkKbudbW.js +57 -0
- python_cad_tools/_viewer_static/assets/kernelBlur.vertex-BYwFU5IS.js +11 -0
- python_cad_tools/_viewer_static/assets/kernelBlur.vertex-D371zUfT.js +11 -0
- python_cad_tools/_viewer_static/assets/kernelBlurVaryingDeclaration-CgBGaCHg.js +1 -0
- python_cad_tools/_viewer_static/assets/kernelBlurVaryingDeclaration-YS8JpqdO.js +1 -0
- python_cad_tools/_viewer_static/assets/ktxTextureLoader-ncMSJTjl.js +1 -0
- python_cad_tools/_viewer_static/assets/lightFragment-skHiFbKB.js +398 -0
- python_cad_tools/_viewer_static/assets/logDepthDeclaration-BR8XRz9F.js +4 -0
- python_cad_tools/_viewer_static/assets/logDepthVertex-UKrhEIvg.js +14 -0
- python_cad_tools/_viewer_static/assets/mainUVVaryingDeclaration-BxQWGFcG.js +4 -0
- python_cad_tools/_viewer_static/assets/mesh.vertexData.functions-ayNlGC5K.js +1 -0
- python_cad_tools/_viewer_static/assets/meshUboDeclaration-BnX046aQ.js +4 -0
- python_cad_tools/_viewer_static/assets/oitFragment-CTMCOfNP.js +605 -0
- python_cad_tools/_viewer_static/assets/openpbr.fragment-DPJPqi6p.js +1530 -0
- python_cad_tools/_viewer_static/assets/openpbr.fragment-Dv6qTVVi.js +1384 -0
- python_cad_tools/_viewer_static/assets/openpbr.vertex-Bn2wrdGL.js +364 -0
- python_cad_tools/_viewer_static/assets/openpbr.vertex-CHESW3gB.js +251 -0
- python_cad_tools/_viewer_static/assets/openpbrMaterial.pure-BdK7VgO_.js +3 -0
- python_cad_tools/_viewer_static/assets/openpbrMaterialLoadingAdapter-Bm_AHDUN.js +4 -0
- python_cad_tools/_viewer_static/assets/openpbrTransmissionLayerData-BDa9qEoN.js +339 -0
- python_cad_tools/_viewer_static/assets/openpbrTransmissionLayerData-Ba_ly4LE.js +343 -0
- python_cad_tools/_viewer_static/assets/openpbrUboDeclaration-BY2lSH2C.js +5 -0
- python_cad_tools/_viewer_static/assets/openpbrUboDeclaration-DajhikDS.js +6 -0
- python_cad_tools/_viewer_static/assets/packingFunctions-BHPwcGG2.js +4 -0
- python_cad_tools/_viewer_static/assets/packingFunctions-DTwzBRBx.js +4 -0
- python_cad_tools/_viewer_static/assets/pass.fragment-9oKU4pI3.js +4 -0
- python_cad_tools/_viewer_static/assets/passCube.fragment-CpAeiYx1.js +23 -0
- python_cad_tools/_viewer_static/assets/passCube.fragment-DHtSWVRF.js +23 -0
- python_cad_tools/_viewer_static/assets/pbr.fragment-cIhMKwLs.js +2560 -0
- python_cad_tools/_viewer_static/assets/pbr.vertex-BfdONsf2.js +255 -0
- python_cad_tools/_viewer_static/assets/pbrBRDFFunctions-B_ppOzPO.js +173 -0
- python_cad_tools/_viewer_static/assets/pbrDebug-DDdwL5_t.js +693 -0
- python_cad_tools/_viewer_static/assets/pbrIBLFunctions-b1zdpzOP.js +43 -0
- python_cad_tools/_viewer_static/assets/pbrMaterial.pure-BZA7yVhu.js +2 -0
- python_cad_tools/_viewer_static/assets/pbrMaterialLoadingAdapter-BRvKRnjl.js +1 -0
- python_cad_tools/_viewer_static/assets/pbrUboDeclaration-CMZp25k3.js +5 -0
- python_cad_tools/_viewer_static/assets/postprocess.vertex-DzdUpNbW.js +9 -0
- python_cad_tools/_viewer_static/assets/procedural.vertex-BnbuQ-1f.js +7 -0
- python_cad_tools/_viewer_static/assets/procedural.vertex-Dp-Ng7Pc.js +8 -0
- python_cad_tools/_viewer_static/assets/reflectionFunction-DBlr3oDs.js +83 -0
- python_cad_tools/_viewer_static/assets/rgbdDecode.fragment-CyvnZFOJ.js +5 -0
- python_cad_tools/_viewer_static/assets/rgbdEncode.fragment-Dz4zLnoD.js +5 -0
- python_cad_tools/_viewer_static/assets/rgbdEncode.fragment-iscgpA1_.js +5 -0
- python_cad_tools/_viewer_static/assets/sceneUboDeclaration-BzFIc4mb.js +11 -0
- python_cad_tools/_viewer_static/assets/textureProcessor.fragment-C9D0rd-M.js +151 -0
- python_cad_tools/_viewer_static/assets/textureProcessor.fragment-JMKyWZng.js +146 -0
- python_cad_tools/_viewer_static/assets/tgaTextureLoader-oxTElIQJ.js +1 -0
- python_cad_tools/_viewer_static/assets/vertexColorMixing-mdC9xZe1.js +418 -0
- python_cad_tools/_viewer_static/favicon.svg +10 -0
- python_cad_tools/_viewer_static/index.html +18 -0
- python_cad_tools/_viewer_static/sw.js +61 -0
- python_cad_tools/artifacts.py +546 -0
- python_cad_tools/build-info.json +1 -0
- python_cad_tools/build.py +270 -0
- python_cad_tools/cli.py +212 -0
- python_cad_tools/context.py +67 -0
- python_cad_tools/determinism.py +66 -0
- python_cad_tools/drawings/__init__.py +124 -0
- python_cad_tools/drawings/_catalog.py +79 -0
- python_cad_tools/drawings/_validation.py +238 -0
- python_cad_tools/elements.py +121 -0
- python_cad_tools/exceptions.py +45 -0
- python_cad_tools/exporters/__init__.py +8 -0
- python_cad_tools/exporters/base.py +24 -0
- python_cad_tools/exporters/drawings/__init__.py +5 -0
- python_cad_tools/exporters/drawings/annotations.py +444 -0
- python_cad_tools/exporters/drawings/dxf.py +110 -0
- python_cad_tools/exporters/drawings/model.py +70 -0
- python_cad_tools/exporters/drawings/pdf.py +119 -0
- python_cad_tools/exporters/drawings/primitives.py +93 -0
- python_cad_tools/exporters/drawings/projection.py +64 -0
- python_cad_tools/exporters/drawings/svg.py +135 -0
- python_cad_tools/exporters/glb.py +100 -0
- python_cad_tools/exporters/ifc.py +229 -0
- python_cad_tools/exporters/quantities.py +136 -0
- python_cad_tools/exporters/step.py +117 -0
- python_cad_tools/geometry.py +187 -0
- python_cad_tools/manifests.py +338 -0
- python_cad_tools/project_config.py +174 -0
- python_cad_tools/py.typed +1 -0
- python_cad_tools/runtime_sync.py +126 -0
- python_cad_tools/schemas/build-manifest-1.json +1 -0
- python_cad_tools/schemas/design-manifest-1.json +1 -0
- python_cad_tools/schemas/download-manifest-2.json +46 -0
- python_cad_tools/schemas/drawing-annotations-1.json +66 -0
- python_cad_tools/schemas/glb-manifest-1.json +1 -0
- python_cad_tools/schemas/ifc-validation-1.json +1 -0
- python_cad_tools/schemas/quantities-1.json +1 -0
- python_cad_tools/schemas/run-metadata-1.json +1 -0
- python_cad_tools/schemas/site-metadata-1.json +34 -0
- python_cad_tools/schemas/step-validation-1.json +1 -0
- python_cad_tools/site.py +676 -0
- python_cad_tools/templates/project/.gitignore +9 -0
- python_cad_tools/templates/project/README.md +38 -0
- python_cad_tools/templates/project/config.py +36 -0
- python_cad_tools/templates/project/drawing_annotations.py +117 -0
- python_cad_tools/templates/project/model.py +87 -0
- python_cad_tools/templates/project/pyproject.toml +27 -0
- python_cad_tools/units.py +207 -0
- python_cad_tools/validation.py +153 -0
- python_cad_tools-0.1.0rc1.dist-info/METADATA +149 -0
- python_cad_tools-0.1.0rc1.dist-info/RECORD +236 -0
- python_cad_tools-0.1.0rc1.dist-info/WHEEL +5 -0
- python_cad_tools-0.1.0rc1.dist-info/entry_points.txt +2 -0
- python_cad_tools-0.1.0rc1.dist-info/licenses/LICENSE +679 -0
- python_cad_tools-0.1.0rc1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{y as a,h as n,L as s,i as r}from"./index-B2zBEWsq.js";class e extends a{constructor(i){super(i),this.config=i,this.condition=this.registerDataInput("condition",n),this.executionFlow=this._registerSignalOutput("executionFlow"),this.completed=this._registerSignalOutput("completed"),this._unregisterSignalOutput("out")}_execute(i,u){let t=this.condition.getValue(i);this.config?.doWhile&&!t&&this.executionFlow._activateSignal(i);let o=0;for(;t;){if(this.executionFlow._activateSignal(i),++o,o>=e.MaxLoopCount){s.Warn("FlowGraphWhileLoopBlock: Max loop count reached. Breaking.");break}t=this.condition.getValue(i)}this.completed._activateSignal(i)}getClassName(){return"FlowGraphWhileLoopBlock"}}e.MaxLoopCount=1e3;let l=!1;function h(){l||(l=!0,r("FlowGraphWhileLoopBlock",e))}h();export{e as FlowGraphWhileLoopBlock,h as RegisterFlowGraphWhileLoopBlock};
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import{S as o}from"./index-B2zBEWsq.js";const f="fogFragmentDeclaration",r=`#ifdef FOG
|
|
2
|
+
#define FOGMODE_NONE 0.
|
|
3
|
+
#define FOGMODE_EXP 1.
|
|
4
|
+
#define FOGMODE_EXP2 2.
|
|
5
|
+
#define FOGMODE_LINEAR 3.
|
|
6
|
+
const E=2.71828;uniform vFogInfos: vec4f;uniform vFogColor: vec3f;varying vFogDistance: vec3f;fn CalcFogFactor()->f32
|
|
7
|
+
{var fogCoeff: f32=1.0;var fogStart: f32=uniforms.vFogInfos.y;var fogEnd: f32=uniforms.vFogInfos.z;var fogDensity: f32=uniforms.vFogInfos.w;var fogDistance: f32=length(fragmentInputs.vFogDistance);if (FOGMODE_LINEAR==uniforms.vFogInfos.x)
|
|
8
|
+
{fogCoeff=(fogEnd-fogDistance)/(fogEnd-fogStart);}
|
|
9
|
+
else if (FOGMODE_EXP==uniforms.vFogInfos.x)
|
|
10
|
+
{fogCoeff=1.0/pow(E,fogDistance*fogDensity);}
|
|
11
|
+
else if (FOGMODE_EXP2==uniforms.vFogInfos.x)
|
|
12
|
+
{fogCoeff=1.0/pow(E,fogDistance*fogDistance*fogDensity*fogDensity);}
|
|
13
|
+
return clamp(fogCoeff,0.0,1.0);}
|
|
14
|
+
#endif
|
|
15
|
+
`;o.IncludesShadersStoreWGSL[f]||(o.IncludesShadersStoreWGSL[f]=r);const g={name:f,shader:r},e="logDepthFragment",a=`#ifdef LOGARITHMICDEPTH
|
|
16
|
+
fragmentOutputs.fragDepth=log2(fragmentInputs.vFragmentDepth)*uniforms.logarithmicDepthConstant*0.5;
|
|
17
|
+
#endif
|
|
18
|
+
`;o.IncludesShadersStoreWGSL[e]||(o.IncludesShadersStoreWGSL[e]=a);const i={name:e,shader:a},n="fogFragment",s=`#ifdef FOG
|
|
19
|
+
var fog: f32=CalcFogFactor();
|
|
20
|
+
#ifdef PBR
|
|
21
|
+
fog=toLinearSpace(fog);
|
|
22
|
+
#endif
|
|
23
|
+
color= vec4f(mix(uniforms.vFogColor,color.rgb,fog),color.a);
|
|
24
|
+
#endif
|
|
25
|
+
`;o.IncludesShadersStoreWGSL[n]||(o.IncludesShadersStoreWGSL[n]=s);const c={name:n,shader:s};export{c as a,g as f,i as l};
|
|
@@ -0,0 +1,242 @@
|
|
|
1
|
+
import{S as e}from"./index-B2zBEWsq.js";const t="gaussianSplattingVertexDeclaration",o="attribute vec3 position;attribute vec4 splatIndex0;attribute vec4 splatIndex1;attribute vec4 splatIndex2;attribute vec4 splatIndex3;uniform mat4 view;uniform mat4 projection;uniform mat4 world;uniform vec4 vEyePosition;";e.IncludesShadersStore[t]||(e.IncludesShadersStore[t]=o);const n={name:t,shader:o},a="gaussianSplattingUboDeclaration",c=`#include<sceneUboDeclaration>
|
|
2
|
+
#include<meshUboDeclaration>
|
|
3
|
+
attribute vec3 position;attribute vec4 splatIndex0;attribute vec4 splatIndex1;attribute vec4 splatIndex2;attribute vec4 splatIndex3;
|
|
4
|
+
`;e.IncludesShadersStore[a]||(e.IncludesShadersStore[a]=c);const x={name:a,shader:c},s="gaussianSplatting",i=`#if !defined(WEBGL2) && !defined(WEBGPU) && !defined(NATIVE)
|
|
5
|
+
mat3 transpose(mat3 matrix) {return mat3(matrix[0][0],matrix[1][0],matrix[2][0],
|
|
6
|
+
matrix[0][1],matrix[1][1],matrix[2][1],
|
|
7
|
+
matrix[0][2],matrix[1][2],matrix[2][2]);}
|
|
8
|
+
#endif
|
|
9
|
+
vec2 getDataUV(float index,vec2 textureSize) {float y=floor(index/textureSize.x);float x=index-y*textureSize.x;return vec2((x+0.5)/textureSize.x,(y+0.5)/textureSize.y);}
|
|
10
|
+
#if SH_DEGREE>0 || IS_COMPOUND
|
|
11
|
+
ivec2 getDataUVint(float index,vec2 textureSize) {float y=floor(index/textureSize.x);float x=index-y*textureSize.x;return ivec2(uint(x+0.5),uint(y+0.5));}
|
|
12
|
+
#endif
|
|
13
|
+
struct Splat {vec4 center;vec4 color;vec4 covA;vec4 covB;
|
|
14
|
+
#if SH_DEGREE>0
|
|
15
|
+
uvec4 sh0;
|
|
16
|
+
#endif
|
|
17
|
+
#if SH_DEGREE>1
|
|
18
|
+
uvec4 sh1;
|
|
19
|
+
#endif
|
|
20
|
+
#if SH_DEGREE>2
|
|
21
|
+
uvec4 sh2;
|
|
22
|
+
#endif
|
|
23
|
+
#if SH_DEGREE>3
|
|
24
|
+
uvec4 sh3;uvec4 sh4;
|
|
25
|
+
#endif
|
|
26
|
+
#if IS_COMPOUND
|
|
27
|
+
uint partIndex;
|
|
28
|
+
#endif
|
|
29
|
+
#if defined(IS_FOR_VOXELIZATION)
|
|
30
|
+
vec4 rotationA;vec4 rotationB;vec4 rotationScale;
|
|
31
|
+
#endif
|
|
32
|
+
#ifdef USE_SOG
|
|
33
|
+
float splatIndex;
|
|
34
|
+
#endif
|
|
35
|
+
};float getSplatIndex(int localIndex)
|
|
36
|
+
{float splatIndex;switch (localIndex)
|
|
37
|
+
{case 0: splatIndex=splatIndex0.x; break;case 1: splatIndex=splatIndex0.y; break;case 2: splatIndex=splatIndex0.z; break;case 3: splatIndex=splatIndex0.w; break;case 4: splatIndex=splatIndex1.x; break;case 5: splatIndex=splatIndex1.y; break;case 6: splatIndex=splatIndex1.z; break;case 7: splatIndex=splatIndex1.w; break;case 8: splatIndex=splatIndex2.x; break;case 9: splatIndex=splatIndex2.y; break;case 10: splatIndex=splatIndex2.z; break;case 11: splatIndex=splatIndex2.w; break;case 12: splatIndex=splatIndex3.x; break;case 13: splatIndex=splatIndex3.y; break;case 14: splatIndex=splatIndex3.z; break;case 15: splatIndex=splatIndex3.w; break;}
|
|
38
|
+
return splatIndex;}
|
|
39
|
+
Splat readSplat(float splatIndex)
|
|
40
|
+
{Splat splat;vec2 splatUV=getDataUV(splatIndex,dataTextureSize);
|
|
41
|
+
#ifdef USE_SOG
|
|
42
|
+
ivec2 sogUVi=ivec2(int(splatUV.x*dataTextureSize.x),int(splatUV.y*dataTextureSize.y));vec4 mL=texelFetch(centersTexture,sogUVi,0);
|
|
43
|
+
vec4 mU=texelFetch(covariancesATexture,sogUVi,0);
|
|
44
|
+
vec4 sRaw=texelFetch(covariancesBTexture,sogUVi,0);
|
|
45
|
+
vec4 qRaw=texelFetch(sogQuatsTexture,sogUVi,0);
|
|
46
|
+
vec4 c0=texelFetch(colorsTexture,sogUVi,0);
|
|
47
|
+
vec3 q16=(mU.xyz*256.0+mL.xyz)*(255.0/65535.0);vec3 nPos=mix(sogMeansMin,sogMeansMax,q16);vec3 center=sign(nPos)*(exp(abs(nPos))-vec3(1.0));splat.center=vec4(center,1.0);
|
|
48
|
+
#ifdef USE_SOG_V2
|
|
49
|
+
vec3 sIdx=floor(sRaw.xyz*255.0+0.5);vec3 splatScale;splatScale.x=exp(texelFetch(sogCodebookTexture,ivec2(int(sIdx.x),0),0).r);splatScale.y=exp(texelFetch(sogCodebookTexture,ivec2(int(sIdx.y),0),0).r);splatScale.z=exp(texelFetch(sogCodebookTexture,ivec2(int(sIdx.z),0),0).r);
|
|
50
|
+
#else
|
|
51
|
+
vec3 splatScale=exp(mix(sogScalesMin,sogScalesMax,sRaw.xyz));
|
|
52
|
+
#endif
|
|
53
|
+
const float invSqrt2=0.70710678118;vec3 qabc=(qRaw.xyz-vec3(0.5))*2.0*invSqrt2;int qMode=int(qRaw.w*255.0+0.5)-252;float qd=sqrt(max(0.0,1.0-dot(qabc,qabc)));vec4 quat;if (qMode==0) quat=vec4(qd,qabc.x,qabc.y,qabc.z);else if (qMode==1) quat=vec4(qabc.x,qd,qabc.y,qabc.z);else if (qMode==2) quat=vec4(qabc.x,qabc.y,qd,qabc.z);else quat=vec4(qabc.x,qabc.y,qabc.z,qd);float qw=quat.x,qx=quat.y,qy=quat.z,qz=quat.w;mat3 R=mat3(
|
|
54
|
+
1.0-2.0*(qy*qy+qz*qz),2.0*(qx*qy+qw*qz), 2.0*(qx*qz-qw*qy),
|
|
55
|
+
2.0*(qx*qy-qw*qz), 1.0-2.0*(qx*qx+qz*qz),2.0*(qy*qz+qw*qx),
|
|
56
|
+
2.0*(qx*qz+qw*qy), 2.0*(qy*qz-qw*qx), 1.0-2.0*(qx*qx+qy*qy)
|
|
57
|
+
);mat3 S2=mat3(4.0*splatScale.x*splatScale.x,0.0,0.0,
|
|
58
|
+
0.0,4.0*splatScale.y*splatScale.y,0.0,
|
|
59
|
+
0.0,0.0,4.0*splatScale.z*splatScale.z);mat3 Sigma=R*S2*transpose(R);splat.covA=vec4(Sigma[0][0],Sigma[0][1],Sigma[0][2],Sigma[1][1]);splat.covB=vec4(Sigma[1][2],Sigma[2][2],0.0,0.0);const float SH_C0=0.28209479177387814;
|
|
60
|
+
#ifdef USE_SOG_V2
|
|
61
|
+
vec3 c3;c3.x=texelFetch(sogCodebookTexture,ivec2(256+int(c0.x*255.0+0.5),0),0).r;c3.y=texelFetch(sogCodebookTexture,ivec2(256+int(c0.y*255.0+0.5),0),0).r;c3.z=texelFetch(sogCodebookTexture,ivec2(256+int(c0.z*255.0+0.5),0),0).r;vec3 colRgb=vec3(0.5)+c3*SH_C0;float colA=c0.w;
|
|
62
|
+
#else
|
|
63
|
+
vec4 cLerp=mix(sogSh0Min,sogSh0Max,c0);vec3 colRgb=vec3(0.5)+cLerp.xyz*SH_C0;float colA=1.0/(1.0+exp(-cLerp.w));
|
|
64
|
+
#endif
|
|
65
|
+
splat.color=vec4(colRgb,colA);splat.splatIndex=splatIndex;
|
|
66
|
+
#else
|
|
67
|
+
splat.center=texture2D(centersTexture,splatUV);splat.color=texture2D(colorsTexture,splatUV);
|
|
68
|
+
#if !defined(IS_FOR_VOXELIZATION)
|
|
69
|
+
splat.covA=texture2D(covariancesATexture,splatUV)*splat.center.w;splat.covB=texture2D(covariancesBTexture,splatUV)*splat.center.w;
|
|
70
|
+
#endif
|
|
71
|
+
#endif
|
|
72
|
+
#if SH_DEGREE>0 || IS_COMPOUND
|
|
73
|
+
ivec2 splatUVint=getDataUVint(splatIndex,dataTextureSize);
|
|
74
|
+
#endif
|
|
75
|
+
#if SH_DEGREE>0 && !defined(USE_SOG)
|
|
76
|
+
splat.sh0=texelFetch(shTexture0,splatUVint,0);
|
|
77
|
+
#endif
|
|
78
|
+
#if SH_DEGREE>1 && !defined(USE_SOG)
|
|
79
|
+
splat.sh1=texelFetch(shTexture1,splatUVint,0);
|
|
80
|
+
#endif
|
|
81
|
+
#if SH_DEGREE>2 && !defined(USE_SOG)
|
|
82
|
+
splat.sh2=texelFetch(shTexture2,splatUVint,0);
|
|
83
|
+
#endif
|
|
84
|
+
#if SH_DEGREE>3 && !defined(USE_SOG)
|
|
85
|
+
splat.sh3=texelFetch(shTexture3,splatUVint,0);splat.sh4=texelFetch(shTexture4,splatUVint,0);
|
|
86
|
+
#endif
|
|
87
|
+
#if IS_COMPOUND
|
|
88
|
+
splat.partIndex=uint(texture2D(partIndicesTexture,splatUV).r*255.0+0.5);
|
|
89
|
+
#endif
|
|
90
|
+
#if defined(IS_FOR_VOXELIZATION)
|
|
91
|
+
splat.rotationA=texture2D(rotationsATexture,splatUV);splat.rotationB=texture2D(rotationsBTexture,splatUV);splat.rotationScale=texture2D(rotationScaleTexture,splatUV);
|
|
92
|
+
#endif
|
|
93
|
+
return splat;}
|
|
94
|
+
#if defined(WEBGL2) || defined(WEBGPU) || defined(NATIVE)
|
|
95
|
+
vec3 computeColorFromSHDegree(vec3 dir,const vec3 sh[25],float _so1,float _so2,float _so3,float _so4)
|
|
96
|
+
{const float SH_C0=0.28209479;const float SH_C1=0.48860251;float SH_C2[5];SH_C2[0]=1.092548430;SH_C2[1]=-1.09254843;SH_C2[2]=0.315391565;SH_C2[3]=-1.09254843;SH_C2[4]=0.546274215;float SH_C3[7];SH_C3[0]=-0.59004358;SH_C3[1]=2.890611442;SH_C3[2]=-0.45704579;SH_C3[3]=0.373176332;SH_C3[4]=-0.45704579;SH_C3[5]=1.445305721;SH_C3[6]=-0.59004358;float SH_C4[9];SH_C4[0]= 2.5033429418;SH_C4[1]=-1.7701307698;SH_C4[2]= 0.9461746958;SH_C4[3]=-0.6690465436;SH_C4[4]= 0.1057855469;SH_C4[5]=-0.6690465436;SH_C4[6]= 0.4730873479;SH_C4[7]=-1.7701307698;SH_C4[8]= 0.6258357354;vec3 result=/*SH_C0**/sh[0];
|
|
97
|
+
#if SH_DEGREE>0
|
|
98
|
+
float x=dir.x;float y=dir.y;float z=dir.z;result+=_so1*(- SH_C1*y*sh[1]+SH_C1*z*sh[2]-SH_C1*x*sh[3]);
|
|
99
|
+
#if SH_DEGREE>1
|
|
100
|
+
float xx=x*x,yy=y*y,zz=z*z;float xy=x*y,yz=y*z,xz=x*z;result+=_so2*(
|
|
101
|
+
SH_C2[0]*xy*sh[4] +
|
|
102
|
+
SH_C2[1]*yz*sh[5] +
|
|
103
|
+
SH_C2[2]*(2.0*zz-xx-yy)*sh[6] +
|
|
104
|
+
SH_C2[3]*xz*sh[7] +
|
|
105
|
+
SH_C2[4]*(xx-yy)*sh[8]);
|
|
106
|
+
#if SH_DEGREE>2
|
|
107
|
+
result+=_so3*(
|
|
108
|
+
SH_C3[0]*y*(3.0*xx-yy)*sh[9] +
|
|
109
|
+
SH_C3[1]*xy*z*sh[10] +
|
|
110
|
+
SH_C3[2]*y*(4.0*zz-xx-yy)*sh[11] +
|
|
111
|
+
SH_C3[3]*z*(2.0*zz-3.0*xx-3.0*yy)*sh[12] +
|
|
112
|
+
SH_C3[4]*x*(4.0*zz-xx-yy)*sh[13] +
|
|
113
|
+
SH_C3[5]*z*(xx-yy)*sh[14] +
|
|
114
|
+
SH_C3[6]*x*(xx-3.0*yy)*sh[15]);
|
|
115
|
+
#if SH_DEGREE>3
|
|
116
|
+
result+=_so4*(
|
|
117
|
+
SH_C4[0]*x*y*(xx-yy)*sh[16] +
|
|
118
|
+
SH_C4[1]*y*z*(3.0*xx-yy)*sh[17] +
|
|
119
|
+
SH_C4[2]*x*y*(7.0*zz-1.0)*sh[18] +
|
|
120
|
+
SH_C4[3]*y*z*(7.0*zz-3.0)*sh[19] +
|
|
121
|
+
SH_C4[4]*(zz*(35.0*zz-30.0)+3.0)*sh[20] +
|
|
122
|
+
SH_C4[5]*x*z*(7.0*zz-3.0)*sh[21] +
|
|
123
|
+
SH_C4[6]*(xx-yy)*(7.0*zz-1.0)*sh[22] +
|
|
124
|
+
SH_C4[7]*x*z*(xx-3.0*yy)*sh[23] +
|
|
125
|
+
SH_C4[8]*(xx*(xx-3.0*yy)-yy*(3.0*xx-yy))*sh[24]);
|
|
126
|
+
#endif
|
|
127
|
+
#endif
|
|
128
|
+
#endif
|
|
129
|
+
#endif
|
|
130
|
+
return result;}
|
|
131
|
+
vec4 decompose(uint value)
|
|
132
|
+
{vec4 components=vec4(
|
|
133
|
+
float((value ) & 255u),
|
|
134
|
+
float((value>>uint( 8)) & 255u),
|
|
135
|
+
float((value>>uint(16)) & 255u),
|
|
136
|
+
float((value>>uint(24)) & 255u));return components*vec4(2./255.)-vec4(1.);}
|
|
137
|
+
#ifdef USE_SOG
|
|
138
|
+
vec3 computeSH(Splat splat,vec3 dir)
|
|
139
|
+
{
|
|
140
|
+
#if SH_DEGREE>0
|
|
141
|
+
vec3 sh[25];sh[0]=vec3(0.,0.,0.);ivec2 labelSize=textureSize(sogShNLabelsTexture,0);int idx=int(splat.splatIndex+0.5);int lx=idx-(idx/labelSize.x)*labelSize.x;int ly=idx/labelSize.x;vec4 labelRaw=texelFetch(sogShNLabelsTexture,ivec2(lx,ly),0);int n=int(labelRaw.r*255.0+0.5)+int(labelRaw.g*255.0+0.5)*256;int coeffs=int(sogShCoeffCount+0.5);int u=(n-(n/64)*64)*coeffs;int v=n/64;for (int k=0; k<24; k++) {if (k>=coeffs) break;vec4 centroidRaw=texelFetch(sogShNCentroidsTexture,ivec2(u+k,v),0);vec3 shCoeff;
|
|
142
|
+
#ifdef USE_SOG_V2
|
|
143
|
+
int rIdx=int(centroidRaw.r*255.0+0.5);int gIdx=int(centroidRaw.g*255.0+0.5);int bIdx=int(centroidRaw.b*255.0+0.5);shCoeff.r=texelFetch(sogCodebookTexture,ivec2(512+rIdx,0),0).r;shCoeff.g=texelFetch(sogCodebookTexture,ivec2(512+gIdx,0),0).r;shCoeff.b=texelFetch(sogCodebookTexture,ivec2(512+bIdx,0),0).r;
|
|
144
|
+
#else
|
|
145
|
+
shCoeff=mix(vec3(sogShnMin),vec3(sogShnMax),centroidRaw.rgb);
|
|
146
|
+
#endif
|
|
147
|
+
sh[k+1]=shCoeff;}
|
|
148
|
+
return computeColorFromSHDegree(dir,sh,1.,1.,1.,1.);
|
|
149
|
+
#else
|
|
150
|
+
return vec3(0.,0.,0.);
|
|
151
|
+
#endif
|
|
152
|
+
}
|
|
153
|
+
#else
|
|
154
|
+
vec3 computeSHWeighted(Splat splat,vec3 dir,float _so1,float _so2,float _so3,float _so4)
|
|
155
|
+
{vec3 sh[25];sh[0]=vec3(0.,0.,0.);
|
|
156
|
+
#if SH_DEGREE>0
|
|
157
|
+
vec4 sh00=decompose(splat.sh0.x);vec4 sh01=decompose(splat.sh0.y);vec4 sh02=decompose(splat.sh0.z);sh[1]=vec3(sh00.x,sh00.y,sh00.z);sh[2]=vec3(sh00.w,sh01.x,sh01.y);sh[3]=vec3(sh01.z,sh01.w,sh02.x);
|
|
158
|
+
#endif
|
|
159
|
+
#if SH_DEGREE>1
|
|
160
|
+
vec4 sh03=decompose(splat.sh0.w);vec4 sh04=decompose(splat.sh1.x);vec4 sh05=decompose(splat.sh1.y);sh[4]=vec3(sh02.y,sh02.z,sh02.w);sh[5]=vec3(sh03.x,sh03.y,sh03.z);sh[6]=vec3(sh03.w,sh04.x,sh04.y);sh[7]=vec3(sh04.z,sh04.w,sh05.x);sh[8]=vec3(sh05.y,sh05.z,sh05.w);
|
|
161
|
+
#endif
|
|
162
|
+
#if SH_DEGREE>2
|
|
163
|
+
vec4 sh06=decompose(splat.sh1.z);vec4 sh07=decompose(splat.sh1.w);vec4 sh08=decompose(splat.sh2.x);vec4 sh09=decompose(splat.sh2.y);vec4 sh10=decompose(splat.sh2.z);vec4 sh11=decompose(splat.sh2.w);sh[9]=vec3(sh06.x,sh06.y,sh06.z);sh[10]=vec3(sh06.w,sh07.x,sh07.y);sh[11]=vec3(sh07.z,sh07.w,sh08.x);sh[12]=vec3(sh08.y,sh08.z,sh08.w);sh[13]=vec3(sh09.x,sh09.y,sh09.z);sh[14]=vec3(sh09.w,sh10.x,sh10.y);sh[15]=vec3(sh10.z,sh10.w,sh11.x);
|
|
164
|
+
#endif
|
|
165
|
+
#if SH_DEGREE>3
|
|
166
|
+
vec4 sh12=decompose(splat.sh3.x);vec4 sh13=decompose(splat.sh3.y);vec4 sh14=decompose(splat.sh3.z);vec4 sh15=decompose(splat.sh3.w);vec4 sh16=decompose(splat.sh4.x);vec4 sh17=decompose(splat.sh4.y);sh[16]=vec3(sh11.y,sh11.z,sh11.w);sh[17]=vec3(sh12.x,sh12.y,sh12.z);sh[18]=vec3(sh12.w,sh13.x,sh13.y);sh[19]=vec3(sh13.z,sh13.w,sh14.x);sh[20]=vec3(sh14.y,sh14.z,sh14.w);sh[21]=vec3(sh15.x,sh15.y,sh15.z);sh[22]=vec3(sh15.w,sh16.x,sh16.y);sh[23]=vec3(sh16.z,sh16.w,sh17.x);sh[24]=vec3(sh17.y,sh17.z,sh17.w);
|
|
167
|
+
#endif
|
|
168
|
+
return computeColorFromSHDegree(dir,sh,_so1,_so2,_so3,_so4);}
|
|
169
|
+
vec3 computeSH(Splat splat,vec3 dir)
|
|
170
|
+
{
|
|
171
|
+
#if !defined(GS_DBG_ENABLED) || GS_DBG_SH_ORDER1==1
|
|
172
|
+
float _w1=1.0;
|
|
173
|
+
#else
|
|
174
|
+
float _w1=0.0;
|
|
175
|
+
#endif
|
|
176
|
+
#if !defined(GS_DBG_ENABLED) || GS_DBG_SH_ORDER2==1
|
|
177
|
+
float _w2=1.0;
|
|
178
|
+
#else
|
|
179
|
+
float _w2=0.0;
|
|
180
|
+
#endif
|
|
181
|
+
#if !defined(GS_DBG_ENABLED) || GS_DBG_SH_ORDER3==1
|
|
182
|
+
float _w3=1.0;
|
|
183
|
+
#else
|
|
184
|
+
float _w3=0.0;
|
|
185
|
+
#endif
|
|
186
|
+
#if !defined(GS_DBG_ENABLED) || GS_DBG_SH_ORDER4==1
|
|
187
|
+
float _w4=1.0;
|
|
188
|
+
#else
|
|
189
|
+
float _w4=0.0;
|
|
190
|
+
#endif
|
|
191
|
+
return computeSHWeighted(splat,dir,_w1,_w2,_w3,_w4);}
|
|
192
|
+
#endif
|
|
193
|
+
#else
|
|
194
|
+
vec3 computeSH(Splat splat,vec3 dir)
|
|
195
|
+
{return vec3(0.,0.,0.);}
|
|
196
|
+
#endif
|
|
197
|
+
#if !defined(IS_FOR_VOXELIZATION)
|
|
198
|
+
vec4 gaussianSplatting(vec2 meshPos,vec3 worldPos,vec2 scale,vec3 covA,vec3 covB,mat4 worldMatrix,mat4 viewMatrix,mat4 projectionMatrix)
|
|
199
|
+
{mat4 modelView=viewMatrix*worldMatrix;vec4 camspace=viewMatrix*vec4(worldPos,1.);vec4 pos2d=projectionMatrix*camspace;float bounds=1.2*pos2d.w;if (pos2d.z<-pos2d.w || pos2d.x<-bounds || pos2d.x>bounds
|
|
200
|
+
|| pos2d.y<-bounds || pos2d.y>bounds) {return vec4(0.0,0.0,2.0,1.0);}
|
|
201
|
+
mat3 Vrk=mat3(
|
|
202
|
+
covA.x,covA.y,covA.z,
|
|
203
|
+
covA.y,covB.x,covB.y,
|
|
204
|
+
covA.z,covB.y,covB.z
|
|
205
|
+
);bool isOrtho=abs(projectionMatrix[3][3]-1.0)<0.001;mat3 J;if (isOrtho) {J=mat3(
|
|
206
|
+
focal.x,0.,0.,
|
|
207
|
+
0.,focal.y,0.,
|
|
208
|
+
0.,0.,0.
|
|
209
|
+
);} else {J=mat3(
|
|
210
|
+
focal.x/camspace.z,0.,-(focal.x*camspace.x)/(camspace.z*camspace.z),
|
|
211
|
+
0.,focal.y/camspace.z,-(focal.y*camspace.y)/(camspace.z*camspace.z),
|
|
212
|
+
0.,0.,0.
|
|
213
|
+
);}
|
|
214
|
+
mat3 T=transpose(mat3(modelView))*J;mat3 cov2d=transpose(T)*Vrk*T;
|
|
215
|
+
#if COMPENSATION
|
|
216
|
+
float c00=cov2d[0][0];float c11=cov2d[1][1];float c01=cov2d[0][1];float detOrig=c00*c11-c01*c01;
|
|
217
|
+
#endif
|
|
218
|
+
cov2d[0][0]+=kernelSize;cov2d[1][1]+=kernelSize;
|
|
219
|
+
#if COMPENSATION
|
|
220
|
+
vec3 c2d=vec3(cov2d[0][0],c01,cov2d[1][1]);float detBlur=c2d.x*c2d.z-c2d.y*c2d.y;float compensation=sqrt(max(0.,detOrig/detBlur));vColor.w*=compensation;
|
|
221
|
+
#endif
|
|
222
|
+
float mid=(cov2d[0][0]+cov2d[1][1])/2.0;float radius=length(vec2((cov2d[0][0]-cov2d[1][1])/2.0,cov2d[0][1]));float epsilon=0.0001;float lambda1=mid+radius+epsilon,lambda2=mid-radius+epsilon;if (lambda2<0.0)
|
|
223
|
+
{return vec4(0.0,0.0,2.0,1.0);}
|
|
224
|
+
if (minPixelSize>0.0) {float l1=2.0*min(sqrt(2.0*lambda1),1024.0);float l2=2.0*min(sqrt(2.0*lambda2),1024.0);if (max(l1,l2)<minPixelSize) {return vec4(0.0,0.0,2.0,1.0);}}
|
|
225
|
+
vec2 diagonalVector=normalize(vec2(cov2d[0][1],lambda1-cov2d[0][0]));vec2 majorAxis=min(sqrt(2.0*lambda1),1024.0)*diagonalVector;vec2 minorAxis=min(sqrt(2.0*lambda2),1024.0)*vec2(diagonalVector.y,-diagonalVector.x);vec2 vCenter=vec2(pos2d);float scaleFactor=isOrtho ? 1.0 : pos2d.w;return vec4(
|
|
226
|
+
vCenter
|
|
227
|
+
+ ((meshPos.x*majorAxis
|
|
228
|
+
+ meshPos.y*minorAxis)*invViewport*scaleFactor)*scale,pos2d.zw);}
|
|
229
|
+
#endif
|
|
230
|
+
#if IS_COMPOUND
|
|
231
|
+
mat4 getPartWorld(uint partIndex) {return partWorld[partIndex];}
|
|
232
|
+
#endif
|
|
233
|
+
#if defined(IS_FOR_VOXELIZATION)
|
|
234
|
+
vec4 computeVoxelSplatWorldPos(vec4 rotationA,vec4 rotationB,vec4 rotationScale,vec3 center,mat4 splatWorld,mat4 viewMatrix,mat4 invWorldScale,vec2 quadPos) {mat3 splatRotation=mat3(
|
|
235
|
+
vec3(rotationA.x,rotationA.y,rotationA.z),
|
|
236
|
+
vec3(rotationA.w,rotationB.x,rotationB.y),
|
|
237
|
+
vec3(rotationB.z,rotationB.w,rotationScale.x)
|
|
238
|
+
);vec3 splatScale=vec3(rotationScale.y,rotationScale.z,rotationScale.w);mat3 rotToView=mat3(viewMatrix)*mat3(invWorldScale)*mat3(splatWorld)*splatRotation;vec3 axisLengthInViewZ=abs(vec3(rotToView[0][2],rotToView[1][2],rotToView[2][2]));float gaussianSplatCutoffStddev=1.4142135624/2.0;
|
|
239
|
+
vec3 offsetSplatSpace;if (axisLengthInViewZ.x>axisLengthInViewZ.y && axisLengthInViewZ.x>axisLengthInViewZ.z) {offsetSplatSpace=vec3(0.0,quadPos.x,quadPos.y)*splatScale*gaussianSplatCutoffStddev;} else if (axisLengthInViewZ.y>axisLengthInViewZ.z) {offsetSplatSpace=vec3(quadPos.x,0.0,quadPos.y)*splatScale*gaussianSplatCutoffStddev;} else {offsetSplatSpace=vec3(quadPos.x,quadPos.y,0.0)*splatScale*gaussianSplatCutoffStddev;}
|
|
240
|
+
vec3 vertexObjectSpace=center+splatRotation*offsetSplatSpace;return splatWorld*vec4(vertexObjectSpace,1.0);}
|
|
241
|
+
#endif
|
|
242
|
+
`;e.IncludesShadersStore[s]||(e.IncludesShadersStore[s]=i);const r={name:s,shader:i};export{x as a,r as b,n as g};
|
|
@@ -0,0 +1,296 @@
|
|
|
1
|
+
import{S as t}from"./index-B2zBEWsq.js";const e="gaussianSplatting",s=`fn getDataUV(index: f32,dataTextureSize: vec2f)->vec2<f32> {let y: f32=floor(index/dataTextureSize.x);let x: f32=index-y*dataTextureSize.x;return vec2f((x+0.5),(y+0.5));}
|
|
2
|
+
struct Splat {center: vec4f,
|
|
3
|
+
color: vec4f,
|
|
4
|
+
covA: vec4f,
|
|
5
|
+
covB: vec4f,
|
|
6
|
+
#if SH_DEGREE>0
|
|
7
|
+
sh0: vec4<u32>,
|
|
8
|
+
#endif
|
|
9
|
+
#if SH_DEGREE>1
|
|
10
|
+
sh1: vec4<u32>,
|
|
11
|
+
#endif
|
|
12
|
+
#if SH_DEGREE>2
|
|
13
|
+
sh2: vec4<u32>,
|
|
14
|
+
#endif
|
|
15
|
+
#if SH_DEGREE>3
|
|
16
|
+
sh3: vec4<u32>,
|
|
17
|
+
sh4: vec4<u32>,
|
|
18
|
+
#endif
|
|
19
|
+
#if IS_COMPOUND
|
|
20
|
+
partIndex: u32,
|
|
21
|
+
#endif
|
|
22
|
+
#if defined(IS_FOR_VOXELIZATION)
|
|
23
|
+
rotationA: vec4f,
|
|
24
|
+
rotationB: vec4f,
|
|
25
|
+
rotationScale: vec4f,
|
|
26
|
+
#endif
|
|
27
|
+
#ifdef USE_SOG
|
|
28
|
+
splatIndex: f32,
|
|
29
|
+
#endif
|
|
30
|
+
};fn getSplatIndex(localIndex: i32,splatIndex0: vec4f,splatIndex1: vec4f,splatIndex2: vec4f,splatIndex3: vec4f)->f32 {var splatIndex: f32;switch (localIndex)
|
|
31
|
+
{case 0:
|
|
32
|
+
{splatIndex=splatIndex0.x;break;}
|
|
33
|
+
case 1:
|
|
34
|
+
{splatIndex=splatIndex0.y;break;}
|
|
35
|
+
case 2:
|
|
36
|
+
{splatIndex=splatIndex0.z;break;}
|
|
37
|
+
case 3:
|
|
38
|
+
{splatIndex=splatIndex0.w;break;}
|
|
39
|
+
case 4:
|
|
40
|
+
{splatIndex=splatIndex1.x;break;}
|
|
41
|
+
case 5:
|
|
42
|
+
{splatIndex=splatIndex1.y;break;}
|
|
43
|
+
case 6:
|
|
44
|
+
{splatIndex=splatIndex1.z;break;}
|
|
45
|
+
case 7:
|
|
46
|
+
{splatIndex=splatIndex1.w;break;}
|
|
47
|
+
case 8:
|
|
48
|
+
{splatIndex=splatIndex2.x;break;}
|
|
49
|
+
case 9:
|
|
50
|
+
{splatIndex=splatIndex2.y;break;}
|
|
51
|
+
case 10:
|
|
52
|
+
{splatIndex=splatIndex2.z;break;}
|
|
53
|
+
case 11:
|
|
54
|
+
{splatIndex=splatIndex2.w;break;}
|
|
55
|
+
case 12:
|
|
56
|
+
{splatIndex=splatIndex3.x;break;}
|
|
57
|
+
case 13:
|
|
58
|
+
{splatIndex=splatIndex3.y;break;}
|
|
59
|
+
case 14:
|
|
60
|
+
{splatIndex=splatIndex3.z;break;}
|
|
61
|
+
default:
|
|
62
|
+
{splatIndex=splatIndex3.w;break;}}
|
|
63
|
+
return splatIndex;}
|
|
64
|
+
fn readSplat(splatIndex: f32,dataTextureSize: vec2f)->Splat {var splat: Splat;let splatUV=getDataUV(splatIndex,dataTextureSize);let splatUVi32=vec2<i32>(i32(splatUV.x),i32(splatUV.y));
|
|
65
|
+
#ifdef USE_SOG
|
|
66
|
+
let mL=textureLoad(centersTexture,splatUVi32,0);let mU=textureLoad(covariancesATexture,splatUVi32,0);let sRaw=textureLoad(covariancesBTexture,splatUVi32,0);let qRaw=textureLoad(sogQuatsTexture,splatUVi32,0);let c0=textureLoad(colorsTexture,splatUVi32,0);let q16=(mU.xyz*256.0+mL.xyz)*(255.0/65535.0);let nPos=mix(uniforms.sogMeansMin,uniforms.sogMeansMax,q16);let center3=sign(nPos)*(exp(abs(nPos))-vec3f(1.0));splat.center=vec4f(center3,1.0);
|
|
67
|
+
#ifdef USE_SOG_V2
|
|
68
|
+
let sIdx=floor(sRaw.xyz*255.0+0.5);var splatScale: vec3f;splatScale.x=exp(textureLoad(sogCodebookTexture,vec2<i32>(i32(sIdx.x),0),0).r);splatScale.y=exp(textureLoad(sogCodebookTexture,vec2<i32>(i32(sIdx.y),0),0).r);splatScale.z=exp(textureLoad(sogCodebookTexture,vec2<i32>(i32(sIdx.z),0),0).r);
|
|
69
|
+
#else
|
|
70
|
+
let splatScale=exp(mix(uniforms.sogScalesMin,uniforms.sogScalesMax,sRaw.xyz));
|
|
71
|
+
#endif
|
|
72
|
+
let invSqrt2: f32=0.70710678118;let qabc=(qRaw.xyz-vec3f(0.5))*2.0*invSqrt2;let qMode=i32(qRaw.w*255.0+0.5)-252;let qd=sqrt(max(0.0,1.0-dot(qabc,qabc)));var quat: vec4f;if (qMode==0) { quat=vec4f(qd,qabc.x,qabc.y,qabc.z); }
|
|
73
|
+
else if (qMode==1) { quat=vec4f(qabc.x,qd,qabc.y,qabc.z); }
|
|
74
|
+
else if (qMode==2) { quat=vec4f(qabc.x,qabc.y,qd,qabc.z); }
|
|
75
|
+
else { quat=vec4f(qabc.x,qabc.y,qabc.z,qd); }
|
|
76
|
+
let qw=quat.x; let qx=quat.y; let qy=quat.z; let qz=quat.w;let R=mat3x3<f32>(
|
|
77
|
+
1.0-2.0*(qy*qy+qz*qz),2.0*(qx*qy+qw*qz), 2.0*(qx*qz-qw*qy),
|
|
78
|
+
2.0*(qx*qy-qw*qz), 1.0-2.0*(qx*qx+qz*qz),2.0*(qy*qz+qw*qx),
|
|
79
|
+
2.0*(qx*qz+qw*qy), 2.0*(qy*qz-qw*qx), 1.0-2.0*(qx*qx+qy*qy)
|
|
80
|
+
);let S2=mat3x3<f32>(
|
|
81
|
+
4.0*splatScale.x*splatScale.x,0.0,0.0,
|
|
82
|
+
0.0,4.0*splatScale.y*splatScale.y,0.0,
|
|
83
|
+
0.0,0.0,4.0*splatScale.z*splatScale.z
|
|
84
|
+
);let Sigma=R*S2*transpose(R);splat.covA=vec4f(Sigma[0][0],Sigma[0][1],Sigma[0][2],Sigma[1][1]);splat.covB=vec4f(Sigma[1][2],Sigma[2][2],0.0,0.0);let SH_C0_SOG: f32=0.28209479177387814;
|
|
85
|
+
#ifdef USE_SOG_V2
|
|
86
|
+
var c3: vec3f;c3.x=textureLoad(sogCodebookTexture,vec2<i32>(256+i32(c0.x*255.0+0.5),0),0).r;c3.y=textureLoad(sogCodebookTexture,vec2<i32>(256+i32(c0.y*255.0+0.5),0),0).r;c3.z=textureLoad(sogCodebookTexture,vec2<i32>(256+i32(c0.z*255.0+0.5),0),0).r;let colRgb=vec3f(0.5)+c3*SH_C0_SOG;let colA=c0.w;
|
|
87
|
+
#else
|
|
88
|
+
let cLerp=mix(uniforms.sogSh0Min,uniforms.sogSh0Max,c0);let colRgb=vec3f(0.5)+cLerp.xyz*SH_C0_SOG;let colA=1.0/(1.0+exp(-cLerp.w));
|
|
89
|
+
#endif
|
|
90
|
+
splat.color=vec4f(colRgb,colA);splat.splatIndex=splatIndex;
|
|
91
|
+
#else
|
|
92
|
+
splat.center=textureLoad(centersTexture,splatUVi32,0);splat.color=textureLoad(colorsTexture,splatUVi32,0);
|
|
93
|
+
#if !defined(IS_FOR_VOXELIZATION)
|
|
94
|
+
splat.covA=textureLoad(covariancesATexture,splatUVi32,0)*splat.center.w;splat.covB=textureLoad(covariancesBTexture,splatUVi32,0)*splat.center.w;
|
|
95
|
+
#endif
|
|
96
|
+
#endif
|
|
97
|
+
#if SH_DEGREE>0 && !defined(USE_SOG)
|
|
98
|
+
splat.sh0=textureLoad(shTexture0,splatUVi32,0);
|
|
99
|
+
#endif
|
|
100
|
+
#if SH_DEGREE>1 && !defined(USE_SOG)
|
|
101
|
+
splat.sh1=textureLoad(shTexture1,splatUVi32,0);
|
|
102
|
+
#endif
|
|
103
|
+
#if SH_DEGREE>2 && !defined(USE_SOG)
|
|
104
|
+
splat.sh2=textureLoad(shTexture2,splatUVi32,0);
|
|
105
|
+
#endif
|
|
106
|
+
#if SH_DEGREE>3 && !defined(USE_SOG)
|
|
107
|
+
splat.sh3=textureLoad(shTexture3,splatUVi32,0);splat.sh4=textureLoad(shTexture4,splatUVi32,0);
|
|
108
|
+
#endif
|
|
109
|
+
#if IS_COMPOUND
|
|
110
|
+
splat.partIndex=u32(textureLoad(partIndicesTexture,splatUVi32,0).r*255.0+0.5);
|
|
111
|
+
#endif
|
|
112
|
+
#if defined(IS_FOR_VOXELIZATION)
|
|
113
|
+
splat.rotationA=textureLoad(rotationsATexture,splatUVi32,0);splat.rotationB=textureLoad(rotationsBTexture,splatUVi32,0);splat.rotationScale=textureLoad(rotationScaleTexture,splatUVi32,0);
|
|
114
|
+
#endif
|
|
115
|
+
return splat;}
|
|
116
|
+
fn computeColorFromSHDegree(dir: vec3f,sh: array<vec3<f32>,25>,_so1: f32,_so2: f32,_so3: f32,_so4: f32)->vec3f
|
|
117
|
+
{let SH_C0: f32=0.28209479;let SH_C1: f32=0.48860251;var SH_C2: array<f32,5>=array<f32,5>(
|
|
118
|
+
1.092548430,
|
|
119
|
+
-1.09254843,
|
|
120
|
+
0.315391565,
|
|
121
|
+
-1.09254843,
|
|
122
|
+
0.546274215
|
|
123
|
+
);var SH_C3: array<f32,7>=array<f32,7>(
|
|
124
|
+
-0.59004358,
|
|
125
|
+
2.890611442,
|
|
126
|
+
-0.45704579,
|
|
127
|
+
0.373176332,
|
|
128
|
+
-0.45704579,
|
|
129
|
+
1.445305721,
|
|
130
|
+
-0.59004358
|
|
131
|
+
);var SH_C4: array<f32,9>=array<f32,9>(
|
|
132
|
+
2.5033429418,
|
|
133
|
+
-1.7701307698,
|
|
134
|
+
0.9461746958,
|
|
135
|
+
-0.6690465436,
|
|
136
|
+
0.1057855469,
|
|
137
|
+
-0.6690465436,
|
|
138
|
+
0.4730873479,
|
|
139
|
+
-1.7701307698,
|
|
140
|
+
0.6258357354
|
|
141
|
+
);var result: vec3f=/*SH_C0**/sh[0];
|
|
142
|
+
#if SH_DEGREE>0
|
|
143
|
+
let x: f32=dir.x;let y: f32=dir.y;let z: f32=dir.z;result+=_so1*(-SH_C1*y*sh[1]+SH_C1*z*sh[2]-SH_C1*x*sh[3]);
|
|
144
|
+
#if SH_DEGREE>1
|
|
145
|
+
let xx: f32=x*x;let yy: f32=y*y;let zz: f32=z*z;let xy: f32=x*y;let yz: f32=y*z;let xz: f32=x*z;result+=_so2*(
|
|
146
|
+
SH_C2[0]*xy*sh[4] +
|
|
147
|
+
SH_C2[1]*yz*sh[5] +
|
|
148
|
+
SH_C2[2]*(2.0f*zz-xx-yy)*sh[6] +
|
|
149
|
+
SH_C2[3]*xz*sh[7] +
|
|
150
|
+
SH_C2[4]*(xx-yy)*sh[8]);
|
|
151
|
+
#if SH_DEGREE>2
|
|
152
|
+
result+=_so3*(
|
|
153
|
+
SH_C3[0]*y*(3.0f*xx-yy)*sh[9] +
|
|
154
|
+
SH_C3[1]*xy*z*sh[10] +
|
|
155
|
+
SH_C3[2]*y*(4.0f*zz-xx-yy)*sh[11] +
|
|
156
|
+
SH_C3[3]*z*(2.0f*zz-3.0f*xx-3.0f*yy)*sh[12] +
|
|
157
|
+
SH_C3[4]*x*(4.0f*zz-xx-yy)*sh[13] +
|
|
158
|
+
SH_C3[5]*z*(xx-yy)*sh[14] +
|
|
159
|
+
SH_C3[6]*x*(xx-3.0f*yy)*sh[15]);
|
|
160
|
+
#if SH_DEGREE>3
|
|
161
|
+
result+=_so4*(
|
|
162
|
+
SH_C4[0]*x*y*(xx-yy)*sh[16] +
|
|
163
|
+
SH_C4[1]*y*z*(3.0f*xx-yy)*sh[17] +
|
|
164
|
+
SH_C4[2]*x*y*(7.0f*zz-1.0f)*sh[18] +
|
|
165
|
+
SH_C4[3]*y*z*(7.0f*zz-3.0f)*sh[19] +
|
|
166
|
+
SH_C4[4]*(zz*(35.0f*zz-30.0f)+3.0f)*sh[20] +
|
|
167
|
+
SH_C4[5]*x*z*(7.0f*zz-3.0f)*sh[21] +
|
|
168
|
+
SH_C4[6]*(xx-yy)*(7.0f*zz-1.0f)*sh[22] +
|
|
169
|
+
SH_C4[7]*x*z*(xx-3.0f*yy)*sh[23] +
|
|
170
|
+
SH_C4[8]*(xx*(xx-3.0f*yy)-yy*(3.0f*xx-yy))*sh[24]);
|
|
171
|
+
#endif
|
|
172
|
+
#endif
|
|
173
|
+
#endif
|
|
174
|
+
#endif
|
|
175
|
+
return result;}
|
|
176
|
+
fn decompose(value: u32)->vec4f
|
|
177
|
+
{let components : vec4f=vec4f(
|
|
178
|
+
f32((value ) & 255u),
|
|
179
|
+
f32((value>>u32( 8)) & 255u),
|
|
180
|
+
f32((value>>u32(16)) & 255u),
|
|
181
|
+
f32((value>>u32(24)) & 255u));return components*vec4f(2./255.)-vec4f(1.);}
|
|
182
|
+
#ifdef USE_SOG
|
|
183
|
+
fn computeSH(splat: Splat,dir: vec3f)->vec3f
|
|
184
|
+
{
|
|
185
|
+
#if SH_DEGREE>0
|
|
186
|
+
var sh: array<vec3<f32>,25>;sh[0]=vec3f(0.,0.,0.);let labelSize=textureDimensions(sogShNLabelsTexture,0);let idx=i32(splat.splatIndex+0.5);let lw=i32(labelSize.x);let lx=idx-(idx/lw)*lw;let ly=idx/lw;let labelRaw=textureLoad(sogShNLabelsTexture,vec2<i32>(lx,ly),0);let n=i32(labelRaw.r*255.0+0.5)+i32(labelRaw.g*255.0+0.5)*256;let coeffs=i32(uniforms.sogShCoeffCount+0.5);let u=(n-(n/64)*64)*coeffs;let v=n/64;for (var k: i32=0; k<24; k=k+1) {if (k>=coeffs) { break; }
|
|
187
|
+
let centroidRaw=textureLoad(sogShNCentroidsTexture,vec2<i32>(u+k,v),0);var shCoeff: vec3f;
|
|
188
|
+
#ifdef USE_SOG_V2
|
|
189
|
+
let rIdx=i32(centroidRaw.r*255.0+0.5);let gIdx=i32(centroidRaw.g*255.0+0.5);let bIdx=i32(centroidRaw.b*255.0+0.5);shCoeff.r=textureLoad(sogCodebookTexture,vec2<i32>(512+rIdx,0),0).r;shCoeff.g=textureLoad(sogCodebookTexture,vec2<i32>(512+gIdx,0),0).r;shCoeff.b=textureLoad(sogCodebookTexture,vec2<i32>(512+bIdx,0),0).r;
|
|
190
|
+
#else
|
|
191
|
+
shCoeff=mix(vec3f(uniforms.sogShnMin),vec3f(uniforms.sogShnMax),centroidRaw.rgb);
|
|
192
|
+
#endif
|
|
193
|
+
sh[k+1]=shCoeff;}
|
|
194
|
+
return computeColorFromSHDegree(dir,sh,1.,1.,1.,1.);
|
|
195
|
+
#else
|
|
196
|
+
return vec3f(0.,0.,0.);
|
|
197
|
+
#endif
|
|
198
|
+
}
|
|
199
|
+
#else
|
|
200
|
+
fn computeSHWeighted(splat: Splat,dir: vec3f,_so1: f32,_so2: f32,_so3: f32,_so4: f32)->vec3f
|
|
201
|
+
{var sh: array<vec3<f32>,25>;sh[0]=vec3f(0.,0.,0.);
|
|
202
|
+
#if SH_DEGREE>0
|
|
203
|
+
let sh00: vec4f=decompose(splat.sh0.x);let sh01: vec4f=decompose(splat.sh0.y);let sh02: vec4f=decompose(splat.sh0.z);sh[1]=vec3f(sh00.x,sh00.y,sh00.z);sh[2]=vec3f(sh00.w,sh01.x,sh01.y);sh[3]=vec3f(sh01.z,sh01.w,sh02.x);
|
|
204
|
+
#endif
|
|
205
|
+
#if SH_DEGREE>1
|
|
206
|
+
let sh03: vec4f=decompose(splat.sh0.w);let sh04: vec4f=decompose(splat.sh1.x);let sh05: vec4f=decompose(splat.sh1.y);sh[4]=vec3f(sh02.y,sh02.z,sh02.w);sh[5]=vec3f(sh03.x,sh03.y,sh03.z);sh[6]=vec3f(sh03.w,sh04.x,sh04.y);sh[7]=vec3f(sh04.z,sh04.w,sh05.x);sh[8]=vec3f(sh05.y,sh05.z,sh05.w);
|
|
207
|
+
#endif
|
|
208
|
+
#if SH_DEGREE>2
|
|
209
|
+
let sh06: vec4f=decompose(splat.sh1.z);let sh07: vec4f=decompose(splat.sh1.w);let sh08: vec4f=decompose(splat.sh2.x);let sh09: vec4f=decompose(splat.sh2.y);let sh10: vec4f=decompose(splat.sh2.z);let sh11: vec4f=decompose(splat.sh2.w);sh[9]=vec3f(sh06.x,sh06.y,sh06.z);sh[10]=vec3f(sh06.w,sh07.x,sh07.y);sh[11]=vec3f(sh07.z,sh07.w,sh08.x);sh[12]=vec3f(sh08.y,sh08.z,sh08.w);sh[13]=vec3f(sh09.x,sh09.y,sh09.z);sh[14]=vec3f(sh09.w,sh10.x,sh10.y);sh[15]=vec3f(sh10.z,sh10.w,sh11.x);
|
|
210
|
+
#endif
|
|
211
|
+
#if SH_DEGREE>3
|
|
212
|
+
let sh12: vec4f=decompose(splat.sh3.x);let sh13: vec4f=decompose(splat.sh3.y);let sh14: vec4f=decompose(splat.sh3.z);let sh15: vec4f=decompose(splat.sh3.w);let sh16: vec4f=decompose(splat.sh4.x);let sh17: vec4f=decompose(splat.sh4.y);sh[16]=vec3f(sh11.y,sh11.z,sh11.w);sh[17]=vec3f(sh12.x,sh12.y,sh12.z);sh[18]=vec3f(sh12.w,sh13.x,sh13.y);sh[19]=vec3f(sh13.z,sh13.w,sh14.x);sh[20]=vec3f(sh14.y,sh14.z,sh14.w);sh[21]=vec3f(sh15.x,sh15.y,sh15.z);sh[22]=vec3f(sh15.w,sh16.x,sh16.y);sh[23]=vec3f(sh16.z,sh16.w,sh17.x);sh[24]=vec3f(sh17.y,sh17.z,sh17.w);
|
|
213
|
+
#endif
|
|
214
|
+
return computeColorFromSHDegree(dir,sh,_so1,_so2,_so3,_so4);}
|
|
215
|
+
fn computeSH(splat: Splat,dir: vec3f)->vec3f
|
|
216
|
+
{
|
|
217
|
+
#if !defined(GS_DBG_ENABLED) || GS_DBG_SH_ORDER1==1
|
|
218
|
+
let _w1: f32=1.0;
|
|
219
|
+
#else
|
|
220
|
+
let _w1: f32=0.0;
|
|
221
|
+
#endif
|
|
222
|
+
#if !defined(GS_DBG_ENABLED) || GS_DBG_SH_ORDER2==1
|
|
223
|
+
let _w2: f32=1.0;
|
|
224
|
+
#else
|
|
225
|
+
let _w2: f32=0.0;
|
|
226
|
+
#endif
|
|
227
|
+
#if !defined(GS_DBG_ENABLED) || GS_DBG_SH_ORDER3==1
|
|
228
|
+
let _w3: f32=1.0;
|
|
229
|
+
#else
|
|
230
|
+
let _w3: f32=0.0;
|
|
231
|
+
#endif
|
|
232
|
+
#if !defined(GS_DBG_ENABLED) || GS_DBG_SH_ORDER4==1
|
|
233
|
+
let _w4: f32=1.0;
|
|
234
|
+
#else
|
|
235
|
+
let _w4: f32=0.0;
|
|
236
|
+
#endif
|
|
237
|
+
return computeSHWeighted(splat,dir,_w1,_w2,_w3,_w4);}
|
|
238
|
+
#endif
|
|
239
|
+
fn gaussianSplatting(
|
|
240
|
+
meshPos: vec2<f32>,
|
|
241
|
+
worldPos: vec3<f32>,
|
|
242
|
+
scale: vec2<f32>,
|
|
243
|
+
covA: vec3<f32>,
|
|
244
|
+
covB: vec3<f32>,
|
|
245
|
+
worldMatrix: mat4x4<f32>,
|
|
246
|
+
viewMatrix: mat4x4<f32>,
|
|
247
|
+
projectionMatrix: mat4x4<f32>,
|
|
248
|
+
focal: vec2f,
|
|
249
|
+
invViewport: vec2f,
|
|
250
|
+
kernelSize: f32,
|
|
251
|
+
minPixelSize: f32
|
|
252
|
+
)->vec4f {let modelView=viewMatrix*worldMatrix;let camspace=viewMatrix*vec4f(worldPos,1.0);let pos2d=projectionMatrix*camspace;let bounds=1.2*pos2d.w;if (pos2d.z<0. || pos2d.x<-bounds || pos2d.x>bounds || pos2d.y<-bounds || pos2d.y>bounds) {return vec4f(0.0,0.0,2.0,1.0);}
|
|
253
|
+
let Vrk=mat3x3<f32>(
|
|
254
|
+
covA.x,covA.y,covA.z,
|
|
255
|
+
covA.y,covB.x,covB.y,
|
|
256
|
+
covA.z,covB.y,covB.z
|
|
257
|
+
);let isOrtho=abs(projectionMatrix[3][3]-1.0)<0.001;var J: mat3x3<f32>;if (isOrtho) {J=mat3x3<f32>(
|
|
258
|
+
focal.x,0.0,0.0,
|
|
259
|
+
0.0,focal.y,0.0,
|
|
260
|
+
0.0,0.0,0.0
|
|
261
|
+
);} else {J=mat3x3<f32>(
|
|
262
|
+
focal.x/camspace.z,0.0,-(focal.x*camspace.x)/(camspace.z*camspace.z),
|
|
263
|
+
0.0,focal.y/camspace.z,-(focal.y*camspace.y)/(camspace.z*camspace.z),
|
|
264
|
+
0.0,0.0,0.0
|
|
265
|
+
);}
|
|
266
|
+
let T=transpose(mat3x3<f32>(
|
|
267
|
+
modelView[0].xyz,
|
|
268
|
+
modelView[1].xyz,
|
|
269
|
+
modelView[2].xyz))*J;var cov2d=transpose(T)*Vrk*T;
|
|
270
|
+
#if COMPENSATION
|
|
271
|
+
let c00: f32=cov2d[0][0];let c11: f32=cov2d[1][1];let c01: f32=cov2d[0][1];let detOrig: f32=c00*c11-c01*c01;
|
|
272
|
+
#endif
|
|
273
|
+
cov2d[0][0]+=kernelSize;cov2d[1][1]+=kernelSize;
|
|
274
|
+
#if COMPENSATION
|
|
275
|
+
let c2d: vec3f=vec3f(cov2d[0][0],c01,cov2d[1][1]);let detBlur: f32=c2d.x*c2d.z-c2d.y*c2d.y;let compensation: f32=sqrt(max(0.,detOrig/detBlur));vertexOutputs.vColor.w*=compensation;
|
|
276
|
+
#endif
|
|
277
|
+
let mid=(cov2d[0][0]+cov2d[1][1])/2.0;let radius=length(vec2<f32>((cov2d[0][0]-cov2d[1][1])/2.0,cov2d[0][1]));let lambda1=mid+radius;let lambda2=mid-radius;if (lambda2<0.0) {return vec4f(0.0,0.0,2.0,1.0);}
|
|
278
|
+
if (minPixelSize>0.0) {let l1=2.0*min(sqrt(2.0*lambda1),1024.0);let l2=2.0*min(sqrt(2.0*lambda2),1024.0);if (max(l1,l2)<minPixelSize) {return vec4f(0.0,0.0,2.0,1.0);}}
|
|
279
|
+
let diagonalVector=normalize(vec2<f32>(cov2d[0][1],lambda1-cov2d[0][0]));let majorAxis=min(sqrt(2.0*lambda1),1024.0)*diagonalVector;let minorAxis=min(sqrt(2.0*lambda2),1024.0)*vec2<f32>(diagonalVector.y,-diagonalVector.x);let vCenter=vec2<f32>(pos2d.x,pos2d.y);let scaleFactor=select(pos2d.w,1.0,isOrtho);return vec4f(
|
|
280
|
+
vCenter+((meshPos.x*majorAxis+meshPos.y*minorAxis)*invViewport*scaleFactor)*scale,
|
|
281
|
+
pos2d.z,
|
|
282
|
+
pos2d.w
|
|
283
|
+
);}
|
|
284
|
+
#if IS_COMPOUND
|
|
285
|
+
fn getPartWorld(partIndex: u32)->mat4x4<f32> {return uniforms.partWorld[partIndex];}
|
|
286
|
+
#endif
|
|
287
|
+
#if defined(IS_FOR_VOXELIZATION)
|
|
288
|
+
fn computeVoxelSplatWorldPos(rotationA: vec4f,rotationB: vec4f,rotationScale: vec4f,center: vec3f,splatWorld: mat4x4f,viewMatrix: mat4x4f,invWorldScale: mat4x4f,quadPos: vec2f)->vec4f {let splatRotation=mat3x3f(
|
|
289
|
+
rotationA.xyz,
|
|
290
|
+
vec3f(rotationA.w,rotationB.x,rotationB.y),
|
|
291
|
+
vec3f(rotationB.z,rotationB.w,rotationScale.x)
|
|
292
|
+
);let splatScale=rotationScale.yzw;let view3x3=mat3x3f(viewMatrix[0].xyz,viewMatrix[1].xyz,viewMatrix[2].xyz);let invWorldScale3x3=mat3x3f(invWorldScale[0].xyz,invWorldScale[1].xyz,invWorldScale[2].xyz);let splatWorld3x3=mat3x3f(splatWorld[0].xyz,splatWorld[1].xyz,splatWorld[2].xyz);let rotToView=view3x3*invWorldScale3x3*splatWorld3x3*splatRotation;let axisLengthInViewZ=abs(vec3f(rotToView[0][2],rotToView[1][2],rotToView[2][2]));let gaussianSplatCutoffStddev: f32=0.7071067812;
|
|
293
|
+
var offsetSplatSpace: vec3f;if (axisLengthInViewZ.x>axisLengthInViewZ.y && axisLengthInViewZ.x>axisLengthInViewZ.z) {offsetSplatSpace=vec3f(0.0,quadPos.x,quadPos.y)*splatScale*gaussianSplatCutoffStddev;} else if (axisLengthInViewZ.y>axisLengthInViewZ.z) {offsetSplatSpace=vec3f(quadPos.x,0.0,quadPos.y)*splatScale*gaussianSplatCutoffStddev;} else {offsetSplatSpace=vec3f(quadPos.x,quadPos.y,0.0)*splatScale*gaussianSplatCutoffStddev;}
|
|
294
|
+
let vertexObjectSpace=center+splatRotation*offsetSplatSpace;return splatWorld*vec4f(vertexObjectSpace,1.0);}
|
|
295
|
+
#endif
|
|
296
|
+
`;t.IncludesShadersStoreWGSL[e]||(t.IncludesShadersStoreWGSL[e]=s);const l={name:e,shader:s};export{l as g};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import{S as a,ah as l,o as t,ai as c,aj as g,ak as s,al as d}from"./index-B2zBEWsq.js";import{p as f}from"./packingFunctions-DTwzBRBx.js";const n="gaussianSplattingFragmentDeclaration",i=`vec4 gaussianColor(vec4 inColor)
|
|
2
|
+
{float A=-dot(vPosition,vPosition);if (A<-4.0) discard;float B=exp(A)*inColor.a;
|
|
3
|
+
#include<logDepthFragment>
|
|
4
|
+
vec3 color=inColor.rgb;
|
|
5
|
+
#ifdef FOG
|
|
6
|
+
#include<fogFragment>
|
|
7
|
+
#endif
|
|
8
|
+
return vec4(color,B);}
|
|
9
|
+
`;a.IncludesShadersStore[n]||(a.IncludesShadersStore[n]=i);const F={name:n,shader:i},o="gaussianSplattingPixelShader",r=`#include<clipPlaneFragmentDeclaration>
|
|
10
|
+
#include<logDepthDeclaration>
|
|
11
|
+
#include<fogFragmentDeclaration>
|
|
12
|
+
#ifdef GPUPICKER_DEPTH
|
|
13
|
+
layout(location=0) out highp vec4 glFragData[2];
|
|
14
|
+
#endif
|
|
15
|
+
#ifdef GPUPICKER_PACK_DEPTH
|
|
16
|
+
#include<packingFunctions>
|
|
17
|
+
#endif
|
|
18
|
+
varying vec4 vColor;varying vec2 vPosition;
|
|
19
|
+
#define CUSTOM_FRAGMENT_DEFINITIONS
|
|
20
|
+
#include<gaussianSplattingFragmentDeclaration>
|
|
21
|
+
void main () {
|
|
22
|
+
#define CUSTOM_FRAGMENT_MAIN_BEGIN
|
|
23
|
+
#include<clipPlaneFragment>
|
|
24
|
+
vec4 finalColor=gaussianColor(vColor);
|
|
25
|
+
#define CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR
|
|
26
|
+
#ifdef GPUPICKER_DEPTH
|
|
27
|
+
glFragData[0]=finalColor;
|
|
28
|
+
#ifdef GPUPICKER_PACK_DEPTH
|
|
29
|
+
glFragData[1]=pack(gl_FragCoord.z);
|
|
30
|
+
#else
|
|
31
|
+
glFragData[1]=vec4(gl_FragCoord.z,0.0,0.0,1.0);
|
|
32
|
+
#endif
|
|
33
|
+
#else
|
|
34
|
+
gl_FragColor=finalColor;
|
|
35
|
+
#endif
|
|
36
|
+
#define CUSTOM_FRAGMENT_MAIN_END
|
|
37
|
+
}
|
|
38
|
+
`;a.ShadersStore[o]||(a.ShadersStore[o]=r);const S=[l,t,c,f,g,s,F,d];for(const e of S)a.IncludesShadersStore[e.name]||(a.IncludesShadersStore[e.name]=e.shader);const m={name:o,shader:r};export{m as gaussianSplattingPixelShader};
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import{S as n}from"./index-B2zBEWsq.js";import{c as o,a as s}from"./clipPlaneFragment-BXRtt4jj.js";import{l}from"./logDepthDeclaration-BR8XRz9F.js";import{f,l as c,a as g}from"./fogFragment-DtDlQBnz.js";import{p as S}from"./packingFunctions-BHPwcGG2.js";const a="gaussianSplattingFragmentDeclaration",i=`fn gaussianColor(inColor: vec4f,inPosition: vec2f)->vec4f
|
|
2
|
+
{var A : f32=-dot(inPosition,inPosition);if (A>-4.0)
|
|
3
|
+
{var B: f32=exp(A)*inColor.a;
|
|
4
|
+
#include<logDepthFragment>
|
|
5
|
+
var color: vec3f=inColor.rgb;
|
|
6
|
+
#ifdef FOG
|
|
7
|
+
#include<fogFragment>
|
|
8
|
+
#endif
|
|
9
|
+
return vec4f(color,B);} else {return vec4f(0.0);}}
|
|
10
|
+
`;n.IncludesShadersStoreWGSL[a]||(n.IncludesShadersStoreWGSL[a]=i);const u={name:a,shader:i},t="gaussianSplattingPixelShader",r=`#include<clipPlaneFragmentDeclaration>
|
|
11
|
+
#include<logDepthDeclaration>
|
|
12
|
+
#include<fogFragmentDeclaration>
|
|
13
|
+
#ifdef GPUPICKER_PACK_DEPTH
|
|
14
|
+
#include<packingFunctions>
|
|
15
|
+
#endif
|
|
16
|
+
varying vColor: vec4f;varying vPosition: vec2f;
|
|
17
|
+
#define CUSTOM_FRAGMENT_DEFINITIONS
|
|
18
|
+
#include<gaussianSplattingFragmentDeclaration>
|
|
19
|
+
@fragment
|
|
20
|
+
fn main(input: FragmentInputs)->FragmentOutputs {
|
|
21
|
+
#define CUSTOM_FRAGMENT_MAIN_BEGIN
|
|
22
|
+
#include<clipPlaneFragment>
|
|
23
|
+
var finalColor: vec4f=gaussianColor(input.vColor,input.vPosition);
|
|
24
|
+
#define CUSTOM_FRAGMENT_BEFORE_FRAGCOLOR
|
|
25
|
+
#ifdef GPUPICKER_DEPTH
|
|
26
|
+
fragmentOutputs.fragData0=finalColor;
|
|
27
|
+
#ifdef GPUPICKER_PACK_DEPTH
|
|
28
|
+
fragmentOutputs.fragData1=pack(fragmentInputs.position.z);
|
|
29
|
+
#else
|
|
30
|
+
fragmentOutputs.fragData1=vec4f(fragmentInputs.position.z,0.0,0.0,1.0);
|
|
31
|
+
#endif
|
|
32
|
+
#else
|
|
33
|
+
fragmentOutputs.color=finalColor;
|
|
34
|
+
#endif
|
|
35
|
+
#define CUSTOM_FRAGMENT_MAIN_END
|
|
36
|
+
}
|
|
37
|
+
`;n.ShadersStoreWGSL[t]||(n.ShadersStoreWGSL[t]=r);const d=[o,l,f,S,c,g,u,s];for(const e of d)n.IncludesShadersStoreWGSL[e.name]||(n.IncludesShadersStoreWGSL[e.name]=e.shader);const D={name:t,shader:r};export{D as gaussianSplattingPixelShaderWGSL};
|