three-base 2.0.169 → 2.0.175
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/FPScontrol.d.ts +55 -30
- package/FPScontrol.js +278 -225
- package/FPScontrol.ts +177 -127
- package/Ground1/Ground1.d.ts +4 -2
- package/Ground1/Ground1.js +77 -57
- package/Ground1/Ground1.ts +77 -57
- package/Mirror.js +0 -4
- package/Mirror.ts +0 -4
- package/MktMesh/MktMesh.d.ts +8 -3
- package/MktMesh/MktMesh.js +43 -14
- package/MktMesh/MktMesh.ts +40 -14
- package/MktMesh/mktMappingShader.d.ts +6 -5
- package/MktMesh/mktMappingShader.js +26 -19
- package/MktMesh/mktMappingShader.ts +28 -19
- package/MktMesh/mktShader.d.ts +127 -58
- package/MktMesh/mktShader.js +192 -117
- package/MktMesh/mktShader.ts +251 -127
- package/MktMesh/panoSlotRoster.d.ts +2 -2
- package/MktMesh/panoSlotRoster.js +9 -7
- package/MktMesh/panoSlotRoster.ts +9 -7
- package/MktMesh/panoTileStitcher.d.ts +20 -13
- package/MktMesh/panoTileStitcher.js +97 -76
- package/MktMesh/panoTileStitcher.ts +119 -90
- package/MktMesh/types.d.ts +5 -1
- package/MktMesh/types.ts +5 -1
- package/PipeMesh/PipeJoint.d.ts +22 -0
- package/PipeMesh/PipeJoint.js +33 -0
- package/PipeMesh/PipeJoint.ts +38 -0
- package/PipeMesh/PipeMesh.d.ts +94 -22
- package/PipeMesh/PipeMesh.js +192 -53
- package/PipeMesh/PipeMesh.ts +223 -76
- package/PipeMesh/PipeStraight.d.ts +19 -0
- package/PipeMesh/PipeStraight.js +34 -0
- package/PipeMesh/PipeStraight.ts +45 -0
- package/PipeMesh/axisSnap.d.ts +52 -0
- package/PipeMesh/axisSnap.js +52 -0
- package/PipeMesh/axisSnap.ts +93 -0
- package/PipeMesh/directRoute.d.ts +85 -0
- package/PipeMesh/directRoute.js +126 -0
- package/PipeMesh/directRoute.ts +190 -0
- package/PipeMesh/index.d.ts +6 -0
- package/PipeMesh/index.js +6 -0
- package/PipeMesh/index.ts +7 -1
- package/PipeMesh/pipeMaterial.d.ts +16 -0
- package/PipeMesh/pipeMaterial.js +23 -0
- package/PipeMesh/pipeMaterial.ts +26 -0
- package/ThreeBase.d.ts +2 -49
- package/ThreeBase.js +43 -164
- package/ThreeBase.ts +1176 -1314
- package/instanced/InstancedBatch.d.ts +14 -1
- package/instanced/InstancedBatch.js +53 -3
- package/instanced/InstancedBatch.ts +62 -3
- package/instanced/InstancedChild.d.ts +24 -0
- package/instanced/InstancedChild.js +40 -0
- package/instanced/InstancedChild.ts +41 -0
- package/instanced/InstancedGroup.d.ts +48 -0
- package/instanced/InstancedGroup.js +45 -1
- package/instanced/InstancedGroup.ts +85 -0
- package/package.json +2 -7
- package/pass/bloom_pass.js +7 -14
- package/pass/bloom_pass.ts +7 -16
- package/pass/cover_pass.js +7 -15
- package/pass/cover_pass.ts +7 -17
- package/pass/debugDepthState.d.ts +16 -8
- package/pass/debugDepthState.js +4 -0
- package/pass/debugDepthState.ts +27 -9
- package/pass/glow_pass.js +19 -110
- package/pass/glow_pass.ts +19 -115
- package/pass/ssao_pass.d.ts +14 -59
- package/pass/ssao_pass.js +66 -171
- package/pass/ssao_pass.ts +63 -207
- package/pass/stroke_pass.js +13 -16
- package/pass/stroke_pass.ts +14 -18
- package/shaders/baseDepthVisShader.d.ts +1 -1
- package/shaders/baseDepthVisShader.js +1 -1
- package/shaders/baseDepthVisShader.ts +1 -1
- package/shaders/debugDepthCompareShader.d.ts +2 -2
- package/shaders/debugDepthCompareShader.js +2 -2
- package/shaders/debugDepthCompareShader.ts +2 -2
- package/shaders/debugDepthJudgeShader.d.ts +1 -1
- package/shaders/debugDepthJudgeShader.js +1 -1
- package/shaders/debugDepthJudgeShader.ts +1 -1
- package/PipeMesh/PathGeometry.d.ts +0 -44
- package/PipeMesh/PathGeometry.js +0 -307
- package/PipeMesh/PathGeometry.ts +0 -343
- package/PipeMesh/PathPoint.d.ts +0 -17
- package/PipeMesh/PathPoint.js +0 -31
- package/PipeMesh/PathPoint.ts +0 -36
- package/PipeMesh/PathPointList.d.ts +0 -31
- package/PipeMesh/PathPointList.js +0 -209
- package/PipeMesh/PathPointList.ts +0 -227
- package/PipeMesh/PathTubeGeometry.d.ts +0 -25
- package/PipeMesh/PathTubeGeometry.js +0 -130
- package/PipeMesh/PathTubeGeometry.ts +0 -146
- package/WaterFlow/FloatingDuck.d.ts +0 -88
- package/WaterFlow/FloatingDuck.js +0 -307
- package/WaterFlow/FloatingDuck.ts +0 -445
- package/WaterFlow/GPUFluidSimulation.d.ts +0 -56
- package/WaterFlow/GPUFluidSimulation.js +0 -785
- package/WaterFlow/GPUFluidSimulation.ts +0 -827
- package/WaterFlow/ReservoirSystem.d.ts +0 -106
- package/WaterFlow/ReservoirSystem.js +0 -621
- package/WaterFlow/ReservoirSystem.ts +0 -754
- package/WaterFlow/SPHField.d.ts +0 -35
- package/WaterFlow/SPHField.js +0 -204
- package/WaterFlow/SPHField.ts +0 -228
- package/WaterFlow/ScreenSpaceFluidPass.d.ts +0 -69
- package/WaterFlow/ScreenSpaceFluidPass.js +0 -736
- package/WaterFlow/ScreenSpaceFluidPass.ts +0 -789
- package/WaterFlow/ShallowWaterSurface.d.ts +0 -45
- package/WaterFlow/ShallowWaterSurface.js +0 -441
- package/WaterFlow/ShallowWaterSurface.ts +0 -510
- package/WaterFlow/WaterFlow.d.ts +0 -87
- package/WaterFlow/WaterFlow.js +0 -171
- package/WaterFlow/WaterFlow.ts +0 -219
- package/WaterFlow/types.d.ts +0 -161
- package/WaterFlow/types.js +0 -1
- package/WaterFlow/types.ts +0 -189
- package/WaterFlow/waterFlowPass.d.ts +0 -3
- package/WaterFlow/waterFlowPass.js +0 -20
- package/WaterFlow/waterFlowPass.ts +0 -40
- package/shaders/debugExcludedShader.d.ts +0 -13
- package/shaders/debugExcludedShader.js +0 -46
- package/shaders/debugExcludedShader.ts +0 -48
package/FPScontrol.d.ts
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Camera, Clock, EventDispatcher, Quaternion, Ray, Raycaster, Scene, Vector3 } from "three";
|
|
2
|
-
import { Capsule } from "three/examples/jsm/math/Capsule";
|
|
3
2
|
import { LineSegments2 } from "three/examples/jsm/lines/LineSegments2.js";
|
|
4
3
|
import type { FPScontrolEventTypeMap } from "./EventMap";
|
|
5
4
|
/** 全局 FPScontrol 实例注册表。
|
|
@@ -158,7 +157,7 @@ export default class FPScontrol extends EventDispatcher<FPScontrolEventTypeMap>
|
|
|
158
157
|
/** 是否允许跳跃(空格触发)。false 时按空格不跳。默认 true */
|
|
159
158
|
jumpEnabled: boolean;
|
|
160
159
|
/** 跳跃初速度(垂直方向,m/s)。
|
|
161
|
-
* ⚠️ 2026-09-27 治「跳跃翻墙」:原 15(当时重力 30)→ 顶点 3.75m 远超墙高 2m
|
|
160
|
+
* ⚠️ 2026-09-27 治「跳跃翻墙」:原 15(当时重力 30)→ 顶点 3.75m 远超墙高 2m,跳起后视点越过墙顶
|
|
162
161
|
* 造成水平失明窗口,人带着水平速度飞越墙平面、落地在墙外侧被越推越远(探针实测 z=-187)。
|
|
163
162
|
* 定案 8 ⇒ 顶点 1.07m:仍可跳上 0.8m 高台,且 yBottom 恒低于「墙顶 2.0 − 步高 0.1」,
|
|
164
163
|
* 与主循环竖直门配合后失明窗口彻底消失。**顶点**才是防翻墙的那条线,不是初速度本身。
|
|
@@ -183,7 +182,7 @@ export default class FPScontrol extends EventDispatcher<FPScontrolEventTypeMap>
|
|
|
183
182
|
* 单步最大位移(连续碰撞检测用):每帧位移会被切成若干 ≤ 本值的小步,逐步做碰撞检测。
|
|
184
183
|
* ⚠️ 必须明显小于水平包络的可达距离(R=1.06 时沿法线 0.749~1.06m),否则掉帧时一步就跨过墙体。
|
|
185
184
|
* ⚠️ 本值同时决定「单次碰撞需要修正多深」——子步越小,玩家每次陷进墙里越浅,
|
|
186
|
-
*
|
|
185
|
+
* 迭代要走的格数就越少(一格 ≤ RETREAT_SKIN,总位移 ≈ 该子步的穿透深度),
|
|
187
186
|
* 不会出现「一下子回弹很多」。
|
|
188
187
|
* 0.25 → 0.1:单次最大穿透从 0.25 降到 0.1,回弹量同比变小(子步数相应上调)。
|
|
189
188
|
*/
|
|
@@ -284,13 +283,19 @@ export default class FPScontrol extends EventDispatcher<FPScontrolEventTypeMap>
|
|
|
284
283
|
* 即 R 就是「玩家中心离墙多远开始判定碰撞」的半径。若 R 小于停位需求,人必须**先陷进墙里**
|
|
285
284
|
* 才会被射线检测到,随后每帧被位置修正弹回一点 → 皇上所见「侧撞弹很远」。
|
|
286
285
|
* 探针实测(`tmp/TMP_R_side_effect.mjs`,斜 45° 撞墙角 / 正对单墙同口径):
|
|
287
|
-
* R=0.30 → 停位垂距 **0.2128
|
|
286
|
+
* R=0.30 → 停位垂距 **0.2128**,射线包络过小,容易贴墙。
|
|
288
287
|
* R=0.50 → 0.3541(贴到墙面) 每帧 0.036
|
|
289
|
-
* R=0.60 → 0.4243
|
|
288
|
+
* R=0.60 → 0.4243。
|
|
290
289
|
* R=0.80 → 0.5448 ✓ / R=1.06 → 0.7247 ✓(每帧修正仅 0.002)
|
|
291
|
-
* ⇒ 取 **0.6
|
|
290
|
+
* ⇒ 取 **0.6**:为射线包络保留足够的贴墙间距。
|
|
292
291
|
* ⭐ 2026-10-08 皇上旨:下限放宽到 **0.2**、上限收到 **1.0**(编辑框范围 0.2~1.0)。
|
|
293
292
|
* ⚠️ R<0.6 仍会贴墙穿模(R=0.5 贴到墙面、R=0.3 明显穿模),皇上按需拧;下限放开是给窄通道/贴墙演示留余地。
|
|
293
|
+
* ⭐ 2026-10-11 A 档复核(tmp→test/fpsCollideFit.test.ts,正对 1m 墙):
|
|
294
|
+
* 停位现在**逐位等于 R**(眼停在面前 R 处 ⇒ 身体入墙深度 = 0.35 − R,一条直线):
|
|
295
|
+
* R=0.20 → 入墙 **0.1500m** R=0.30 → **0.0500m** R=0.35 → **0.0000m**
|
|
296
|
+
* R=0.50 / 0.60 / 1.00 → **0.0000m**(身体不出面)
|
|
297
|
+
* ⇒ 抖不抖与 R 无关(A 档后全档抖动 0.0000m);R<0.35 只剩「身体陷进墙多少」这一件事,
|
|
298
|
+
* 皇上 10-11 定「旋钮不动,只把数字写明」⇒ 要真焊死得改这里的下限,别在推离公式里偷偷加夹取。
|
|
294
299
|
*/
|
|
295
300
|
static readonly MIN_HORIZONTAL_RAY_RADIUS: number;
|
|
296
301
|
/** 水平射线半径 R 的安全上限(⭐ 2026-10-08 皇上旨收到 1.0:再大包络远大于停位需求、回弹精度已够,白烧射程) */
|
|
@@ -338,18 +343,12 @@ export default class FPScontrol extends EventDispatcher<FPScontrolEventTypeMap>
|
|
|
338
343
|
*/
|
|
339
344
|
private _horizHit;
|
|
340
345
|
private _inputDirVec;
|
|
341
|
-
/**
|
|
342
|
-
* 本帧**进碰撞之前**的水平速率(米/秒)。皇上八旨要求「移动向量的长度保持不变」,
|
|
343
|
-
* 而碰撞会把 `playerVelocity.x/z` 清零,所以必须在 updatePlayer 入口先记一份。
|
|
344
|
-
*/
|
|
345
|
-
private _preCollideHorizSpeed;
|
|
346
346
|
private _previewRetreat;
|
|
347
|
-
/**
|
|
348
|
-
private
|
|
349
|
-
private _obsSavedEnd;
|
|
347
|
+
/** 开启预览那一刻的玩家视点位置(关闭时还原) */
|
|
348
|
+
private _obsSavedPosition;
|
|
350
349
|
/** 是否已有可还原的暂存(没进过观察模式就没有,避免构造期赋值把人还原到原点) */
|
|
351
350
|
private _obsHasSave;
|
|
352
|
-
/** 进观察模式(回弹预览 /
|
|
351
|
+
/** 进观察模式(回弹预览 / 单步):记下当前视点位置,退出时还原 */
|
|
353
352
|
private _saveObsPos;
|
|
354
353
|
/**
|
|
355
354
|
* 退观察模式:把位置整份还原到进入那一刻,并清掉水平速度。
|
|
@@ -379,25 +378,28 @@ export default class FPScontrol extends EventDispatcher<FPScontrolEventTypeMap>
|
|
|
379
378
|
debugHideSideRays: boolean;
|
|
380
379
|
private _tempEuler;
|
|
381
380
|
MAX_ITERATIONS: number;
|
|
382
|
-
/**
|
|
383
|
-
* 一个**物理小帧**里 while 最多走几轮就落地(皇上 2026-10-07 裁决「加一个每小帧轮数上限」)。
|
|
384
|
-
* 默认 500 = 与 `MAX_ITERATIONS` 同档 ⇒ 现状一字不变;拧小才是他要的「一次只修几格、下一小帧再修」。
|
|
385
|
-
* ⭐ 为什么拧格长没用(10-07 实测):常态帧会一直迭代到「8 条射线全部脱开」才落地 ⇒
|
|
386
|
-
* **每次落地量 = 这一小帧往墙里挤进多深**,与一格多远无关(格长 0.03→0.01 判级一字未变)。
|
|
387
|
-
* 一格 = 一轮里每条命中各推的距离 ⇒ 要限制"一次修多少"只能限制**轮数**。
|
|
388
|
-
* ⚠️ 代价(不许瞒):出水量 = 轮数 × 每轮票数 × 格长,默认每帧 2 个小帧。拧到 1 轮 + 1cm 格长 ⇒
|
|
389
|
-
* 一秒最多挤出约 120cm 的量看着够,但高速冲刺顶墙时「这一帧挤进来的」可能比「两小帧推出去的」多
|
|
390
|
-
* ⇒ 越陷越深,格长拧到 0.005 那一档体检台 40 号现场就是这么判 **❌穿墙** 的。
|
|
391
|
-
* 所以默认不动,先让他在线上拧着看手感。
|
|
392
|
-
*/
|
|
393
|
-
ROUNDS_PER_SUBSTEP: number;
|
|
394
381
|
private _frameIterBudget;
|
|
395
382
|
private _tempQuat;
|
|
396
383
|
private _raycaster;
|
|
397
384
|
private _probeRaycaster;
|
|
398
385
|
private _tempVec3;
|
|
399
386
|
private _candPos;
|
|
400
|
-
|
|
387
|
+
/**
|
|
388
|
+
* ⭐ 2026-10-11 A 档(解析贴合)专用临时量,全部复用避免 GC:
|
|
389
|
+
* · `_fitNormal` = 助手里「本轮这条命中面」指向玩家一侧的单位水平法线;
|
|
390
|
+
* · `_horizNormal` = 本轮**欠距最大**那面的法线(推离方向 + 速度闸门共用一个方向,绝不各算一遍);
|
|
391
|
+
* · `_fitVec` = (候选中心 − 命中点) 临时量;
|
|
392
|
+
* · `_rhombusAxisX/_rhombusAxisZ` = 本帧菱形两条对角轴的世界方向(随 yaw 转,恒水平)。
|
|
393
|
+
*/
|
|
394
|
+
private _fitNormal;
|
|
395
|
+
private _horizNormal;
|
|
396
|
+
/** 本子步实际推离过的不同墙面法线。墙角需要同时裁掉两个朝内速度分量,
|
|
397
|
+
* 不能只用最后一次命中的面,否则两个面会在相邻帧交替抢占速度闸门而抖动。 */
|
|
398
|
+
private _horizContactNormals;
|
|
399
|
+
private _horizContactCount;
|
|
400
|
+
private _fitVec;
|
|
401
|
+
private _rhombusAxisX;
|
|
402
|
+
private _rhombusAxisZ;
|
|
401
403
|
private _tempVec4;
|
|
402
404
|
private _tempVec5;
|
|
403
405
|
/**
|
|
@@ -447,6 +449,28 @@ export default class FPScontrol extends EventDispatcher<FPScontrolEventTypeMap>
|
|
|
447
449
|
* @returns null = 拿不到法线(无 face 或零向量)→ 调用方按「维持旧行为」处理
|
|
448
450
|
*/
|
|
449
451
|
private _faceNormalWorldY;
|
|
452
|
+
/**
|
|
453
|
+
* ⭐⭐ 2026-10-11 皇上改判 A 档「解析贴合」:一条水平命中射线**沿本面法线还差多少才脱开**。
|
|
454
|
+
* 同时把该面的单位水平法线(指向玩家所在的一侧)写进 `this._fitNormal` 供调用方取用。
|
|
455
|
+
*
|
|
456
|
+
* 为什么要它:旧写法每轮对每条命中射线**整格**推 `RETREAT_SKIN`(1cm),而退出判据是「8 条射线
|
|
457
|
+
* 全部脱开」⇒ 落点必然**过冲最多一格**(实测弹回 1.05cm),下一帧再从过冲处走回来 =
|
|
458
|
+
* 皇上所见「顶进去又弹回来一直抖」(无头复现:抖峰峰 0.0193m,60fps 下 34 次往复/40 帧,
|
|
459
|
+
* 与 R / 墙厚 / 入射角 / 帧率全无关)。按欠距推到「刚好脱开」就不再有过冲。
|
|
460
|
+
*
|
|
461
|
+
* 判据(恒等式,不是拍的):碰撞包络是顶点在 ±R·x̂、±R·ẑ 的**菱形**,它沿方向 n 的支持距离
|
|
462
|
+
* req = R·max(|n·x̂|, |n·ẑ|) ∈ [R/√2, R]。候选中心沿 n 到命中面的垂距为 perp(在实体内为负),
|
|
463
|
+
* 那么「还差 deficit = req − perp」推满就正好贴在包络边上。
|
|
464
|
+
*
|
|
465
|
+
* 法线取向:**与射线行进方向相反**的一侧(three 对 FrontSide 只回正面命中,所以常态天然满足;
|
|
466
|
+
* DoubleSide 拿到背面时按此翻号)。⚠️ 不能按「指向中心」翻号——中心已经陷进 1m 厚墙板时,
|
|
467
|
+
* 那样翻会把人往墙体更深处推(旧写法正是靠两侧票互相抵消才卡在板正中)。
|
|
468
|
+
*
|
|
469
|
+
* @returns deficit(米,≤0 = 已经脱开)。退化场景返回 0:
|
|
470
|
+
* · 拿不到面法线(无 face / 零向量)
|
|
471
|
+
* · 命中面近乎水平(法线压平后是零向量,如贴着地面/台面掠射)⇒ 不该把它当墙侧推
|
|
472
|
+
*/
|
|
473
|
+
private _horizFitDeficit;
|
|
450
474
|
/**
|
|
451
475
|
* 脚下深探:往下问 VOID_PROBE_DOWN 这么长一段,有没有地面(2026-09-25,穿地板自救用)。
|
|
452
476
|
* @returns true = 下方有地面 → 只是正常腾空/下落,不是穿模
|
|
@@ -469,7 +493,8 @@ export default class FPScontrol extends EventDispatcher<FPScontrolEventTypeMap>
|
|
|
469
493
|
static markAllCollidersDirty(): void;
|
|
470
494
|
/** 复位玩家到指定世界坐标(默认原点),清空速度;第一人称 demo 的"回到起点"用得到 */
|
|
471
495
|
resetPlayer(position?: Vector3): void;
|
|
472
|
-
|
|
496
|
+
/** 玩家视点。所有碰撞射线均以此点为局部原点。 */
|
|
497
|
+
playerPosition: Vector3;
|
|
473
498
|
clock: Clock;
|
|
474
499
|
prePlayerVelocity: Vector3;
|
|
475
500
|
playerVelocity: Vector3;
|
|
@@ -496,7 +521,7 @@ export default class FPScontrol extends EventDispatcher<FPScontrolEventTypeMap>
|
|
|
496
521
|
* `depthWrite:true`(three-base/Ground1/Ground1.ts:107);哪天地板改回
|
|
497
522
|
* transparent + depthWrite:false,射线线会重新穿地浮出来。
|
|
498
523
|
* - 回弹方向线(黄→白)= **false**:「回弹向量线保持穿透显示」。
|
|
499
|
-
*
|
|
524
|
+
* 它是「本帧要看的向量」,起点在玩家位置、方向常指着墙里,开遮挡会被墙面
|
|
500
525
|
* 或墙面吃掉半截 → 观察目的直接落空,故保持常显在最前。
|
|
501
526
|
*/
|
|
502
527
|
private _createDebugLine;
|