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.
Files changed (49) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +91 -0
  3. package/package.json +47 -0
  4. package/src/lib/assets/bark/README.md +8 -0
  5. package/src/lib/assets/bark/birch_ao_1k.jpg +0 -0
  6. package/src/lib/assets/bark/birch_color_1k.jpg +0 -0
  7. package/src/lib/assets/bark/birch_normal_1k.jpg +0 -0
  8. package/src/lib/assets/bark/birch_roughness_1k.jpg +0 -0
  9. package/src/lib/assets/bark/oak_ao_1k.jpg +0 -0
  10. package/src/lib/assets/bark/oak_color_1k.jpg +0 -0
  11. package/src/lib/assets/bark/oak_normal_1k.jpg +0 -0
  12. package/src/lib/assets/bark/oak_roughness_1k.jpg +0 -0
  13. package/src/lib/assets/bark/pine_ao_1k.jpg +0 -0
  14. package/src/lib/assets/bark/pine_color_1k.jpg +0 -0
  15. package/src/lib/assets/bark/pine_normal_1k.jpg +0 -0
  16. package/src/lib/assets/bark/pine_roughness_1k.jpg +0 -0
  17. package/src/lib/assets/bark/willow_ao_1k.jpg +0 -0
  18. package/src/lib/assets/bark/willow_color_1k.jpg +0 -0
  19. package/src/lib/assets/bark/willow_normal_1k.jpg +0 -0
  20. package/src/lib/assets/bark/willow_roughness_1k.jpg +0 -0
  21. package/src/lib/assets/leaves/ash_color.png +0 -0
  22. package/src/lib/assets/leaves/aspen_color.png +0 -0
  23. package/src/lib/assets/leaves/oak_color.png +0 -0
  24. package/src/lib/assets/leaves/pine_color.png +0 -0
  25. package/src/lib/branch.js +28 -0
  26. package/src/lib/enums.js +23 -0
  27. package/src/lib/index.js +4 -0
  28. package/src/lib/options.js +198 -0
  29. package/src/lib/presets/ash_large.json +96 -0
  30. package/src/lib/presets/ash_medium.json +96 -0
  31. package/src/lib/presets/ash_small.json +96 -0
  32. package/src/lib/presets/aspen_large.json +96 -0
  33. package/src/lib/presets/aspen_medium.json +96 -0
  34. package/src/lib/presets/aspen_small.json +96 -0
  35. package/src/lib/presets/bush_1.json +96 -0
  36. package/src/lib/presets/bush_2.json +96 -0
  37. package/src/lib/presets/bush_3.json +96 -0
  38. package/src/lib/presets/index.js +47 -0
  39. package/src/lib/presets/oak_large.json +96 -0
  40. package/src/lib/presets/oak_medium.json +96 -0
  41. package/src/lib/presets/oak_small.json +96 -0
  42. package/src/lib/presets/pine_large.json +96 -0
  43. package/src/lib/presets/pine_medium.json +96 -0
  44. package/src/lib/presets/pine_small.json +96 -0
  45. package/src/lib/presets/trellis.json +112 -0
  46. package/src/lib/rng.js +22 -0
  47. package/src/lib/textures.js +105 -0
  48. package/src/lib/tree.js +1062 -0
  49. 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
+ };