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,339 @@
|
|
|
1
|
+
import{S as e}from"./index-B2zBEWsq.js";const n="sceneFragmentDeclaration",c=`uniform mat4 viewProjection;
|
|
2
|
+
#ifdef MULTIVIEW
|
|
3
|
+
uniform mat4 viewProjectionR;
|
|
4
|
+
#endif
|
|
5
|
+
uniform mat4 view;uniform mat4 projection;uniform vec4 vEyePosition;uniform mat4 inverseProjection;
|
|
6
|
+
`;e.IncludesShadersStore[n]||(e.IncludesShadersStore[n]=c);const u={name:n,shader:c},i="openpbrDielectricReflectance",s=`struct ReflectanceParams
|
|
7
|
+
{float F0;float F90;vec3 coloredF0;vec3 coloredF90;};
|
|
8
|
+
#define pbr_inline
|
|
9
|
+
ReflectanceParams dielectricReflectance(
|
|
10
|
+
in float insideIOR,in float outsideIOR,in vec3 specularColor,in float specularWeight
|
|
11
|
+
)
|
|
12
|
+
{ReflectanceParams outParams;float dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);float dielectricF0_NoSpec=pow((1.0-outsideIOR)/(1.0+outsideIOR),2.0);float f90Scale=clamp(2.0*abs(insideIOR-outsideIOR),0.0,1.0);float f90Scale_NoSpec=clamp(2.0*abs(1.0-outsideIOR),0.0,1.0);
|
|
13
|
+
#if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
|
|
14
|
+
vec3 dielectricColorF90=specularColor.rgb*vec3(f90Scale);vec3 dielectricColorF90_NoSpec=specularColor.rgb*vec3(f90Scale_NoSpec);
|
|
15
|
+
#else
|
|
16
|
+
vec3 dielectricColorF90=vec3(f90Scale);vec3 dielectricColorF90_NoSpec=vec3(f90Scale_NoSpec);
|
|
17
|
+
#endif
|
|
18
|
+
#if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF
|
|
19
|
+
float maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=mix(dielectricF0_NoSpec,dielectricF0,specularWeight)*maxF0;
|
|
20
|
+
#else
|
|
21
|
+
outParams.F0=mix(dielectricF0_NoSpec,dielectricF0,specularWeight);
|
|
22
|
+
#endif
|
|
23
|
+
outParams.F90=mix(f90Scale_NoSpec,f90Scale,specularWeight);outParams.coloredF0=mix(vec3(dielectricF0_NoSpec),vec3(dielectricF0),specularWeight)*specularColor.rgb;outParams.coloredF90=mix(dielectricColorF90_NoSpec,dielectricColorF90,specularWeight);return outParams;}
|
|
24
|
+
`;e.IncludesShadersStore[i]||(e.IncludesShadersStore[i]=s);const I={name:i,shader:s},r="openpbrGeometryInfo",f=`struct geometryInfoOutParams
|
|
25
|
+
{float NdotV;float NdotVUnclamped;vec3 environmentBrdf;float horizonOcclusion;};struct geometryInfoAnisoOutParams
|
|
26
|
+
{float NdotV;float NdotVUnclamped;vec3 environmentBrdf;float horizonOcclusion;float anisotropy;vec3 anisotropicTangent;vec3 anisotropicBitangent;mat3 TBN;};
|
|
27
|
+
#define pbr_inline
|
|
28
|
+
geometryInfoOutParams geometryInfo(
|
|
29
|
+
in vec3 normalW,in vec3 viewDirectionW,in float roughness,in vec3 geometricNormalW
|
|
30
|
+
)
|
|
31
|
+
{geometryInfoOutParams outParams;outParams.NdotVUnclamped=dot(normalW,viewDirectionW);outParams.NdotV=absEps(outParams.NdotVUnclamped);
|
|
32
|
+
#if defined(ENVIRONMENTBRDF)
|
|
33
|
+
outParams.environmentBrdf=getBRDFLookup(outParams.NdotV,roughness);
|
|
34
|
+
#else
|
|
35
|
+
outParams.environmentBrdf=vec3(0.0);
|
|
36
|
+
#endif
|
|
37
|
+
outParams.horizonOcclusion=1.0;
|
|
38
|
+
#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
39
|
+
#ifdef HORIZONOCCLUSION
|
|
40
|
+
#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL)
|
|
41
|
+
#ifdef REFLECTIONMAP_3D
|
|
42
|
+
outParams.horizonOcclusion=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW);
|
|
43
|
+
#endif
|
|
44
|
+
#endif
|
|
45
|
+
#endif
|
|
46
|
+
#endif
|
|
47
|
+
return outParams;}
|
|
48
|
+
#define pbr_inline
|
|
49
|
+
geometryInfoAnisoOutParams geometryInfoAniso(
|
|
50
|
+
in vec3 normalW,in vec3 viewDirectionW,in float roughness,in vec3 geometricNormalW
|
|
51
|
+
,in vec3 vAnisotropy,in mat3 TBN
|
|
52
|
+
)
|
|
53
|
+
{geometryInfoOutParams geoInfo=geometryInfo(normalW,viewDirectionW,roughness,geometricNormalW);geometryInfoAnisoOutParams outParams;outParams.NdotV=geoInfo.NdotV;outParams.NdotVUnclamped=geoInfo.NdotVUnclamped;outParams.environmentBrdf=geoInfo.environmentBrdf;outParams.horizonOcclusion=geoInfo.horizonOcclusion;outParams.anisotropy=vAnisotropy.b;vec3 anisotropyDirection=vec3(vAnisotropy.xy,0.);mat3 anisoTBN=mat3(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));outParams.anisotropicTangent=normalize(anisoTBN*anisotropyDirection);outParams.anisotropicBitangent=normalize(cross(anisoTBN[2],outParams.anisotropicTangent));outParams.TBN=TBN;return outParams;}`;e.IncludesShadersStore[r]||(e.IncludesShadersStore[r]=f);const v={name:r,shader:f},o="openpbrIblFunctions",l=`#ifdef REFLECTION
|
|
54
|
+
vec3 sampleIrradiance(
|
|
55
|
+
in vec3 surfaceNormal
|
|
56
|
+
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
57
|
+
,in vec3 vEnvironmentIrradianceSH
|
|
58
|
+
#endif
|
|
59
|
+
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
60
|
+
,in mat4 iblMatrix
|
|
61
|
+
#endif
|
|
62
|
+
#ifdef USEIRRADIANCEMAP
|
|
63
|
+
#ifdef REFLECTIONMAP_3D
|
|
64
|
+
,in samplerCube irradianceSampler
|
|
65
|
+
#else
|
|
66
|
+
,in sampler2D irradianceSampler
|
|
67
|
+
#endif
|
|
68
|
+
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
69
|
+
,in vec3 reflectionDominantDirection
|
|
70
|
+
#endif
|
|
71
|
+
#endif
|
|
72
|
+
#ifdef REALTIME_FILTERING
|
|
73
|
+
,in vec2 vReflectionFilteringInfo
|
|
74
|
+
#ifdef IBL_CDF_FILTERING
|
|
75
|
+
,in sampler2D icdfSampler
|
|
76
|
+
#endif
|
|
77
|
+
#endif
|
|
78
|
+
,in vec2 vReflectionInfos
|
|
79
|
+
,in vec3 viewDirectionW
|
|
80
|
+
,in float diffuseRoughness
|
|
81
|
+
,in vec3 surfaceAlbedo
|
|
82
|
+
) {vec3 environmentIrradiance=vec3(0.,0.,0.);
|
|
83
|
+
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
84
|
+
vec3 irradianceVector=(iblMatrix*vec4(surfaceNormal,0)).xyz;vec3 irradianceView=(iblMatrix*vec4(viewDirectionW,0)).xyz;
|
|
85
|
+
#if !defined(USE_IRRADIANCE_DOMINANT_DIRECTION) && !defined(REALTIME_FILTERING)
|
|
86
|
+
#if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY
|
|
87
|
+
{float NdotV=max(dot(surfaceNormal,viewDirectionW),0.0);irradianceVector=mix(irradianceVector,irradianceView,(0.5*(1.0-NdotV))*diffuseRoughness);}
|
|
88
|
+
#endif
|
|
89
|
+
#endif
|
|
90
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
91
|
+
irradianceVector.z*=-1.0;irradianceView.z*=-1.0;
|
|
92
|
+
#endif
|
|
93
|
+
#ifdef INVERTCUBICMAP
|
|
94
|
+
irradianceVector.y*=-1.0;irradianceView.y*=-1.0;
|
|
95
|
+
#endif
|
|
96
|
+
#endif
|
|
97
|
+
#ifdef USESPHERICALFROMREFLECTIONMAP
|
|
98
|
+
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
99
|
+
environmentIrradiance=vEnvironmentIrradianceSH;
|
|
100
|
+
#else
|
|
101
|
+
#if defined(REALTIME_FILTERING)
|
|
102
|
+
environmentIrradiance=irradiance(reflectionSampler,irradianceVector,vReflectionFilteringInfo,diffuseRoughness,surfaceAlbedo,irradianceView
|
|
103
|
+
#ifdef IBL_CDF_FILTERING
|
|
104
|
+
,icdfSampler
|
|
105
|
+
#endif
|
|
106
|
+
);
|
|
107
|
+
#else
|
|
108
|
+
environmentIrradiance=computeEnvironmentIrradiance(irradianceVector);
|
|
109
|
+
#endif
|
|
110
|
+
#endif
|
|
111
|
+
#elif defined(USEIRRADIANCEMAP)
|
|
112
|
+
#ifdef REFLECTIONMAP_3D
|
|
113
|
+
vec4 environmentIrradianceFromTexture=sampleReflection(irradianceSampler,irradianceVector);
|
|
114
|
+
#else
|
|
115
|
+
vec4 environmentIrradianceFromTexture=sampleReflection(irradianceSampler,reflectionCoords);
|
|
116
|
+
#endif
|
|
117
|
+
environmentIrradiance=environmentIrradianceFromTexture.rgb;
|
|
118
|
+
#ifdef RGBDREFLECTION
|
|
119
|
+
environmentIrradiance.rgb=fromRGBD(environmentIrradianceFromTexture);
|
|
120
|
+
#endif
|
|
121
|
+
#ifdef GAMMAREFLECTION
|
|
122
|
+
environmentIrradiance.rgb=toLinearSpace(environmentIrradiance.rgb);
|
|
123
|
+
#endif
|
|
124
|
+
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
125
|
+
vec3 Ls=normalize(reflectionDominantDirection);float NoL=dot(irradianceVector,Ls);float NoV=dot(irradianceVector,irradianceView);vec3 diffuseRoughnessTerm=vec3(1.0);
|
|
126
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
127
|
+
float LoV=dot (Ls,irradianceView);float mag=length(reflectionDominantDirection)*2.0;vec3 clampedAlbedo=clamp(surfaceAlbedo,vec3(0.1),vec3(1.0));diffuseRoughnessTerm=diffuseBRDF_EON(clampedAlbedo,diffuseRoughness,NoL,NoV,LoV)*PI;diffuseRoughnessTerm=diffuseRoughnessTerm/clampedAlbedo;diffuseRoughnessTerm=mix(vec3(1.0),diffuseRoughnessTerm,sqrt(clamp(mag*NoV,0.0,1.0)));
|
|
128
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
129
|
+
vec3 H=(irradianceView+Ls)*0.5;float VoH=dot(irradianceView,H);diffuseRoughnessTerm=vec3(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
|
|
130
|
+
#endif
|
|
131
|
+
environmentIrradiance=environmentIrradiance.rgb*diffuseRoughnessTerm;
|
|
132
|
+
#endif
|
|
133
|
+
#endif
|
|
134
|
+
environmentIrradiance*=vReflectionInfos.x;return environmentIrradiance;}
|
|
135
|
+
#define pbr_inline
|
|
136
|
+
#ifdef REFLECTIONMAP_3D
|
|
137
|
+
vec3 createReflectionCoords(
|
|
138
|
+
#else
|
|
139
|
+
vec2 createReflectionCoords(
|
|
140
|
+
#endif
|
|
141
|
+
in vec3 vPositionW
|
|
142
|
+
,in vec3 normalW
|
|
143
|
+
)
|
|
144
|
+
{vec3 reflectionVector=computeReflectionCoords(vec4(vPositionW,1.0),normalW);
|
|
145
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
146
|
+
reflectionVector.z*=-1.0;
|
|
147
|
+
#endif
|
|
148
|
+
#ifdef REFLECTIONMAP_3D
|
|
149
|
+
vec3 reflectionCoords=reflectionVector;
|
|
150
|
+
#else
|
|
151
|
+
vec2 reflectionCoords=reflectionVector.xy;
|
|
152
|
+
#ifdef REFLECTIONMAP_PROJECTION
|
|
153
|
+
reflectionCoords/=reflectionVector.z;
|
|
154
|
+
#endif
|
|
155
|
+
reflectionCoords.y=1.0-reflectionCoords.y;
|
|
156
|
+
#endif
|
|
157
|
+
return reflectionCoords;}
|
|
158
|
+
#define pbr_inline
|
|
159
|
+
#define inline
|
|
160
|
+
vec3 sampleRadiance(
|
|
161
|
+
in float alphaG
|
|
162
|
+
,in vec3 vReflectionMicrosurfaceInfos
|
|
163
|
+
,in vec2 vReflectionInfos
|
|
164
|
+
,in geometryInfoOutParams geoInfo
|
|
165
|
+
#ifdef REFLECTIONMAP_3D
|
|
166
|
+
,in samplerCube reflectionSampler
|
|
167
|
+
,const vec3 reflectionCoords
|
|
168
|
+
#else
|
|
169
|
+
,in sampler2D reflectionSampler
|
|
170
|
+
,const vec2 reflectionCoords
|
|
171
|
+
#endif
|
|
172
|
+
#ifdef REALTIME_FILTERING
|
|
173
|
+
,in vec2 vReflectionFilteringInfo
|
|
174
|
+
#endif
|
|
175
|
+
)
|
|
176
|
+
{vec4 environmentRadiance=vec4(0.,0.,0.,0.);
|
|
177
|
+
#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
|
|
178
|
+
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG,geoInfo.NdotVUnclamped);
|
|
179
|
+
#elif defined(LINEARSPECULARREFLECTION)
|
|
180
|
+
float reflectionLOD=getLinearLodFromRoughness(vReflectionMicrosurfaceInfos.x,roughness);
|
|
181
|
+
#else
|
|
182
|
+
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG);
|
|
183
|
+
#endif
|
|
184
|
+
reflectionLOD=reflectionLOD*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;
|
|
185
|
+
#ifdef REALTIME_FILTERING
|
|
186
|
+
environmentRadiance=vec4(radiance(alphaG,reflectionSampler,reflectionCoords,vReflectionFilteringInfo),1.0);
|
|
187
|
+
#else
|
|
188
|
+
environmentRadiance=sampleReflectionLod(reflectionSampler,reflectionCoords,reflectionLOD);
|
|
189
|
+
#endif
|
|
190
|
+
#ifdef RGBDREFLECTION
|
|
191
|
+
environmentRadiance.rgb=fromRGBD(environmentRadiance);
|
|
192
|
+
#endif
|
|
193
|
+
#ifdef GAMMAREFLECTION
|
|
194
|
+
environmentRadiance.rgb=toLinearSpace(environmentRadiance.rgb);
|
|
195
|
+
#endif
|
|
196
|
+
environmentRadiance.rgb*=vec3(vReflectionInfos.x);return environmentRadiance.rgb;}
|
|
197
|
+
#if defined(ANISOTROPIC)
|
|
198
|
+
#define pbr_inline
|
|
199
|
+
#define inline
|
|
200
|
+
vec3 sampleRadianceAnisotropic(
|
|
201
|
+
in float alphaG
|
|
202
|
+
,in vec3 vReflectionMicrosurfaceInfos
|
|
203
|
+
,in vec2 vReflectionInfos
|
|
204
|
+
,in geometryInfoAnisoOutParams geoInfo
|
|
205
|
+
,const vec3 normalW
|
|
206
|
+
,const vec3 viewDirectionW
|
|
207
|
+
,const vec3 positionW
|
|
208
|
+
,const vec3 noise
|
|
209
|
+
,bool isRefraction
|
|
210
|
+
,float ior
|
|
211
|
+
#ifdef REFLECTIONMAP_3D
|
|
212
|
+
,in samplerCube reflectionSampler
|
|
213
|
+
#else
|
|
214
|
+
,in sampler2D reflectionSampler
|
|
215
|
+
#endif
|
|
216
|
+
#ifdef REALTIME_FILTERING
|
|
217
|
+
,in vec2 vReflectionFilteringInfo
|
|
218
|
+
#endif
|
|
219
|
+
)
|
|
220
|
+
{vec4 environmentRadiance=vec4(0.,0.,0.,0.);float alphaT=alphaG*sqrt(2.0/(1.0+(1.0-geoInfo.anisotropy)*(1.0-geoInfo.anisotropy)));float alphaB=(1.0-geoInfo.anisotropy)*alphaT;alphaG=alphaB;
|
|
221
|
+
#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
|
|
222
|
+
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG,geoInfo.NdotVUnclamped);
|
|
223
|
+
#elif defined(LINEARSPECULARREFLECTION)
|
|
224
|
+
float reflectionLOD=getLinearLodFromRoughness(vReflectionMicrosurfaceInfos.x,roughness);
|
|
225
|
+
#else
|
|
226
|
+
float reflectionLOD=getLodFromAlphaG(vReflectionMicrosurfaceInfos.x,alphaG);
|
|
227
|
+
#endif
|
|
228
|
+
reflectionLOD=reflectionLOD*vReflectionMicrosurfaceInfos.y+vReflectionMicrosurfaceInfos.z;
|
|
229
|
+
#ifdef REALTIME_FILTERING
|
|
230
|
+
vec3 view=(reflectionMatrix*vec4(viewDirectionW,0.0)).xyz;vec3 tangent=(reflectionMatrix*vec4(geoInfo.anisotropicTangent,0.0)).xyz;vec3 bitangent=(reflectionMatrix*vec4(geoInfo.anisotropicBitangent,0.0)).xyz;vec3 normal=(reflectionMatrix*vec4(normalW,0.0)).xyz;
|
|
231
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
232
|
+
view.z*=-1.0;tangent.z*=-1.0;bitangent.z*=-1.0;normal.z*=-1.0;
|
|
233
|
+
#endif
|
|
234
|
+
environmentRadiance =
|
|
235
|
+
vec4(radianceAnisotropic(alphaT,alphaB,reflectionSampler,
|
|
236
|
+
view,tangent,
|
|
237
|
+
bitangent,normal,
|
|
238
|
+
vReflectionFilteringInfo,noise.xy,isRefraction,ior),
|
|
239
|
+
1.0);
|
|
240
|
+
#else
|
|
241
|
+
const int samples=16;vec4 radianceSample=vec4(0.0);vec3 reflectionCoords=vec3(0.0);float sample_weight=0.0;float total_weight=0.0;float step=1.0/float(max(samples-1,1));for (int i=0; i<samples; ++i) {float t=mix(-1.0,1.0,float(i)*step);t+=step*2.0*noise.x;sample_weight=max(1.0-abs(t),0.001);sample_weight*=sample_weight;t*=min(4.0*alphaT*geoInfo.anisotropy,1.0);vec3 bentNormal;if (t<0.0) {float blend=t+1.0;bentNormal=normalize(mix(-geoInfo.anisotropicTangent,normalW,blend));} else if (t>0.0) {float blend=t;bentNormal=normalize(mix(normalW,geoInfo.anisotropicTangent,blend));} else {bentNormal=normalW;}
|
|
242
|
+
if (isRefraction) {reflectionCoords=double_refract(-viewDirectionW,bentNormal,ior);} else {reflectionCoords=reflect(-viewDirectionW,bentNormal);}
|
|
243
|
+
reflectionCoords=vec3(reflectionMatrix*vec4(reflectionCoords,0));
|
|
244
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
245
|
+
reflectionCoords.z*=-1.0;
|
|
246
|
+
#endif
|
|
247
|
+
radianceSample=sampleReflectionLod(reflectionSampler,reflectionCoords,reflectionLOD);
|
|
248
|
+
#ifdef RGBDREFLECTION
|
|
249
|
+
environmentRadiance.rgb+=sample_weight*fromRGBD(radianceSample);
|
|
250
|
+
#elif defined(GAMMAREFLECTION)
|
|
251
|
+
environmentRadiance.rgb+=sample_weight*toLinearSpace(radianceSample.rgb);
|
|
252
|
+
#else
|
|
253
|
+
environmentRadiance.rgb+=sample_weight*radianceSample.rgb;
|
|
254
|
+
#endif
|
|
255
|
+
total_weight+=sample_weight;}
|
|
256
|
+
environmentRadiance=vec4(environmentRadiance.xyz/float(total_weight),1.0);
|
|
257
|
+
#endif
|
|
258
|
+
environmentRadiance.rgb*=vec3(vReflectionInfos.x);return environmentRadiance.rgb;}
|
|
259
|
+
#endif
|
|
260
|
+
#endif
|
|
261
|
+
#if defined(ENVIRONMENTBRDF)
|
|
262
|
+
#define pbr_inline
|
|
263
|
+
float computeDielectricIblFresnel(in ReflectanceParams reflectance,in vec3 environmentBrdf)
|
|
264
|
+
{float dielectricIblFresnel=getReflectanceFromBRDFLookup(vec3(reflectance.F0),vec3(reflectance.F90),environmentBrdf).r;float dielectricECF=1.0+reflectance.F0*(1.0/environmentBrdf.y-1.0);return clamp(dielectricIblFresnel*dielectricECF,0.0,1.0);}
|
|
265
|
+
#define pbr_inline
|
|
266
|
+
vec3 computeConductorIblFresnel(in ReflectanceParams reflectance,in vec3 environmentBrdf)
|
|
267
|
+
{
|
|
268
|
+
#if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR) && defined(ENVIRONMENTBRDF)
|
|
269
|
+
vec3 openPBRBrdf=vec3(environmentBrdf.xy,environmentBrdf.z/BRDF_Z_SCALE);vec3 b =getF82B(reflectance.coloredF0,reflectance.coloredF90);vec3 E_F82=getF82DirectionalAlbedo(reflectance.coloredF0,vec3(1.0),b,openPBRBrdf);vec3 F_avg=getF82AverageFresnel(reflectance.coloredF0,b);vec3 ECF =vec3(1.0)+F_avg*(vec3(1.0)/openPBRBrdf.y-vec3(1.0));return clamp(E_F82*ECF,vec3(0.0),vec3(1.0));
|
|
270
|
+
#else
|
|
271
|
+
return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90,environmentBrdf);
|
|
272
|
+
#endif
|
|
273
|
+
}
|
|
274
|
+
#endif
|
|
275
|
+
`;e.IncludesShadersStore[o]||(e.IncludesShadersStore[o]=l);const E={name:o,shader:l},a="openpbrSubsurfaceLayerData",d=`float subsurface_weight=vSubsurfaceWeight;vec3 subsurface_color=vSubsurfaceColor.rgb;float subsurface_radius=vSubsurfaceRadius;vec3 subsurface_radius_scale=vSubsurfaceRadiusScale;float subsurface_scatter_anisotropy=clamp(vSubsurfaceScatterAnisotropy,-0.9999,0.9999);
|
|
276
|
+
#ifdef SUBSURFACE_WEIGHT
|
|
277
|
+
vec4 subsurfaceWeightFromTexture=TEXRD(subsurfaceWeightSampler,vSubsurfaceWeightUV+uvOffset);
|
|
278
|
+
#endif
|
|
279
|
+
#ifdef SUBSURFACE_COLOR
|
|
280
|
+
vec4 subsurfaceColorFromTexture=TEXRD(subsurfaceColorSampler,vSubsurfaceColorUV+uvOffset);
|
|
281
|
+
#endif
|
|
282
|
+
#ifdef SUBSURFACE_RADIUS_SCALE
|
|
283
|
+
vec4 subsurfaceRadiusScaleFromTexture=TEXRD(subsurfaceRadiusScaleSampler,vSubsurfaceRadiusScaleUV+uvOffset);
|
|
284
|
+
#endif
|
|
285
|
+
#ifdef SUBSURFACE_WEIGHT
|
|
286
|
+
#ifdef SUBSURFACE_WEIGHT_FROM_TEXTURE_ALPHA
|
|
287
|
+
subsurface_weight*=subsurfaceWeightFromTexture.a;
|
|
288
|
+
#else
|
|
289
|
+
subsurface_weight*=subsurfaceWeightFromTexture.r;
|
|
290
|
+
#endif
|
|
291
|
+
#endif
|
|
292
|
+
#ifdef SUBSURFACE_COLOR
|
|
293
|
+
#ifdef SUBSURFACE_COLOR_GAMMA
|
|
294
|
+
subsurface_color*=toLinearSpace(subsurfaceColorFromTexture.rgb);
|
|
295
|
+
#else
|
|
296
|
+
subsurface_color*=subsurfaceColorFromTexture.rgb;
|
|
297
|
+
#endif
|
|
298
|
+
subsurface_color*=vSubsurfaceColorInfos.y;
|
|
299
|
+
#endif
|
|
300
|
+
#ifdef SUBSURFACE_RADIUS_SCALE
|
|
301
|
+
subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb;
|
|
302
|
+
#endif
|
|
303
|
+
`;e.IncludesShadersStore[a]||(e.IncludesShadersStore[a]=d);const S={name:a,shader:d},t="openpbrTransmissionLayerData",m=`float transmission_weight=vTransmissionWeight;vec3 transmission_color=vTransmissionColor.rgb;float transmission_depth=vTransmissionDepth;vec3 transmission_scatter=vTransmissionScatter.rgb;float transmission_scatter_anisotropy=clamp(vTransmissionScatterAnisotropy,-0.9999,0.9999);float transmission_dispersion_scale=vTransmissionDispersionScale;float transmission_dispersion_abbe_number=vTransmissionDispersionAbbeNumber;
|
|
304
|
+
#ifdef TRANSMISSION_WEIGHT
|
|
305
|
+
vec4 transmissionWeightFromTexture=TEXRD(transmissionWeightSampler,vTransmissionWeightUV+uvOffset);
|
|
306
|
+
#endif
|
|
307
|
+
#ifdef TRANSMISSION_COLOR
|
|
308
|
+
vec4 transmissionColorFromTexture=TEXRD(transmissionColorSampler,vTransmissionColorUV+uvOffset);
|
|
309
|
+
#endif
|
|
310
|
+
#ifdef TRANSMISSION_DEPTH
|
|
311
|
+
vec4 transmissionDepthFromTexture=TEXRD(transmissionDepthSampler,vTransmissionDepthUV+uvOffset);
|
|
312
|
+
#endif
|
|
313
|
+
#ifdef TRANSMISSION_SCATTER
|
|
314
|
+
vec4 transmissionScatterFromTexture=TEXRD(transmissionScatterSampler,vTransmissionScatterUV+uvOffset);
|
|
315
|
+
#endif
|
|
316
|
+
#ifdef TRANSMISSION_DISPERSION_SCALE
|
|
317
|
+
vec4 transmissionDispersionScaleFromTexture=TEXRD(transmissionDispersionScaleSampler,vTransmissionDispersionScaleUV+uvOffset);
|
|
318
|
+
#endif
|
|
319
|
+
#ifdef TRANSMISSION_WEIGHT
|
|
320
|
+
transmission_weight*=transmissionWeightFromTexture.r;
|
|
321
|
+
#endif
|
|
322
|
+
#ifdef TRANSMISSION_COLOR
|
|
323
|
+
#ifdef TRANSMISSION_COLOR_GAMMA
|
|
324
|
+
transmission_color*=toLinearSpace(transmissionColorFromTexture.rgb);
|
|
325
|
+
#else
|
|
326
|
+
transmission_color*=transmissionColorFromTexture.rgb;
|
|
327
|
+
#endif
|
|
328
|
+
transmission_color*=vTransmissionColorInfos.y;
|
|
329
|
+
#endif
|
|
330
|
+
#ifdef TRANSMISSION_DEPTH
|
|
331
|
+
transmission_depth*=transmissionDepthFromTexture.r;
|
|
332
|
+
#endif
|
|
333
|
+
#ifdef TRANSMISSION_SCATTER
|
|
334
|
+
transmission_scatter*=transmissionScatterFromTexture.rgb;
|
|
335
|
+
#endif
|
|
336
|
+
#ifdef TRANSMISSION_DISPERSION_SCALE
|
|
337
|
+
transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r;
|
|
338
|
+
#endif
|
|
339
|
+
`;e.IncludesShadersStore[t]||(e.IncludesShadersStore[t]=m);const p={name:t,shader:m};export{v as a,E as b,S as c,p as d,I as o,u as s};
|
|
@@ -0,0 +1,343 @@
|
|
|
1
|
+
import{S as e}from"./index-B2zBEWsq.js";const r="openpbrDielectricReflectance",f=`struct ReflectanceParams
|
|
2
|
+
{F0: f32,
|
|
3
|
+
F90: f32,
|
|
4
|
+
coloredF0: vec3f,
|
|
5
|
+
coloredF90: vec3f,};
|
|
6
|
+
#define pbr_inline
|
|
7
|
+
fn dielectricReflectance(
|
|
8
|
+
insideIOR: f32,outsideIOR: f32,specularColor: vec3f,specularWeight: f32
|
|
9
|
+
)->ReflectanceParams
|
|
10
|
+
{var outParams: ReflectanceParams;let dielectricF0=pow((insideIOR-outsideIOR)/(insideIOR+outsideIOR),2.0);
|
|
11
|
+
#if DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_GLTF
|
|
12
|
+
let maxF0=max(specularColor.r,max(specularColor.g,specularColor.b));outParams.F0=dielectricF0*maxF0*specularWeight;
|
|
13
|
+
#else
|
|
14
|
+
outParams.F0=dielectricF0*specularWeight;
|
|
15
|
+
#endif
|
|
16
|
+
let f90Scale=clamp(2.0f*abs(insideIOR-outsideIOR),0.0f,1.0f);outParams.F90=f90Scale*specularWeight;outParams.coloredF0=vec3f(dielectricF0*specularWeight)*specularColor.rgb;
|
|
17
|
+
#if (DIELECTRIC_SPECULAR_MODEL==DIELECTRIC_SPECULAR_MODEL_OPENPBR)
|
|
18
|
+
let dielectricColorF90: vec3f=specularColor.rgb*vec3f(f90Scale)*specularWeight;
|
|
19
|
+
#else
|
|
20
|
+
let dielectricColorF90: vec3f=vec3f(f90Scale)*specularWeight;
|
|
21
|
+
#endif
|
|
22
|
+
outParams.coloredF90=dielectricColorF90;return outParams;}
|
|
23
|
+
`;e.IncludesShadersStoreWGSL[r]||(e.IncludesShadersStoreWGSL[r]=f);const m={name:r,shader:f},n="openpbrGeometryInfo",t=`struct geometryInfoOutParams
|
|
24
|
+
{NdotV: f32,
|
|
25
|
+
NdotVUnclamped: f32,
|
|
26
|
+
environmentBrdf: vec3f,
|
|
27
|
+
horizonOcclusion: f32};struct geometryInfoAnisoOutParams
|
|
28
|
+
{NdotV: f32,
|
|
29
|
+
NdotVUnclamped: f32,
|
|
30
|
+
environmentBrdf: vec3f,
|
|
31
|
+
horizonOcclusion: f32,
|
|
32
|
+
anisotropy: f32,
|
|
33
|
+
anisotropicTangent: vec3f,
|
|
34
|
+
anisotropicBitangent: vec3f,
|
|
35
|
+
TBN: mat3x3<f32>};fn geometryInfo(
|
|
36
|
+
normalW: vec3f,viewDirectionW: vec3f,roughness: f32,geometricNormalW: vec3f
|
|
37
|
+
)->geometryInfoOutParams
|
|
38
|
+
{var outParams: geometryInfoOutParams;outParams.NdotVUnclamped=dot(normalW,viewDirectionW);outParams.NdotV=absEps(outParams.NdotVUnclamped);
|
|
39
|
+
#if defined(ENVIRONMENTBRDF)
|
|
40
|
+
outParams.environmentBrdf=getBRDFLookup(outParams.NdotV,roughness);
|
|
41
|
+
#else
|
|
42
|
+
outParams.environmentBrdf=vec3f(0.0);
|
|
43
|
+
#endif
|
|
44
|
+
outParams.horizonOcclusion=1.0f;
|
|
45
|
+
#if defined(ENVIRONMENTBRDF) && !defined(REFLECTIONMAP_SKYBOX)
|
|
46
|
+
#ifdef HORIZONOCCLUSION
|
|
47
|
+
#if defined(GEOMETRY_NORMAL) || defined(GEOMETRY_COAT_NORMAL)
|
|
48
|
+
#ifdef REFLECTIONMAP_3D
|
|
49
|
+
outParams.horizonOcclusion=environmentHorizonOcclusion(-viewDirectionW,normalW,geometricNormalW);
|
|
50
|
+
#endif
|
|
51
|
+
#endif
|
|
52
|
+
#endif
|
|
53
|
+
#endif
|
|
54
|
+
return outParams;}
|
|
55
|
+
fn geometryInfoAniso(
|
|
56
|
+
normalW: vec3f,viewDirectionW: vec3f,roughness: f32,geometricNormalW: vec3f
|
|
57
|
+
,vAnisotropy: vec3f,TBN: mat3x3<f32>
|
|
58
|
+
)->geometryInfoAnisoOutParams
|
|
59
|
+
{let geoInfo: geometryInfoOutParams=geometryInfo(normalW,viewDirectionW,roughness,geometricNormalW);var outParams: geometryInfoAnisoOutParams;outParams.NdotV=geoInfo.NdotV;outParams.NdotVUnclamped=geoInfo.NdotVUnclamped;outParams.environmentBrdf=geoInfo.environmentBrdf;outParams.horizonOcclusion=geoInfo.horizonOcclusion;outParams.anisotropy=vAnisotropy.b;let anisotropyDirection: vec3f=vec3f(vAnisotropy.xy,0.);let anisoTBN: mat3x3<f32>=mat3x3<f32>(normalize(TBN[0]),normalize(TBN[1]),normalize(TBN[2]));outParams.anisotropicTangent=normalize(anisoTBN*anisotropyDirection);outParams.anisotropicBitangent=normalize(cross(anisoTBN[2],outParams.anisotropicTangent));outParams.TBN=TBN;return outParams;}
|
|
60
|
+
`;e.IncludesShadersStoreWGSL[n]||(e.IncludesShadersStoreWGSL[n]=t);const u={name:n,shader:t},i="openpbrIblFunctions",c=`#ifdef REFLECTION
|
|
61
|
+
fn sampleIrradiance(
|
|
62
|
+
surfaceNormal: vec3f
|
|
63
|
+
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
64
|
+
,vEnvironmentIrradianceSH: vec3f
|
|
65
|
+
#endif
|
|
66
|
+
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
67
|
+
,iblMatrix: mat4x4f
|
|
68
|
+
#endif
|
|
69
|
+
#ifdef USEIRRADIANCEMAP
|
|
70
|
+
#ifdef REFLECTIONMAP_3D
|
|
71
|
+
,irradianceSampler: texture_cube<f32>
|
|
72
|
+
,irradianceSamplerSampler: sampler
|
|
73
|
+
#else
|
|
74
|
+
,irradianceSampler: texture_2d<f32>
|
|
75
|
+
,irradianceSamplerSampler: sampler
|
|
76
|
+
#endif
|
|
77
|
+
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
78
|
+
,reflectionDominantDirection: vec3f
|
|
79
|
+
#endif
|
|
80
|
+
#endif
|
|
81
|
+
#ifdef REALTIME_FILTERING
|
|
82
|
+
,reflectionFilteringInfo: vec2f
|
|
83
|
+
#ifdef IBL_CDF_FILTERING
|
|
84
|
+
,icdfSampler: texture_2d<f32>
|
|
85
|
+
,icdfSamplerSampler: sampler
|
|
86
|
+
#endif
|
|
87
|
+
#endif
|
|
88
|
+
,reflectionInfos: vec2f
|
|
89
|
+
,viewDirectionW: vec3f
|
|
90
|
+
,diffuseRoughness: f32
|
|
91
|
+
,surfaceAlbedo: vec3f
|
|
92
|
+
)->vec3f {var environmentIrradiance=vec3f(0.,0.,0.);
|
|
93
|
+
#if (defined(USESPHERICALFROMREFLECTIONMAP) && (!defined(NORMAL) || !defined(USESPHERICALINVERTEX))) || (defined(USEIRRADIANCEMAP) && defined(REFLECTIONMAP_3D))
|
|
94
|
+
var irradianceVector=(iblMatrix*vec4f(surfaceNormal,0.0f)).xyz;var irradianceView=(iblMatrix*vec4f(viewDirectionW,0.0f)).xyz;
|
|
95
|
+
#if !defined(USE_IRRADIANCE_DOMINANT_DIRECTION) && !defined(REALTIME_FILTERING)
|
|
96
|
+
#if BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LAMBERT && BASE_DIFFUSE_MODEL != BRDF_DIFFUSE_MODEL_LEGACY
|
|
97
|
+
{let NdotV=max(dot(surfaceNormal,viewDirectionW),0.0f);irradianceVector=mix(irradianceVector,irradianceView,(0.5f*(1.0f-NdotV))*diffuseRoughness);}
|
|
98
|
+
#endif
|
|
99
|
+
#endif
|
|
100
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
101
|
+
irradianceVector.z*=-1.0;irradianceView.z*=-1.0;
|
|
102
|
+
#endif
|
|
103
|
+
#ifdef INVERTCUBICMAP
|
|
104
|
+
irradianceVector.y*=-1.0;irradianceView.y*=-1.0;
|
|
105
|
+
#endif
|
|
106
|
+
#endif
|
|
107
|
+
#ifdef USESPHERICALFROMREFLECTIONMAP
|
|
108
|
+
#if defined(NORMAL) && defined(USESPHERICALINVERTEX)
|
|
109
|
+
environmentIrradiance=vEnvironmentIrradianceSH;
|
|
110
|
+
#else
|
|
111
|
+
#if defined(REALTIME_FILTERING)
|
|
112
|
+
environmentIrradiance=irradiance(reflectionSampler,reflectionSamplerSampler,irradianceVector,reflectionFilteringInfo,diffuseRoughness,surfaceAlbedo,irradianceView
|
|
113
|
+
#ifdef IBL_CDF_FILTERING
|
|
114
|
+
,icdfSampler
|
|
115
|
+
,icdfSamplerSampler
|
|
116
|
+
#endif
|
|
117
|
+
);
|
|
118
|
+
#else
|
|
119
|
+
environmentIrradiance=computeEnvironmentIrradiance(irradianceVector);
|
|
120
|
+
#endif
|
|
121
|
+
#endif
|
|
122
|
+
#elif defined(USEIRRADIANCEMAP)
|
|
123
|
+
#ifdef REFLECTIONMAP_3D
|
|
124
|
+
let environmentIrradianceFromTexture: vec4f=textureSample(irradianceSampler,irradianceSamplerSampler,irradianceVector);
|
|
125
|
+
#else
|
|
126
|
+
let environmentIrradianceFromTexture: vec4f=textureSample(irradianceSampler,irradianceSamplerSampler,reflectionCoords);
|
|
127
|
+
#endif
|
|
128
|
+
environmentIrradiance=environmentIrradianceFromTexture.rgb;
|
|
129
|
+
#ifdef RGBDREFLECTION
|
|
130
|
+
environmentIrradiance.rgb=fromRGBD(environmentIrradianceFromTexture);
|
|
131
|
+
#endif
|
|
132
|
+
#ifdef GAMMAREFLECTION
|
|
133
|
+
environmentIrradiance.rgb=toLinearSpaceVec3(environmentIrradiance.rgb);
|
|
134
|
+
#endif
|
|
135
|
+
#ifdef USE_IRRADIANCE_DOMINANT_DIRECTION
|
|
136
|
+
let Ls: vec3f=normalize(reflectionDominantDirection);let NoL: f32=dot(irradianceVector,Ls);let NoV: f32=dot(irradianceVector,irradianceView);var diffuseRoughnessTerm=vec3f(1.0f);
|
|
137
|
+
#if BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_EON
|
|
138
|
+
let LoV: f32=dot (Ls,irradianceView);let mag: f32=length(reflectionDominantDirection)*2.0f;let clampedAlbedo: vec3f=clamp(surfaceAlbedo,vec3f(0.1f),vec3f(1.0f));diffuseRoughnessTerm=diffuseBRDF_EON(clampedAlbedo,diffuseRoughness,NoL,NoV,LoV)*PI;diffuseRoughnessTerm=diffuseRoughnessTerm/clampedAlbedo;diffuseRoughnessTerm=mix(vec3f(1.0f),diffuseRoughnessTerm,sqrt(clamp(mag*NoV,0.0f,1.0f)));
|
|
139
|
+
#elif BASE_DIFFUSE_MODEL==BRDF_DIFFUSE_MODEL_BURLEY
|
|
140
|
+
let H: vec3f=(irradianceView+Ls)*0.5f;let VoH: f32=dot(irradianceView,H);diffuseRoughnessTerm=vec3f(diffuseBRDF_Burley(NoL,NoV,VoH,diffuseRoughness)*PI);
|
|
141
|
+
#endif
|
|
142
|
+
environmentIrradiance=environmentIrradiance.rgb*diffuseRoughnessTerm;
|
|
143
|
+
#endif
|
|
144
|
+
#endif
|
|
145
|
+
environmentIrradiance*=reflectionInfos.x;return environmentIrradiance;}
|
|
146
|
+
#ifdef REFLECTIONMAP_3D
|
|
147
|
+
fn createReflectionCoords(vPositionW: vec3f,normalW: vec3f)->vec3f
|
|
148
|
+
#else
|
|
149
|
+
fn createReflectionCoords(vPositionW: vec3f,normalW: vec3f)->vec2f
|
|
150
|
+
#endif
|
|
151
|
+
{var reflectionVector: vec3f=computeReflectionCoords(vec4f(vPositionW,1.0f),normalW);
|
|
152
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
153
|
+
reflectionVector.z*=-1.0;
|
|
154
|
+
#endif
|
|
155
|
+
#ifdef REFLECTIONMAP_3D
|
|
156
|
+
var reflectionCoords: vec3f=reflectionVector;
|
|
157
|
+
#else
|
|
158
|
+
var reflectionCoords: vec2f=reflectionVector.xy;
|
|
159
|
+
#ifdef REFLECTIONMAP_PROJECTION
|
|
160
|
+
reflectionCoords/=reflectionVector.z;
|
|
161
|
+
#endif
|
|
162
|
+
reflectionCoords.y=1.0f-reflectionCoords.y;
|
|
163
|
+
#endif
|
|
164
|
+
return reflectionCoords;}
|
|
165
|
+
fn sampleRadiance(
|
|
166
|
+
alphaG: f32
|
|
167
|
+
,reflectionMicrosurfaceInfos: vec3f
|
|
168
|
+
,reflectionInfos: vec2f
|
|
169
|
+
,geoInfo: geometryInfoOutParams
|
|
170
|
+
#ifdef REFLECTIONMAP_3D
|
|
171
|
+
,reflectionSampler: texture_cube<f32>
|
|
172
|
+
,reflectionSamplerSampler: sampler
|
|
173
|
+
,reflectionCoords: vec3f
|
|
174
|
+
#else
|
|
175
|
+
,reflectionSampler: texture_2d<f32>
|
|
176
|
+
,reflectionSamplerSampler: sampler
|
|
177
|
+
,reflectionCoords: vec2f
|
|
178
|
+
#endif
|
|
179
|
+
#ifdef REALTIME_FILTERING
|
|
180
|
+
,reflectionFilteringInfo: vec2f
|
|
181
|
+
#endif
|
|
182
|
+
)->vec3f {var environmentRadiance: vec4f=vec4f(0.f,0.f,0.f,0.f);
|
|
183
|
+
#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
|
|
184
|
+
var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,alphaG,geoInfo.NdotVUnclamped);
|
|
185
|
+
#elif defined(LINEARSPECULARREFLECTION)
|
|
186
|
+
var reflectionLOD: f32=getLinearLodFromRoughness(reflectionMicrosurfaceInfos.x,roughness);
|
|
187
|
+
#else
|
|
188
|
+
var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,alphaG);
|
|
189
|
+
#endif
|
|
190
|
+
reflectionLOD=reflectionLOD*reflectionMicrosurfaceInfos.y+reflectionMicrosurfaceInfos.z;
|
|
191
|
+
#ifdef REALTIME_FILTERING
|
|
192
|
+
environmentRadiance=vec4f(radiance(alphaG,reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionFilteringInfo),1.0f);
|
|
193
|
+
#else
|
|
194
|
+
environmentRadiance=textureSampleLevel(reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionLOD);
|
|
195
|
+
#endif
|
|
196
|
+
var envRadiance: vec3f=environmentRadiance.rgb;
|
|
197
|
+
#ifdef RGBDREFLECTION
|
|
198
|
+
envRadiance=fromRGBD(environmentRadiance);
|
|
199
|
+
#endif
|
|
200
|
+
#ifdef GAMMAREFLECTION
|
|
201
|
+
envRadiance=toLinearSpaceVec3(environmentRadiance.rgb);
|
|
202
|
+
#endif
|
|
203
|
+
envRadiance*=reflectionInfos.x;return envRadiance;}
|
|
204
|
+
#if defined(ANISOTROPIC)
|
|
205
|
+
fn sampleRadianceAnisotropic(
|
|
206
|
+
alphaG: f32
|
|
207
|
+
,reflectionMicrosurfaceInfos: vec3f
|
|
208
|
+
,reflectionInfos: vec2f
|
|
209
|
+
,geoInfo: geometryInfoAnisoOutParams
|
|
210
|
+
,normalW: vec3f
|
|
211
|
+
,viewDirectionW: vec3f
|
|
212
|
+
,positionW: vec3f
|
|
213
|
+
,noise: vec3f
|
|
214
|
+
,isRefraction: bool
|
|
215
|
+
,ior: f32
|
|
216
|
+
#ifdef REFLECTIONMAP_3D
|
|
217
|
+
,reflectionSampler: texture_cube<f32>
|
|
218
|
+
,reflectionSamplerSampler: sampler
|
|
219
|
+
#else
|
|
220
|
+
,reflectionSampler: texture_2d<f32>
|
|
221
|
+
,reflectionSamplerSampler: sampler
|
|
222
|
+
#endif
|
|
223
|
+
#ifdef REALTIME_FILTERING
|
|
224
|
+
,reflectionFilteringInfo: vec2f
|
|
225
|
+
#endif
|
|
226
|
+
)->vec3f {var environmentRadiance: vec4f=vec4f(0.f,0.f,0.f,0.f);let alphaT=alphaG*sqrt(2.0f/(1.0f+(1.0f-geoInfo.anisotropy)*(1.0f-geoInfo.anisotropy)));let alphaB=(1.0f-geoInfo.anisotropy)*alphaT;let modifiedAlphaG=alphaB;
|
|
227
|
+
#if defined(LODINREFLECTIONALPHA) && !defined(REFLECTIONMAP_SKYBOX)
|
|
228
|
+
var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,modifiedAlphaG,geoInfo.NdotVUnclamped);
|
|
229
|
+
#elif defined(LINEARSPECULARREFLECTION)
|
|
230
|
+
var reflectionLOD: f32=getLinearLodFromRoughness(reflectionMicrosurfaceInfos.x,roughness);
|
|
231
|
+
#else
|
|
232
|
+
var reflectionLOD: f32=getLodFromAlphaG(reflectionMicrosurfaceInfos.x,modifiedAlphaG);
|
|
233
|
+
#endif
|
|
234
|
+
reflectionLOD=reflectionLOD*reflectionMicrosurfaceInfos.y+reflectionMicrosurfaceInfos.z;
|
|
235
|
+
#ifdef REALTIME_FILTERING
|
|
236
|
+
var view=(uniforms.reflectionMatrix*vec4f(viewDirectionW,0.0f)).xyz;var tangent=(uniforms.reflectionMatrix*vec4f(geoInfo.anisotropicTangent,0.0f)).xyz;var bitangent=(uniforms.reflectionMatrix*vec4f(geoInfo.anisotropicBitangent,0.0f)).xyz;var normal=(uniforms.reflectionMatrix*vec4f(normalW,0.0f)).xyz;
|
|
237
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
238
|
+
view.z*=-1.0f;tangent.z*=-1.0f;bitangent.z*=-1.0f;normal.z*=-1.0f;
|
|
239
|
+
#endif
|
|
240
|
+
environmentRadiance =
|
|
241
|
+
vec4f(radianceAnisotropic(alphaT,alphaB,reflectionSampler,reflectionSamplerSampler,
|
|
242
|
+
view,tangent,
|
|
243
|
+
bitangent,normal,
|
|
244
|
+
reflectionFilteringInfo,noise.xy,isRefraction,ior),
|
|
245
|
+
1.0f);
|
|
246
|
+
#else
|
|
247
|
+
const samples: i32=16;var radianceSample=vec4f(0.0);var accumulatedRadiance=vec3f(0.0);var reflectionCoords=vec3f(0.0);var sample_weight=0.0f;var total_weight=0.0f;let step=1.0f/f32(max(samples-1,1));for (var i: i32=0; i<samples; i++) {var t: f32=mix(-1.0,1.0,f32(i)*step);t+=step*2.0*noise.x;sample_weight=max(1.0-abs(t),0.001);sample_weight*=sample_weight;t*=min(4.0*alphaT*geoInfo.anisotropy,1.0);var bentNormal: vec3f;if (t<0.0) {let blend: f32=t+1.0;bentNormal=normalize(mix(-geoInfo.anisotropicTangent,normalW,blend));} else if (t>0.0) {let blend: f32=t;bentNormal=normalize(mix(normalW,geoInfo.anisotropicTangent,blend));} else {bentNormal=normalW;}
|
|
248
|
+
if (isRefraction) {reflectionCoords=double_refract(-viewDirectionW,bentNormal,ior);} else {reflectionCoords=reflect(-viewDirectionW,bentNormal);}
|
|
249
|
+
reflectionCoords=(uniforms.reflectionMatrix*vec4f(reflectionCoords,0.f)).xyz;
|
|
250
|
+
#ifdef REFLECTIONMAP_OPPOSITEZ
|
|
251
|
+
reflectionCoords.z*=-1.0f;
|
|
252
|
+
#endif
|
|
253
|
+
radianceSample=textureSampleLevel(reflectionSampler,reflectionSamplerSampler,reflectionCoords,reflectionLOD);
|
|
254
|
+
#ifdef RGBDREFLECTION
|
|
255
|
+
accumulatedRadiance+=vec3f(sample_weight)*fromRGBD(radianceSample);
|
|
256
|
+
#elif defined(GAMMAREFLECTION)
|
|
257
|
+
accumulatedRadiance+=vec3f(sample_weight)*toLinearSpaceVec3(radianceSample.rgb);
|
|
258
|
+
#else
|
|
259
|
+
accumulatedRadiance+=vec3f(sample_weight)*radianceSample.rgb;
|
|
260
|
+
#endif
|
|
261
|
+
total_weight+=sample_weight;}
|
|
262
|
+
environmentRadiance=vec4f(accumulatedRadiance/vec3f(total_weight),1.0f);
|
|
263
|
+
#endif
|
|
264
|
+
environmentRadiance=vec4f(environmentRadiance.rgb*reflectionInfos.xxx,environmentRadiance.a);return environmentRadiance.rgb;}
|
|
265
|
+
#endif
|
|
266
|
+
#endif
|
|
267
|
+
#ifdef ENVIRONMENTBRDF
|
|
268
|
+
fn computeDielectricIblFresnel(reflectance: ReflectanceParams,environmentBrdf: vec3f)->f32
|
|
269
|
+
{let dielectricIblFresnel: f32=getReflectanceFromBRDFWithEnvLookup(vec3f(reflectance.F0),vec3f(reflectance.F90),environmentBrdf).r;let dielectricECF: f32=1.0+reflectance.F0*(1.0/environmentBrdf.y-1.0);return clamp(dielectricIblFresnel*dielectricECF,0.0,1.0);}
|
|
270
|
+
fn computeConductorIblFresnel(reflectance: ReflectanceParams,environmentBrdf: vec3f)->vec3f
|
|
271
|
+
{
|
|
272
|
+
#if (CONDUCTOR_SPECULAR_MODEL==CONDUCTOR_SPECULAR_MODEL_OPENPBR)
|
|
273
|
+
let openPBRBrdf: vec3f=vec3f(environmentBrdf.xy,environmentBrdf.z/BRDF_Z_SCALE);let b: vec3f =getF82B(reflectance.coloredF0,reflectance.coloredF90);let E_F82: vec3f=getF82DirectionalAlbedo(reflectance.coloredF0,vec3f(1.0),b,openPBRBrdf);let F_avg: vec3f=getF82AverageFresnel(reflectance.coloredF0,b);let ECF: vec3f =vec3f(1.0)+F_avg*(vec3f(1.0)/openPBRBrdf.y-vec3f(1.0));return clamp(E_F82*ECF,vec3f(0.0),vec3f(1.0));
|
|
274
|
+
#else
|
|
275
|
+
return getReflectanceFromBRDFLookup(reflectance.coloredF0,reflectance.coloredF90,environmentBrdf);
|
|
276
|
+
#endif
|
|
277
|
+
}
|
|
278
|
+
#endif
|
|
279
|
+
`;e.IncludesShadersStoreWGSL[i]||(e.IncludesShadersStoreWGSL[i]=c);const v={name:i,shader:c},o="openpbrSubsurfaceLayerData",s=`var subsurface_weight: f32=uniforms.vSubsurfaceWeight;var subsurface_color: vec3f=uniforms.vSubsurfaceColor.rgb;var subsurface_radius: f32=uniforms.vSubsurfaceRadius;var subsurface_radius_scale: vec3f=uniforms.vSubsurfaceRadiusScale;var subsurface_scatter_anisotropy: f32=clamp(uniforms.vSubsurfaceScatterAnisotropy,-0.9999f,0.9999f);
|
|
280
|
+
#ifdef SUBSURFACE_WEIGHT
|
|
281
|
+
let subsurfaceWeightFromTexture: vec4f=TEXRD(subsurfaceWeightSampler,subsurfaceWeightSamplerSampler,fragmentInputs.vSubsurfaceWeightUV+uvOffset);
|
|
282
|
+
#endif
|
|
283
|
+
#ifdef SUBSURFACE_COLOR
|
|
284
|
+
let subsurfaceColorFromTexture: vec4f=TEXRD(subsurfaceColorSampler,subsurfaceColorSamplerSampler,fragmentInputs.vSubsurfaceColorUV+uvOffset);
|
|
285
|
+
#endif
|
|
286
|
+
#ifdef SUBSURFACE_RADIUS_SCALE
|
|
287
|
+
let subsurfaceRadiusScaleFromTexture: vec4f=TEXRD(subsurfaceRadiusScaleSampler,subsurfaceRadiusScaleSamplerSampler,fragmentInputs.vSubsurfaceRadiusScaleUV+uvOffset);
|
|
288
|
+
#endif
|
|
289
|
+
#ifdef SUBSURFACE_WEIGHT
|
|
290
|
+
#ifdef SUBSURFACE_WEIGHT_FROM_TEXTURE_ALPHA
|
|
291
|
+
subsurface_weight*=subsurfaceWeightFromTexture.a;
|
|
292
|
+
#else
|
|
293
|
+
subsurface_weight*=subsurfaceWeightFromTexture.r;
|
|
294
|
+
#endif
|
|
295
|
+
#endif
|
|
296
|
+
#ifdef SUBSURFACE_COLOR
|
|
297
|
+
#ifdef SUBSURFACE_COLOR_GAMMA
|
|
298
|
+
subsurface_color*=toLinearSpaceVec3(subsurfaceColorFromTexture.rgb);
|
|
299
|
+
#else
|
|
300
|
+
subsurface_color*=subsurfaceColorFromTexture.rgb;
|
|
301
|
+
#endif
|
|
302
|
+
subsurface_color*=uniforms.vSubsurfaceColorInfos.y;
|
|
303
|
+
#endif
|
|
304
|
+
#ifdef SUBSURFACE_RADIUS_SCALE
|
|
305
|
+
subsurface_radius_scale*=subsurfaceRadiusScaleFromTexture.rgb;
|
|
306
|
+
#endif
|
|
307
|
+
`;e.IncludesShadersStoreWGSL[o]||(e.IncludesShadersStoreWGSL[o]=s);const I={name:o,shader:s},a="openpbrTransmissionLayerData",l=`var transmission_weight: f32=uniforms.vTransmissionWeight;var transmission_color: vec3f=uniforms.vTransmissionColor.rgb;var transmission_depth: f32=uniforms.vTransmissionDepth;var transmission_scatter: vec3f=uniforms.vTransmissionScatter.rgb;var transmission_scatter_anisotropy: f32=clamp(uniforms.vTransmissionScatterAnisotropy,-0.9999f,0.9999f);var transmission_dispersion_scale: f32=uniforms.vTransmissionDispersionScale;var transmission_dispersion_abbe_number: f32=uniforms.vTransmissionDispersionAbbeNumber;
|
|
308
|
+
#ifdef TRANSMISSION_WEIGHT
|
|
309
|
+
let transmissionWeightFromTexture: vec4f=TEXRD(transmissionWeightSampler,transmissionWeightSamplerSampler,fragmentInputs.vTransmissionWeightUV+uvOffset);
|
|
310
|
+
#endif
|
|
311
|
+
#ifdef TRANSMISSION_COLOR
|
|
312
|
+
let transmissionColorFromTexture: vec4f=TEXRD(transmissionColorSampler,transmissionColorSamplerSampler,fragmentInputs.vTransmissionColorUV+uvOffset);
|
|
313
|
+
#endif
|
|
314
|
+
#ifdef TRANSMISSION_DEPTH
|
|
315
|
+
let transmissionDepthFromTexture: vec4f=TEXRD(transmissionDepthSampler,transmissionDepthSamplerSampler,fragmentInputs.vTransmissionDepthUV+uvOffset);
|
|
316
|
+
#endif
|
|
317
|
+
#ifdef TRANSMISSION_SCATTER
|
|
318
|
+
let transmissionScatterFromTexture: vec4f=TEXRD(transmissionScatterSampler,transmissionScatterSamplerSampler,fragmentInputs.vTransmissionScatterUV+uvOffset);
|
|
319
|
+
#endif
|
|
320
|
+
#ifdef TRANSMISSION_DISPERSION_SCALE
|
|
321
|
+
let transmissionDispersionScaleFromTexture: vec4f=TEXRD(transmissionDispersionScaleSampler,transmissionDispersionScaleSamplerSampler,fragmentInputs.vTransmissionDispersionScaleUV+uvOffset);
|
|
322
|
+
#endif
|
|
323
|
+
#ifdef TRANSMISSION_WEIGHT
|
|
324
|
+
transmission_weight*=transmissionWeightFromTexture.r;
|
|
325
|
+
#endif
|
|
326
|
+
#ifdef TRANSMISSION_COLOR
|
|
327
|
+
#ifdef TRANSMISSION_COLOR_GAMMA
|
|
328
|
+
transmission_color*=toLinearSpaceVec3(transmissionColorFromTexture.rgb);
|
|
329
|
+
#else
|
|
330
|
+
transmission_color*=transmissionColorFromTexture.rgb;
|
|
331
|
+
#endif
|
|
332
|
+
transmission_color*=uniforms.vTransmissionColorInfos.y;
|
|
333
|
+
#endif
|
|
334
|
+
#ifdef TRANSMISSION_DEPTH
|
|
335
|
+
transmission_depth*=transmissionDepthFromTexture.r;
|
|
336
|
+
#endif
|
|
337
|
+
#ifdef TRANSMISSION_SCATTER
|
|
338
|
+
transmission_scatter*=transmissionScatterFromTexture.rgb;
|
|
339
|
+
#endif
|
|
340
|
+
#ifdef TRANSMISSION_DISPERSION_SCALE
|
|
341
|
+
transmission_dispersion_scale*=transmissionDispersionScaleFromTexture.r;
|
|
342
|
+
#endif
|
|
343
|
+
`;e.IncludesShadersStoreWGSL[a]||(e.IncludesShadersStoreWGSL[a]=l);const S={name:a,shader:l};export{u as a,v as b,I as c,S as d,m as o};
|