fogón

← BibliotecaObjetomormon/medieval-sets

Medieval: pueblo, utilería y naturaleza

m@mormonObjeto, CC0
v1hace 3 días

Obra original de Quaternius ↗

Clonar
FOGONfogon pieces add medieval-sets
GITgit clone https://git.fogon.gg/mormon/medieval-sets.git
REMIXfogon new medieval-sets --from medieval-sets
ZIPmedieval-sets.zipBajar
Controles

Medieval: pueblo, utilería y naturaleza

474 piezas 3D low-poly de Quaternius, en dominio público (CC0), listas para three.js: un pueblo que se arma por módulos, la utilería para llenarlo y la naturaleza que lo rodea. Más cinco texturas de suelo. Son las mismas con las que está hecho Medival.

El navegador de piezas

En la demo: elegí un kit arriba, buscá por nombre y tocá una pieza para verla (arrastrá para girar, la rueda acerca; las flechas ↑↓ recorren la lista). Abajo quedan su tamaño en metros y la línea de código que la pone en tu escena (un clic la copia). En «Escena» hay una calle armada solo con estas piezas. La luz (estudio, día, atardecer), el giro y la grilla de 1 m están en los controles.

Los kits

KitPiezasQué hay
village (pueblo)176paredes de revoque y de piedra (lisas, con puerta, con ventana), esquinas, pisos, techos de tejas de 4×4 a 8×14 m y sus frentes, balcones, aleros, escaleras, puertas, ventanas y postigos, chimeneas, cercos, enredaderas, un carro
props (utilería)132yunque, barriles, cajones, bolsas, estandartes, camas, mesas, sillas, estantes, libros, velas, candelabros, faroles, armas, escudo, ollas, pociones, monedas, puestos de mercado, una fogata, platos de comida, pescados, minerales y vetas, un árbol gigante
nature (naturaleza)166árboles (comunes, arces, abedules, pinos, cerezos, retorcidos, secos), cada uno con su versión _LOD; arbustos con y sin flores, pasto, tréboles, flores, helechos, hongos, rocas, piedritas, losas de camino
suelos5dirt (tierra), grass (pasto), grass_dry (pasto seco), rock (piedra), snow (nieve): color + mapa de normales, 1024 px, se repiten

Todo en metros, +Y arriba. Las piezas del pueblo encajan en una grilla de 2 m: una pared mide 2 m de ancho y 3,1 m de alto, centrada en x = 0, su cara de afuera mirando a +Z. Un piso de la casa son 3 m.

Cómo se usa en un juego

fogon pieces add medieval-sets

