Como crear terrenos en SketchUp pro-2025 usando chat GPT


Como usar chat GPT para crear terrenos en SketchUp?



Chat GPT como apoyo para la creación de terrenos complejos en Sketchup pro

Mucho hemos escuchado acerca de los avances de la IA en el campo de la arquitectura y el diseño al punto de tenerle miedo por la loca idea de que nos va a dejar sin trabajo.
Ahora veremos cómo podemos quitarnos el miedo, aprender de la inteligencia artificial y tomar esos avances para aplicarlos en nuestros proyectos, específicamente en la modelación de nuestros terrenos 3D.

Uso de prompts

En general suele ser sencillo, sin embargo, cuando no tienes una idea clara de que es lo que quieres la IA tampoco la tendrá, así que debes ser muy específico a la hora de dar las instrucciones, con esto nos referimos a:
  • Alturas
  • Dimensiones de largo y ancho
  • Ubicaciones
  • Usos
  • Materiales




Códigos


El código es básicamente el resultado que el chat GPT nos entrega, con esto nosotros podemos copiarlo y pegarlo en la consola RUBY de Sketchup y automáticamente veremos como aparece el 3D.

Primer resultado

Esta anterior imagen refleja un intento por crear la montaña con la meseta que pedíamos, es funcional, sin embargo, no es para nada natural, pero no es nada que no se pueda arreglar con algunos retoques con las herramientas de la caja de arena y con la decoración de los diferentes programas de renderizado.


Acá te dejo el código generado para que lo tomes como base ya que allí la IA genera un terreno más plano, facilitando la creación aleatoria de terrenos.


# Script para generar un terreno irregular en SketchUp
# Área aproximada de 500 metros cuadrados
# Altura máxima de 4 metros, con valles muy planos y picos solo hacia arriba

# Obtén el modelo y la entidad activa
model = Sketchup.active_model
entities = model.active_entities

# Dimensiones del terreno
largo = 25.0 # metros
ancho = 20.0 # metros
max_altura = 4.0 # metros

# Conversión de unidades de metros a pulgadas (SketchUp trabaja en pulgadas)
largo_inch = largo * 39.3701
ancho_inch = ancho * 39.3701
max_altura_inch = max_altura * 39.3701

# Resolución de la malla (número de subdivisiones por lado)
divisiones = 20

# Tamaño de cada celda
tamano_celda_x = largo_inch / divisiones
tamano_celda_y = ancho_inch / divisiones

# Generar puntos para el terreno
vertices = []
(0..divisiones).each do |i|
  y = i * tamano_celda_y
  (0..divisiones).each do |j|
    x = j * tamano_celda_x
    z = rand(0..max_altura_inch * 0.15) # Altura aleatoria reducida, solo positiva
    vertices << [x, y, z]
  end
end

# Crear caras para el terreno
(0...divisiones).each do |i|
  (0...divisiones).each do |j|
    # Índices de los vértices
    v1 = i * (divisiones + 1) + j
    v2 = v1 + 1
    v3 = v1 + (divisiones + 1)
    v4 = v3 + 1

    # Crear caras triangulares
    pt1 = vertices[v1]
    pt2 = vertices[v2]
    pt3 = vertices[v3]
    pt4 = vertices[v4]

    entities.add_face(pt1, pt2, pt3) # Triángulo 1
    entities.add_face(pt2, pt4, pt3) # Triángulo 2
  end
end

UI.messagebox("Terreno irregular generado con éxito y con picos suaves hacia arriba!")


Para este otro ejemplo vamos a intentar generar un terreno algo irregular con pendientes más pronunciadas, simulando una ladera de montaña y con una pequeña meseta para emplazar nuestro proyecto, o al menos que nos sea más fácil hacerlo.

Resultado un poco avanzado

Para esta imagen se evidencia un terreno casi plano, pero con bastantes irregularidades, los cuales con la aplicación de materiales y vegetación seria lo más proximo a un terreno más orgánico. Además de ser fácil de manipular haciendo más sencilla la implantación de volúmenes sobre este.

Cabe señalar que no son códigos definitivos, son parte de un proceso de mejora en los resultados del Chat, que puedes usar como base en tu propio chat.

# Script para generar un terreno irregular en SketchUp
# Área ampliada para incluir una montaña con un pico suave y una meseta a un lado

# Obtén el modelo y la entidad activa
model = Sketchup.active_model
entities = model.active_entities

# Dimensiones del terreno (ampliado)
largo = 30.0 # metros
ancho = 25.0 # metros
max_altura = 4.0 # metros
altura_montana = 10.0 # metros (altura del pico principal)

# Conversión de unidades de metros a pulgadas (SketchUp trabaja en pulgadas)
largo_inch = largo * 39.3701
ancho_inch = ancho * 39.3701
max_altura_inch = max_altura * 39.3701
altura_montana_inch = altura_montana * 39.3701

# Resolución de la malla (número de subdivisiones por lado)
divisiones = 25

# Tamaño de cada celda
tamano_celda_x = largo_inch / divisiones
tamano_celda_y = ancho_inch / divisiones

# Generar puntos para el terreno
vertices = []
pico_x = divisiones / 3 # Coordenada aproximada del pico en X
pico_y = divisiones / 3 # Coordenada aproximada del pico en Y
meseta_altura = 3.0 * 39.3701 # Altura de la meseta (3 metros)
meseta_radio = divisiones / 10.0 # Radio de la meseta en divisiones
meseta_x = (divisiones / 3) + 5 # Coordenada X de la meseta
meseta_y = (divisiones / 3) + 10 # Coordenada Y de la meseta

