Terrazas de características de montaña

10

Estoy buscando replicar un efecto de terreno procesal que encontré en un sitio de cartera / blog hace unos días.

Terreno adosado

Citando el sitio, las terrazas se generaron a través de "multiplicar [la altura final] por algún valor de amortiguación dentro de cierto rango de altura, para crear hermosas características del cañón".

Me preguntaba, ¿alguien podría proporcionar un ejemplo o procedimiento más técnico para hacer esto? Durante la semana pasada, he estado investigando y aprendiendo mucho sobre métodos y prácticas de textura / terreno de procedimiento, pero todavía no he encontrado nada que explique en detalle qué es el 'bloqueo', y estoy comenzando a sentirme frustrado.

Juddily
fuente
Huh, eso es realmente genial. No puedo entender lo que quiere decir tampoco. ¿Has intentado enviarle un correo electrónico (está disponible en "contacto")?
Draco18s ya no confía en SE
FYI: En su presupuesto y fuente, el término es "amortiguación", pero más adelante en su pregunta, utiliza "sujeción".
Pikalek

Respuestas:

11

No sé qué hace su proyecto, pero puede aplicar una función de remodelación a la altura. Aquí hay un ejemplo que toma hde 0.0 a 1.0 y devuelve una nueva altura de 0.0 a 1.0:

function R(h) {
    var W = 0.4; // width of terracing bands
    var k = Math.floor(h / W);
    var f = (h - k*W) / W;
    var s = Math.min(2 * f, 1.0);
    return (k+s) * W;
}

Es una función que se ve así cuando se traza: el eje x es la altura original y el eje y es la nueva altura:

Función de remodelación de altura

Lo apliqué a mi propio código y obtuve esto:

Salida de la función de terrazas

Puede poner cualquier tipo de función de remodelación, o encadenarlos, para obtener efectos claros. Obtiene terrazas cuando hay secciones planas de la salida.

amitp
fuente
Juro que hay un camino suave en la pregunta del autor que sube a una terraza, pero mirándolo de nuevo, estoy bastante seguro de que es una ilusión. Pero mis ojos todavía insisten en que no, hay un cambio de altura allí (centro de la imagen a la esquina superior / borde superior izquierdo). Si no hay aumento, entonces esta respuesta es correcta.
Draco18s ya no confía en SE
1

La amortiguación es un término físico para una influencia dentro o sobre un sistema oscilatorio que tiene el efecto de reducir, restringir o prevenir sus oscilaciones.

Sospecho que su artículo fuente podría tener un error tipográfico y haber significado sujeción , lo que generalmente se refiere a restringir un valor a un rango determinado.

En cuanto a lograr el efecto visual, es posible que pueda obtener algo similar al sujetar bandas de ruido a medida que se va construyendo el terreno, pero la solución dada por @amitp coincide más con la descripción original y probablemente sea más fácil de implementar y ajustar.

Una tercera opción podría ser utilizar técnicas de erosión. Aquí hay uno para crear una combinación de acantilado y playa dejando caer una sección de terreno inclinado. Aquí hay otro que puede erosionar los picos en mesetas .

Pikalek
fuente
0

Después de un muy largo descanso, ahora entiendo cómo se logró el efecto, y es increíblemente simple. Hay 4 partes a este efecto:

  • El mapa de altura inicial del terreno
  • Definir un 'rango' de terraza, siendo la altura más baja de la terraza h1 y la altura más alta de la terraza h2
  • Un valor de amortiguación que aplana el suelo dentro del rango de la altura de la terraza.
  • Un segundo mapa de altura de rango más largo para modificar los valores h1 y h2, que es cómo se forman las rampas continuas entre terrazas (un tercer mapa de altura podría usarse para aumentar o disminuir h1 y h2 independientemente entre sí, creando terrazas más grandes o más pequeñas)

Aquí está el procedimiento para crear el efecto:

h1 = 1
h2 = 2
damp = .01

h = gen_noise(position)
hm = heightmod_noise(position)
if h1+hm <= initial_terrain_height =< h2+hm
  th = h * damp
elseif h2+hm < h
  th = h - (h2-h1) * damp
else
  th = h

(th, por supuesto, es la altura del terreno después de aplicar el efecto de terrazas)

Juddily
fuente