three-stdlib 2.14.1 → 2.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/csm/CSM.cjs.js +1 -1
- package/csm/CSM.js +8 -8
- package/csm/CSMFrustum.cjs.js +1 -0
- package/csm/CSMFrustum.d.ts +19 -0
- package/csm/{Frustum.js → CSMFrustum.js} +8 -7
- package/csm/CSMShader.cjs.js +1 -0
- package/csm/CSMShader.d.ts +4 -0
- package/csm/{Shader.js → CSMShader.js} +52 -36
- package/curves/CurveExtras.d.ts +52 -54
- package/geometries/ParametricGeometries.cjs.js +1 -1
- package/geometries/ParametricGeometries.js +91 -99
- package/geometries/ParametricGeometry.cjs.js +1 -0
- package/geometries/ParametricGeometry.d.ts +18 -0
- package/geometries/ParametricGeometry.js +87 -0
- package/index.cjs.js +1 -1
- package/index.d.ts +3 -77
- package/index.js +4 -1
- package/interactive/InteractiveGroup.cjs.js +1 -0
- package/interactive/InteractiveGroup.d.ts +5 -0
- package/interactive/InteractiveGroup.js +87 -0
- package/lines/Line2.cjs.js +1 -1
- package/lines/Line2.d.ts +7 -5
- package/lines/Line2.js +2 -5
- package/lines/LineGeometry.cjs.js +1 -1
- package/lines/LineGeometry.d.ts +6 -8
- package/lines/LineGeometry.js +28 -39
- package/lines/LineMaterial.cjs.js +1 -1
- package/lines/LineMaterial.d.ts +23 -19
- package/lines/LineMaterial.js +263 -107
- package/lines/LineSegments2.cjs.js +1 -1
- package/lines/LineSegments2.d.ts +12 -20
- package/lines/LineSegments2.js +272 -125
- package/lines/LineSegmentsGeometry.cjs.js +1 -1
- package/lines/LineSegmentsGeometry.d.ts +18 -16
- package/lines/LineSegmentsGeometry.js +30 -40
- package/lines/Wireframe.cjs.js +1 -1
- package/lines/Wireframe.js +39 -39
- package/lines/WireframeGeometry2.cjs.js +1 -1
- package/lines/WireframeGeometry2.js +8 -9
- package/loaders/GLTFLoader.d.ts +2 -9
- package/loaders/LUT3dlLoader.d.ts +2 -2
- package/loaders/LUTCubeLoader.d.ts +2 -2
- package/loaders/RGBELoader.cjs.js +1 -1
- package/loaders/RGBELoader.js +1 -9
- package/loaders/VOXLoader.d.ts +2 -2
- package/objects/Reflector.d.ts +1 -0
- package/objects/ReflectorForSSRPass.d.ts +4 -4
- package/objects/Refractor.d.ts +1 -0
- package/objects/Water2.d.ts +1 -1
- package/package.json +2 -1
- package/postprocessing/LUTPass.d.ts +3 -3
- package/postprocessing/SSAARenderPass.d.ts +1 -1
- package/postprocessing/SSRPass.d.ts +3 -3
- package/shaders/BokehShader2.d.ts +27 -72
- package/shaders/BokehShader2.js +0 -1
- package/shaders/index.cjs.js +1 -1
- package/shaders/index.d.ts +2 -1
- package/shaders/index.js +1 -1
- package/csm/Frustum.cjs.js +0 -1
- package/csm/Shader.cjs.js +0 -1
- package/loaders/VRMLoader.d.ts +0 -19
- package/nodes/Nodes.d.ts +0 -106
- package/nodes/accessors/CameraNode.d.ts +0 -29
- package/nodes/accessors/NormalNode.d.ts +0 -13
- package/nodes/accessors/PositionNode.d.ts +0 -15
- package/nodes/accessors/ReflectNode.d.ts +0 -12
- package/nodes/accessors/UVNode.d.ts +0 -10
- package/nodes/core/AttributeNode.d.ts +0 -13
- package/nodes/core/ConstNode.d.ts +0 -22
- package/nodes/core/ExpressionNode.d.ts +0 -5
- package/nodes/core/FunctionCallNode.d.ts +0 -17
- package/nodes/core/FunctionNode.d.ts +0 -28
- package/nodes/core/InputNode.d.ts +0 -12
- package/nodes/core/Node.d.ts +0 -34
- package/nodes/core/NodeBuilder.d.ts +0 -149
- package/nodes/core/NodeFrame.d.ts +0 -17
- package/nodes/core/NodeUniform.d.ts +0 -17
- package/nodes/core/NodeUtils.d.ts +0 -7
- package/nodes/core/TempNode.d.ts +0 -23
- package/nodes/core/VarNode.d.ts +0 -12
- package/nodes/materials/MeshStandardNodeMaterial.d.ts +0 -21
- package/nodes/materials/NodeMaterial.d.ts +0 -28
- package/nodes/math/CondNode.d.ts +0 -26
- package/nodes/math/MathNode.d.ts +0 -57
- package/nodes/math/OperatorNode.d.ts +0 -17
- package/nodes/procedural/CheckerNode.d.ts +0 -17
- package/nodes/utils/JoinNode.d.ts +0 -15
- package/nodes/utils/TimerNode.d.ts +0 -19
- package/objects/ReflectorRTT.d.ts +0 -6
package/csm/CSM.cjs.js
CHANGED
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("three"),e=require("./
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("three"),e=require("./CSMFrustum.cjs.js"),s=require("./CSMShader.cjs.js");const a=new t.Matrix4,i=new e.CSMFrustum,r=new t.Vector3,h=new t.Box3,n=[],o=[];exports.CSM=class{constructor(s){s=s||{},this.camera=s.camera,this.parent=s.parent,this.cascades=s.cascades||3,this.maxFar=s.maxFar||1e5,this.mode=s.mode||"practical",this.shadowMapSize=s.shadowMapSize||2048,this.shadowBias=s.shadowBias||1e-6,this.lightDirection=s.lightDirection||new t.Vector3(1,-1,1).normalize(),this.lightIntensity=s.lightIntensity||1,this.lightNear=s.lightNear||1,this.lightFar=s.lightFar||2e3,this.lightMargin=s.lightMargin||200,this.customSplitsCallback=s.customSplitsCallback,this.fade=!1,this.mainFrustum=new e.CSMFrustum,this.frustums=[],this.breaks=[],this.lights=[],this.shaders=new Map,this.createLights(),this.updateFrustums(),this.injectInclude()}createLights(){for(let e=0;e<this.cascades;e++){const e=new t.DirectionalLight(16777215,this.lightIntensity);e.castShadow=!0,e.shadow.mapSize.width=this.shadowMapSize,e.shadow.mapSize.height=this.shadowMapSize,e.shadow.camera.near=this.lightNear,e.shadow.camera.far=this.lightFar,e.shadow.bias=this.shadowBias,this.parent.add(e),this.parent.add(e.target),this.lights.push(e)}}initCascades(){const t=this.camera;t.updateProjectionMatrix(),this.mainFrustum.setFromProjectionMatrix(t.projectionMatrix,this.maxFar),this.mainFrustum.split(this.breaks,this.frustums)}updateShadowBounds(){const t=this.frustums;for(let e=0;e<t.length;e++){const t=this.lights[e].shadow.camera,s=this.frustums[e],a=s.vertices.near,i=s.vertices.far,r=i[0];let h;h=r.distanceTo(i[2])>r.distanceTo(a[2])?i[2]:a[2];let n=r.distanceTo(h);if(this.fade){const t=this.camera,e=Math.max(t.far,this.maxFar),a=s.vertices.far[0].z/(e-t.near);n+=.25*Math.pow(a,2)*(e-t.near)}t.left=-n/2,t.right=n/2,t.top=n/2,t.bottom=-n/2,t.updateProjectionMatrix()}}getBreaks(){const e=this.camera,s=Math.min(e.far,this.maxFar);switch(this.breaks.length=0,this.mode){case"uniform":a(this.cascades,e.near,s,this.breaks);break;case"logarithmic":i(this.cascades,e.near,s,this.breaks);break;case"practical":!function(e,s,r,h,c){n.length=0,o.length=0,i(e,s,r,o),a(e,s,r,n);for(let s=1;s<e;s++)c.push(t.MathUtils.lerp(n[s-1],o[s-1],h));c.push(1)}(this.cascades,e.near,s,.5,this.breaks);break;case"custom":void 0===this.customSplitsCallback&&console.error("CSM: Custom split scheme callback not defined."),this.customSplitsCallback(this.cascades,e.near,s,this.breaks)}function a(t,e,s,a){for(let i=1;i<t;i++)a.push((e+(s-e)*i/t)/s);a.push(1)}function i(t,e,s,a){for(let i=1;i<t;i++)a.push(e*(s/e)**(i/t)/s);a.push(1)}}update(){const t=this.camera,e=this.frustums;for(let s=0;s<e.length;s++){const n=this.lights[s],o=n.shadow.camera,c=(o.right-o.left)/this.shadowMapSize,d=(o.top-o.bottom)/this.shadowMapSize;n.shadow.camera.updateMatrixWorld(!0),a.multiplyMatrices(n.shadow.camera.matrixWorldInverse,t.matrixWorld),e[s].toSpace(a,i);const l=i.vertices.near,u=i.vertices.far;h.makeEmpty();for(let t=0;t<4;t++)h.expandByPoint(l[t]),h.expandByPoint(u[t]);h.getCenter(r),r.z=h.max.z+this.lightMargin,r.x=Math.floor(r.x/c)*c,r.y=Math.floor(r.y/d)*d,r.applyMatrix4(n.shadow.camera.matrixWorld),n.position.copy(r),n.target.position.copy(r),n.target.position.x+=this.lightDirection.x,n.target.position.y+=this.lightDirection.y,n.target.position.z+=this.lightDirection.z}}injectInclude(){t.ShaderChunk.lights_fragment_begin=s.CSMShader.lights_fragment_begin,t.ShaderChunk.lights_pars_begin=s.CSMShader.lights_pars_begin}setupMaterial(t){t.defines=t.defines||{},t.defines.USE_CSM=1,t.defines.CSM_CASCADES=this.cascades,this.fade&&(t.defines.CSM_FADE="");const e=[],s=this,a=this.shaders;t.onBeforeCompile=function(i){const r=Math.min(s.camera.far,s.maxFar);s.getExtendedBreaks(e),i.uniforms.CSM_cascades={value:e},i.uniforms.cameraNear={value:s.camera.near},i.uniforms.shadowFar={value:r},a.set(t,i)},a.set(t,null)}updateUniforms(){const t=Math.min(this.camera.far,this.maxFar);this.shaders.forEach((function(e,s){if(null!==e){const s=e.uniforms;this.getExtendedBreaks(s.CSM_cascades.value),s.cameraNear.value=this.camera.near,s.shadowFar.value=t}!this.fade&&"CSM_FADE"in s.defines?(delete s.defines.CSM_FADE,s.needsUpdate=!0):this.fade&&!("CSM_FADE"in s.defines)&&(s.defines.CSM_FADE="",s.needsUpdate=!0)}),this)}getExtendedBreaks(e){for(;e.length<this.breaks.length;)e.push(new t.Vector2);e.length=this.breaks.length;for(let t=0;t<this.cascades;t++){const s=this.breaks[t],a=this.breaks[t-1]||0;e[t].x=a,e[t].y=s}}updateFrustums(){this.getBreaks(),this.initCascades(),this.updateShadowBounds(),this.updateUniforms()}remove(){for(let t=0;t<this.lights.length;t++)this.parent.remove(this.lights[t])}dispose(){const t=this.shaders;t.forEach((function(t,e){delete e.onBeforeCompile,delete e.defines.USE_CSM,delete e.defines.CSM_CASCADES,delete e.defines.CSM_FADE,null!==t&&(delete t.uniforms.CSM_cascades,delete t.uniforms.cameraNear,delete t.uniforms.shadowFar),e.needsUpdate=!0})),t.clear()}};
|
package/csm/CSM.js
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
import { Matrix4, Vector3, Box3, DirectionalLight, MathUtils, ShaderChunk, Vector2 } from 'three';
|
2
|
-
import
|
3
|
-
import
|
2
|
+
import { CSMFrustum } from './CSMFrustum.js';
|
3
|
+
import { CSMShader } from './CSMShader.js';
|
4
4
|
|
5
5
|
const _cameraToLightMatrix = new Matrix4();
|
6
6
|
|
7
|
-
const _lightSpaceFrustum = new
|
7
|
+
const _lightSpaceFrustum = new CSMFrustum();
|
8
8
|
|
9
9
|
const _center = new Vector3();
|
10
10
|
|
@@ -29,7 +29,7 @@ class CSM {
|
|
29
29
|
this.lightMargin = data.lightMargin || 200;
|
30
30
|
this.customSplitsCallback = data.customSplitsCallback;
|
31
31
|
this.fade = false;
|
32
|
-
this.mainFrustum = new
|
32
|
+
this.mainFrustum = new CSMFrustum();
|
33
33
|
this.frustums = [];
|
34
34
|
this.breaks = [];
|
35
35
|
this.lights = [];
|
@@ -197,8 +197,8 @@ class CSM {
|
|
197
197
|
}
|
198
198
|
|
199
199
|
injectInclude() {
|
200
|
-
ShaderChunk.lights_fragment_begin =
|
201
|
-
ShaderChunk.lights_pars_begin =
|
200
|
+
ShaderChunk.lights_fragment_begin = CSMShader.lights_fragment_begin;
|
201
|
+
ShaderChunk.lights_pars_begin = CSMShader.lights_pars_begin;
|
202
202
|
}
|
203
203
|
|
204
204
|
setupMaterial(material) {
|
@@ -214,7 +214,7 @@ class CSM {
|
|
214
214
|
const scope = this;
|
215
215
|
const shaders = this.shaders;
|
216
216
|
|
217
|
-
material.onBeforeCompile = shader
|
217
|
+
material.onBeforeCompile = function (shader) {
|
218
218
|
const far = Math.min(scope.camera.far, scope.maxFar);
|
219
219
|
scope.getExtendedBreaks(breaksVec2);
|
220
220
|
shader.uniforms.CSM_cascades = {
|
@@ -283,7 +283,7 @@ class CSM {
|
|
283
283
|
|
284
284
|
dispose() {
|
285
285
|
const shaders = this.shaders;
|
286
|
-
shaders.forEach((shader, material)
|
286
|
+
shaders.forEach(function (shader, material) {
|
287
287
|
delete material.onBeforeCompile;
|
288
288
|
delete material.defines.USE_CSM;
|
289
289
|
delete material.defines.CSM_CASCADES;
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var e=require("three");const t=new e.Matrix4;class r{constructor(t){t=t||{},this.vertices={near:[new e.Vector3,new e.Vector3,new e.Vector3,new e.Vector3],far:[new e.Vector3,new e.Vector3,new e.Vector3,new e.Vector3]},void 0!==t.projectionMatrix&&this.setFromProjectionMatrix(t.projectionMatrix,t.maxFar||1e4)}setFromProjectionMatrix(e,r){const s=0===e.elements[11];return t.copy(e).invert(),this.vertices.near[0].set(1,1,-1),this.vertices.near[1].set(1,-1,-1),this.vertices.near[2].set(-1,-1,-1),this.vertices.near[3].set(-1,1,-1),this.vertices.near.forEach((function(e){e.applyMatrix4(t)})),this.vertices.far[0].set(1,1,1),this.vertices.far[1].set(1,-1,1),this.vertices.far[2].set(-1,-1,1),this.vertices.far[3].set(-1,1,1),this.vertices.far.forEach((function(e){e.applyMatrix4(t);const i=Math.abs(e.z);s?e.z*=Math.min(r/i,1):e.multiplyScalar(Math.min(r/i,1))})),this.vertices}split(e,t){for(;e.length>t.length;)t.push(new r);t.length=e.length;for(let r=0;r<e.length;r++){const s=t[r];if(0===r)for(let e=0;e<4;e++)s.vertices.near[e].copy(this.vertices.near[e]);else for(let t=0;t<4;t++)s.vertices.near[t].lerpVectors(this.vertices.near[t],this.vertices.far[t],e[r-1]);if(r===e.length-1)for(let e=0;e<4;e++)s.vertices.far[e].copy(this.vertices.far[e]);else for(let t=0;t<4;t++)s.vertices.far[t].lerpVectors(this.vertices.near[t],this.vertices.far[t],e[r])}}toSpace(e,t){for(let r=0;r<4;r++)t.vertices.near[r].copy(this.vertices.near[r]).applyMatrix4(e),t.vertices.far[r].copy(this.vertices.far[r]).applyMatrix4(e)}}exports.CSMFrustum=r;
|
@@ -0,0 +1,19 @@
|
|
1
|
+
import { Matrix4, Vector3 } from 'three';
|
2
|
+
|
3
|
+
export interface CSMFrustumVerticies {
|
4
|
+
near: Vector3[];
|
5
|
+
far: Vector3[];
|
6
|
+
}
|
7
|
+
|
8
|
+
export interface CSMFrustumParameters {
|
9
|
+
projectionMatrix?: Matrix4;
|
10
|
+
maxFar?: number;
|
11
|
+
}
|
12
|
+
|
13
|
+
export default class CSMFrustum {
|
14
|
+
constructor(data?: CSMFrustumParameters);
|
15
|
+
vertices: CSMFrustumVerticies;
|
16
|
+
setFromProjectionMatrix(projectionMatrix: Matrix4, maxFar: number): CSMFrustumVerticies;
|
17
|
+
split(breaks: number[], target: CSMFrustum[]): void;
|
18
|
+
toSpace(cameraMatrix: Matrix4, target: CSMFrustum): void;
|
19
|
+
}
|
@@ -1,7 +1,8 @@
|
|
1
|
-
import {
|
1
|
+
import { Matrix4, Vector3 } from 'three';
|
2
2
|
|
3
3
|
const inverseProjectionMatrix = new Matrix4();
|
4
|
-
|
4
|
+
|
5
|
+
class CSMFrustum {
|
5
6
|
constructor(data) {
|
6
7
|
data = data || {};
|
7
8
|
this.vertices = {
|
@@ -25,14 +26,14 @@ class Frustum {
|
|
25
26
|
this.vertices.near[1].set(1, -1, -1);
|
26
27
|
this.vertices.near[2].set(-1, -1, -1);
|
27
28
|
this.vertices.near[3].set(-1, 1, -1);
|
28
|
-
this.vertices.near.forEach(v
|
29
|
+
this.vertices.near.forEach(function (v) {
|
29
30
|
v.applyMatrix4(inverseProjectionMatrix);
|
30
31
|
});
|
31
32
|
this.vertices.far[0].set(1, 1, 1);
|
32
33
|
this.vertices.far[1].set(1, -1, 1);
|
33
34
|
this.vertices.far[2].set(-1, -1, 1);
|
34
35
|
this.vertices.far[3].set(-1, 1, 1);
|
35
|
-
this.vertices.far.forEach(v
|
36
|
+
this.vertices.far.forEach(function (v) {
|
36
37
|
v.applyMatrix4(inverseProjectionMatrix);
|
37
38
|
const absZ = Math.abs(v.z);
|
38
39
|
|
@@ -47,7 +48,7 @@ class Frustum {
|
|
47
48
|
|
48
49
|
split(breaks, target) {
|
49
50
|
while (breaks.length > target.length) {
|
50
|
-
target.push(new
|
51
|
+
target.push(new CSMFrustum());
|
51
52
|
}
|
52
53
|
|
53
54
|
target.length = breaks.length;
|
@@ -65,7 +66,7 @@ class Frustum {
|
|
65
66
|
}
|
66
67
|
}
|
67
68
|
|
68
|
-
if (i === breaks - 1) {
|
69
|
+
if (i === breaks.length - 1) {
|
69
70
|
for (let j = 0; j < 4; j++) {
|
70
71
|
cascade.vertices.far[j].copy(this.vertices.far[j]);
|
71
72
|
}
|
@@ -86,4 +87,4 @@ class Frustum {
|
|
86
87
|
|
87
88
|
}
|
88
89
|
|
89
|
-
export
|
90
|
+
export { CSMFrustum };
|
@@ -0,0 +1 @@
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});const t={lights_fragment_begin:"\nGeometricContext geometry;\n\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\n#ifdef CLEARCOAT\n\n\tgeometry.clearcoatNormal = clearcoatNormal;\n\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tpointLight = pointLights[ i ];\n\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tspotLight = spotLights[ i ];\n\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_DIR_LIGHTS > 0) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\tfloat linearDepth = (vViewPosition.z) / (shadowFar - cameraNear);\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#if defined( USE_SHADOWMAP ) && defined( CSM_FADE )\n\tvec2 cascade;\n\tfloat cascadeCenter;\n\tfloat closestEdge;\n\tfloat margin;\n\tfloat csmx;\n\tfloat csmy;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\n\t \t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\t\t// NOTE: Depth gets larger away from the camera.\n\t\t\t// cascade.x is closer, cascade.y is further\n\t\t\tcascade = CSM_cascades[ i ];\n\t\t\tcascadeCenter = ( cascade.x + cascade.y ) / 2.0;\n\t\t\tclosestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y;\n\t\t\tmargin = 0.25 * pow( closestEdge, 2.0 );\n\t\t\tcsmx = cascade.x - margin / 2.0;\n\t\t\tcsmy = cascade.y + margin / 2.0;\n\t\t\tif( linearDepth >= csmx && ( linearDepth < csmy || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 ) ) {\n\n\t\t\t\tfloat dist = min( linearDepth - csmx, csmy - linearDepth );\n\t\t\t\tfloat ratio = clamp( dist / margin, 0.0, 1.0 );\n\n\t\t\t\tvec3 prevColor = directLight.color;\n\t\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\t\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t\t\tbool shouldFadeLastCascade = UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth > cascadeCenter;\n\t\t\t\tdirectLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 );\n\n\t\t\t\tReflectedLight prevLight = reflectedLight;\n\t\t\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t\t\t\tbool shouldBlend = UNROLLED_LOOP_INDEX != CSM_CASCADES - 1 || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth < cascadeCenter;\n\t\t\t\tfloat blendRatio = shouldBlend ? ratio : 1.0;\n\n\t\t\t\treflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio );\n\t\t\t\treflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio );\n\t\t\t\treflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio );\n\t\t\t\treflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio );\n\n\t\t\t}\n\t \t#endif\n\n\t}\n\t#pragma unroll_loop_end\n\t#else\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\tdirectionalLight = directionalLights[ i ];\n\t\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\n\t\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\n\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometry, material, reflectedLight );\n\n\t\t\t#endif\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if ( NUM_DIR_LIGHTS > NUM_DIR_LIGHT_SHADOWS)\n\t\t// compute the lights not casting shadows (if any)\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = NUM_DIR_LIGHT_SHADOWS; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\tdirectionalLight = directionalLights[ i ];\n\n\t\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\n\t\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n#endif\n\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\n\tRectAreaLight rectAreaLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n\tvec3 iblIrradiance = vec3( 0.0 );\n\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n",lights_pars_begin:"\n#if defined( USE_CSM ) && defined( CSM_CASCADES )\nuniform vec2 CSM_cascades[CSM_CASCADES];\nuniform float cameraNear;\nuniform float shadowFar;\n#endif\n\t"+require("three").ShaderChunk.lights_pars_begin};exports.CSMShader=t;
|
@@ -1,6 +1,6 @@
|
|
1
1
|
import { ShaderChunk } from 'three';
|
2
2
|
|
3
|
-
|
3
|
+
const CSMShader = {
|
4
4
|
lights_fragment_begin:
|
5
5
|
/* glsl */
|
6
6
|
`
|
@@ -92,19 +92,19 @@ IncidentLight directLight;
|
|
92
92
|
directionalLight = directionalLights[ i ];
|
93
93
|
getDirectionalLightInfo( directionalLight, geometry, directLight );
|
94
94
|
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
95
|
+
#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )
|
96
|
+
// NOTE: Depth gets larger away from the camera.
|
97
|
+
// cascade.x is closer, cascade.y is further
|
98
|
+
cascade = CSM_cascades[ i ];
|
99
|
+
cascadeCenter = ( cascade.x + cascade.y ) / 2.0;
|
100
|
+
closestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y;
|
101
|
+
margin = 0.25 * pow( closestEdge, 2.0 );
|
102
|
+
csmx = cascade.x - margin / 2.0;
|
103
|
+
csmy = cascade.y + margin / 2.0;
|
104
|
+
if( linearDepth >= csmx && ( linearDepth < csmy || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 ) ) {
|
104
105
|
|
105
|
-
|
106
|
-
|
107
|
-
if( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) {
|
106
|
+
float dist = min( linearDepth - csmx, csmy - linearDepth );
|
107
|
+
float ratio = clamp( dist / margin, 0.0, 1.0 );
|
108
108
|
|
109
109
|
vec3 prevColor = directLight.color;
|
110
110
|
directionalLightShadow = directionalLightShadows[ i ];
|
@@ -113,42 +113,58 @@ IncidentLight directLight;
|
|
113
113
|
bool shouldFadeLastCascade = UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth > cascadeCenter;
|
114
114
|
directLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 );
|
115
115
|
|
116
|
-
|
117
|
-
|
118
|
-
ReflectedLight prevLight = reflectedLight;
|
119
|
-
RE_Direct( directLight, geometry, material, reflectedLight );
|
116
|
+
ReflectedLight prevLight = reflectedLight;
|
117
|
+
RE_Direct( directLight, geometry, material, reflectedLight );
|
120
118
|
|
121
|
-
|
122
|
-
|
119
|
+
bool shouldBlend = UNROLLED_LOOP_INDEX != CSM_CASCADES - 1 || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth < cascadeCenter;
|
120
|
+
float blendRatio = shouldBlend ? ratio : 1.0;
|
123
121
|
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
|
122
|
+
reflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio );
|
123
|
+
reflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio );
|
124
|
+
reflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio );
|
125
|
+
reflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio );
|
128
126
|
|
129
|
-
|
127
|
+
}
|
128
|
+
#endif
|
130
129
|
|
131
130
|
}
|
132
131
|
#pragma unroll_loop_end
|
133
132
|
#else
|
134
133
|
|
135
|
-
|
136
|
-
|
134
|
+
#pragma unroll_loop_start
|
135
|
+
for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {
|
137
136
|
|
138
|
-
|
139
|
-
|
137
|
+
directionalLight = directionalLights[ i ];
|
138
|
+
getDirectionalLightInfo( directionalLight, geometry, directLight );
|
140
139
|
|
141
|
-
|
140
|
+
#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )
|
142
141
|
|
143
|
-
|
144
|
-
|
142
|
+
directionalLightShadow = directionalLightShadows[ i ];
|
143
|
+
if(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;
|
145
144
|
|
146
|
-
|
145
|
+
if(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometry, material, reflectedLight );
|
147
146
|
|
148
|
-
|
147
|
+
#endif
|
149
148
|
|
150
|
-
|
151
|
-
|
149
|
+
}
|
150
|
+
#pragma unroll_loop_end
|
151
|
+
|
152
|
+
#endif
|
153
|
+
|
154
|
+
#if ( NUM_DIR_LIGHTS > NUM_DIR_LIGHT_SHADOWS)
|
155
|
+
// compute the lights not casting shadows (if any)
|
156
|
+
|
157
|
+
#pragma unroll_loop_start
|
158
|
+
for ( int i = NUM_DIR_LIGHT_SHADOWS; i < NUM_DIR_LIGHTS; i ++ ) {
|
159
|
+
|
160
|
+
directionalLight = directionalLights[ i ];
|
161
|
+
|
162
|
+
getDirectionalLightInfo( directionalLight, geometry, directLight );
|
163
|
+
|
164
|
+
RE_Direct( directLight, geometry, material, reflectedLight );
|
165
|
+
|
166
|
+
}
|
167
|
+
#pragma unroll_loop_end
|
152
168
|
|
153
169
|
#endif
|
154
170
|
|
@@ -236,4 +252,4 @@ uniform float shadowFar;
|
|
236
252
|
` + ShaderChunk.lights_pars_begin
|
237
253
|
};
|
238
254
|
|
239
|
-
export
|
255
|
+
export { CSMShader };
|
package/curves/CurveExtras.d.ts
CHANGED
@@ -1,70 +1,68 @@
|
|
1
1
|
import { Curve, Vector3 } from 'three';
|
2
2
|
|
3
|
-
export
|
4
|
-
|
5
|
-
|
6
|
-
}
|
3
|
+
export class GrannyKnot extends Curve<Vector3> {
|
4
|
+
constructor();
|
5
|
+
}
|
7
6
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
7
|
+
export class HeartCurve extends Curve<Vector3> {
|
8
|
+
constructor(scale?: number);
|
9
|
+
scale: number;
|
10
|
+
}
|
12
11
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
export class VivianiCurve extends Curve<Vector3> {
|
13
|
+
constructor(scale?: number);
|
14
|
+
scale: number;
|
15
|
+
}
|
17
16
|
|
18
|
-
|
19
|
-
|
20
|
-
|
17
|
+
export class KnotCurve extends Curve<Vector3> {
|
18
|
+
constructor();
|
19
|
+
}
|
21
20
|
|
22
|
-
|
23
|
-
|
24
|
-
|
21
|
+
export class HelixCurve extends Curve<Vector3> {
|
22
|
+
constructor();
|
23
|
+
}
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
25
|
+
export class TrefoilKnot extends Curve<Vector3> {
|
26
|
+
constructor(scale?: number);
|
27
|
+
scale: number;
|
28
|
+
}
|
30
29
|
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
30
|
+
export class TorusKnot extends Curve<Vector3> {
|
31
|
+
constructor(scale?: number);
|
32
|
+
scale: number;
|
33
|
+
}
|
35
34
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
35
|
+
export class CinquefoilKnot extends Curve<Vector3> {
|
36
|
+
constructor(scale?: number);
|
37
|
+
scale: number;
|
38
|
+
}
|
40
39
|
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
40
|
+
export class TrefoilPolynomialKnot extends Curve<Vector3> {
|
41
|
+
constructor(scale?: number);
|
42
|
+
scale: number;
|
43
|
+
}
|
45
44
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
45
|
+
export class FigureEightPolynomialKnot extends Curve<Vector3> {
|
46
|
+
constructor(scale?: number);
|
47
|
+
scale: number;
|
48
|
+
}
|
50
49
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
50
|
+
export class DecoratedTorusKnot4a extends Curve<Vector3> {
|
51
|
+
constructor(scale?: number);
|
52
|
+
scale: number;
|
53
|
+
}
|
55
54
|
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
55
|
+
export class DecoratedTorusKnot4b extends Curve<Vector3> {
|
56
|
+
constructor(scale?: number);
|
57
|
+
scale: number;
|
58
|
+
}
|
60
59
|
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
60
|
+
export class DecoratedTorusKnot5a extends Curve<Vector3> {
|
61
|
+
constructor(scale?: number);
|
62
|
+
scale: number;
|
63
|
+
}
|
65
64
|
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
}
|
65
|
+
export class DecoratedTorusKnot5c extends Curve<Vector3> {
|
66
|
+
constructor(scale?: number);
|
67
|
+
scale: number;
|
70
68
|
}
|
@@ -1 +1 @@
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("three");const e={klein:function(t,e
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0});var t=require("three"),s=require("./ParametricGeometry.cjs.js");const e={klein:function(t,s,e){let a,o;s*=Math.PI,t*=2*Math.PI,(s*=2)<Math.PI?(a=3*Math.cos(s)*(1+Math.sin(s))+2*(1-Math.cos(s)/2)*Math.cos(s)*Math.cos(t),o=-8*Math.sin(s)-2*(1-Math.cos(s)/2)*Math.sin(s)*Math.cos(t)):(a=3*Math.cos(s)*(1+Math.sin(s))+2*(1-Math.cos(s)/2)*Math.cos(t+Math.PI),o=-8*Math.sin(s));const n=-2*(1-Math.cos(s)/2)*Math.sin(t);e.set(a,n,o)},plane:function(t,s){return function(e,a,o){const n=e*t,c=a*s;o.set(n,0,c)}},mobius:function(t,s,e){t-=.5;const a=2*Math.PI*s,o=Math.cos(a)*(2+t*Math.cos(a/2)),n=Math.sin(a)*(2+t*Math.cos(a/2)),c=t*Math.sin(a/2);e.set(o,n,c)},mobius3d:function(t,s,e){t*=Math.PI,s*=2*Math.PI;const a=(t*=2)/2;let o=.125*Math.cos(s)*Math.cos(a)-.65*Math.sin(s)*Math.sin(a);const n=.125*Math.cos(s)*Math.sin(a)+.65*Math.sin(s)*Math.cos(a),c=(2.25+o)*Math.sin(t);o=(2.25+o)*Math.cos(t),e.set(o,c,n)}};e.TubeGeometry=class extends s.ParametricGeometry{constructor(s,e=64,a=1,o=8,n=!1){const c=e+1,h=s.computeFrenetFrames(e,n),i=h.tangents,r=h.normals,M=h.binormals,u=new t.Vector3;super((function(t,e,o){e*=2*Math.PI;const n=Math.floor(t*(c-1));s.getPointAt(t,u);const h=r[n],i=M[n],m=-a*Math.cos(e),l=a*Math.sin(e);u.x+=m*h.x+l*i.x,u.y+=m*h.y+l*i.y,u.z+=m*h.z+l*i.z,o.copy(u)}),e,o),this.tangents=i,this.normals=r,this.binormals=M,this.path=s,this.segments=e,this.radius=a,this.segmentsRadius=o,this.closed=n}},e.TorusKnotGeometry=class extends e.TubeGeometry{constructor(s=200,e=40,a=64,o=8,n=2,c=3){class h extends t.Curve{getPoint(e,a=new t.Vector3){const o=a;e*=2*Math.PI;const h=(1+.5*Math.cos(c*e))*Math.cos(n*e),i=(1+.5*Math.cos(c*e))*Math.sin(n*e),r=.5*Math.sin(c*e);return o.set(h,i,r).multiplyScalar(s)}}const i=a,r=o;super(new h,i,e,r,!0,!1),this.radius=s,this.tube=e,this.segmentsT=a,this.segmentsR=o,this.p=n,this.q=c}},e.SphereGeometry=class extends s.ParametricGeometry{constructor(t,s,e){super((function(s,e,a){s*=Math.PI,e*=2*Math.PI;const o=t*Math.sin(s)*Math.cos(e),n=t*Math.sin(s)*Math.sin(e),c=t*Math.cos(s);a.set(o,n,c)}),s,e)}},e.PlaneGeometry=class extends s.ParametricGeometry{constructor(t,s,e,a){super((function(e,a,o){const n=e*t,c=a*s;o.set(n,0,c)}),e,a)}},exports.ParametricGeometries=e;
|