Skills Agentes

Threejs Materials

Materiales de Three.js: PBR, basic, phong, materiales de shader y propiedades de material. Úsalo al dar estilo a mallas, trabajar con texturas o crear shaders propios.

Estrellas
49.5k

en todo el repo

Actividad
36

0–100, la ruta de este skill

Actualizado
hace 4 meses

último commit aquí

Commits
0

últimos 90 días

Contexto
3.4k tok

47 tok en reposo

Paquete
1 archivo

13 KB

Instalar

Funciona con cualquier agente que lea SKILL.md

npx -y skills add calesthio/OpenMontage --skill threejs-materials --agent claude-code

Se instala solo en este repositorio.

Qué hace

  • Repasa todos los tipos de material de Three.js, desde `MeshBasicMaterial` hasta `MeshPhysicalMaterial`
  • Cubre PBR con `MeshStandardMaterial` y PBR avanzado con `MeshPhysicalMaterial`
  • Incluye materiales no realistas: toon, normal, depth, points y líneas básicas o discontinuas
  • Explica `ShaderMaterial` y `RawShaderMaterial` para shaders propios
  • Documenta las propiedades de material y cómo optimizar su rendimiento

Úsalo cuando

  • Dar estilo a mallas 3D
  • Trabajar con texturas sobre materiales
  • Crear shaders propios
  • Optimizar el rendimiento de los materiales

