@v12-engine/create 0.1.0 → 0.4.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.
Files changed (263) hide show
  1. package/README.md +4 -1
  2. package/base/_gitignore +5 -0
  3. package/base/package.json +3 -3
  4. package/base/src/main.ts +36 -10
  5. package/base/src/navigation.worker.ts +7 -0
  6. package/base/vite.config.ts +24 -2
  7. package/cli.mjs +21 -6
  8. package/index.mjs +27 -7
  9. package/layers/desktop/electron/app.mjs +237 -0
  10. package/layers/desktop/electron/config.mjs +16 -0
  11. package/layers/desktop/electron/dev.mjs +63 -0
  12. package/layers/desktop/electron/files.mjs +86 -0
  13. package/layers/desktop/electron/icons/icon.icns +0 -0
  14. package/layers/desktop/electron/icons/icon.png +0 -0
  15. package/layers/desktop/electron/main.mjs +12 -0
  16. package/layers/desktop/electron/package.mjs +75 -0
  17. package/layers/desktop/electron/preload.cjs +41 -0
  18. package/layers/desktop/electron/presentation.m +87 -0
  19. package/layers/desktop/electron/serve.mjs +76 -0
  20. package/layers/desktop/electron/tools.mjs +63 -0
  21. package/layers/desktop/electron/updates.mjs +71 -0
  22. package/layers/desktop/package.json +13 -0
  23. package/layers/desktop/src/desktop.ts +175 -0
  24. package/layers/desktop/src/shell.ts +279 -0
  25. package/layers/desktop/tests/main.test.ts +189 -0
  26. package/layers/desktop/tests/shell.test.ts +152 -0
  27. package/layers/rooms/server.ts +13 -10
  28. package/layers/server/server.ts +4 -5
  29. package/layers/source/vite.config.ts +21 -1
  30. package/package.json +2 -1
  31. package/starters/campaign/README.md +9 -2
  32. package/starters/campaign/layers/rooms/server.ts +3 -3
  33. package/starters/campaign/layers/server/server.ts +3 -5
  34. package/starters/campaign/layers/tests/tests/rules.test.ts +40 -21
  35. package/starters/campaign/src/campaign/game.ts +26 -5
  36. package/starters/campaign/src/campaign/index.ts +104 -68
  37. package/starters/campaign/src/campaign/kills.ts +1 -1
  38. package/starters/campaign/src/campaign/missions/homecoming.ts +7 -7
  39. package/starters/campaign/src/campaign/missions/siege.ts +6 -6
  40. package/starters/campaign/src/campaign/missions/warlord.ts +13 -14
  41. package/starters/campaign/src/campaign/scenes.ts +8 -7
  42. package/starters/campaign/src/campaign/units.ts +59 -20
  43. package/starters/campaign/src/campaign/view/attacks.ts +19 -0
  44. package/starters/campaign/src/campaign/view/fire.ts +2 -2
  45. package/starters/campaign/src/campaign/view/index.ts +54 -43
  46. package/starters/campaign/src/campaign/waves.ts +18 -17
  47. package/starters/campaign/src/game.ts +8 -1
  48. package/starters/campaign/src/main.ts +38 -19
  49. package/starters/campaign/src/maps/fort.names.ts +2 -2
  50. package/starters/campaign/src/maps/fort.vgmap.json +102 -2
  51. package/starters/campaign/src/maps/homestead.names.ts +2 -2
  52. package/starters/campaign/src/maps/homestead.vgmap.json +85 -1
  53. package/starters/campaign/src/maps/pass.names.ts +2 -2
  54. package/starters/campaign/src/maps/pass.vgmap.json +69 -1
  55. package/starters/campaign/src/waves-panel.ts +2 -1
  56. package/starters/empty/README.md +18 -10
  57. package/starters/empty/layers/tests/tests/rules.test.ts +16 -17
  58. package/starters/empty/src/game.ts +11 -75
  59. package/starters/empty/src/generate.worker.ts +5 -5
  60. package/starters/empty/src/rules.ts +83 -25
  61. package/starters/empty/src/view.ts +82 -0
  62. package/starters/examples/README.md +83 -0
  63. package/starters/examples/layers/tests/tests/examples.test.ts +30 -0
  64. package/starters/examples/package.json +5 -0
  65. package/starters/examples/src/examples/abilities/areas.ts +165 -0
  66. package/starters/examples/src/examples/abilities/areasLooks.ts +30 -0
  67. package/starters/examples/src/examples/abilities/buffs.ts +287 -0
  68. package/starters/examples/src/examples/abilities/buffsLooks.ts +46 -0
  69. package/starters/examples/src/examples/abilities/changing.ts +228 -0
  70. package/starters/examples/src/examples/abilities/changingLooks.ts +61 -0
  71. package/starters/examples/src/examples/abilities/control.ts +158 -0
  72. package/starters/examples/src/examples/abilities/controlLooks.ts +78 -0
  73. package/starters/examples/src/examples/abilities/damage.ts +156 -0
  74. package/starters/examples/src/examples/abilities/damageLooks.ts +37 -0
  75. package/starters/examples/src/examples/abilities/family.ts +29 -0
  76. package/starters/examples/src/examples/abilities/index.ts +32 -0
  77. package/starters/examples/src/examples/abilities/kit.ts +179 -0
  78. package/starters/examples/src/examples/abilities/lookKit.ts +71 -0
  79. package/starters/examples/src/examples/abilities/looks.ts +47 -0
  80. package/starters/examples/src/examples/abilities/missiles.ts +203 -0
  81. package/starters/examples/src/examples/abilities/missilesLooks.ts +38 -0
  82. package/starters/examples/src/examples/abilities/moves.ts +206 -0
  83. package/starters/examples/src/examples/abilities/movesLooks.ts +52 -0
  84. package/starters/examples/src/examples/abilities/recasts.ts +181 -0
  85. package/starters/examples/src/examples/abilities/recastsLooks.ts +41 -0
  86. package/starters/examples/src/examples/abilities/resources.ts +166 -0
  87. package/starters/examples/src/examples/abilities/resourcesLooks.ts +42 -0
  88. package/starters/examples/src/examples/abilities/summons.ts +296 -0
  89. package/starters/examples/src/examples/abilities/summonsLooks.ts +115 -0
  90. package/starters/examples/src/examples/abilities/triggers.ts +204 -0
  91. package/starters/examples/src/examples/abilities/triggersLooks.ts +53 -0
  92. package/starters/examples/src/examples/abilities/vision.ts +137 -0
  93. package/starters/examples/src/examples/abilities/visionLooks.ts +50 -0
  94. package/starters/examples/src/examples/animation/index.ts +235 -0
  95. package/starters/examples/src/examples/animation/looks.ts +444 -0
  96. package/starters/examples/src/examples/catalog.ts +52 -0
  97. package/starters/examples/src/examples/cinematics/index.ts +217 -0
  98. package/starters/examples/src/examples/cinematics/looks.ts +476 -0
  99. package/starters/examples/src/examples/cinematics/tour.json +43 -0
  100. package/starters/examples/src/examples/cinematics/village.ts +88 -0
  101. package/starters/examples/src/examples/common/looks.ts +65 -0
  102. package/starters/examples/src/examples/common/units.ts +70 -0
  103. package/starters/examples/src/examples/construction/index.ts +329 -0
  104. package/starters/examples/src/examples/construction/looks.ts +275 -0
  105. package/starters/examples/src/examples/custom-animation/bones.ts +92 -0
  106. package/starters/examples/src/examples/custom-animation/index.ts +190 -0
  107. package/starters/examples/src/examples/custom-animation/looks.ts +523 -0
  108. package/starters/examples/src/examples/custom-animation/runes.ts +82 -0
  109. package/starters/examples/src/examples/custom-fx/glaive.look.ts +110 -0
  110. package/starters/examples/src/examples/custom-fx/glaive.ts +40 -0
  111. package/starters/examples/src/examples/custom-fx/gpu.look.ts +145 -0
  112. package/starters/examples/src/examples/custom-fx/gpu.ts +22 -0
  113. package/starters/examples/src/examples/custom-fx/index.ts +25 -0
  114. package/starters/examples/src/examples/custom-fx/lights.look.ts +144 -0
  115. package/starters/examples/src/examples/custom-fx/lights.ts +25 -0
  116. package/starters/examples/src/examples/custom-fx/looks.ts +36 -0
  117. package/starters/examples/src/examples/custom-fx/meteor.look.ts +133 -0
  118. package/starters/examples/src/examples/custom-fx/meteor.ts +26 -0
  119. package/starters/examples/src/examples/custom-fx/parts.look.ts +193 -0
  120. package/starters/examples/src/examples/custom-fx/parts.ts +21 -0
  121. package/starters/examples/src/examples/custom-fx/portal.look.ts +193 -0
  122. package/starters/examples/src/examples/custom-fx/portal.ts +48 -0
  123. package/starters/examples/src/examples/custom-fx/renderer.look.ts +139 -0
  124. package/starters/examples/src/examples/custom-fx/renderer.ts +18 -0
  125. package/starters/examples/src/examples/custom-fx/ribbons.look.ts +151 -0
  126. package/starters/examples/src/examples/custom-fx/ribbons.ts +22 -0
  127. package/starters/examples/src/examples/custom-fx/shader.ts +42 -0
  128. package/starters/examples/src/examples/custom-fx/shield.look.ts +226 -0
  129. package/starters/examples/src/examples/custom-fx/shield.ts +43 -0
  130. package/starters/examples/src/examples/define.ts +86 -0
  131. package/starters/examples/src/examples/destruction/index.ts +570 -0
  132. package/starters/examples/src/examples/destruction/looks.ts +447 -0
  133. package/starters/examples/src/examples/dialogs/index.ts +383 -0
  134. package/starters/examples/src/examples/dialogs/looks.ts +546 -0
  135. package/starters/examples/src/examples/dynamic-map/index.ts +603 -0
  136. package/starters/examples/src/examples/dynamic-map/looks.ts +301 -0
  137. package/starters/examples/src/examples/fx/blood.look.ts +62 -0
  138. package/starters/examples/src/examples/fx/blood.ts +59 -0
  139. package/starters/examples/src/examples/fx/feel.look.ts +86 -0
  140. package/starters/examples/src/examples/fx/feel.ts +57 -0
  141. package/starters/examples/src/examples/fx/fight.ts +28 -0
  142. package/starters/examples/src/examples/fx/floats.look.ts +108 -0
  143. package/starters/examples/src/examples/fx/floats.ts +24 -0
  144. package/starters/examples/src/examples/fx/gallery.look.ts +168 -0
  145. package/starters/examples/src/examples/fx/gallery.ts +23 -0
  146. package/starters/examples/src/examples/fx/index.ts +30 -0
  147. package/starters/examples/src/examples/fx/links.look.ts +83 -0
  148. package/starters/examples/src/examples/fx/links.ts +49 -0
  149. package/starters/examples/src/examples/fx/looks.ts +55 -0
  150. package/starters/examples/src/examples/fx/map.look.ts +93 -0
  151. package/starters/examples/src/examples/fx/map.ts +33 -0
  152. package/starters/examples/src/examples/fx/marks.look.ts +100 -0
  153. package/starters/examples/src/examples/fx/marks.ts +36 -0
  154. package/starters/examples/src/examples/fx/shots.look.ts +92 -0
  155. package/starters/examples/src/examples/fx/shots.ts +71 -0
  156. package/starters/examples/src/examples/fx/spells.look.ts +87 -0
  157. package/starters/examples/src/examples/fx/spells.ts +122 -0
  158. package/starters/examples/src/examples/fx/stage.ts +31 -0
  159. package/starters/examples/src/examples/gui/babylonScreen.ts +167 -0
  160. package/starters/examples/src/examples/gui/babylonWorld.ts +191 -0
  161. package/starters/examples/src/examples/gui/htmlPart.ts +95 -0
  162. package/starters/examples/src/examples/gui/index.ts +143 -0
  163. package/starters/examples/src/examples/gui/keys.ts +91 -0
  164. package/starters/examples/src/examples/gui/layout.ts +42 -0
  165. package/starters/examples/src/examples/gui/looks.ts +270 -0
  166. package/starters/examples/src/examples/gui/minimap.ts +127 -0
  167. package/starters/examples/src/examples/gui/ownInterface.ts +129 -0
  168. package/starters/examples/src/examples/gui/plates.ts +87 -0
  169. package/starters/examples/src/examples/gui/radial.ts +104 -0
  170. package/starters/examples/src/examples/gui/solidPart.ts +107 -0
  171. package/starters/examples/src/examples/looks.ts +45 -0
  172. package/starters/examples/src/examples/mechanics/battle.ts +51 -0
  173. package/starters/examples/src/examples/mechanics/damage.ts +80 -0
  174. package/starters/examples/src/examples/mechanics/flying.ts +93 -0
  175. package/starters/examples/src/examples/mechanics/formations.ts +58 -0
  176. package/starters/examples/src/examples/mechanics/highGround.ts +82 -0
  177. package/starters/examples/src/examples/mechanics/index.ts +44 -0
  178. package/starters/examples/src/examples/mechanics/looks.ts +289 -0
  179. package/starters/examples/src/examples/mechanics/maze.ts +119 -0
  180. package/starters/examples/src/examples/mechanics/orders.ts +68 -0
  181. package/starters/examples/src/examples/mechanics/selection.ts +30 -0
  182. package/starters/examples/src/examples/moba/index.ts +377 -0
  183. package/starters/examples/src/examples/moba/looks.ts +349 -0
  184. package/starters/examples/src/examples/moba/maps.ts +69 -0
  185. package/starters/examples/src/examples/moba/spells.ts +34 -0
  186. package/starters/examples/src/examples/moba/units.ts +196 -0
  187. package/starters/examples/src/examples/nature/camera.ts +15 -0
  188. package/starters/examples/src/examples/nature/grass.ts +64 -0
  189. package/starters/examples/src/examples/nature/index.ts +327 -0
  190. package/starters/examples/src/examples/nature/land.ts +173 -0
  191. package/starters/examples/src/examples/nature/looks.ts +577 -0
  192. package/starters/examples/src/examples/nature/maps.ts +370 -0
  193. package/starters/examples/src/examples/nature/skies.ts +324 -0
  194. package/starters/examples/src/examples/nature/weather.ts +80 -0
  195. package/starters/examples/src/examples/performance/index.ts +263 -0
  196. package/starters/examples/src/examples/performance/looks.ts +372 -0
  197. package/starters/examples/src/examples/performance/meter.ts +158 -0
  198. package/starters/examples/src/examples/post/grades.ts +86 -0
  199. package/starters/examples/src/examples/post/index.ts +202 -0
  200. package/starters/examples/src/examples/post/looks.ts +884 -0
  201. package/starters/examples/src/examples/post/passes.ts +213 -0
  202. package/starters/examples/src/examples/rts/ai.ts +49 -0
  203. package/starters/examples/src/examples/rts/airlift.ts +43 -0
  204. package/starters/examples/src/examples/rts/base.ts +129 -0
  205. package/starters/examples/src/examples/rts/build.ts +65 -0
  206. package/starters/examples/src/examples/rts/camps.ts +36 -0
  207. package/starters/examples/src/examples/rts/carry.ts +103 -0
  208. package/starters/examples/src/examples/rts/creeps.ts +61 -0
  209. package/starters/examples/src/examples/rts/data.ts +406 -0
  210. package/starters/examples/src/examples/rts/ferry.ts +41 -0
  211. package/starters/examples/src/examples/rts/garrison.ts +50 -0
  212. package/starters/examples/src/examples/rts/harvest.ts +29 -0
  213. package/starters/examples/src/examples/rts/hero.ts +67 -0
  214. package/starters/examples/src/examples/rts/index.ts +77 -0
  215. package/starters/examples/src/examples/rts/looks.ts +721 -0
  216. package/starters/examples/src/examples/rts/shop.ts +46 -0
  217. package/starters/examples/src/examples/rts/tech.ts +39 -0
  218. package/starters/examples/src/examples/rts/train.ts +48 -0
  219. package/starters/examples/src/examples/rts/waterside.ts +185 -0
  220. package/starters/examples/src/examples/showcase/index.ts +714 -0
  221. package/starters/examples/src/examples/showcase/looks.ts +238 -0
  222. package/starters/examples/src/game.ts +17 -0
  223. package/starters/examples/src/main.ts +82 -0
  224. package/starters/examples/src/rules.ts +31 -0
  225. package/starters/examples/src/shell/look.ts +79 -0
  226. package/starters/examples/src/shell/registry.ts +7 -0
  227. package/starters/examples/src/shell/scenes.ts +178 -0
  228. package/starters/examples/src/shell/shell.ts +290 -0
  229. package/starters/examples/src/shell/style.ts +202 -0
  230. package/starters/examples/src/view.ts +50 -0
  231. package/starters/melee/README.md +12 -3
  232. package/starters/melee/layers/tests/tests/heroes.test.ts +402 -0
  233. package/starters/melee/layers/tests/tests/rules.test.ts +10 -8
  234. package/starters/melee/src/game.ts +32 -2
  235. package/starters/melee/src/maps/bay.names.ts +2 -2
  236. package/starters/melee/src/maps/bay.vgmap.json +198 -1
  237. package/starters/melee/src/maps.ts +11 -9
  238. package/starters/melee/src/melee/abilities.ts +1 -194
  239. package/starters/melee/src/melee/blight.ts +7 -7
  240. package/starters/melee/src/melee/cellLayers.json +3 -3
  241. package/starters/melee/src/melee/data.json +1 -18
  242. package/starters/melee/src/melee/game.ts +6 -4
  243. package/starters/melee/src/melee/heroes.ts +1025 -0
  244. package/starters/melee/src/melee/index.ts +64 -61
  245. package/starters/melee/src/melee/items.ts +15 -362
  246. package/starters/melee/src/melee/languages/he.json +14 -2
  247. package/starters/melee/src/melee/pings.ts +5 -6
  248. package/starters/melee/src/melee/saves.ts +1 -1
  249. package/starters/melee/src/melee/undead.ts +15 -230
  250. package/starters/melee/src/melee/units.ts +37 -171
  251. package/starters/melee/src/melee/view/attacks.ts +19 -0
  252. package/starters/melee/src/melee/view/heroSpellLooks.ts +39 -8
  253. package/starters/melee/src/melee/view/index.ts +56 -52
  254. package/starters/melee/src/melee/view/looks.ts +86 -63
  255. package/starters/melee/src/melee/view/undeadLooks.ts +70 -31
  256. package/starters/melee/src/melee/view/walls.ts +1 -1
  257. package/starters.mjs +6 -0
  258. package/v12.mjs +14 -15
  259. package/starters/campaign/src/rules.ts +0 -20
  260. package/starters/empty/src/maps.ts +0 -44
  261. package/starters/empty/src/tiles.ts +0 -12
  262. package/starters/melee/src/melee/heroSpells.ts +0 -38
  263. package/starters/melee/src/rules.ts +0 -24
