@woosh/meep-engine 2.119.128 → 2.119.129
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/package.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BVH.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/BVH.js"],"names":[],"mappings":"AAQA,4BAA6B,CAAC,CAAC;AAC/B,6BAA8B,CAAC,CAAC;AAChC,6BAA8B,CAAC,CAAC;AAChC,4BAA6B,CAAC,CAAC;AAE/B;;;;;GAKG;AACH,+BAFU,MAAM,CAE+B;AAE/C;;;GAGG;AACH,wBAFU,MAAM,CAEoB;AAcpC;;;;;GAKG;AACH,iCAFU,MAAM,CAEqB;AAiBrC;;;;;;GAMG;AACH;IAEI;;;;OAIG;IACH,sBAA2E;IAE3E;;;;;OAKG;IACH,mBAFa,WAAW,CAIvB;IAED;;;;OAIG;IACH,uBAAsD;IAEtD;;;OAGG;IACH,oBAFY,YAAY,CAIvB;IAED;;;;OAIG;IACH,sBAAoD;IAEpD;;;;OAIG;IACH,mBAA8B;IAE9B;;;;OAIG;IACH,eAAW;IAEX;;;;OAIG;IACH,eAAY;IAEZ;;;;OAIG;IACH,uBAAmB;IAEnB;;;;OAIG;IACH,eAAmB;IAUnB;;;OAGG;IACH,YAFW,MAAM,EAIhB;IAdD;;;OAGG;IACH,YAFa,MAAM,CAIlB;IAUD;;;;OAIG;IACH,YAFY,MAAM,CAIjB;IAUD;;;OAGG;IACH,qBAFW,MAAM,EAQhB;IAlBD;;;OAGG;IACH,qBAFa,MAAM,CAIlB;IAcD,wBAgBC;IAED;;;;OAIG;IACH,uBA6BC;IAED;;OAEG;IACH,aAIC;IAED;;;OAGG;IACH,iBAFa,MAAM,CAqDlB;IAED;;;;OAIG;IACH,iBAFW,MAAM,QAMhB;IAED;;;;OAIG;IACH,iBAHW,MAAM,GACJ,OAAO,CAOnB;IAED;;;;OAIG;IACH,uBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,uBAHW,MAAM,SACN,MAAM,QAOhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAED;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,sBAHW,MAAM,UACN,MAAM,QAIhB;IAGD;;;;OAIG;IACH,oBAHW,MAAM,GACJ,MAAM,CAKlB;IAED;;;;OAIG;IACH,oBAHW,MAAM,UACN,MAAM,QAKhB;IAED;;;;OAIG;IACH,kBAHW,MAAM,UACN,MAAM,EAAE,GAAC,YAAY,QAe/B;IAED;;;;OAIG;IACH,kBAHW,MAAM,QACN,MAAM,EAAE,GAAC,SAAS,CAAC,MAAM,CAAC,GAAC,KAAK,QAsB1C;IAED;;;;OAIG;IACH,mBAHW,MAAM,QACN,MAAM,EAAE,QAWlB;IAED;;;;;;;;;OASG;IACH,4BARW,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,MACN,MAAM,QAmBhB;IAED;;;;OAIG;IACH,0BAHW,MAAM,GACJ,MAAM,CAoBlB;IAED;;;;;OAKG;IACH,wCAJW,MAAM,WACN,MAAM,GACJ,MAAM,CAoClB;IAED;;;;;OAKG;IACH,oCAJW,MAAM,WACN,MAAM,WACN,MAAM,QAwChB;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,IAAI,CA0GhB;IAED;;;;;OAKG;IACH,wBAqBC;IAED;;;;OAIG;IACH,yBA4BC;IAED;;;;OAIG;IACH,kBAHW,MAAM,GACJ,IAAI,CA6ChB;IAED;;;;;;OAMG;IACH,gBAoMC;IAED
|
|
1
|
+
{"version":3,"file":"BVH.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/BVH.js"],"names":[],"mappings":"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"}
|
|
@@ -1067,7 +1067,8 @@ export class BVH {
|
|
|
1067
1067
|
}
|
|
1068
1068
|
|
|
1069
1069
|
/**
|
|
1070
|
-
*
|
|
1070
|
+
* Utility method for assigning both children at once
|
|
1071
|
+
* Children must be valid nodes (non-null)
|
|
1071
1072
|
* @param {number} parent
|
|
1072
1073
|
* @param {number} child_1
|
|
1073
1074
|
* @param {number} child_2
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ebvh_optimize_treelet.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/ebvh_optimize_treelet.js"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ebvh_optimize_treelet.d.ts","sourceRoot":"","sources":["../../../../../src/core/bvh2/bvh3/ebvh_optimize_treelet.js"],"names":[],"mappings":"AAoNA;;;;;;;GAOG;AACH,2CAJW,GAAG,QACH,MAAM,iBACN,MAAM,QA0IhB"}
|
|
@@ -5,7 +5,7 @@ import { NULL_NODE } from "./BVH.js";
|
|
|
5
5
|
|
|
6
6
|
const scratch_areas = new Float32Array(256);
|
|
7
7
|
const scratch_cost = new Float32Array(256);
|
|
8
|
-
const
|
|
8
|
+
const scratch_partitions = new Uint32Array(256);
|
|
9
9
|
const scratch_treelet = new Uint32Array(16);
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -23,7 +23,7 @@ function assemble_mask(bvh, leaves, mask) {
|
|
|
23
23
|
return leaves[leaf_index];
|
|
24
24
|
}
|
|
25
25
|
|
|
26
|
-
let partitioning_left =
|
|
26
|
+
let partitioning_left = scratch_partitions[mask];
|
|
27
27
|
let partition_right = mask & ~(partitioning_left);
|
|
28
28
|
|
|
29
29
|
const parent = bvh.allocate_node();
|
|
@@ -45,7 +45,7 @@ function assemble_mask(bvh, leaves, mask) {
|
|
|
45
45
|
*/
|
|
46
46
|
function rebuild_treelet(bvh, root, leaves, mask) {
|
|
47
47
|
|
|
48
|
-
let partitioning_left =
|
|
48
|
+
let partitioning_left = scratch_partitions[mask];
|
|
49
49
|
let partition_right = mask & ~(partitioning_left);
|
|
50
50
|
|
|
51
51
|
bvh.node_assign_children(root,
|
|
@@ -54,6 +54,11 @@ function rebuild_treelet(bvh, root, leaves, mask) {
|
|
|
54
54
|
);
|
|
55
55
|
}
|
|
56
56
|
|
|
57
|
+
//cost of traversing an intermediate node
|
|
58
|
+
const SAH_COST_INTERMEDIATE = 1.2;
|
|
59
|
+
// cost of performing ray/triangle test
|
|
60
|
+
const SAH_COST_TRIANGLE = 1;
|
|
61
|
+
|
|
57
62
|
/**
|
|
58
63
|
*
|
|
59
64
|
* @param {BVH} bvh
|
|
@@ -80,7 +85,13 @@ function optimize_treelet(bvh, root, leaves, leaf_count) {
|
|
|
80
85
|
|
|
81
86
|
// Initialize costs of individual leaves
|
|
82
87
|
for (let i = 0; i < leaf_count; i++) {
|
|
83
|
-
|
|
88
|
+
// TODO implement a full cost heuristic
|
|
89
|
+
const leaf = leaves[i];
|
|
90
|
+
|
|
91
|
+
// we use height, which is available, as a proxy for triangle count
|
|
92
|
+
const triangle_count = bvh.node_get_height(leaf);
|
|
93
|
+
|
|
94
|
+
scratch_cost[1 << i] = SAH_COST_TRIANGLE * bvh.node_get_surface_area(leaf) * triangle_count;
|
|
84
95
|
}
|
|
85
96
|
|
|
86
97
|
// Optimize every subset of leaves
|
|
@@ -92,26 +103,28 @@ function optimize_treelet(bvh, root, leaves, leaf_count) {
|
|
|
92
103
|
|
|
93
104
|
// Try each way of partitioning the leaves
|
|
94
105
|
let best_cost = Infinity;
|
|
95
|
-
let
|
|
106
|
+
let best_partition = 0;
|
|
96
107
|
|
|
97
108
|
const delta = (s - 1) & s;
|
|
98
|
-
let
|
|
109
|
+
let partition = (-delta) & s;
|
|
99
110
|
|
|
100
111
|
do {
|
|
101
|
-
const cost = scratch_cost[
|
|
112
|
+
const cost = scratch_cost[partition] + scratch_cost[s ^ partition];
|
|
102
113
|
|
|
103
114
|
if (cost < best_cost) {
|
|
104
115
|
best_cost = cost;
|
|
105
|
-
|
|
116
|
+
best_partition = partition;
|
|
106
117
|
}
|
|
107
118
|
|
|
108
|
-
|
|
119
|
+
partition = (partition - delta) & s;
|
|
109
120
|
|
|
110
|
-
} while (
|
|
121
|
+
} while (partition !== 0)
|
|
111
122
|
|
|
112
123
|
// Calculate final SAH cost (Equation 2)
|
|
113
|
-
|
|
114
|
-
|
|
124
|
+
const sah_heuristic = SAH_COST_INTERMEDIATE * scratch_areas[s] + best_cost
|
|
125
|
+
|
|
126
|
+
scratch_cost[s] = sah_heuristic;
|
|
127
|
+
scratch_partitions[s] = best_partition;
|
|
115
128
|
}
|
|
116
129
|
}
|
|
117
130
|
|
|
@@ -120,8 +133,6 @@ function optimize_treelet(bvh, root, leaves, leaf_count) {
|
|
|
120
133
|
}
|
|
121
134
|
|
|
122
135
|
|
|
123
|
-
|
|
124
|
-
|
|
125
136
|
/**
|
|
126
137
|
*
|
|
127
138
|
* @param {BVH} bvh
|