---
title: Material-Library
linkTitle: Materialien
weight: 5
---

Die Material-Library lebt im **PROJECT-SETTINGS**-Tab "Materialien" und folgt einem **klassischen List/Detail-Layout**: links die Material-Liste, rechts der Detail-Editor für die aktive Auswahl.

## List/Detail-Workflow

{{% steps %}}

### Material in der Liste anlegen

Plus-Button → neues Material mit Default-Werten. Liste wird sofort aktualisiert, Thumbnail erscheint.

### Detail editieren

Rechts werden alle Eigenschaften der aktiven Auswahl gezeigt: Name, Farbe, Rauheit, Metallic, Texturen, Linetype-Binding. Änderungen werden live geschrieben — kein Apply-Button.

### Verwendung im Modell

Material wird im ELEMENTE-Panel pro Smart-Element ausgewählt. Auto-Regen aktualisiert die Rhino-Rendermaterials und triggert eine View-Aktualisierung.

{{% /steps %}}

## PBR-Materialien

Jedes Material trägt:

| Eigenschaft   | Beschreibung                                          |
|---------------|-------------------------------------------------------|
| Name          | Frei vergeben — `Sichtbeton fein`, `Eiche geölt`      |
| Albedo        | Basis-Farbe (Hex) oder Albedo-Textur (PNG/JPG)        |
| Roughness     | Glanz-Schärfe, 0 (Spiegel) → 1 (matt)                 |
| Metallic      | Dielektrikum vs. Metall, 0 → 1                        |
| Normal-Map    | Optional — PNG für Surface-Detail                     |
| Linetype      | Gebundener Linetype für Schnittlinien (Bezug zu .lin) |

Rhino-Renderer (Cycles) liest die PBR-Daten direkt — kein separater Material-Editor nötig.

## Material/Ebene-Separation

Eine bewusste DOSSIER-Konvention:

```text
Material  ──────▶  Wie sieht's aus? (Albedo, Roughness, …)
Layer     ──────▶  Wozu gehört's? (10_GRUNDRISSE::EG::20_WAENDE)
```

Die beiden bleiben **getrennt** — ein Material kann auf vielen Layern verwendet werden, ein Layer kann viele Materialien tragen. Das vermeidet die typische Rhino-Falle, in der Layer-Farbe und Material-Farbe konkurrieren.

## Auto-Regen

Wird ein Material editiert (Farbe geändert, Textur ersetzt), regenerieren sich alle Smart-Elemente, die es verwenden, automatisch:

1. `materialien_bridge` schreibt das neue PBR-Set in Rhinos `RenderMaterial`-Tabelle
2. `elemente_bridge._regenerate_all_with_material(material_id)` läuft über alle Wände, Decken, … mit diesem Material
3. Joint-Cache wird invalidiert (Material kann die Lineweight bei Anschnitten beeinflussen)

Spürbare Latenz < 200 ms für Projekte unter 500 Smart-Elementen.

## Linetypes (.lin-Import)

Der **Linientypen**-Tab in PROJECT-SETTINGS importiert branchenübliche `.lin`-Files:

```text
*BORDER,Border __ __ . __ __ . __ __ . __ __ . __ __ .
A,.5,-.25,.5,-.25,0,-.25
```

Der Parser zerlegt die Sequenz und schreibt eine native `Rhino.DocObjects.Linetype` ins Dokument. Skalierung wird projektweit gesetzt und folgt dem aktiven Massstab (siehe [Massstab](../massstab)).

Pattern-Editor visualisiert die Sequenz mit Drag-Handles für Strich/Lücke-Längen — `.lin`-Import und Editor schreiben in denselben Datentyp, sind also austauschbar.

## Hatches (.pat-Import)

Der **Schraffuren**-Tab importiert branchenübliche `.pat`-Hatch-Pattern:

```text
*ANSI31,ANSI Iron, Brick, Stone masonry
45,0,0,0,.125
```

Pattern werden als `Rhino.DocObjects.HatchPattern` registriert und stehen Section-Styles, Layer-Properties und Gestaltung-Panel direkt zur Verfügung.

**Pattern + Scale + Rotation-Signatur** wird im GESTALTUNG-Panel zur automatischen Layer-Erkennung verwendet (siehe [Gestaltung](../gestaltung)).

## Material-Cache

Beim Lesen wird über eine **Hex → MaterialIndex-Map** gecacht. Stale-Check bei jedem Read:

- Existiert der Material-Index noch im Rhino-Doc?
- Hat sich der Hex-Wert verändert?
- Wurde das Material extern via Rhinos Material-Editor gelöscht?

Bei Stale wird die Map neu aufgebaut. Manuell triggerbar via [Werkzeuge → Material-Cache leeren](../werkzeuge).

{{< callout type="info" >}}
Texturen werden **relativ zur `.3dm`** referenziert. Wenn das Projekt verschoben wird, müssen Texturen mitwandern — Dossier zeigt fehlende Texturen mit einem warnenden Placeholder-Thumbnail in der Library-Liste an.
{{< /callout >}}