(0..divisiones).each do |i|
  y = i * tamano_celda_y
  (0..divisiones).each do |j|
    x = j * tamano_celda_x
    # Generar alturas con un pico principal suave y una meseta a un lado
    distancia_al_pico = Math.sqrt((i - pico_y)**2 + (j - pico_x)**2)
    distancia_a_meseta = Math.sqrt((i - meseta_y)**2 + (j - meseta_x)**2)
    factor_distancia_pico = [1.0 - (distancia_al_pico / (divisiones / 2.0)), 0].max
    if distancia_a_meseta <= meseta_radio
      z = meseta_altura # Altura constante para la meseta
    else
      z = rand(0..max_altura_inch * 0.15) + (altura_montana_inch * factor_distancia_pico)
    end
    vertices << [x, y, z]
  end
end

# Crear caras para el terreno
(0...divisiones).each do |i|
  (0...divisiones).each do |j|
    # Índices de los vértices
    v1 = i * (divisiones + 1) + j
    v2 = v1 + 1
    v3 = v1 + (divisiones + 1)
    v4 = v3 + 1

    # Crear caras triangulares
    pt1 = vertices[v1]
    pt2 = vertices[v2]
    pt3 = vertices[v3]
    pt4 = vertices[v4]

    entities.add_face(pt1, pt2, pt3) # Triángulo 1
    entities.add_face(pt2, pt4, pt3) # Triángulo 2
  end
end

UI.messagebox("Terreno irregular generado con un pico suave, una montaña y una meseta a un lado para emplazar una casa!")



Resultado algo exagerado pero trabajable

Es quizá uno de los más locos que logramos, pero a la vez funcionales, por su puesto requiere algo de trabajo, como cuando un escultor hace retoques a sus esculturas, esto nos ayuda a dar rienda suelta a nuestra imaginación, desafiándonos como arquitectos diseñadores.


Este es el código para una ladera, tiene muchos picos y en la parte más alta un area algo plana, aún con varias cosas por mejorar, pero es algo sobre lo que se puede trabajar.

# Script para generar una ladera irregular y suave con una altura máxima de 5 metros

# Obtén el modelo y la entidad activa
model = Sketchup.active_model
entities = model.active_entities

# Dimensiones del terreno (1000 m²)
largo = 31.62 # metros (aproximadamente para 1000 m²)
ancho = 31.62 # metros (aproximadamente para 1000 m²)
max_altura = 5.0 # metros (altura máxima de la ladera)

# Conversión de unidades de metros a pulgadas (SketchUp trabaja en pulgadas)
largo_inch = largo * 39.3701
ancho_inch = ancho * 39.3701
max_altura_inch = max_altura * 39.3701

# Resolución de la malla (número de subdivisiones por lado)
divisiones = 100 # Más divisiones para una mayor resolución y suavidad

# Tamaño de cada celda
tamano_celda_x = largo_inch / divisiones
tamano_celda_y = ancho_inch / divisiones

# Generar puntos para el terreno
vertices = []
# Parámetros para la generación de la ladera irregular
pico_x = divisiones / 3.0 # Coordenada aproximada del pico en X
pico_y = divisiones / 3.0 # Coordenada aproximada del pico en Y
random_factor = 1.5 # Factor de variabilidad de la ladera

# Generar la malla con ladera irregular
(0..divisiones).each do |i|
  y = i * tamano_celda_y
  (0..divisiones).each do |j|
    x = j * tamano_celda_x

    # Generar alturas con una ladera irregular
    distancia_al_pico = Math.sqrt((i - pico_y)**2 + (j - pico_x)**2)
    factor_distancia_pico = [1.0 - (distancia_al_pico / (divisiones / 2.0)), 0].max
    altura = rand(0..max_altura_inch * 0.3) + (max_altura_inch * factor_distancia_pico)
    # Suavizar la transición de altura con una ligera aleatoriedad
    altura += rand(-random_factor..random_factor) * 0.5

    # Asegurarse de que la altura no sea mayor a la altura máxima
    altura = [altura, max_altura_inch].min

    vertices << [x, y, altura]
  end
end

# Crear caras para el terreno
(0...divisiones).each do |i|
  (0...divisiones).each do |j|
    # Índices de los vértices
    v1 = i * (divisiones + 1) + j
    v2 = v1 + 1
    v3 = v1 + (divisiones + 1)
    v4 = v3 + 1

    # Crear caras triangulares
    pt1 = vertices[v1]
    pt2 = vertices[v2]
    pt3 = vertices[v3]
    pt4 = vertices[v4]

    entities.add_face(pt1, pt2, pt3) # Triángulo 1
    entities.add_face(pt2, pt4, pt3) # Triángulo 2
  end
end

UI.messagebox("Terreno generado con una ladera irregular y suave, con altura máxima de 5 metros.")


Conclusiones

Primeramente, debo decir que es importante estar alimentando con datos precisos el chat. Así lograremos resultados más acordes a lo que queremos.

Por otro lado, se hace indispensable para nosotros como jóvenes diseñadores el hecho de aprender a usar estas herramientas a nuestro favor, seguro que chat gpt no es el único motos de inteligencia artificial que nos puede ayudar, hay bastantes IAS mas que no pueden ayudar con el proceso de diseño.

Es tiempo de actualizarnos, invertir tiempo en explorar y aprender para lograr resultados únicos y con sello propio.

Comentarios