No lo uses cuando

    Qué lo activa

    Di cualquiera de estas frases y el agente debería cargar este skill.

    • Ponle un material PBR realista a este objeto
    • Quiero un look estilo cel shading
    • Crea un material con shader propio
    • ¿Qué material uso para este cristal?

    SKILL.md

    En inglés

    Three.js Materials

    Quick Start

    import * as THREE from "three";
    
    // PBR material (recommended for realistic rendering)
    const material = new THREE.MeshStandardMaterial({
      color: 0x00ff00,
      roughness: 0.5,
      metalness: 0.5,
    });
    
    const mesh = new THREE.Mesh(geometry, material);
    

    Material Types Overview

    Material Use Case Lighting
    MeshBasicMaterial Unlit, flat colors, wireframes No
    MeshLambertMaterial Matte surfaces, performance Yes (diffuse only)
    MeshPhongMaterial Shiny surfaces, specular highlights Yes
    MeshStandardMaterial PBR, realistic materials Yes (PBR)
    MeshPhysicalMaterial Advanced PBR, clearcoat, transmission Yes (PBR+)
    MeshToonMaterial Cel-shaded, cartoon look Yes (toon)
    MeshNormalMaterial Debug normals No
    MeshDepthMaterial Depth visualization No
    ShaderMaterial Custom GLSL shaders Custom
    RawShaderMaterial Full shader control Custom

    MeshBasicMaterial

    No lighting calculations. Fast, always visible.

    const material = new THREE.MeshBasicMaterial({
      color: 0xff0000,
      transparent: true,
      opacity: 0.5,
      side: THREE.DoubleSide, // FrontSide, BackSide, DoubleSide
      wireframe: false,
      map: texture, // Color/diffuse texture
      alphaMap: alphaTexture, // Transparency texture
      envMap: envTexture, // Reflection texture
      reflectivity: 1, // Env map intensity
      fog: true, // Affected by scene fog
    });
    

    MeshLambertMaterial

    Diffuse-only lighting. Fast, no specular highlights.

    const material = new THREE.MeshLambertMaterial({
      color: 0x00ff00,
      emissive: 0x111111, // Self-illumination color
      emissiveIntensity: 1,
      map: texture,
      emissiveMap: emissiveTexture,
      envMap: envTexture,
      reflectivity: 0.5,
    });
    

    MeshPhongMaterial

    Specular highlights. Good for shiny, plastic-like surfaces.

    const material = new THREE.MeshPhongMaterial({
      color: 0x0000ff,
      specular: 0xffffff, // Highlight color
      shininess: 100, // Highlight sharpness (0-1000)
      emissive: 0x000000,
      flatShading: false, // Flat vs smooth shading
      map: texture,
      specularMap: specTexture, // Per-pixel shininess
      normalMap: normalTexture,
      normalScale: new THREE.Vector2(1, 1),
      bumpMap: bumpTexture,
      bumpScale: 1,
      displacementMap: dispTexture,
      displacementScale: 1,
    });
    

    MeshStandardMaterial (PBR)

    Physically-based rendering. Recommended for realistic results.

    const material = new THREE.MeshStandardMaterial({
      color: 0xffffff,
      roughness: 0.5, // 0 = mirror, 1 = diffuse
      metalness: 0.0, // 0 = dielectric, 1 = metal
    
      // Textures
      map: colorTexture, // Albedo/base color
      roughnessMap: roughTexture, // Per-pixel roughness
      metalnessMap: metalTexture, // Per-pixel metalness
      normalMap: normalTexture, // Surface detail
      normalScale: new THREE.Vector2(1, 1),
      aoMap: aoTexture, // Ambient occlusion (uses uv2!)
      aoMapIntensity: 1,
      displacementMap: dispTexture, // Vertex displacement
      displacementScale: 0.1,
      displacementBias: 0,
    
      // Emissive
      emissive: 0x000000,
      emissiveIntensity: 1,
      emissiveMap: emissiveTexture,
    
      // Environment
      envMap: envTexture,
      envMapIntensity: 1,
    
      // Other
      flatShading: false,
      wireframe: false,
      fog: true,
    });
    
    // Note: aoMap requires second UV channel
    geometry.setAttribute("uv2", geometry.attributes.uv);
    

    MeshPhysicalMaterial (Advanced PBR)

    Extends MeshStandardMaterial with advanced features.

    const material = new THREE.MeshPhysicalMaterial({
      // All MeshStandardMaterial properties plus:
    
      // Clearcoat (car paint, lacquer)
      clearcoat: 1.0, // 0-1 clearcoat layer strength
      clearcoatRoughness: 0.1,
      clearcoatMap: ccTexture,
      clearcoatRoughnessMap: ccrTexture,
      clearcoatNormalMap: ccnTexture,
      clearcoatNormalScale: new THREE.Vector2(1, 1),
    
      // Transmission (glass, water)
      transmission: 1.0, // 0 = opaque, 1 = fully transparent
      transmissionMap: transTexture,
      thickness: 0.5, // Volume thickness for refraction
      thicknessMap: thickTexture,
      attenuationDistance: 1, // Absorption distance
      attenuationColor: new THREE.Color(0xffffff),
    
      // Refraction
      ior: 1.5, // Index of refraction (1-2.333)
    
      // Sheen (fabric, velvet)
      sheen: 1.0,
      sheenRoughness: 0.5,
      sheenColor: new THREE.Color(0xffffff),
      sheenColorMap: sheenTexture,
      sheenRoughnessMap: sheenRoughTexture,
    
      // Iridescence (soap bubbles, oil slicks)
      iridescence: 1.0,
      iridescenceIOR: 1.3,
      iridescenceThicknessRange: [100, 400],
      iridescenceMap: iridTexture,
      iridescenceThicknessMap: iridThickTexture,
    
      // Anisotropy (brushed metal)
      anisotropy: 1.0,
      anisotropyRotation: 0,
      anisotropyMap: anisoTexture,
    
      // Specular
      specularIntensity: 1,
      specularColor: new THREE.Color(0xffffff),
      specularIntensityMap: specIntTexture,
      specularColorMap: specColorTexture,
    });
    

    Glass Material Example

    const glass = new THREE.MeshPhysicalMaterial({
      color: 0xffffff,
      metalness: 0,
      roughness: 0,
      transmission: 1,
      thickness: 0.5,
      ior: 1.5,
      envMapIntensity: 1,
    });
    

    Car Paint Example

    const carPaint = new THREE.MeshPhysicalMaterial({
      color: 0xff0000,
      metalness: 0.9,
      roughness: 0.5,
      clearcoat: 1,
      clearcoatRoughness: 0.1,
    });
    

    MeshToonMaterial

    Cel-shaded cartoon look.

    const material = new THREE.MeshToonMaterial({
      color: 0x00ff00,
      gradientMap: gradientTexture, // Optional: custom shading gradient
    });
    
    // Create step gradient texture
    const colors = new Uint8Array([0, 128, 255]);
    const gradientMap = new THREE.DataTexture(colors, 3, 1, THREE.RedFormat);
    gradientMap.minFilter = THREE.NearestFilter;
    gradientMap.magFilter = THREE.NearestFilter;
    gradientMap.needsUpdate = true;
    

    MeshNormalMaterial

    Visualize surface normals. Useful for debugging.

    const material = new THREE.MeshNormalMaterial({
      flatShading: false,
      wireframe: false,
    });
    

    MeshDepthMaterial

    Render depth values. Used for shadow maps, DOF effects.

    const material = new THREE.MeshDepthMaterial({
      depthPacking: THREE.RGBADepthPacking,
    });
    

    PointsMaterial

    For point clouds.

    const material = new THREE.PointsMaterial({
      color: 0xffffff,
      size: 0.1,
      sizeAttenuation: true, // Scale with distance
      map: pointTexture,
      alphaMap: alphaTexture,
      transparent: true,
      alphaTest: 0.5, // Discard pixels below threshold
      vertexColors: true, // Use per-vertex colors
    });
    
    const points = new THREE.Points(geometry, material);
    

    LineBasicMaterial & LineDashedMaterial

    // Solid lines
    const lineMaterial = new THREE.LineBasicMaterial({
      color: 0xffffff,
      linewidth: 1, // Note: >1 only works on some systems
      linecap: "round",
      linejoin: "round",
    });
    
    // Dashed lines
    const dashedMaterial = new THREE.LineDashedMaterial({
      color: 0xffffff,
      dashSize: 0.5,
      gapSize: 0.25,
      scale: 1,
    });
    
    // Required for dashed lines
    const line = new THREE.Line(geometry, dashedMaterial);
    line.computeLineDistances();
    

    ShaderMaterial

    Custom GLSL shaders with Three.js uniforms.

    const material = new THREE.ShaderMaterial({
      uniforms: {
        time: { value: 0 },
        color: { value: new THREE.Color(0xff0000) },
        texture1: { value: texture },
      },
      vertexShader: `
        varying vec2 vUv;
        uniform float time;
    
        void main() {
          vUv = uv;
          vec3 pos = position;
          pos.z += sin(pos.x * 10.0 + time) * 0.1;
          gl_Position = projectionMatrix * modelViewMatrix * vec4(pos, 1.0);
        }
      `,
      fragmentShader: `
        varying vec2 vUv;
        uniform vec3 color;
        uniform sampler2D texture1;
    
        void main() {
          // Use texture2D() for GLSL 1.0, texture() for GLSL 3.0 (glslVersion: THREE.GLSL3)
          vec4 texColor = texture2D(texture1, vUv);
          gl_FragColor = vec4(color * texColor.rgb, 1.0);
        }
      `,
      transparent: true,
      side: THREE.DoubleSide,
    });
    
    // Update uniform in animation loop
    material.uniforms.time.value = clock.getElapsedTime();
    

    Built-in Uniforms (auto-provided)

    // Vertex shader
    uniform mat4 modelMatrix;         // Object to world
    uniform mat4 modelViewMatrix;     // Object to camera
    uniform mat4 projectionMatrix;    // Camera projection
    uniform mat4 viewMatrix;          // World to camera
    uniform mat3 normalMatrix;        // For transforming normals
    uniform vec3 cameraPosition;      // Camera world position
    
    // Attributes
    attribute vec3 position;
    attribute vec3 normal;
    attribute vec2 uv;
    

    RawShaderMaterial

    Full control - no built-in uniforms/attributes.

    const material = new THREE.RawShaderMaterial({
      uniforms: {
        projectionMatrix: { value: camera.projectionMatrix },
        modelViewMatrix: { value: new THREE.Matrix4() },
      },
      vertexShader: `
        precision highp float;
        attribute vec3 position;
        uniform mat4 projectionMatrix;
        uniform mat4 modelViewMatrix;
    
        void main() {
          gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);
        }
      `,
      fragmentShader: `
        precision highp float;
    
        void main() {
          gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0);
        }
      `,
    });
    

    Common Material Properties

    All materials share these base properties:

    // Visibility
    material.visible = true;
    material.transparent = false;
    material.opacity = 1.0;
    material.alphaTest = 0; // Discard pixels with alpha < value
    
    // Rendering
    material.side = THREE.FrontSide; // FrontSide, BackSide, DoubleSide
    material.depthTest = true;
    material.depthWrite = true;
    material.colorWrite = true;
    
    // Blending
    material.blending = THREE.NormalBlending;
    // NormalBlending, AdditiveBlending, SubtractiveBlending, MultiplyBlending, CustomBlending
    
    // Stencil
    material.stencilWrite = false;
    material.stencilFunc = THREE.AlwaysStencilFunc;
    material.stencilRef = 0;
    material.stencilMask = 0xff;
    
    // Polygon offset (z-fighting fix)
    material.polygonOffset = false;
    material.polygonOffsetFactor = 0;
    material.polygonOffsetUnits = 0;
    
    // Misc
    material.dithering = false;
    material.toneMapped = true;
    

    Multiple Materials

    // Assign different materials to geometry groups
    const geometry = new THREE.BoxGeometry(1, 1, 1);
    const materials = [
      new THREE.MeshBasicMaterial({ color: 0xff0000 }), // right
      new THREE.MeshBasicMaterial({ color: 0x00ff00 }), // left
      new THREE.MeshBasicMaterial({ color: 0x0000ff }), // top
      new THREE.MeshBasicMaterial({ color: 0xffff00 }), // bottom
      new THREE.MeshBasicMaterial({ color: 0xff00ff }), // front
      new THREE.MeshBasicMaterial({ color: 0x00ffff }), // back
    ];
    const mesh = new THREE.Mesh(geometry, materials);
    
    // Custom groups
    geometry.clearGroups();
    geometry.addGroup(0, 6, 0); // start, count, materialIndex
    geometry.addGroup(6, 6, 1);
    

    Environment Maps

    // Load cube texture
    const cubeLoader = new THREE.CubeTextureLoader();
    const envMap = cubeLoader.load([
      "px.jpg",
      "nx.jpg", // positive/negative X
      "py.jpg",
      "ny.jpg", // positive/negative Y
      "pz.jpg",
      "nz.jpg", // positive/negative Z
    ]);
    
    // Apply to material
    material.envMap = envMap;
    material.envMapIntensity = 1;
    
    // Or set as scene environment (affects all PBR materials)
    scene.environment = envMap;
    
    // HDR environment (recommended)
    import { RGBELoader } from "three/examples/jsm/loaders/RGBELoader.js";
    const rgbeLoader = new RGBELoader();
    rgbeLoader.load("environment.hdr", (texture) => {
      texture.mapping = THREE.EquirectangularReflectionMapping;
      scene.environment = texture;
      scene.background = texture;
    });
    

    Material Cloning and Modification

    // Clone material
    const clone = material.clone();
    clone.color.set(0x00ff00);
    
    // Modify at runtime
    material.color.set(0xff0000);
    material.needsUpdate = true; // Only needed for some changes
    
    // When needsUpdate is required:
    // - Changing flat shading
    // - Changing texture
    // - Changing transparent
    // - Custom shader code changes
    

    Performance Tips

    1. Reuse materials: Same material = batched draw calls
    2. Avoid transparent when possible: Transparent materials require sorting
    3. Use alphaTest instead of transparency: When applicable, faster
    4. Choose simpler materials: Basic > Lambert > Phong > Standard > Physical
    5. Limit active lights: Each light adds shader complexity
    // Material pooling
    const materialCache = new Map();
    function getMaterial(color) {
      const key = color.toString(16);
      if (!materialCache.has(key)) {
        materialCache.set(key, new THREE.MeshStandardMaterial({ color }));
      }
      return materialCache.get(key);
    }
    
    // Dispose when done
    material.dispose();
    

    See Also

    • threejs-textures - Texture loading and configuration
    • threejs-shaders - Custom shader development
    • threejs-lighting - Light interaction with materials

    Reproducido de calesthio/OpenMontage bajo licencia AGPL-3.0. Leer esta página en markdown.

    Archivos

    1 archivo en el paquete. Solo se lee SKILL.md al activarse — las referencias se cargan si el skill decide que las necesita.

    Detalles

    Creador
    calesthio
    Categoría
    Diseño y UI
    Licencia
    AGPL-3.0
    Recursos incluidos
    Solo SKILL.md
    Código fuente
    Ver SKILL.md

    Etiquetas

    Más de calesthio/OpenMontage

    Este repo incluye 89 skills. Si instalas uno, normalmente ya tienes los demás.

    Comfyui

    49.5k

    Úsalo al trabajar con workflows de ComfyUI en OpenMontage: comfyui_image/video/music, workflows propios, selección de output_node, modelos que faltan, LoRAs, poca VRAM e importación de workflows de la comunidad.

    Costo de contexto al activarse
    1.9k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 9 días
    diseno ui

    Genera vídeo cinematográfico de 4-30 s con ByteDance Seedance 2.5 por fal.ai, Volcengine Ark, Runway o ComfyUI. Cubre el contrato de prompt 2.5, cortes duros, locks de continuidad y voz.

    Costo de contexto al activarse
    3.2k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 4 días
    diseno ui

    Genera narración expresiva y multilingüe con fish.audio (modelos S1 / S2) y reutiliza voces clonadas mediante reference_id.

    Costo de contexto al activarse
    1.4k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 9 días
    diseno ui

    Genera y edita conversacionalmente vídeos cortos con Google Gemini Omni Flash: itera con ediciones en lenguaje natural, clips de 3-10s a 720p con audio y texto en pantalla, e imágenes de referencia por etiquetas.

    Costo de contexto al activarse
    2.1k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 9 días
    Permisos
    diseno ui

    Genera vídeo con MiniMax H3 (Hailuo 3.0) por la API oficial v2, fal.ai, Runway, nodos partner de ComfyUI o pesos abiertos locales. Clips de 4-15s a 2K con animación de primer/último fotograma.

    Costo de contexto al activarse
    582 tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 9 días
    diseno ui

    Genera, reconstruye, inspecciona y enruta activos 3D de producción para mundos de OpenMontage con Atlas Cloud, fal.ai, catálogos con licencia y Blender.

    Costo de contexto al activarse
    1.2k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 9 días
    diseno ui

    Skills relacionados

    Genera, reconstruye, inspecciona y enruta activos 3D de producción para mundos de OpenMontage con Atlas Cloud, fal.ai, catálogos con licencia y Blender.

    Costo de contexto al activarse
    1.2k tok
    Tamaño del paquete
    2 archivos
    Última actualización
    hace 9 días
    diseno ui

    Acestep

    49.5k

    Generación musical con ACE-Step 1.5: música de fondo, pistas con voz, versiones y extracción de stems para producción de vídeo.

    Costo de contexto al activarse
    2.3k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    hace 4 meses
    diseno ui

    Genera vídeos con IA desde texto usando varias pasarelas — HeyGen, fal.ai, Kling y Gemini — con soporte de imagen a vídeo y comparación entre VEO, Kling, Sora, Runway, Seedance y MiniMax.

    Costo de contexto al activarse
    3k tok
    Tamaño del paquete
    1 archivo
    Última actualización
    el mes pasado
    diseno ui