@@ -0,0 +1,202 @@
1
+ /**
2
+ * The post-processing examples on the rules' side: their list entries, maps and starts (`ExampleCategory`). What they
3
+ * show is all the client's, after the scene is drawn (`./looks.ts`), so the rules add nothing: each plays one of the
4
+ * nature examples' maps (a village with torches and a fire, a lake under a waterfall) with people about
5
+ */
6
+ import type { MapEnvironment, World } from '@v12-engine/engine'
7
+ import { PLAYER, UNIT } from '../common/units'
8
+ import type { ExampleCategory, ExampleDef } from '../define'
9
+ import { plant } from '../nature/land'
10
+ import { lakeMap, lakeTrees, villageMap, villageTrees } from '../nature/maps'
11
+ import { lookAtHour } from '../nature/skies'
12
+
13
+ /** The people of the village's square: a knight in the middle, his company round him, and a few strangers by the well */
14
+ function villagers(world: World): void {
15
+ const ours: [string, number, number][] = [
16
+ [UNIT.knight, 32, 33.5],
17
+ [UNIT.footman, 30.5, 32],
18
+ [UNIT.footman, 33.5, 32],
19
+ [UNIT.archer, 29.5, 35],
20
+ [UNIT.mage, 34.5, 35]
21
+ ]
22
+ for (const [type, x, z] of ours) world.spawn(type, { at: { x, z }, owner: PLAYER })
23
+ world.spawn(UNIT.footman, { at: { x: 36.5, z: 28 }, owner: 0 })
24
+ world.spawn(UNIT.archer, { at: { x: 37.5, z: 29.5 }, owner: 0 })
25
+ }
26
+
27
+ /** The village, its woods and its people */
28
+ const village = (world: World) => {
29
+ plant(world, villageTrees(villageMap()))
30
+ villagers(world)
31
+ }
32
+
33
+ /** The village at an hour, with a little wind and sky clouds: the look each example starts from, its own picture over it */
34
+ const villageAt = (hour: number): MapEnvironment => ({
35
+ ...lookAtHour(hour),
36
+ clouds: { cover: 0.4, ...lookAtHour(hour).clouds },
37
+ wind: { around: 90, strength: 0.25, gusts: 0.3 }
38
+ })
39
+
40
+ /** An example of the post-processing category, on the village at an hour */
41
+ const inVillage = (def: Omit<ExampleDef, 'category' | 'start'>, hour = 17): ExampleDef => ({
42
+ category: 'post',
43
+ map: villageMap,
44
+ start: village,
45
+ environment: villageAt(hour),
46
+ ...def
47
+ })
48
+
49
+ /**
50
+ * The village with a cursed wood west of it: a part of the map with a picture of its own (`MapPictureZone`), green,
51
+ * dark and misty, blended in over 10 cells as the camera looks into it
52
+ */
53
+ function cursedVillage() {
54
+ const map = villageMap()
55
+ map.environment = {
56
+ ...map.environment,
57
+ pictureZones: [
58
+ {
59
+ id: 1,
60
+ name: 'Cursed wood',
61
+ shape: { kind: 'circle', x: 9, z: 32, radius: 15 },
62
+ blend: 10,
63
+ look: {
64
+ saturation: 0.45,
65
+ contrast: 1.25,
66
+ exposure: 0.85,
67
+ tint: [0.45, 1, 0.55],
68
+ tintAmount: 0.35,
69
+ vignette: 0.7,
70
+ vignetteColor: [0, 0.08, 0.02],
71
+ bloom: 0.6,
72
+ bloomThreshold: 0.6
73
+ },
74
+ fog: { start: 25, end: 95, color: [0.16, 0.26, 0.18] },
75
+ light: { tint: [0.55, 1, 0.6], amount: 0.6 }
76
+ }
77
+ ]
78
+ }
79
+ return map
80
+ }
81
+
82
+ export const category: ExampleCategory = {
83
+ examples: [
84
+ inVillage({
85
+ id: 'post-pipeline',
86
+ title: 'Every pass at once',
87
+ summary:
88
+ 'The whole finished picture on one card: tone, exposure, colour, bloom, vignette, sharpening, grain, colour split, depth of field, ambient occlusion and anti-aliasing. Try each on and off.',
89
+ tags: ['post-processing', 'pipeline', 'DefaultRenderingPipeline', 'picture', 'toggles']
90
+ }),
91
+ inVillage(
92
+ {
93
+ id: 'post-bloom',
94
+ title: 'Bloom and glow',
95
+ summary: 'Night in the village: torches and a fire bleed light into the dark. Set how much blooms, from how bright, and how far it spreads.',
96
+ tags: ['bloom', 'glow', 'night', 'lights', 'HDR']
97
+ },
98
+ 22.5
99
+ ),
100
+ {
101
+ id: 'post-tone',
102
+ category: 'post',
103
+ title: 'Tone mapping and exposure',
104
+ summary:
105
+ 'A bright lake at golden hour, brighter than the screen can show. Pick how the light is brought into range (none, standard, ACES, neutral) and how much is let in.',
106
+ tags: ['tone mapping', 'ACES', 'exposure', 'HDR', 'neutral'],
107
+ map: lakeMap,
108
+ start: (world) => plant(world, lakeTrees(lakeMap()), 0.03),
109
+ environment: { ...lookAtHour(17.6), water: { shallow: [0.5, 0.6, 0.6], deep: [0.12, 0.2, 0.3] }, wind: { around: 80, strength: 0.25 } }
110
+ },
111
+ inVillage(
112
+ {
113
+ id: 'post-color',
114
+ title: 'Colour grading',
115
+ summary:
116
+ 'Lean the whole picture: more or less colour, contrast, a tint of any colour, or a grade from a look-up table made in code. The village by day.',
117
+ tags: ['colour grading', 'saturation', 'contrast', 'tint', 'LUT', 'color']
118
+ },
119
+ 12
120
+ ),
121
+ inVillage(
122
+ {
123
+ id: 'post-depth-of-field',
124
+ title: 'Depth of field',
125
+ summary:
126
+ 'Sharp where the lens is focused, blurred in front and behind. Focus on the knight, near the lens or on the far woods, open the aperture, or make the village a miniature.',
127
+ tags: ['depth of field', 'DOF', 'focus', 'bokeh', 'tilt-shift', 'aperture']
128
+ },
129
+ 10
130
+ ),
131
+ inVillage(
132
+ {
133
+ id: 'post-occlusion',
134
+ title: 'Ambient occlusion',
135
+ summary:
136
+ 'Creases, corners and the feet of what stands darken where light from all around reaches less (SSAO). Turn it on, its strength and how far it looks.',
137
+ tags: ['ambient occlusion', 'SSAO', 'shadows', 'contact']
138
+ },
139
+ 11
140
+ ),
141
+ inVillage(
142
+ {
143
+ id: 'post-film',
144
+ title: 'Film: grain, colour split, vignette',
145
+ summary: "What a camera's lens and film add: grain that moves, colours split at the picture's edges, edges darkened. Each by its own amount.",
146
+ tags: ['film grain', 'chromatic aberration', 'vignette', 'lens', 'camera']
147
+ },
148
+ 16
149
+ ),
150
+ inVillage(
151
+ {
152
+ id: 'post-outline',
153
+ title: 'Outlines',
154
+ summary:
155
+ 'Lines round units: your own company outlined, the strangers glowing red through the houses, and what the pointer is over. Their colour, width, style and pulse.',
156
+ tags: ['outline', 'highlight', 'glow', 'silhouette', 'through walls', 'hover']
157
+ },
158
+ 13
159
+ ),
160
+ inVillage(
161
+ {
162
+ id: 'post-looks',
163
+ title: 'Looks: cinematic, noir, dreamy, retro',
164
+ summary:
165
+ 'Whole looks made of the passes: a widescreen film, black and white noir, a soft bright dream, a pixelated retro game, sepia, a cold thriller. Pick one.',
166
+ tags: ['presets', 'cinematic', 'noir', 'dreamy', 'retro', 'pixel', 'sepia', 'look']
167
+ },
168
+ 16.5
169
+ ),
170
+ inVillage(
171
+ {
172
+ id: 'post-custom',
173
+ title: 'A pass of your own',
174
+ summary:
175
+ 'Shaders of your own after the picture: pixels, a CRT, under water, a pencil sketch, a heat vision. Each a few lines of GLSL put on with picture.addPass.',
176
+ tags: ['custom pass', 'shader', 'GLSL', 'addPass', 'PostProcess', 'CRT', 'pixelate', 'sketch']
177
+ },
178
+ 15
179
+ ),
180
+ inVillage(
181
+ {
182
+ id: 'post-antialias',
183
+ title: 'Anti-aliasing and resolution',
184
+ summary:
185
+ 'Close on thin branches and blades of grass: compare MSAA, FXAA, TAA and none, and draw at a lower or higher resolution than the screen.',
186
+ tags: ['anti-aliasing', 'MSAA', 'FXAA', 'TAA', 'resolution', 'render scale', 'quality']
187
+ },
188
+ 14
189
+ ),
190
+ inVillage(
191
+ {
192
+ map: cursedVillage,
193
+ id: 'post-zones',
194
+ title: 'Places with a look of their own',
195
+ summary:
196
+ 'The woods west of the village are cursed: green, dark and misty. Walk the camera into them and out, and the picture blends between the two looks.',
197
+ tags: ['picture zones', 'areas', 'mood', 'blend', 'pictureZones']
198
+ },
199
+ 15
200
+ )
201
+ ]
202
+ }