Landscape Materials logo

Landscape Materials

Community
kevinpbuckley
landscape-materials

Create landscape materials with layer blending, texture setup, and layer info objects (LandscapeMaterialService). Use when the user asks to build a landscape/terrain material, set up paint layers (grass/rock/dirt), create layer info objects, add a grass output, or assign a material to a landscape. For production master-material+RVT systems, load landscape-auto-material.

Overview

Publisherkevinpbuckley
RepositoryVibeUE
Skill namelandscape-materials
Stars
735
Forks
161
Bundled files
3
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 3 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by kevinpbuckley on GitHub. Read the source before you install it.

Installation

Install the Landscape Materials AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/landscape-materials
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/kevinpbuckley/VibeUE.git /tmp/VibeUE
mkdir -p .claude/skills
cp -r /tmp/VibeUE/Content/Skills/landscape-materials .claude/skills/landscape-materials
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Landscape Materials in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Landscape Materials on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Landscape Materials is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

🧠 Brains complement: IF an unreal-engine-skills-manager tool (external MCP) exists in this session, call it with {action: "load", skill: "materials-and-shaders"} for UE domain knowledge on this topic — correct APIs, architecture, best practices — and treat it as the rubric for any review / "best practices" question. If no such tool is available (e.g. running under Claude Code or Codex without that MCP), skip this line entirely and proceed with this skill alone — do NOT attempt the call.

Landscape Material System Skill

When to Use This Skill vs. landscape-auto-material

  • This skill (landscape-materials): Simple materials with 2-5 layers using LandscapeLayerBlend. Good for prototyping.
  • landscape-auto-material: Production materials using material functions, RVT, and material instances. Good for shipping quality. Use when you need the Real_Landscape paradigm with auto-layering, altitude/slope blending via material functions, and biome configuration through material instances.

If you need material functions, Runtime Virtual Textures, or the master-material + instance pattern, load the landscape-auto-material skill (the engine's AgentSkillToolset GetSkills exposes it).

Critical Rules

🚨 Inspect Before Modifying Existing Landscape Materials

Before modifying an existing landscape material, you MUST export and review its current graph:

python
import unreal, json

path = "/Game/Materials/M_Terrain"

# Step 1: Get material info
info = unreal.MaterialService.get_material_info(path)
print(f"Blend: {info.blend_mode}, Shading: {info.shading_model}")

# Step 2: Export full graph to see what nodes and connections already exist
graph = json.loads(unreal.MaterialNodeService.export_material_graph(path))
for expr in graph['expressions']:
    name = expr.get('parameter_name') or expr.get('class')
    print(f"  [{expr['id']}] {expr['class']} - {name}")
    if expr.get('landscape_layers'):
        for layer in expr['landscape_layers']:
            print(f"      Layer: {layer}")
for oc in graph['output_connections']:
    print(f"  Output '{oc['property']}' ← expr {oc['expression_id']}")

Why: Landscape materials often already have LayerBlend nodes, texture samplers, and connected outputs. Adding duplicate nodes without reviewing first creates orphaned expressions and broken connections. Always export → review → plan → modify.

Two Services Work Together

  • LandscapeMaterialService - Landscape-specific nodes (LayerBlend, LayerCoords, LayerInfo)
  • MaterialService + MaterialNodeService - Standard material operations (create, compile, save, connect other nodes)

Layer Blend Types

TypeUse
LB_WeightBlendStandard paintable layers (most common)
LB_AlphaBlendNon-normalized blending
LB_HeightBlendHeight-based auto-blending between layers

Always Create Layer Info Objects

Each layer name needs a matching ULandscapeLayerInfoObject asset:

  • Create before assigning material to landscape
  • Asset name convention: LI_<LayerName> (e.g., LI_Grass, LI_Rock)
  • ALWAYS store and use .asset_path from create_layer_info_object() result — never guess paths
  • WRONG: "/Game/Landscape/Grass_LayerInfo" → CORRECT: grass_info.asset_path (which is "/Game/Landscape/LI_Grass")

⚠️ assign_material_to_landscape Will Silently Skip Bad Paths

If layer_info_paths contains wrong paths, assign_material_to_landscape may return True (material set) but layers will be empty. Always verify with get_landscape_info().layers after assignment.

Compile + Save After Changes

python
unreal.MaterialService.compile_material(mat_path)
unreal.EditorAssetLibrary.save_asset(mat_path)

⚠️ compile_material Is Slow — Use Separate Code Blocks

compile_material() can take minutes for landscape materials with blend nodes. NEVER put create + compile in the same code block — it will exceed the Python execution timeout.

Split into separate steps:

  1. Block 1: Create material, add blend nodes, add layers, connect outputs, save
  2. Block 2: compile_material(mat_path) alone
  3. Block 3: Create layer info objects, assign to landscape

Texture Tiling

  • Landscapes are large; textures need tiling via LandscapeLayerCoords
  • Default MappingScale=0.01 tiles every 100 units
  • Smaller values = more tiling, larger values = less tiling

Task Index

TaskSub-docSample script
Create a landscape material (+ layers)workflows.md → Create Complete Landscape Materialscripts/create_landscape_material.txt
Set up a layer with texturesworkflows.md → Setup Layer with Textures—
Create layer info objectsworkflows.md → Create Layer Info Objects—
Assign material to a landscapeworkflows.md → Assign Material to Landscape—
Grass output nodeworkflows.md → Create Grass Output Node—
Satellite-guided material + paintingsatellite.md—

Sub-docs

  • workflows.md — step-by-step landscape-material build workflows (layers, textures, layer info, grass).
  • satellite.md — satellite-image-guided material creation and slope/height painting.

Verification

compile_material (slow — keep it in its own code block) then save. Inspect the graph with MaterialNodeService.export_material_graph before modifying an existing landscape material.

Sample scripts (run via execute_python_code)

  • scripts/create_landscape_material.txt — create a landscape material with a layer blend, compile, assign.

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Landscape Materials AI skill do?

Create landscape materials with layer blending, texture setup, and layer info objects (LandscapeMaterialService). Use when the user asks to build a landscape/terrain material, set up paint layers (grass/rock/dirt), create layer info objects, add a grass output, or assign a material to a landscape. For production master-material+RVT systems, load landscape-auto-material.

Why use Landscape Materials on TypingMind?

Because you install it once and use it with any model. Landscape Materials is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Landscape Materials in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/kevinpbuckley/VibeUE/tree/master/Content/Skills/landscape-materials. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Landscape Materials?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Landscape Materials?

As many as you like. As long as a model supports skills, you can use Landscape Materials with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Landscape Materials AI skill free?

Yes. It is published on GitHub by kevinpbuckley under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