Eso trae client/medieval-sets/kits.ts (el cargador, solo código: unos pocos KB) y agrega three.js al package.json. Los modelos no viajan con el juego: se cargan desde la demo publicada de esta pieza (https://play.fogon.page/medieval-sets/medieval/), que los sirve a cualquier juego de Fogón.

import * as THREE from "three";
import { loadKits, piece, pieceNow, pieceLOD, bounds, groundPlane } from "./medieval-sets/kits";

// Una pared con puerta. `piece` baja su kit la primera vez (village.glb: 2,8 MB) y después clona al instante.
scene.add(await piece("village", "Wall_Plaster_Door_Round"));

// Para muchas: primero los kits que vas a usar, de una, y después pieceNow (sin await) en un bucle.
await loadKits(["props", "nature"], { onProgress: (f) => console.log(`${Math.round(f * 100)}%`) });
for (let i = 0; i < 20; i++) {
  const barrel = pieceNow("props", "Barrel");
  barrel.position.set(i * 0.8, 0, 0);
  barrel.rotation.y = Math.random() * Math.PI * 2;
  scene.add(barrel);
}

// Un árbol que de lejos (más de 45 m) pasa a su versión liviana.
scene.add(await pieceLOD("nature", "U_PineTree_2", 45));

// Un suelo de 40 × 40 m de pasto (la textura se repite cada 4 m), y la caja de una pieza para chocar contra ella.
scene.add(groundPlane("grass", 40));
const box = bounds("props", "Stall_Cart_Empty"); // { min: [x, y, z], max: [x, y, z] }

Para que se vean bien: sombras prendidas (renderer.shadowMap.enabled = true y una DirectionalLight con castShadow) y algo de luz ambiente (HemisphereLight, o scene.environment con RoomEnvironment). Las piezas ya vienen con castShadow y receiveShadow.

Lo que exporta kits.ts

loadKits(kits?, { base?, onProgress?, shadows? })baja los kits (los tres si no decís cuáles) en paralelo. Llamarla de nuevo no baja nada
piece(kit, name)una copia nueva de la pieza (Promise<Object3D>); si su kit no estaba, lo baja
pieceNow(kit, name)lo mismo, sin esperar: el kit tiene que estar cargado
pieceLOD(kit, name, far = 45)un THREE.LOD con la pieza y su _LOD desde far metros
pieceNames(kit) · bounds(kit, name) · size(kit, name)los nombres de A a Z, la caja y el tamaño en metros (del catálogo: no hace falta bajar los modelos)
groundTexture(name) · groundPlane(name, size, tile)las texturas de suelo (compartidas) o un plano ya armado
loadCatalog() · setBase(url) · isLoaded(kit)el catálogo solo, de dónde se cargan los archivos, si un kit ya está
disposeGround(mesh) · disposeKits()liberar un suelo, o todo lo que el cargador tiene

Las copias comparten geometría y materiales con el kit: mil barriles cuestan un barril de memoria, y sacar uno de la escena no necesita nada más. Si cambiás el material de una copia cambian todas: cloná el material primero para un color propio.

Usar los archivos sin depender de la demo

Para tenerlos dentro de tu juego (sin conexión, o servidos por vos), bajalos a public/medieval/ y decíselo al cargador una vez, antes de cargar nada:

mkdir -p public/medieval/textures && cd public/medieval
B=https://play.fogon.page/medieval-sets/medieval
for f in catalog.json village.glb props.glb nature.glb; do curl -fO $B/$f; done
for t in dirt dirt_n grass grass_n grass_dry rock rock_n snow snow_n; do curl -fo textures/ground_$t.webp $B/textures/ground_$t.webp; done
await loadKits(undefined, { base: "./medieval/" });

Son unos 15 MB (village 2,8 · props 3,7 · nature 7,4 · texturas 1,9). Si usás un solo kit, bajá solo ese .glb y el catálogo.

Límites

  • Son mallas estáticas: no hay física ni colisiones. Para chocar, usá bounds (una caja por pieza) o armá tus formas.
  • No hay animaciones ni personajes: eso no viene en esta pieza.
  • Los árboles tienen dos versiones: la normal y la _LOD (menos triángulos), para lo que está lejos.
  • Algunas piezas cuelgan de su punto de apoyo (las armas, de su empuñadura; los arbustos tienen raíces bajo el suelo): mirá su caja (bounds) antes de apoyarlas.
  • Las hojas usan texturas recortadas (alpha test). El cargador les arregla un borde blanco que traen de fábrica: si cargás los .glb con tu propio código, las hojas van a tener ese borde.
  • Los archivos vienen comprimidos con meshopt: el cargador ya lo resuelve; con otro motor hace falta su decodificador.

Créditos y licencia

Modelos de Quaternius (quaternius.com), de sus packs Medieval Village MegaKit, Fantasy Props MegaKit, Stylized Nature MegaKit y Ultimate Stylized Nature, en dominio público (CC0). Unas pocas piezas de la utilería se hicieron para Medival (la fogata, la leña, los platos y guisos, los pescados, la caña, los minerales y sus vetas, el árbol gigante, la espada de fresno) y las versiones _LOD de los árboles las armó su compilación de modelos: todo eso también es CC0. Publicadas desde Medival. No hace falta dar crédito, pero se agradece.