@3driseai/3drise-viewer 0.1.6 → 0.1.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/Clouds.d.ts.map +1 -1
- package/dist/components/Clouds.js +0 -1
- package/dist/components/CloudsGenerator.d.ts +32 -0
- package/dist/components/CloudsGenerator.d.ts.map +1 -0
- package/dist/components/CloudsGenerator.js +58 -0
- package/dist/components/CustomPrimitive.js +1 -1
- package/dist/components/EnvironmentManager.d.ts +47 -5
- package/dist/components/EnvironmentManager.d.ts.map +1 -1
- package/dist/components/EnvironmentManager.js +35 -66
- package/dist/components/GeometryShape.d.ts.map +1 -1
- package/dist/components/GeometryShape.js +19 -3
- package/dist/components/HdrEnvironment.d.ts +20 -0
- package/dist/components/HdrEnvironment.d.ts.map +1 -0
- package/dist/components/HdrEnvironment.js +44 -0
- package/dist/components/LandscapeBuilder.d.ts +23 -0
- package/dist/components/LandscapeBuilder.d.ts.map +1 -0
- package/dist/components/LandscapeBuilder.js +25 -0
- package/dist/components/LandscapeObject.d.ts +24 -0
- package/dist/components/LandscapeObject.d.ts.map +1 -0
- package/dist/components/LandscapeObject.js +27 -0
- package/dist/components/ObjectNode.d.ts.map +1 -1
- package/dist/components/ObjectNode.js +11 -9
- package/dist/components/OceanBuilder.d.ts +35 -0
- package/dist/components/OceanBuilder.d.ts.map +1 -0
- package/dist/components/OceanBuilder.js +53 -0
- package/dist/components/ParticlesR3f.d.ts.map +1 -1
- package/dist/components/ParticlesR3f.js +63 -12
- package/dist/components/PointCloud.d.ts.map +1 -1
- package/dist/components/PointCloud.js +50 -10
- package/dist/components/SceneBuilder.d.ts.map +1 -1
- package/dist/components/SkySystem.d.ts +27 -6
- package/dist/components/SkySystem.d.ts.map +1 -1
- package/dist/components/SkySystem.js +6 -5
- package/dist/components/SunLight.d.ts.map +1 -1
- package/dist/components/SunLight.js +4 -1
- package/dist/components/TerrainBuilder.d.ts +30 -0
- package/dist/components/TerrainBuilder.d.ts.map +1 -0
- package/dist/components/TerrainBuilder.js +44 -0
- package/dist/components/index.d.ts +17 -1
- package/dist/components/index.d.ts.map +1 -1
- package/dist/components/index.js +10 -0
- package/dist/components/landscape/LandscapeMesh.d.ts +18 -0
- package/dist/components/landscape/LandscapeMesh.d.ts.map +1 -0
- package/dist/components/landscape/LandscapeMesh.js +278 -0
- package/dist/components/landscape/index.d.ts +3 -0
- package/dist/components/landscape/index.d.ts.map +1 -0
- package/dist/components/landscape/index.js +1 -0
- package/dist/components/landscape/types.d.ts +13 -0
- package/dist/components/landscape/types.d.ts.map +1 -0
- package/dist/components/landscape/types.js +1 -0
- package/dist/components/terrain/Canyon.d.ts +23 -0
- package/dist/components/terrain/Canyon.d.ts.map +1 -0
- package/dist/components/terrain/Canyon.js +29 -0
- package/dist/components/terrain/Dunes.d.ts +22 -0
- package/dist/components/terrain/Dunes.d.ts.map +1 -0
- package/dist/components/terrain/Dunes.js +25 -0
- package/dist/components/terrain/Hills.d.ts +17 -0
- package/dist/components/terrain/Hills.d.ts.map +1 -0
- package/dist/components/terrain/Hills.js +20 -0
- package/dist/components/terrain/Mountains.d.ts +19 -0
- package/dist/components/terrain/Mountains.d.ts.map +1 -0
- package/dist/components/terrain/Mountains.js +22 -0
- package/dist/components/terrain/TerrainSurface.d.ts +22 -0
- package/dist/components/terrain/TerrainSurface.d.ts.map +1 -0
- package/dist/components/terrain/TerrainSurface.js +94 -0
- package/dist/components/terrain/index.d.ts +7 -0
- package/dist/components/terrain/index.d.ts.map +1 -0
- package/dist/components/terrain/index.js +7 -0
- package/dist/components/terrain/types.d.ts +17 -0
- package/dist/components/terrain/types.d.ts.map +1 -0
- package/dist/components/terrain/types.js +1 -0
- package/dist/components/volumetricClouds/Cirrus.d.ts +14 -0
- package/dist/components/volumetricClouds/Cirrus.d.ts.map +1 -0
- package/dist/components/volumetricClouds/Cirrus.js +13 -0
- package/dist/components/volumetricClouds/Cumulonimbus.d.ts +17 -0
- package/dist/components/volumetricClouds/Cumulonimbus.d.ts.map +1 -0
- package/dist/components/volumetricClouds/Cumulonimbus.js +20 -0
- package/dist/components/volumetricClouds/Cumulus.d.ts +14 -0
- package/dist/components/volumetricClouds/Cumulus.d.ts.map +1 -0
- package/dist/components/volumetricClouds/Cumulus.js +17 -0
- package/dist/components/volumetricClouds/Stratocumulus.d.ts +12 -0
- package/dist/components/volumetricClouds/Stratocumulus.d.ts.map +1 -0
- package/dist/components/volumetricClouds/Stratocumulus.js +16 -0
- package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts +42 -0
- package/dist/components/volumetricClouds/VolumetricCloudsPass.d.ts.map +1 -0
- package/dist/components/volumetricClouds/VolumetricCloudsPass.js +298 -0
- package/dist/components/volumetricClouds/index.d.ts +8 -0
- package/dist/components/volumetricClouds/index.d.ts.map +1 -0
- package/dist/components/volumetricClouds/index.js +7 -0
- package/dist/components/volumetricClouds/types.d.ts +17 -0
- package/dist/components/volumetricClouds/types.d.ts.map +1 -0
- package/dist/components/volumetricClouds/types.js +1 -0
- package/dist/components/water/Host.d.ts +12 -0
- package/dist/components/water/Host.d.ts.map +1 -0
- package/dist/components/water/Host.js +12 -0
- package/dist/components/water/Lake.d.ts +18 -0
- package/dist/components/water/Lake.d.ts.map +1 -0
- package/dist/components/water/Lake.js +21 -0
- package/dist/components/water/OceanSurface.d.ts +27 -0
- package/dist/components/water/OceanSurface.d.ts.map +1 -0
- package/dist/components/water/OceanSurface.js +60 -0
- package/dist/components/water/Sea.d.ts +18 -0
- package/dist/components/water/Sea.d.ts.map +1 -0
- package/dist/components/water/Sea.js +17 -0
- package/dist/components/water/Shore.d.ts +16 -0
- package/dist/components/water/Shore.d.ts.map +1 -0
- package/dist/components/water/Shore.js +15 -0
- package/dist/components/water/Storm.d.ts +14 -0
- package/dist/components/water/Storm.d.ts.map +1 -0
- package/dist/components/water/Storm.js +13 -0
- package/dist/components/water/WaterBody.d.ts +31 -0
- package/dist/components/water/WaterBody.d.ts.map +1 -0
- package/dist/components/water/WaterBody.js +76 -0
- package/dist/components/water/index.d.ts +9 -0
- package/dist/components/water/index.d.ts.map +1 -0
- package/dist/components/water/index.js +11 -0
- package/dist/components/water/types.d.ts +20 -0
- package/dist/components/water/types.d.ts.map +1 -0
- package/dist/components/water/types.js +1 -0
- package/dist/constants.d.ts +1 -0
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +15 -0
- package/dist/hooks/index.d.ts +24 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +12 -0
- package/dist/hooks/useClipmap.d.ts +71 -0
- package/dist/hooks/useClipmap.d.ts.map +1 -0
- package/dist/hooks/useClipmap.js +81 -0
- package/dist/hooks/useCloudLive.d.ts +29 -0
- package/dist/hooks/useCloudLive.d.ts.map +1 -0
- package/dist/hooks/useCloudLive.js +43 -0
- package/dist/hooks/useCloudNoise.d.ts +28 -0
- package/dist/hooks/useCloudNoise.d.ts.map +1 -0
- package/dist/hooks/useCloudNoise.js +128 -0
- package/dist/hooks/useCloudSun.d.ts +49 -0
- package/dist/hooks/useCloudSun.d.ts.map +1 -0
- package/dist/hooks/useCloudSun.js +84 -0
- package/dist/hooks/useCubeCamera.d.ts +27 -9
- package/dist/hooks/useCubeCamera.d.ts.map +1 -1
- package/dist/hooks/useCubeCamera.js +28 -70
- package/dist/hooks/useEnvironmentProbe.d.ts +32 -0
- package/dist/hooks/useEnvironmentProbe.d.ts.map +1 -0
- package/dist/hooks/useEnvironmentProbe.js +35 -0
- package/dist/hooks/useFrameRenderer.d.ts +15 -0
- package/dist/hooks/useFrameRenderer.d.ts.map +1 -0
- package/dist/hooks/useFrameRenderer.js +23 -0
- package/dist/hooks/useLandscapeLive.d.ts +29 -0
- package/dist/hooks/useLandscapeLive.d.ts.map +1 -0
- package/dist/hooks/useLandscapeLive.js +41 -0
- package/dist/hooks/useLandscapeMaps.d.ts +32 -0
- package/dist/hooks/useLandscapeMaps.d.ts.map +1 -0
- package/dist/hooks/useLandscapeMaps.js +138 -0
- package/dist/hooks/useMaterialApplication.d.ts.map +1 -1
- package/dist/hooks/useMaterialApplication.js +2 -3
- package/dist/hooks/useMaterialOptions.d.ts +2 -2
- package/dist/hooks/useMaterialOptions.d.ts.map +1 -1
- package/dist/hooks/useMaterialOptions.js +13 -31
- package/dist/hooks/useObjectEdges.d.ts.map +1 -1
- package/dist/hooks/useObjectEdges.js +3 -49
- package/dist/hooks/useOceanLive.d.ts +29 -0
- package/dist/hooks/useOceanLive.d.ts.map +1 -0
- package/dist/hooks/useOceanLive.js +38 -0
- package/dist/hooks/useOceanMaterial.d.ts +39 -0
- package/dist/hooks/useOceanMaterial.d.ts.map +1 -0
- package/dist/hooks/useOceanMaterial.js +65 -0
- package/dist/hooks/useTerrainClipmap.d.ts +12 -0
- package/dist/hooks/useTerrainClipmap.d.ts.map +1 -0
- package/dist/hooks/useTerrainClipmap.js +10 -0
- package/dist/hooks/useTerrainLive.d.ts +34 -0
- package/dist/hooks/useTerrainLive.d.ts.map +1 -0
- package/dist/hooks/useTerrainLive.js +45 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +16 -0
- package/dist/presets/landscapePresets.d.ts +60 -0
- package/dist/presets/landscapePresets.d.ts.map +1 -0
- package/dist/presets/landscapePresets.js +194 -0
- package/dist/presets/landscapeTypes.d.ts +195 -0
- package/dist/presets/landscapeTypes.d.ts.map +1 -0
- package/dist/presets/landscapeTypes.js +315 -0
- package/dist/presets/oceanSurfacePresets.d.ts +33 -0
- package/dist/presets/oceanSurfacePresets.d.ts.map +1 -0
- package/dist/presets/oceanSurfacePresets.js +245 -0
- package/dist/presets/terrainPresets.d.ts +28 -0
- package/dist/presets/terrainPresets.d.ts.map +1 -0
- package/dist/presets/terrainPresets.js +293 -0
- package/dist/presets/volumetricCloudPresets.d.ts +38 -0
- package/dist/presets/volumetricCloudPresets.d.ts.map +1 -0
- package/dist/presets/volumetricCloudPresets.js +480 -0
- package/dist/shaders/clouds/CirrusMaterial.d.ts +84 -0
- package/dist/shaders/clouds/CirrusMaterial.d.ts.map +1 -0
- package/dist/shaders/clouds/CirrusMaterial.js +167 -0
- package/dist/shaders/clouds/CloudCompositeMaterial.d.ts +20 -0
- package/dist/shaders/clouds/CloudCompositeMaterial.d.ts.map +1 -0
- package/dist/shaders/clouds/CloudCompositeMaterial.js +82 -0
- package/dist/shaders/clouds/CloudResolveMaterial.d.ts +22 -0
- package/dist/shaders/clouds/CloudResolveMaterial.d.ts.map +1 -0
- package/dist/shaders/clouds/CloudResolveMaterial.js +77 -0
- package/dist/shaders/clouds/CloudVolumeMaterial.d.ts +143 -0
- package/dist/shaders/clouds/CloudVolumeMaterial.d.ts.map +1 -0
- package/dist/shaders/clouds/CloudVolumeMaterial.js +249 -0
- package/dist/shaders/clouds/SkyBackgroundMaterial.d.ts +21 -0
- package/dist/shaders/clouds/SkyBackgroundMaterial.d.ts.map +1 -0
- package/dist/shaders/clouds/SkyBackgroundMaterial.js +42 -0
- package/dist/shaders/glsl/cloudCore.glsl.d.ts +24 -0
- package/dist/shaders/glsl/cloudCore.glsl.d.ts.map +1 -0
- package/dist/shaders/glsl/cloudCore.glsl.js +348 -0
- package/dist/shaders/glsl/landscapeCore.glsl.d.ts +49 -0
- package/dist/shaders/glsl/landscapeCore.glsl.d.ts.map +1 -0
- package/dist/shaders/glsl/landscapeCore.glsl.js +518 -0
- package/dist/shaders/glsl/noiseBake.glsl.d.ts +30 -0
- package/dist/shaders/glsl/noiseBake.glsl.d.ts.map +1 -0
- package/dist/shaders/glsl/noiseBake.glsl.js +164 -0
- package/dist/shaders/glsl/oceanCore.glsl.d.ts +52 -0
- package/dist/shaders/glsl/oceanCore.glsl.d.ts.map +1 -0
- package/dist/shaders/glsl/oceanCore.glsl.js +421 -0
- package/dist/shaders/glsl/terrainCore.glsl.d.ts +78 -0
- package/dist/shaders/glsl/terrainCore.glsl.d.ts.map +1 -0
- package/dist/shaders/glsl/terrainCore.glsl.js +625 -0
- package/dist/shaders/landscape/LandscapeMaterial.d.ts +73 -0
- package/dist/shaders/landscape/LandscapeMaterial.d.ts.map +1 -0
- package/dist/shaders/landscape/LandscapeMaterial.js +136 -0
- package/dist/shaders/ocean/OceanSurfaceMaterial.d.ts +57 -0
- package/dist/shaders/ocean/OceanSurfaceMaterial.d.ts.map +1 -0
- package/dist/shaders/ocean/OceanSurfaceMaterial.js +268 -0
- package/dist/shaders/terrain/TerrainMaterial.d.ts +80 -0
- package/dist/shaders/terrain/TerrainMaterial.d.ts.map +1 -0
- package/dist/shaders/terrain/TerrainMaterial.js +291 -0
- package/dist/types/cloudConfigs.d.ts +244 -0
- package/dist/types/cloudConfigs.d.ts.map +1 -0
- package/dist/types/cloudConfigs.js +282 -0
- package/dist/types/index.d.ts +8 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/index.js +4 -1
- package/dist/types/landscapeConfigs.d.ts +218 -0
- package/dist/types/landscapeConfigs.d.ts.map +1 -0
- package/dist/types/landscapeConfigs.js +256 -0
- package/dist/types/oceanConfigs.d.ts +290 -0
- package/dist/types/oceanConfigs.d.ts.map +1 -0
- package/dist/types/oceanConfigs.js +380 -0
- package/dist/types/terrainConfigs.d.ts +251 -0
- package/dist/types/terrainConfigs.d.ts.map +1 -0
- package/dist/types/terrainConfigs.js +292 -0
- package/dist/utils/cloudUniforms.d.ts +14 -0
- package/dist/utils/cloudUniforms.d.ts.map +1 -0
- package/dist/utils/cloudUniforms.js +122 -0
- package/dist/utils/frameRenderer.d.ts +33 -0
- package/dist/utils/frameRenderer.d.ts.map +1 -0
- package/dist/utils/frameRenderer.js +24 -0
- package/dist/utils/handleCloudsAnimations.d.ts +16 -0
- package/dist/utils/handleCloudsAnimations.d.ts.map +1 -0
- package/dist/utils/handleCloudsAnimations.js +64 -0
- package/dist/utils/landscapeGeometry.d.ts +61 -0
- package/dist/utils/landscapeGeometry.d.ts.map +1 -0
- package/dist/utils/landscapeGeometry.js +126 -0
- package/dist/utils/landscapeHeight.d.ts +44 -0
- package/dist/utils/landscapeHeight.d.ts.map +1 -0
- package/dist/utils/landscapeHeight.js +65 -0
- package/dist/utils/landscapeTextures.d.ts +94 -0
- package/dist/utils/landscapeTextures.d.ts.map +1 -0
- package/dist/utils/landscapeTextures.js +290 -0
- package/dist/utils/landscapeUniforms.d.ts +20 -0
- package/dist/utils/landscapeUniforms.d.ts.map +1 -0
- package/dist/utils/landscapeUniforms.js +61 -0
- package/dist/utils/oceanUniforms.d.ts +47 -0
- package/dist/utils/oceanUniforms.d.ts.map +1 -0
- package/dist/utils/oceanUniforms.js +216 -0
- package/dist/utils/pointsMaterialOwnership.d.ts +9 -0
- package/dist/utils/pointsMaterialOwnership.d.ts.map +1 -0
- package/dist/utils/pointsMaterialOwnership.js +14 -0
- package/dist/utils/rtin.d.ts +63 -0
- package/dist/utils/rtin.d.ts.map +1 -0
- package/dist/utils/rtin.js +202 -0
- package/dist/utils/terrainUniforms.d.ts +14 -0
- package/dist/utils/terrainUniforms.d.ts.map +1 -0
- package/dist/utils/terrainUniforms.js +196 -0
- package/package.json +2 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OceanBuilder.d.ts","sourceRoot":"","sources":["../../src/components/OceanBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAOhE,MAAM,WAAW,iBAAkB,SAAQ,gBAAgB;IACvD;;uEAEmE;IACnE,QAAQ,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;IAC9C,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,2EAA2E;IAC3E,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAmC7C,CAAC;AAEF,eAAe,YAAY,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { normalizeOcean, normalizeOceanQuality } from '../types/oceanConfigs.js';
|
|
4
|
+
import Sea from './water/Sea.js';
|
|
5
|
+
import Lake from './water/Lake.js';
|
|
6
|
+
import Storm from './water/Storm.js';
|
|
7
|
+
import Shore from './water/Shore.js';
|
|
8
|
+
/**
|
|
9
|
+
* Picks the water body for the scene.
|
|
10
|
+
*
|
|
11
|
+
* The counterpart to `CloudsGenerator` and `TerrainBuilder`, and deliberately the
|
|
12
|
+
* same shape: switch on the model field, mount exactly one renderer, normalise
|
|
13
|
+
* each block against its own source so editing one cannot invalidate the other.
|
|
14
|
+
*
|
|
15
|
+
* ## One place it differs from the terrain, on purpose
|
|
16
|
+
*
|
|
17
|
+
* `normalizeTerrain` returns null for a blob in the retired shape, because a
|
|
18
|
+
* project saved before terrain existed never had ground and defaulting one in
|
|
19
|
+
* would give it a landscape it was never authored with. The ocean is the
|
|
20
|
+
* opposite case: the old ocean is a visible plane with a water material, so a
|
|
21
|
+
* project saved before this system very possibly HAD water, and returning null
|
|
22
|
+
* would delete it. A legacy blob is therefore mapped — its material variant onto
|
|
23
|
+
* the nearest type, its plane size onto the host, its Y onto the sea level. See
|
|
24
|
+
* `normalizeOcean`.
|
|
25
|
+
*/
|
|
26
|
+
const OceanBuilder = ({ settings, skySettings, timeSettings, sunIntensity, onObjectReady, onObjectDispose, }) => {
|
|
27
|
+
// Each block against its own source. Merging them through one object would
|
|
28
|
+
// hand the renderer a new config every time a quality slider moved, which
|
|
29
|
+
// rebuilds every clipmap ring.
|
|
30
|
+
const config = useMemo(() => normalizeOcean(settings?.config, settings), [settings]);
|
|
31
|
+
const quality = useMemo(() => normalizeOceanQuality(settings?.quality), [settings?.quality]);
|
|
32
|
+
if (!config?.enabled)
|
|
33
|
+
return null;
|
|
34
|
+
const shared = {
|
|
35
|
+
config,
|
|
36
|
+
quality,
|
|
37
|
+
skySettings,
|
|
38
|
+
timeSettings,
|
|
39
|
+
sunIntensity,
|
|
40
|
+
id: settings?.id,
|
|
41
|
+
meshSettings: settings?.meshSettings,
|
|
42
|
+
onObjectReady,
|
|
43
|
+
onObjectDispose,
|
|
44
|
+
};
|
|
45
|
+
switch (config.waterType) {
|
|
46
|
+
case 'lake': return _jsx(Lake, { ...shared });
|
|
47
|
+
case 'storm': return _jsx(Storm, { ...shared });
|
|
48
|
+
case 'shore': return _jsx(Shore, { ...shared });
|
|
49
|
+
case 'sea':
|
|
50
|
+
default: return _jsx(Sea, { ...shared });
|
|
51
|
+
}
|
|
52
|
+
};
|
|
53
|
+
export default OceanBuilder;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ParticlesR3f.d.ts","sourceRoot":"","sources":["../../src/components/ParticlesR3f.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ParticlesR3f.d.ts","sourceRoot":"","sources":["../../src/components/ParticlesR3f.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7D,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG/D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,UAAU,iBAAkB,SAAQ,gBAAgB;IAChD,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChD;AAMD,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,CAoJ7C,CAAC;AACF,eAAe,YAAY,CAAC"}
|
|
@@ -5,8 +5,9 @@ import { useFrame } from '@react-three/fiber';
|
|
|
5
5
|
import { useParticlePositions } from '../hooks/useParticlePositions.js';
|
|
6
6
|
import { useParticlesColors } from '../hooks/useParticlesColors.js';
|
|
7
7
|
import { useParticlesTextures } from '../hooks/useParticlesTextures.js';
|
|
8
|
-
import { handleShapeAnimation, buildShaderEffectsMaterial, structureKey } from '@3driseai/3drise-core';
|
|
8
|
+
import { handleShapeAnimation, buildShaderEffectsMaterial, structureKey, SELF_OWNED_MATERIAL_KEY, applyVertexEffects, partitionShaderEffects, LOCAL_POINTER_SCALE } from '@3driseai/3drise-core';
|
|
9
9
|
import { update3driseShaderUniforms } from '../hooks/use3driseShader.js';
|
|
10
|
+
import { ownsShaderEffectsMaterial } from '../utils/pointsMaterialOwnership.js';
|
|
10
11
|
function normalizeEffects(raw) {
|
|
11
12
|
return Array.isArray(raw) ? raw : [];
|
|
12
13
|
}
|
|
@@ -71,42 +72,92 @@ const ParticlesR3f = ({ particlesSettings, duration = 1, transitionSettings, onO
|
|
|
71
72
|
const activeEffects = useMemo(() => normalizeEffects(particlesSettings.animations?.material?.shaderEffects), [particlesSettings.animations?.material?.shaderEffects]);
|
|
72
73
|
const pointerRadius = particlesSettings.animations?.material
|
|
73
74
|
?.shaderEffectsPointerRadius ?? 0.4;
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
75
|
+
// Position effects displace the geometry from the CPU and leave `.material`
|
|
76
|
+
// alone, so they compose with any material. Only the rest still need the
|
|
77
|
+
// shader shell — and only the shell takes ownership of `.material`.
|
|
78
|
+
const { position: positionEffects, shell: shellEffects } = useMemo(() => partitionShaderEffects(activeEffects), [activeEffects]);
|
|
79
|
+
const hasPositionEffects = positionEffects.some(effect => effect.enabled);
|
|
80
|
+
const effectsKey = useMemo(() => structureKey(shellEffects), [shellEffects]);
|
|
81
|
+
const ownsMaterial = ownsShaderEffectsMaterial(particlesSettings.materialSettings, shellEffects);
|
|
82
|
+
const material = useMemo(() => ownsMaterial ? buildShaderEffectsMaterial({
|
|
83
|
+
effects: shellEffects,
|
|
77
84
|
initialColor: color,
|
|
78
85
|
initialOpacity: opacity,
|
|
79
86
|
initialPointSize: pointSize,
|
|
80
87
|
initialParticleUVScale: particleUVScale,
|
|
81
88
|
initialPointerEffectRadius: pointerRadius,
|
|
82
|
-
}),
|
|
89
|
+
}) : null,
|
|
83
90
|
// Rebuild when the structural set of effects changes; not on parameter tweaks.
|
|
84
91
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
85
|
-
[effectsKey]);
|
|
92
|
+
[effectsKey, ownsMaterial]);
|
|
93
|
+
// With position effects on, the attribute gets its own buffer: the shape
|
|
94
|
+
// animation writes this frame's morph into it, and the effects displace from
|
|
95
|
+
// a snapshot of that into the same buffer. Without a separate buffer the
|
|
96
|
+
// shape animation would read back its own displaced output next frame.
|
|
97
|
+
const displayPositions = useMemo(() => (hasPositionEffects && basePositions.current
|
|
98
|
+
? new Float32Array(basePositions.current)
|
|
99
|
+
: basePositions.current), [hasPositionEffects, basePositions.current]);
|
|
100
|
+
const frameBaseRef = useRef(null);
|
|
86
101
|
useEffect(() => {
|
|
87
102
|
materialRef.current = material;
|
|
88
103
|
return () => {
|
|
89
|
-
material
|
|
104
|
+
material?.dispose();
|
|
90
105
|
};
|
|
91
106
|
}, [material]);
|
|
107
|
+
// Tell useMaterialApplication's traversal to leave this object alone while we
|
|
108
|
+
// own its material. Set imperatively rather than through a `userData` prop:
|
|
109
|
+
// R3F replaces the whole object on every render, which would wipe the
|
|
110
|
+
// applyTexture handle stashed above.
|
|
111
|
+
useEffect(() => {
|
|
112
|
+
const points = pointsRef.current;
|
|
113
|
+
if (!points)
|
|
114
|
+
return;
|
|
115
|
+
points.userData[SELF_OWNED_MATERIAL_KEY] = ownsMaterial;
|
|
116
|
+
return () => {
|
|
117
|
+
if (points.userData)
|
|
118
|
+
delete points.userData[SELF_OWNED_MATERIAL_KEY];
|
|
119
|
+
};
|
|
120
|
+
}, [ownsMaterial]);
|
|
92
121
|
useFrame((state, delta) => {
|
|
93
|
-
|
|
94
|
-
if (!mat || !pointsRef.current || !basePositions.current)
|
|
122
|
+
if (!pointsRef.current || !basePositions.current)
|
|
95
123
|
return;
|
|
124
|
+
const mat = materialRef.current;
|
|
96
125
|
if (meshSettings.visible) {
|
|
126
|
+
// Geometry animation is independent of who owns the material.
|
|
97
127
|
handleShapeAnimation(delta, speed, animationProgress, pointsRef, basePositions, targetPositions);
|
|
98
|
-
|
|
128
|
+
if (mat)
|
|
129
|
+
handleColorsAnimation(materialRef, delta, speed);
|
|
99
130
|
}
|
|
131
|
+
if (hasPositionEffects && displayPositions && displayPositions !== basePositions.current) {
|
|
132
|
+
if (!frameBaseRef.current || frameBaseRef.current.length !== displayPositions.length)
|
|
133
|
+
frameBaseRef.current = new Float32Array(displayPositions.length);
|
|
134
|
+
// Snapshot the shape-animated positions as this frame's baseline so
|
|
135
|
+
// the effects do not compound over time.
|
|
136
|
+
frameBaseRef.current.set(displayPositions);
|
|
137
|
+
const moved = applyVertexEffects(frameBaseRef.current, displayPositions, positionEffects, {
|
|
138
|
+
time: state.clock.getElapsedTime(),
|
|
139
|
+
pointerX: state.pointer.x * LOCAL_POINTER_SCALE,
|
|
140
|
+
pointerY: state.pointer.y * LOCAL_POINTER_SCALE,
|
|
141
|
+
pointerRadius: pointerRadius * LOCAL_POINTER_SCALE,
|
|
142
|
+
});
|
|
143
|
+
if (moved) {
|
|
144
|
+
const attribute = pointsRef.current.geometry?.attributes?.position;
|
|
145
|
+
if (attribute)
|
|
146
|
+
attribute.needsUpdate = true;
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
if (!mat)
|
|
150
|
+
return;
|
|
100
151
|
if (prevTexture.current)
|
|
101
152
|
mat.uniforms.uTexture.value = prevTexture.current;
|
|
102
153
|
if (currentTexture.current)
|
|
103
154
|
mat.uniforms.uTargetTexture.value = currentTexture.current;
|
|
104
155
|
mat.uniforms.uHasTexture.value = !!currentTexture.current;
|
|
105
156
|
handleTextureAnimation(materialRef, delta, speed);
|
|
106
|
-
update3driseShaderUniforms(mat.uniforms,
|
|
157
|
+
update3driseShaderUniforms(mat.uniforms, shellEffects, state.clock.getElapsedTime(), { x: state.pointer.x, y: state.pointer.y }, { pointerRadius });
|
|
107
158
|
});
|
|
108
159
|
if (!basePositions.current)
|
|
109
160
|
return null;
|
|
110
|
-
return (_jsxs("points", { name: name, ref: pointsRef, raycast: () => null, position: [0, 0, 0], rotation: [0, 0, 0], scale: [1, 1, 1], children: [_jsxs("bufferGeometry", { children: [_jsx("bufferAttribute", { attach: "attributes-position", count: basePositions.current.length / 3, array: basePositions.current, itemSize: 3, args: [basePositions.current, 3] }), uvs && (_jsx("bufferAttribute", { attach: "attributes-aUV", count: uvs.length / 2, array: uvs, itemSize: 2, args: [uvs, 2] }))] }), _jsx("primitive", { object: material, attach: "material" })] }));
|
|
161
|
+
return (_jsxs("points", { name: name, ref: pointsRef, raycast: () => null, position: [0, 0, 0], rotation: [0, 0, 0], scale: [1, 1, 1], children: [_jsxs("bufferGeometry", { children: [_jsx("bufferAttribute", { attach: "attributes-position", count: (displayPositions ?? basePositions.current).length / 3, array: displayPositions ?? basePositions.current, itemSize: 3, args: [displayPositions ?? basePositions.current, 3] }), uvs && (_jsx("bufferAttribute", { attach: "attributes-aUV", count: uvs.length / 2, array: uvs, itemSize: 2, args: [uvs, 2] }))] }), material && _jsx("primitive", { object: material, attach: "material" })] }));
|
|
111
162
|
};
|
|
112
163
|
export default ParticlesR3f;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PointCloud.d.ts","sourceRoot":"","sources":["../../src/components/PointCloud.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"PointCloud.d.ts","sourceRoot":"","sources":["../../src/components/PointCloud.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAO7D,OAAO,KAAK,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEhF,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,UAAU,eAAgB,SAAQ,gBAAgB;IAC9C,SAAS,EAAE,YAAY,CAAC;IACxB,gBAAgB,EAAE,gBAAgB,CAAC;IACnC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CACjC;AAyBD,QAAA,MAAM,UAAU,EAAE,KAAK,CAAC,EAAE,CAAC,eAAe,CA0HzC,CAAC;AACF,eAAe,UAAU,CAAC"}
|
|
@@ -4,7 +4,8 @@ import { useEffect, useMemo, useRef } from 'react';
|
|
|
4
4
|
import { useFrame } from '@react-three/fiber';
|
|
5
5
|
import { useParticlesColors } from '../hooks/useParticlesColors.js';
|
|
6
6
|
import { useParticlesTextures } from '../hooks/useParticlesTextures.js';
|
|
7
|
-
import { buildShaderEffectsMaterial, structureKey } from '@3driseai/3drise-core';
|
|
7
|
+
import { buildShaderEffectsMaterial, structureKey, SELF_OWNED_MATERIAL_KEY, applyVertexEffects, partitionShaderEffects, LOCAL_POINTER_SCALE } from '@3driseai/3drise-core';
|
|
8
|
+
import { ownsShaderEffectsMaterial } from '../utils/pointsMaterialOwnership.js';
|
|
8
9
|
import { update3driseShaderUniforms } from '../hooks/use3driseShader.js';
|
|
9
10
|
function normalizeEffects(raw) {
|
|
10
11
|
return Array.isArray(raw) ? raw : [];
|
|
@@ -77,27 +78,66 @@ const PointCloud = ({ positions, materialSettings, animations, onObjectReady, on
|
|
|
77
78
|
const activeEffects = useMemo(() => normalizeEffects(animations?.material?.shaderEffects), [animations?.material?.shaderEffects]);
|
|
78
79
|
const pointerRadius = animations?.material
|
|
79
80
|
?.shaderEffectsPointerRadius ?? 0.4;
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
81
|
+
// Position effects displace the geometry from the CPU and leave `.material`
|
|
82
|
+
// alone, so they compose with any material. Only the rest still need the
|
|
83
|
+
// shader shell — and only the shell takes ownership of `.material`.
|
|
84
|
+
const { position: positionEffects, shell: shellEffects } = useMemo(() => partitionShaderEffects(activeEffects), [activeEffects]);
|
|
85
|
+
const hasPositionEffects = positionEffects.some(effect => effect.enabled);
|
|
86
|
+
const effectsKey = useMemo(() => structureKey(shellEffects), [shellEffects]);
|
|
87
|
+
const ownsMaterial = ownsShaderEffectsMaterial(materialSettings, shellEffects);
|
|
88
|
+
// A separate buffer to displace into, so `positions` stays the authored
|
|
89
|
+
// baseline and effects never accumulate frame over frame.
|
|
90
|
+
const displayPositions = useMemo(() => (hasPositionEffects && positions ? new Float32Array(positions) : positions), [positions, hasPositionEffects]);
|
|
91
|
+
const material = useMemo(() => ownsMaterial ? buildShaderEffectsMaterial({
|
|
92
|
+
effects: shellEffects,
|
|
83
93
|
initialColor: color,
|
|
84
94
|
initialOpacity: opacity,
|
|
85
95
|
initialPointSize: pointSize,
|
|
86
96
|
initialParticleUVScale: particleUVScale,
|
|
87
97
|
initialPointerEffectRadius: pointerRadius,
|
|
88
|
-
}),
|
|
98
|
+
}) : null,
|
|
89
99
|
// Rebuild when the structural set of effects changes; not on parameter tweaks.
|
|
90
100
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
91
|
-
[effectsKey]);
|
|
101
|
+
[effectsKey, ownsMaterial]);
|
|
92
102
|
useEffect(() => {
|
|
93
103
|
materialRef.current = material;
|
|
94
104
|
return () => {
|
|
95
|
-
material
|
|
105
|
+
material?.dispose();
|
|
96
106
|
};
|
|
97
107
|
}, [material]);
|
|
108
|
+
// Tell useMaterialApplication's traversal to leave this object alone while we
|
|
109
|
+
// own its material. Set imperatively rather than through a `userData` prop:
|
|
110
|
+
// R3F replaces the whole object on every render, which would wipe the
|
|
111
|
+
// applyTexture handle stashed above.
|
|
112
|
+
useEffect(() => {
|
|
113
|
+
const points = pointsRef.current;
|
|
114
|
+
if (!points)
|
|
115
|
+
return;
|
|
116
|
+
points.userData[SELF_OWNED_MATERIAL_KEY] = ownsMaterial;
|
|
117
|
+
return () => {
|
|
118
|
+
if (points.userData)
|
|
119
|
+
delete points.userData[SELF_OWNED_MATERIAL_KEY];
|
|
120
|
+
};
|
|
121
|
+
}, [ownsMaterial]);
|
|
98
122
|
useFrame((state, delta) => {
|
|
123
|
+
const points = pointsRef.current;
|
|
124
|
+
if (!points)
|
|
125
|
+
return;
|
|
126
|
+
if (hasPositionEffects && displayPositions !== positions) {
|
|
127
|
+
const moved = applyVertexEffects(positions, displayPositions, positionEffects, {
|
|
128
|
+
time: state.clock.getElapsedTime(),
|
|
129
|
+
pointerX: state.pointer.x * LOCAL_POINTER_SCALE,
|
|
130
|
+
pointerY: state.pointer.y * LOCAL_POINTER_SCALE,
|
|
131
|
+
pointerRadius: pointerRadius * LOCAL_POINTER_SCALE,
|
|
132
|
+
});
|
|
133
|
+
if (moved) {
|
|
134
|
+
const attribute = points.geometry?.attributes?.position;
|
|
135
|
+
if (attribute)
|
|
136
|
+
attribute.needsUpdate = true;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
99
139
|
const mat = materialRef.current;
|
|
100
|
-
if (!mat
|
|
140
|
+
if (!mat)
|
|
101
141
|
return;
|
|
102
142
|
handleColorsAnimation(materialRef, delta, speed);
|
|
103
143
|
if (prevTexture.current)
|
|
@@ -106,10 +146,10 @@ const PointCloud = ({ positions, materialSettings, animations, onObjectReady, on
|
|
|
106
146
|
mat.uniforms.uTargetTexture.value = currentTexture.current;
|
|
107
147
|
mat.uniforms.uHasTexture.value = !!currentTexture.current;
|
|
108
148
|
handleTextureAnimation(materialRef, delta, speed);
|
|
109
|
-
update3driseShaderUniforms(mat.uniforms,
|
|
149
|
+
update3driseShaderUniforms(mat.uniforms, shellEffects, state.clock.getElapsedTime(), { x: state.pointer.x, y: state.pointer.y }, { pointerRadius });
|
|
110
150
|
});
|
|
111
151
|
if (!positions)
|
|
112
152
|
return null;
|
|
113
|
-
return (_jsxs("points", { ref: pointsRef, raycast: () => null, position: [0, 0, 0], rotation: [0, 0, 0], scale: [1, 1, 1], children: [_jsxs("bufferGeometry", { children: [_jsx("bufferAttribute", { attach: "attributes-position", count:
|
|
153
|
+
return (_jsxs("points", { ref: pointsRef, raycast: () => null, position: [0, 0, 0], rotation: [0, 0, 0], scale: [1, 1, 1], children: [_jsxs("bufferGeometry", { children: [_jsx("bufferAttribute", { attach: "attributes-position", count: displayPositions.length / 3, array: displayPositions, itemSize: 3, args: [displayPositions, 3] }), uvs && (_jsx("bufferAttribute", { attach: "attributes-aUV", count: uvs.length / 2, array: uvs, itemSize: 2, args: [uvs, 2] }))] }), material && _jsx("primitive", { object: material, attach: "material" })] }));
|
|
114
154
|
};
|
|
115
155
|
export default PointCloud;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SceneBuilder.d.ts","sourceRoot":"","sources":["../../src/components/SceneBuilder.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAQ/D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,GAAG,gBAAgB,
|
|
1
|
+
{"version":3,"file":"SceneBuilder.d.ts","sourceRoot":"","sources":["../../src/components/SceneBuilder.tsx"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAQ/D,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,QAAA,MAAM,YAAY,EAAE,KAAK,CAAC,EAAE,CAAC,iBAAiB,GAAG,gBAAgB,CAmIhE,CAAC;AACF,eAAe,YAAY,CAAC"}
|
|
@@ -1,7 +1,22 @@
|
|
|
1
1
|
import type { ObjectReadyProps } from '../types/objectReady';
|
|
2
2
|
import * as THREE from 'three';
|
|
3
|
-
import type { TimeSettings,
|
|
4
|
-
import
|
|
3
|
+
import type { TimeSettings, SkySettings, FogSettings } from '@3driseai/3drise-core';
|
|
4
|
+
import type { VolumetricCloudsSettings } from '../types/cloudConfigs';
|
|
5
|
+
import React from 'react';
|
|
6
|
+
/**
|
|
7
|
+
* Sky, sun and everything lit by them.
|
|
8
|
+
*
|
|
9
|
+
* Pure and props-driven: it holds no store subscription of its own, so the same
|
|
10
|
+
* component serves the editor (through a thin connector that supplies the props
|
|
11
|
+
* from Redux) and a published scene (through EnvironmentManager, which reads
|
|
12
|
+
* them out of the saved project). There is deliberately no second copy of this
|
|
13
|
+
* file in the client — a divergence here shows up as an embed that renders
|
|
14
|
+
* differently from the editor it was authored in.
|
|
15
|
+
*
|
|
16
|
+
* It owns the per-frame tick of skySystemManager, which is the single source of
|
|
17
|
+
* truth for time of day. Everything below reads the manager rather than
|
|
18
|
+
* receiving a sun direction, so nothing has to be threaded through props.
|
|
19
|
+
*/
|
|
5
20
|
export interface SkySystemRef {
|
|
6
21
|
setTime: (hours: number, minutes?: number) => void;
|
|
7
22
|
getTime: () => Date;
|
|
@@ -11,6 +26,9 @@ export interface SkySystemRef {
|
|
|
11
26
|
export interface SkySystemProps extends ObjectReadyProps {
|
|
12
27
|
timeSettings: TimeSettings;
|
|
13
28
|
visible?: boolean;
|
|
29
|
+
/** True mounts the physical sun rig (skybox + lensflare + directional light);
|
|
30
|
+
* false mounts the analytic Preetham sky instead. They are alternatives, not
|
|
31
|
+
* layers — the sun rig draws its own background. */
|
|
14
32
|
sunSystemVisible?: boolean;
|
|
15
33
|
sunSize?: number;
|
|
16
34
|
moonSize?: number;
|
|
@@ -19,11 +37,14 @@ export interface SkySystemProps extends ObjectReadyProps {
|
|
|
19
37
|
castShadow?: boolean;
|
|
20
38
|
shadowMapSize?: number;
|
|
21
39
|
playerPosition?: THREE.Vector3;
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
40
|
+
/** Volumetric cloud layers. Optional because a host may prefer to mount
|
|
41
|
+
* CloudsGenerator itself as a sibling — the editor does, so a cloud slider
|
|
42
|
+
* cannot re-render the sun. Both positions put the pass in the same place
|
|
43
|
+
* in the tree. */
|
|
44
|
+
cloudsSettings?: VolumetricCloudsSettings;
|
|
25
45
|
skyControllerSettings?: SkySettings;
|
|
26
|
-
|
|
46
|
+
/** Optional for the same reason as cloudsSettings: the editor gives fog its
|
|
47
|
+
* own connector, the embed path passes it here. */
|
|
27
48
|
fogSettings?: FogSettings;
|
|
28
49
|
onTimeOfDayChange?: (timeOfDay: string, elapsedTime: number) => void;
|
|
29
50
|
onTimeUpdate?: (timeOfDay: number) => void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SkySystem.d.ts","sourceRoot":"","sources":["../../src/components/SkySystem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"SkySystem.d.ts","sourceRoot":"","sources":["../../src/components/SkySystem.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpF,OAAO,KAAK,EAAE,wBAAwB,EAAE,MAAM,uBAAuB,CAAC;AAOtE,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,OAAO,EAAE,MAAM,IAAI,CAAC;IACpB,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,eAAe,EAAE,MAAM,KAAK,CAAC,OAAO,CAAC;CACxC;AAED,MAAM,WAAW,cAAe,SAAQ,gBAAgB;IACpD,YAAY,EAAE,YAAY,CAAC;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;yDAEqD;IACrD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;IAC/B;;;uBAGmB;IACnB,cAAc,CAAC,EAAE,wBAAwB,CAAC;IAC1C,qBAAqB,CAAC,EAAE,WAAW,CAAC;IACpC;wDACoD;IACpD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,iBAAiB,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,KAAK,IAAI,CAAC;IACrE,YAAY,CAAC,EAAE,CAAC,SAAS,EAAE,MAAM,KAAK,IAAI,CAAC;CAC9C;AAED,QAAA,MAAM,SAAS,qFAmHb,CAAC;AAGH,eAAe,SAAS,CAAC"}
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { useObjectReady } from '../hooks/useObjectReady.js';
|
|
3
3
|
import { useEffect, useLayoutEffect, useRef, forwardRef, useImperativeHandle } from 'react';
|
|
4
|
-
import * as THREE from 'three';
|
|
5
4
|
import { useFrame } from '@react-three/fiber';
|
|
6
5
|
import { skySystemManager } from '@3driseai/3drise-core';
|
|
7
6
|
import Skybox from './Skybox.js';
|
|
@@ -9,7 +8,8 @@ import Lensflare from './Lensflare.js';
|
|
|
9
8
|
import SunLight from './SunLight.js';
|
|
10
9
|
import SkyController from './SkyController.js';
|
|
11
10
|
import SceneFog from './SceneFog.js';
|
|
12
|
-
|
|
11
|
+
import CloudsGenerator from './CloudsGenerator.js';
|
|
12
|
+
const SkySystem = forwardRef(({ timeSettings, visible = true, sunSystemVisible = false, sunSize = 1, moonSize = 1, skyboxScale = 100000, sunIntensity = 1, castShadow = true, shadowMapSize = 2048, playerPosition, cloudsSettings, skyControllerSettings, fogSettings, onTimeOfDayChange, onTimeUpdate, onObjectReady, onObjectDispose, }, ref) => {
|
|
13
13
|
const previousTimeOfDayRef = useRef(null);
|
|
14
14
|
const rootRef = useRef(null);
|
|
15
15
|
const ready = { onObjectReady, onObjectDispose };
|
|
@@ -20,8 +20,9 @@ const SkySystem = forwardRef(({ timeSettings, visible = true, sunSystemVisible =
|
|
|
20
20
|
getTimeOfDay: () => skySystemManager.getTimeOfDay(),
|
|
21
21
|
getSunDirection: () => skySystemManager.getSunDirection(),
|
|
22
22
|
}));
|
|
23
|
-
// useLayoutEffect so the manager is registered before useFrame's first
|
|
24
|
-
//
|
|
23
|
+
// useLayoutEffect so the manager is registered before useFrame's first rAF
|
|
24
|
+
// callback — a regular useEffect runs after paint, and the first tick is
|
|
25
|
+
// dropped with manager.enabled still false.
|
|
25
26
|
useLayoutEffect(() => {
|
|
26
27
|
skySystemManager.setTimeSettings(timeSettings);
|
|
27
28
|
}, [timeSettings]);
|
|
@@ -44,7 +45,7 @@ const SkySystem = forwardRef(({ timeSettings, visible = true, sunSystemVisible =
|
|
|
44
45
|
});
|
|
45
46
|
if (!visible)
|
|
46
47
|
return null;
|
|
47
|
-
return (_jsxs("group", { ref: rootRef, children: [skyControllerSettings && !sunSystemVisible && (_jsx(SkyController, { settings: skyControllerSettings, timeSettings: timeSettings, scale: skyboxScale, ...ready })), sunSystemVisible && (_jsxs(_Fragment, { children: [_jsx(Skybox, { visible: true, scale: skyboxScale, sunSize: sunSize, moonSize: moonSize, timeSettings: timeSettings, ...ready }), _jsx(Lensflare, { visible: true, intensity: sunIntensity, timeSettings: timeSettings, ...ready }), _jsx(SunLight, { visible: true, timeSettings: timeSettings, targetPosition: playerPosition, intensity: sunIntensity, castShadow: castShadow, shadowMapSize: shadowMapSize, ...ready })] })), fogSettings &&
|
|
48
|
+
return (_jsxs("group", { ref: rootRef, children: [skyControllerSettings && !sunSystemVisible && (_jsx(SkyController, { settings: skyControllerSettings, timeSettings: timeSettings, scale: skyboxScale, ...ready })), sunSystemVisible && (_jsxs(_Fragment, { children: [_jsx(Skybox, { visible: true, scale: skyboxScale, sunSize: sunSize, moonSize: moonSize, timeSettings: timeSettings, ...ready }), _jsx(Lensflare, { visible: true, intensity: sunIntensity, timeSettings: timeSettings, ...ready }), _jsx(SunLight, { visible: true, timeSettings: timeSettings, targetPosition: playerPosition, intensity: sunIntensity, castShadow: castShadow, shadowMapSize: shadowMapSize, ...ready })] })), fogSettings && _jsx(SceneFog, { fog: fogSettings }), cloudsSettings && (_jsx(CloudsGenerator, { settings: cloudsSettings, skySettings: skyControllerSettings, timeSettings: timeSettings, sunIntensity: sunIntensity, ...ready }))] }));
|
|
48
49
|
});
|
|
49
50
|
SkySystem.displayName = 'SkySystem';
|
|
50
51
|
export default SkySystem;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SunLight.d.ts","sourceRoot":"","sources":["../../src/components/SunLight.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;
|
|
1
|
+
{"version":3,"file":"SunLight.d.ts","sourceRoot":"","sources":["../../src/components/SunLight.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAE/B,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1D,MAAM,WAAW,aAAc,SAAQ,gBAAgB;IACnD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,EAAE,YAAY,CAAC;IAC3B,cAAc,CAAC,EAAE,KAAK,CAAC,OAAO,CAAC;IAC/B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAiBD,QAAA,MAAM,QAAQ,EAAE,KAAK,CAAC,EAAE,CAAC,aAAa,CA0CrC,CAAC;AACF,eAAe,QAAQ,CAAC"}
|
|
@@ -13,7 +13,10 @@ const SUNRISE = 6;
|
|
|
13
13
|
const SUNSET = 21;
|
|
14
14
|
const DARKNESS_START = 20.42;
|
|
15
15
|
const DARKNESS_END = 6.58;
|
|
16
|
-
|
|
16
|
+
/** Shared so the default does not hand a fresh Vector3 to the deps array on every
|
|
17
|
+
* render, which re-ran the reposition effect every time anything above re-rendered. */
|
|
18
|
+
const ORIGIN = new THREE.Vector3(0, 0, 0);
|
|
19
|
+
const SunLight = ({ visible = true, timeSettings, targetPosition = ORIGIN, shadowDistance = 300, intensity: intensityMultiplier = 1, castShadow = true, shadowMapSize = 2048, onObjectReady, onObjectDispose, }) => {
|
|
17
20
|
const lightRef = useRef(null);
|
|
18
21
|
useObjectReady(lightRef, { visible, timeSettings, intensity: intensityMultiplier, castShadow, shadowMapSize }, onObjectReady, onObjectDispose);
|
|
19
22
|
const colorRef = useRef(new THREE.Color(0xffe5b0));
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import React from 'react';
|
|
2
|
+
import type { SkySettings, TimeSettings } from '@3driseai/3drise-core';
|
|
3
|
+
import type { ObjectReadyProps } from '../types/objectReady';
|
|
4
|
+
import type { ProceduralTerrainSettings } from '../types/terrainConfigs';
|
|
5
|
+
export interface TerrainBuilderProps extends ObjectReadyProps {
|
|
6
|
+
/** Accepts a partial or older-shaped blob — including core's retired flat
|
|
7
|
+
* `TerrainSettings`, which has no `config` and normalises to nothing rather
|
|
8
|
+
* than to a landscape the project was never authored with. */
|
|
9
|
+
settings?: Partial<ProceduralTerrainSettings> | null;
|
|
10
|
+
skySettings?: SkySettings;
|
|
11
|
+
timeSettings?: TimeSettings;
|
|
12
|
+
/** Matches SkySystem's sunIntensity, so terrain brightens with the scene. */
|
|
13
|
+
sunIntensity?: number;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Picks the landform for the scene's ground.
|
|
17
|
+
*
|
|
18
|
+
* The counterpart to `CloudsGenerator`, and deliberately the same shape: switch
|
|
19
|
+
* on the model field, mount exactly one renderer, normalise each block against
|
|
20
|
+
* its own source so editing one cannot invalidate the other.
|
|
21
|
+
*
|
|
22
|
+
* Terrain is simpler than the sky in one respect — there is one landform, not a
|
|
23
|
+
* deck plus an independent ice layer — so there is no second branch to compose.
|
|
24
|
+
* It is harder in another: `quality` rebuilds every clipmap ring when its
|
|
25
|
+
* identity changes, which is why it is memoised separately and why the controller
|
|
26
|
+
* writes quality changes live rather than through Redux.
|
|
27
|
+
*/
|
|
28
|
+
declare const TerrainBuilder: React.FC<TerrainBuilderProps>;
|
|
29
|
+
export default TerrainBuilder;
|
|
30
|
+
//# sourceMappingURL=TerrainBuilder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TerrainBuilder.d.ts","sourceRoot":"","sources":["../../src/components/TerrainBuilder.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAkB,MAAM,OAAO,CAAC;AACvC,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACvE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAOzE,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IACzD;;mEAE+D;IAC/D,QAAQ,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC;IACrD,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,YAAY,CAAC,EAAE,YAAY,CAAC;IAC5B,6EAA6E;IAC7E,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;;;;GAYG;AACH,QAAA,MAAM,cAAc,EAAE,KAAK,CAAC,EAAE,CAAC,mBAAmB,CA+BjD,CAAC;AAEF,eAAe,cAAc,CAAC"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { useMemo } from 'react';
|
|
3
|
+
import { normalizeTerrain, normalizeTerrainQuality } from '../types/terrainConfigs.js';
|
|
4
|
+
import Mountains from './terrain/Mountains.js';
|
|
5
|
+
import Dunes from './terrain/Dunes.js';
|
|
6
|
+
import Hills from './terrain/Hills.js';
|
|
7
|
+
import Canyon from './terrain/Canyon.js';
|
|
8
|
+
/**
|
|
9
|
+
* Picks the landform for the scene's ground.
|
|
10
|
+
*
|
|
11
|
+
* The counterpart to `CloudsGenerator`, and deliberately the same shape: switch
|
|
12
|
+
* on the model field, mount exactly one renderer, normalise each block against
|
|
13
|
+
* its own source so editing one cannot invalidate the other.
|
|
14
|
+
*
|
|
15
|
+
* Terrain is simpler than the sky in one respect — there is one landform, not a
|
|
16
|
+
* deck plus an independent ice layer — so there is no second branch to compose.
|
|
17
|
+
* It is harder in another: `quality` rebuilds every clipmap ring when its
|
|
18
|
+
* identity changes, which is why it is memoised separately and why the controller
|
|
19
|
+
* writes quality changes live rather than through Redux.
|
|
20
|
+
*/
|
|
21
|
+
const TerrainBuilder = ({ settings, skySettings, timeSettings, sunIntensity, onObjectReady, onObjectDispose, }) => {
|
|
22
|
+
const config = useMemo(() => normalizeTerrain(settings?.config), [settings?.config]);
|
|
23
|
+
const quality = useMemo(() => normalizeTerrainQuality(settings?.quality), [settings?.quality]);
|
|
24
|
+
if (!config?.enabled)
|
|
25
|
+
return null;
|
|
26
|
+
const shared = {
|
|
27
|
+
config,
|
|
28
|
+
quality,
|
|
29
|
+
skySettings,
|
|
30
|
+
timeSettings,
|
|
31
|
+
sunIntensity,
|
|
32
|
+
id: settings?.id,
|
|
33
|
+
onObjectReady,
|
|
34
|
+
onObjectDispose,
|
|
35
|
+
};
|
|
36
|
+
switch (config.terrainType) {
|
|
37
|
+
case 'mountains': return _jsx(Mountains, { ...shared });
|
|
38
|
+
case 'dunes': return _jsx(Dunes, { ...shared });
|
|
39
|
+
case 'canyon': return _jsx(Canyon, { ...shared });
|
|
40
|
+
case 'hills':
|
|
41
|
+
default: return _jsx(Hills, { ...shared });
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
export default TerrainBuilder;
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
export type { AnimatedObjectProps } from './AnimatedObject';
|
|
2
2
|
export type { BubblesProps } from './Bubbles';
|
|
3
3
|
export type { CloudsProps } from './Clouds';
|
|
4
|
+
export type { CloudsGeneratorProps } from './CloudsGenerator';
|
|
4
5
|
export type { EffectsGeneratorProps } from './EffectsGenerator';
|
|
5
|
-
export type { EnvironmentManagerProps } from './EnvironmentManager';
|
|
6
|
+
export type { EnvironmentManagerProps, ViewerEnvironmentConfig } from './EnvironmentManager';
|
|
7
|
+
export type { HdrEnvironmentProps } from './HdrEnvironment';
|
|
6
8
|
export type { OutlineMode, Point3 } from './extractOutline';
|
|
7
9
|
export type { FrameProps } from './Frame';
|
|
8
10
|
export type { FrameShapeType } from './FrameGeometry';
|
|
@@ -48,18 +50,22 @@ export type { StarsProps } from './Stars';
|
|
|
48
50
|
export type { SunCoreProps } from './SunCore';
|
|
49
51
|
export type { SunLightProps } from './SunLight';
|
|
50
52
|
export type { Text2DProps } from './Text2D';
|
|
53
|
+
export type { TerrainBuilderProps } from './TerrainBuilder';
|
|
54
|
+
export type { OceanBuilderProps } from './OceanBuilder';
|
|
51
55
|
export type { Text3DProps } from './Text3D';
|
|
52
56
|
export type { VolumePointsProps } from './VolumePoints';
|
|
53
57
|
export { AnimatedObject, default as AnimatedObjectDefault } from './AnimatedObject';
|
|
54
58
|
export { default as Bubbles } from './Bubbles';
|
|
55
59
|
export { CameraController, default as CameraControllerDefault } from './CameraController';
|
|
56
60
|
export { default as Clouds } from './Clouds';
|
|
61
|
+
export { default as CloudsGenerator } from './CloudsGenerator';
|
|
57
62
|
export { default as CreatedObject } from './CreatedObject';
|
|
58
63
|
export { default as CustomPrimitive } from './CustomPrimitive';
|
|
59
64
|
export { default as Earth } from './Earth';
|
|
60
65
|
export { default as EffectsGenerator } from './EffectsGenerator';
|
|
61
66
|
export { default as EffectsGroup } from './EffectsGroup';
|
|
62
67
|
export { default as EnvironmentManager } from './EnvironmentManager';
|
|
68
|
+
export { default as HdrEnvironment, isHdrActive } from './HdrEnvironment';
|
|
63
69
|
export { default as EnvironmentObject } from './EnvironmentObject';
|
|
64
70
|
export { default as Frame } from './Frame';
|
|
65
71
|
export { FrameGeometry } from './FrameGeometry';
|
|
@@ -119,11 +125,21 @@ export { default as Stars, generateStarsGeometry } from './Stars';
|
|
|
119
125
|
export { default as Sun } from './Sun';
|
|
120
126
|
export { default as SunCore } from './SunCore';
|
|
121
127
|
export { default as SunLight } from './SunLight';
|
|
128
|
+
export { default as TerrainBuilder } from './TerrainBuilder';
|
|
129
|
+
export { default as OceanBuilder } from './OceanBuilder';
|
|
122
130
|
export { default as Text2D } from './Text2D';
|
|
123
131
|
export { default as Text3D } from './Text3D';
|
|
124
132
|
export { VolumePoints } from './VolumePoints';
|
|
125
133
|
export { FitGroup, GeometryMesh, computeMode, contourSlices, evenScatter, meshVertices, plexus, surfaceScatter, symmetricScatter, useShapeGeometry as useGeometryShape, volumeFill, wireframe, } from './GeometryShape';
|
|
126
134
|
export { contour2D, edges3D } from './extractOutline';
|
|
127
135
|
export * from './cursor';
|
|
136
|
+
export * from './volumetricClouds';
|
|
137
|
+
export * from './terrain';
|
|
138
|
+
export * from './water';
|
|
128
139
|
export * from './effects';
|
|
140
|
+
export type { LandscapeBuilderProps } from './LandscapeBuilder';
|
|
141
|
+
export { default as LandscapeBuilder } from './LandscapeBuilder';
|
|
142
|
+
export type { LandscapeObjectProps } from './LandscapeObject';
|
|
143
|
+
export { default as LandscapeObject } from './LandscapeObject';
|
|
144
|
+
export * from './landscape';
|
|
129
145
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"AAIA,YAAY,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC5D,YAAY,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAC9C,YAAY,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAC5C,YAAY,EAAE,qBAAqB,EAAE,MAAM,oBAAoB,CAAC;AAChE,YAAY,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/components/index.ts"],"names":[],"mappings":"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"}
|
package/dist/components/index.js
CHANGED
|
@@ -5,12 +5,14 @@ export { AnimatedObject, default as AnimatedObjectDefault } from './AnimatedObje
|
|
|
5
5
|
export { default as Bubbles } from './Bubbles.js';
|
|
6
6
|
export { CameraController, default as CameraControllerDefault } from './CameraController.js';
|
|
7
7
|
export { default as Clouds } from './Clouds.js';
|
|
8
|
+
export { default as CloudsGenerator } from './CloudsGenerator.js';
|
|
8
9
|
export { default as CreatedObject } from './CreatedObject.js';
|
|
9
10
|
export { default as CustomPrimitive } from './CustomPrimitive.js';
|
|
10
11
|
export { default as Earth } from './Earth.js';
|
|
11
12
|
export { default as EffectsGenerator } from './EffectsGenerator.js';
|
|
12
13
|
export { default as EffectsGroup } from './EffectsGroup.js';
|
|
13
14
|
export { default as EnvironmentManager } from './EnvironmentManager.js';
|
|
15
|
+
export { default as HdrEnvironment, isHdrActive } from './HdrEnvironment.js';
|
|
14
16
|
export { default as EnvironmentObject } from './EnvironmentObject.js';
|
|
15
17
|
export { default as Frame } from './Frame.js';
|
|
16
18
|
export { FrameGeometry } from './FrameGeometry.js';
|
|
@@ -70,6 +72,8 @@ export { default as Stars, generateStarsGeometry } from './Stars.js';
|
|
|
70
72
|
export { default as Sun } from './Sun.js';
|
|
71
73
|
export { default as SunCore } from './SunCore.js';
|
|
72
74
|
export { default as SunLight } from './SunLight.js';
|
|
75
|
+
export { default as TerrainBuilder } from './TerrainBuilder.js';
|
|
76
|
+
export { default as OceanBuilder } from './OceanBuilder.js';
|
|
73
77
|
export { default as Text2D } from './Text2D.js';
|
|
74
78
|
export { default as Text3D } from './Text3D.js';
|
|
75
79
|
export { VolumePoints } from './VolumePoints.js';
|
|
@@ -82,4 +86,10 @@ export { FitGroup, GeometryMesh, computeMode, contourSlices, evenScatter, meshVe
|
|
|
82
86
|
export { contour2D, edges3D } from './extractOutline.js';
|
|
83
87
|
// ------------------------------------------------------------ sub-folders
|
|
84
88
|
export * from './cursor/index.js';
|
|
89
|
+
export * from './volumetricClouds/index.js';
|
|
90
|
+
export * from './terrain/index.js';
|
|
91
|
+
export * from './water/index.js';
|
|
85
92
|
export * from './effects/index.js';
|
|
93
|
+
export { default as LandscapeBuilder } from './LandscapeBuilder.js';
|
|
94
|
+
export { default as LandscapeObject } from './LandscapeObject.js';
|
|
95
|
+
export * from './landscape/index.js';
|