Hillside
A line of noise for the ground, points spread along it, a plant on every point. The world is built in chunks as you walk, and each placement method from Islands Lab part 5 behaves differently at the seams. Drag to walk, change the method, and turn on Show points and chunks.
Una línea de ruido como suelo, puntos repartidos a lo largo de ella y una planta en cada punto. El mundo se construye por chunks a medida que caminas, y cada método de reparto de la parte 5 de Islands Lab se porta distinto en las costuras. Arrastra para caminar, cambia el método y activa Mostrar puntos y chunks.
What is going on
The ground is one-dimensional gradient noise, four octaves summed (fBm). The world is cut into chunks 8 units wide, and each chunk places its own points without knowing the others, the way a streaming game world would. Every point gets a hash, and the hash decides the plant: species, size, colour and branching. Trees only grow on gentle, low ground.
Two switches change where the points go. Along the ground spreads them by arc length instead of by x: spread by x, steep slopes get fewer plants per metre of ground. With the slope weighting off, in a measured stretch the mean gap was 0.63 on flat ground and 0.76 on slopes steeper than 0.8; by arc length, 0.55 and 0.57. Fewer on steep slopes weights each stretch by its slope, and the points follow the weight through the inverse of its cumulative sum, the same trick that turns uniform numbers into any distribution.
The seams
Turn on Show points and chunks: dashed lines are chunk borders, blue marks pairs closer than r inside a chunk, orange marks pairs closer than r across a seam. Measured over 10 seeds and 190 seams, with spacing 0.6, r = 0.4 and the slope weighting off:
- Uniform random: 48 % of neighbouring pairs too close, and close pairs at 26 seams.
- Jittered grid: 21 % inside, 44 seams. Each chunk is a whole number of cells, so a seam is just another cell border.
- Golden ratio: 15 % inside, 57 seams.
- Bridson, per chunk: almost nothing inside (1.9 %, because the straight distance on a curve is a little shorter than the distance along it), but 111 of the 190 seams have a pair too close. Each chunk ran Bridson on its own, so nothing stops two points meeting at the border.
- Hashed priority: zero, inside and at the seams; the closest pair is exactly r.
Hashed priority is the chunk-friendly Poisson disk from the design note. Candidates sit on a global grid of cells of size r, each with a hashed priority, and a candidate survives if no candidate with a higher priority lies within r. A chunk looks one cell into its neighbours and reaches the same verdicts they do, so the seams vanish. Statisticians know it as Matérn's hard-core process, type II, and it has a price: it can never hold more than one point per 2r. Here the mean gap came out at 0.77 where Bridson managed 0.58.
What it does not do
- Plants are drawn back to front by species, not by depth, and they overlap freely.
- The far hills are more noise with parallax; they get no plants.
- Nothing here is in Islands. It is a code-art study for the placement it may need.
Qué está pasando
El suelo es ruido de gradiente en una dimensión, cuatro octavas sumadas (fBm). El mundo se corta en chunks de 8 unidades de ancho, y cada chunk coloca sus puntos sin saber nada de los demás, como lo haría un mundo que se carga por partes. Cada punto recibe un hash, y el hash decide la planta: especie, tamaño, color y ramificación. Los árboles solo crecen en terreno bajo y poco inclinado.
Dos interruptores cambian dónde caen los puntos. A lo largo del suelo los reparte por longitud de arco en vez de por x: si se reparten por x, las pendientes fuertes reciben menos plantas por metro de suelo. Sin el peso por pendiente, en un tramo medido el hueco medio fue 0,63 en llano y 0,76 en pendientes de más de 0,8; por longitud de arco, 0,55 y 0,57. Menos en pendientes fuertes da a cada tramo un peso según su pendiente, y los puntos siguen ese peso a través de la inversa de su suma acumulada, el mismo truco que convierte números uniformes en cualquier distribución.
Las costuras
Activa Mostrar puntos y chunks: las líneas discontinuas son los bordes de los chunks, el azul marca pares a menos de r dentro de un chunk y el naranja, pares a menos de r en una costura. Medido sobre 10 semillas y 190 costuras, con separación 0,6, r = 0,4 y sin el peso por pendiente:
- Azar uniforme: el 48 % de los pares vecinos demasiado cerca, y pares cercanos en 26 costuras.
- Rejilla con jitter: 21 % dentro, 44 costuras. Cada chunk es un número entero de celdas, así que una costura es solo otro borde de celda.
- Razón áurea: 15 % dentro, 57 costuras.
- Bridson, por chunk: casi nada dentro (1,9 %, porque la distancia en línea recta sobre una curva es algo menor que la distancia a lo largo de ella), pero 111 de las 190 costuras tienen un par demasiado cerca. Cada chunk ejecutó Bridson por su cuenta, así que nada impide que dos puntos se encuentren en el borde.
- Prioridad por hash: cero, dentro y en las costuras; el par más cercano está exactamente a r.
La prioridad por hash es el disco de Poisson apto para chunks de la nota de diseño. Los candidatos están en una rejilla global de celdas de tamaño r, cada uno con una prioridad sacada del hash, y un candidato sobrevive si no hay otro de mayor prioridad a menos de r. Un chunk mira una celda dentro de sus vecinos y llega a los mismos veredictos que ellos, así que las costuras desaparecen. En estadística se conoce como el proceso de núcleo duro de Matérn, tipo II, y tiene un precio: nunca puede tener más de un punto cada 2r. Aquí el hueco medio salió de 0,77, donde Bridson lograba 0,58.
Lo que no hace
- Las plantas se dibujan de atrás hacia delante por especie, no por profundidad, y se solapan libremente.
- Las colinas del fondo son más ruido con parallax; no tienen plantas.
- Nada de esto está en Islands. Es un estudio de code art para el reparto que quizá necesite.
SourcesFuentes
- Islands Lab part 5, "Spreading Points on a Line": the five methods and how they were measured. claudiobustamante.com/labs/islands/points-1d
- R. Bridson, "Fast Poisson disk sampling in arbitrary dimensions", SIGGRAPH 2007 Sketches, article 22. doi.org/10.1145/1278780.1278807
- B. Matérn, Spatial Variation, 2nd ed., Lecture Notes in Statistics 36, Springer (1986). First published 1960; the hard-core processes behind "hashed priority". doi.org/10.1007/978-1-4615-7892-5
- K. Perlin, "Improving noise", ACM Trans. Graph. 21(3) (2002) 681–682. The quintic fade used for the ground. doi.org/10.1145/566654.566636