mapspinner 1.1.1
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/LICENSE +21 -0
- package/README.md +91 -0
- package/package.json +47 -0
- package/src/lib/assets/bark/README.md +8 -0
- package/src/lib/assets/bark/birch_ao_1k.jpg +0 -0
- package/src/lib/assets/bark/birch_color_1k.jpg +0 -0
- package/src/lib/assets/bark/birch_normal_1k.jpg +0 -0
- package/src/lib/assets/bark/birch_roughness_1k.jpg +0 -0
- package/src/lib/assets/bark/oak_ao_1k.jpg +0 -0
- package/src/lib/assets/bark/oak_color_1k.jpg +0 -0
- package/src/lib/assets/bark/oak_normal_1k.jpg +0 -0
- package/src/lib/assets/bark/oak_roughness_1k.jpg +0 -0
- package/src/lib/assets/bark/pine_ao_1k.jpg +0 -0
- package/src/lib/assets/bark/pine_color_1k.jpg +0 -0
- package/src/lib/assets/bark/pine_normal_1k.jpg +0 -0
- package/src/lib/assets/bark/pine_roughness_1k.jpg +0 -0
- package/src/lib/assets/bark/willow_ao_1k.jpg +0 -0
- package/src/lib/assets/bark/willow_color_1k.jpg +0 -0
- package/src/lib/assets/bark/willow_normal_1k.jpg +0 -0
- package/src/lib/assets/bark/willow_roughness_1k.jpg +0 -0
- package/src/lib/assets/leaves/ash_color.png +0 -0
- package/src/lib/assets/leaves/aspen_color.png +0 -0
- package/src/lib/assets/leaves/oak_color.png +0 -0
- package/src/lib/assets/leaves/pine_color.png +0 -0
- package/src/lib/branch.js +28 -0
- package/src/lib/enums.js +23 -0
- package/src/lib/index.js +4 -0
- package/src/lib/options.js +198 -0
- package/src/lib/presets/ash_large.json +96 -0
- package/src/lib/presets/ash_medium.json +96 -0
- package/src/lib/presets/ash_small.json +96 -0
- package/src/lib/presets/aspen_large.json +96 -0
- package/src/lib/presets/aspen_medium.json +96 -0
- package/src/lib/presets/aspen_small.json +96 -0
- package/src/lib/presets/bush_1.json +96 -0
- package/src/lib/presets/bush_2.json +96 -0
- package/src/lib/presets/bush_3.json +96 -0
- package/src/lib/presets/index.js +47 -0
- package/src/lib/presets/oak_large.json +96 -0
- package/src/lib/presets/oak_medium.json +96 -0
- package/src/lib/presets/oak_small.json +96 -0
- package/src/lib/presets/pine_large.json +96 -0
- package/src/lib/presets/pine_medium.json +96 -0
- package/src/lib/presets/pine_small.json +96 -0
- package/src/lib/presets/trellis.json +112 -0
- package/src/lib/rng.js +22 -0
- package/src/lib/textures.js +105 -0
- package/src/lib/tree.js +1062 -0
- package/src/lib/trellis.js +135 -0
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
{
|
|
2
|
+
"seed": 41563,
|
|
3
|
+
"type": "deciduous",
|
|
4
|
+
"bark": {
|
|
5
|
+
"type": "oak",
|
|
6
|
+
"tint": 16777215,
|
|
7
|
+
"flatShading": false,
|
|
8
|
+
"textured": true,
|
|
9
|
+
"textureScale": {
|
|
10
|
+
"x": 1,
|
|
11
|
+
"y": 8
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"branch": {
|
|
15
|
+
"levels": 3,
|
|
16
|
+
"angle": {
|
|
17
|
+
"1": 26,
|
|
18
|
+
"2": 79,
|
|
19
|
+
"3": 0
|
|
20
|
+
},
|
|
21
|
+
"children": {
|
|
22
|
+
"0": 7,
|
|
23
|
+
"1": 5,
|
|
24
|
+
"2": 1
|
|
25
|
+
},
|
|
26
|
+
"force": {
|
|
27
|
+
"direction": {
|
|
28
|
+
"x": 0,
|
|
29
|
+
"y": 1,
|
|
30
|
+
"z": 0
|
|
31
|
+
},
|
|
32
|
+
"strength": 0.026
|
|
33
|
+
},
|
|
34
|
+
"gnarliness": {
|
|
35
|
+
"0": 0,
|
|
36
|
+
"1": 0.02,
|
|
37
|
+
"2": -0.41,
|
|
38
|
+
"3": 0.09
|
|
39
|
+
},
|
|
40
|
+
"length": {
|
|
41
|
+
"0": 4.8,
|
|
42
|
+
"1": 16.9,
|
|
43
|
+
"2": 11.3,
|
|
44
|
+
"3": 11.1
|
|
45
|
+
},
|
|
46
|
+
"radius": {
|
|
47
|
+
"0": 0.27,
|
|
48
|
+
"1": 0.71,
|
|
49
|
+
"2": 0.84,
|
|
50
|
+
"3": 0.48
|
|
51
|
+
},
|
|
52
|
+
"sections": {
|
|
53
|
+
"0": 6,
|
|
54
|
+
"1": 12,
|
|
55
|
+
"2": 10,
|
|
56
|
+
"3": 4
|
|
57
|
+
},
|
|
58
|
+
"segments": {
|
|
59
|
+
"0": 3,
|
|
60
|
+
"1": 3,
|
|
61
|
+
"2": 3,
|
|
62
|
+
"3": 3
|
|
63
|
+
},
|
|
64
|
+
"start": {
|
|
65
|
+
"1": 0.19,
|
|
66
|
+
"2": 0.1,
|
|
67
|
+
"3": 0.06
|
|
68
|
+
},
|
|
69
|
+
"taper": {
|
|
70
|
+
"0": 0.6,
|
|
71
|
+
"1": 0.5,
|
|
72
|
+
"2": 0.5,
|
|
73
|
+
"3": 0.5
|
|
74
|
+
},
|
|
75
|
+
"twist": {
|
|
76
|
+
"0": -0.02,
|
|
77
|
+
"1": -0.01,
|
|
78
|
+
"2": 0.09,
|
|
79
|
+
"3": 0
|
|
80
|
+
}
|
|
81
|
+
},
|
|
82
|
+
"leaves": {
|
|
83
|
+
"type": "ash",
|
|
84
|
+
"billboard": "single",
|
|
85
|
+
"angle": 30,
|
|
86
|
+
"count": 13,
|
|
87
|
+
"start": 0,
|
|
88
|
+
"size": 1.7,
|
|
89
|
+
"sizeVariance": 0.5,
|
|
90
|
+
"tint": 15204310,
|
|
91
|
+
"alphaTest": 0.5
|
|
92
|
+
},
|
|
93
|
+
"trellis": {
|
|
94
|
+
"enabled": true,
|
|
95
|
+
"position": {
|
|
96
|
+
"x": 0,
|
|
97
|
+
"y": 0,
|
|
98
|
+
"z": 1.3
|
|
99
|
+
},
|
|
100
|
+
"width": 20,
|
|
101
|
+
"height": 32,
|
|
102
|
+
"spacing": 4,
|
|
103
|
+
"force": {
|
|
104
|
+
"strength": 0.014,
|
|
105
|
+
"maxDistance": 18.2,
|
|
106
|
+
"falloff": 1.3
|
|
107
|
+
},
|
|
108
|
+
"cylinderRadius": 0.08,
|
|
109
|
+
"visible": true,
|
|
110
|
+
"color": 5519173
|
|
111
|
+
}
|
|
112
|
+
}
|
package/src/lib/rng.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
export default class RNG {
|
|
2
|
+
m_w = 123456789;
|
|
3
|
+
m_z = 987654321;
|
|
4
|
+
mask = 0xffffffff;
|
|
5
|
+
|
|
6
|
+
constructor(seed) {
|
|
7
|
+
this.m_w = (123456789 + seed) & this.mask;
|
|
8
|
+
this.m_z = (987654321 - seed) & this.mask;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Returns a random number between min and max
|
|
13
|
+
*/
|
|
14
|
+
random(max = 1, min = 0) {
|
|
15
|
+
this.m_z = (36969 * (this.m_z & 65535) + (this.m_z >> 16)) & this.mask;
|
|
16
|
+
this.m_w = (18000 * (this.m_w & 65535) + (this.m_w >> 16)) & this.mask;
|
|
17
|
+
let result = ((this.m_z << 16) + (this.m_w & 65535)) >>> 0;
|
|
18
|
+
result /= 4294967296;
|
|
19
|
+
|
|
20
|
+
return (max - min) * result + min;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
|
|
3
|
+
const birchAo = new URL('./assets/bark/birch_ao_1k.jpg', import.meta.url).href;
|
|
4
|
+
const birchColor = new URL('./assets/bark/birch_color_1k.jpg', import.meta.url).href;
|
|
5
|
+
const birchNormal = new URL('./assets/bark/birch_normal_1k.jpg', import.meta.url).href;
|
|
6
|
+
const birchRoughness = new URL('./assets/bark/birch_roughness_1k.jpg', import.meta.url).href;
|
|
7
|
+
|
|
8
|
+
const oakAo = new URL('./assets/bark/oak_ao_1k.jpg', import.meta.url).href;
|
|
9
|
+
const oakColor = new URL('./assets/bark/oak_color_1k.jpg', import.meta.url).href;
|
|
10
|
+
const oakNormal = new URL('./assets/bark/oak_normal_1k.jpg', import.meta.url).href;
|
|
11
|
+
const oakRoughness = new URL('./assets/bark/oak_roughness_1k.jpg', import.meta.url).href;
|
|
12
|
+
|
|
13
|
+
const pineAo = new URL('./assets/bark/pine_ao_1k.jpg', import.meta.url).href;
|
|
14
|
+
const pineColor = new URL('./assets/bark/pine_color_1k.jpg', import.meta.url).href;
|
|
15
|
+
const pineNormal = new URL('./assets/bark/pine_normal_1k.jpg', import.meta.url).href;
|
|
16
|
+
const pineRoughness = new URL('./assets/bark/pine_roughness_1k.jpg', import.meta.url).href;
|
|
17
|
+
|
|
18
|
+
const willowAo = new URL('./assets/bark/willow_ao_1k.jpg', import.meta.url).href;
|
|
19
|
+
const willowColor = new URL('./assets/bark/willow_color_1k.jpg', import.meta.url).href;
|
|
20
|
+
const willowNormal = new URL('./assets/bark/willow_normal_1k.jpg', import.meta.url).href;
|
|
21
|
+
const willowRoughness = new URL('./assets/bark/willow_roughness_1k.jpg', import.meta.url).href;
|
|
22
|
+
|
|
23
|
+
const ashLeaves = new URL('./assets/leaves/ash_color.png', import.meta.url).href;
|
|
24
|
+
const aspenLeaves = new URL('./assets/leaves/aspen_color.png', import.meta.url).href;
|
|
25
|
+
const oakLeaves = new URL('./assets/leaves/oak_color.png', import.meta.url).href;
|
|
26
|
+
const pineLeaves = new URL('./assets/leaves/pine_color.png', import.meta.url).href;
|
|
27
|
+
|
|
28
|
+
const textureLoader = new THREE.TextureLoader();
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Gets a bark texture for the specified bark type
|
|
32
|
+
* @param {string} barkType
|
|
33
|
+
* @param {'ao' | 'color' | 'normal' | 'roughness'} fileType
|
|
34
|
+
* @param {THREE.Vector2} scale
|
|
35
|
+
* @returns
|
|
36
|
+
*/
|
|
37
|
+
export function getBarkTexture(barkType, fileType, scale = { x: 1, y: 1 }) {
|
|
38
|
+
const texture = textures.bark[barkType][fileType];
|
|
39
|
+
texture.wrapS = THREE.RepeatWrapping;
|
|
40
|
+
texture.wrapT = THREE.RepeatWrapping;
|
|
41
|
+
texture.repeat.x = scale.x;
|
|
42
|
+
texture.repeat.y = 1 / scale.y;
|
|
43
|
+
return texture;
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
/**
|
|
47
|
+
* Gets the leaf texture for the specified leaf type
|
|
48
|
+
* @param {string} leafType
|
|
49
|
+
* @returns
|
|
50
|
+
*/
|
|
51
|
+
export function getLeafTexture(leafType) {
|
|
52
|
+
return textures.leaves[leafType];
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
*
|
|
57
|
+
* @param {string} url Path to texture
|
|
58
|
+
* @param {THREE.Vector2} scale Scale of the texture repeat
|
|
59
|
+
* @param {boolean} srgb Set to true to set texture color space to SRGB
|
|
60
|
+
* @returns {THREE.Texture}
|
|
61
|
+
*/
|
|
62
|
+
const loadTexture = (url, srgb = true) => {
|
|
63
|
+
const texture = textureLoader.load(url);
|
|
64
|
+
texture.premultiplyAlpha = true;
|
|
65
|
+
if (srgb) {
|
|
66
|
+
texture.colorSpace = THREE.SRGBColorSpace;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
return texture;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
const textures = {
|
|
73
|
+
"bark": {
|
|
74
|
+
"birch": {
|
|
75
|
+
"ao": loadTexture(birchAo, false),
|
|
76
|
+
"color": loadTexture(birchColor),
|
|
77
|
+
"normal": loadTexture(birchNormal, false),
|
|
78
|
+
"roughness": loadTexture(birchRoughness, false),
|
|
79
|
+
},
|
|
80
|
+
"oak": {
|
|
81
|
+
"ao": loadTexture(oakAo, false),
|
|
82
|
+
"color": loadTexture(oakColor),
|
|
83
|
+
"normal": loadTexture(oakNormal, false),
|
|
84
|
+
"roughness": loadTexture(oakRoughness, false),
|
|
85
|
+
},
|
|
86
|
+
"pine": {
|
|
87
|
+
"ao": loadTexture(pineAo, false),
|
|
88
|
+
"color": loadTexture(pineColor),
|
|
89
|
+
"normal": loadTexture(pineNormal, false),
|
|
90
|
+
"roughness": loadTexture(pineRoughness, false),
|
|
91
|
+
},
|
|
92
|
+
"willow": {
|
|
93
|
+
"ao": loadTexture(willowAo, false),
|
|
94
|
+
"color": loadTexture(willowColor),
|
|
95
|
+
"normal": loadTexture(willowNormal, false),
|
|
96
|
+
"roughness": loadTexture(willowRoughness, false),
|
|
97
|
+
}
|
|
98
|
+
},
|
|
99
|
+
"leaves": {
|
|
100
|
+
"ash": loadTexture(ashLeaves),
|
|
101
|
+
"aspen": loadTexture(aspenLeaves),
|
|
102
|
+
"oak": loadTexture(oakLeaves),
|
|
103
|
+
"pine": loadTexture(pineLeaves)
|
|
104
|
+
}
|
|
105
|
+
};
|