Augenlid maske

This commit is contained in:
Simon Lübeß
2026-02-11 18:16:05 +01:00
parent b5df554366
commit 09ab061827
35 changed files with 385 additions and 63 deletions

View File

@@ -10,35 +10,38 @@
{ {
"id": "5160c41cbad83466", "id": "5160c41cbad83466",
"type": "leaf", "type": "leaf",
"state": {
"type": "pdf",
"state": {
"file": "Paperung/Medizinischer Hintergrund/René - 2006 - Update on orbital anatomy.pdf",
"page": 1,
"left": -736,
"top": 120,
"zoom": 0.8
},
"icon": "lucide-file-text",
"title": "René - 2006 - Update on orbital anatomy"
}
},
{
"id": "b2048cd64e8af331",
"type": "leaf",
"state": { "state": {
"type": "markdown", "type": "markdown",
"state": { "state": {
"file": "Paperung/Medizinischer Hintergrund/Der Periorbitalbereich.excalidraw.md", "file": "Was ich so gemacht habe/Arbeitszeit und so.md",
"mode": "source", "mode": "source",
"source": false "source": false
}, },
"icon": "lucide-file", "icon": "lucide-file",
"title": "Der Periorbitalbereich.excalidraw" "title": "Arbeitszeit und so"
} }
} }
], ]
"currentTab": 1 },
{
"id": "13fe538d7f1e4bdb",
"type": "tabs",
"children": [
{
"id": "dedc0e08f05953c2",
"type": "leaf",
"state": {
"type": "markdown",
"state": {
"file": "Prewrite/Compositor Rewrite.md",
"mode": "source",
"source": false
},
"icon": "lucide-file",
"title": "Compositor Rewrite"
}
}
]
} }
], ],
"direction": "vertical" "direction": "vertical"
@@ -191,52 +194,53 @@
"pdf-plus:PDF++: Toggle auto-paste": false "pdf-plus:PDF++: Toggle auto-paste": false
} }
}, },
"active": "b2048cd64e8af331", "active": "69a5c474fe4b0e88",
"lastOpenFiles": [ "lastOpenFiles": [
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-aa-nostep-cubic.png",
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-aa-step-cubic.png",
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-aa-step-linear.png",
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-aa-nostep-linear.png",
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-aa-step-closest.png",
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-aa-nostep-closest.png",
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-noaa-cubic.png",
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-noaa-linear.png",
"Attachments/Images/AntialisingAndInterpolateMasks/eyelid-noaa-closest.png",
"Attachments/Images/AntialisingAndInterpolateMasks",
"Was ich so gemacht habe/Arbeitszeit und so.md",
"Prewrite/Compositor Rewrite.md",
"Untitled.md",
"Zu recherchierende Dinger.md",
"Zeitplan.excalidraw.md",
"TODO.md",
"Pasted Image 20251101190228_950.png",
"Motivator.excalidraw.md",
"Modellieren in Blender.md",
"Linux.md",
"Gray894.png",
"Exposé.md",
"Drawing 2025-10-31 18.39.54.excalidraw.md",
"Bekerman et al. - 2014 - Variations in Eyeball Diameters of the Healthy Adults.pdf",
"Prewrite/Hair Node System für Wimpern und Augenbrauen.md",
"Prewrite/2. Grundlagen.md",
"Prewrite/1. Einleitung.md",
"Paperung/Zusammenfassung Facial Features.md",
"Paperung/Größe des Augapfels.md",
"Paperung/Genome-wide mapping of global-to-local genetic effects on human facial shape.md",
"Paperung/Facial modeling and measurement based upon homologous topographical features.md",
"Paperung/Drawing 2025-11-30 22.08.28.excalidraw.md",
"Paperung/Medizinischer Hintergrund/René - 2006 - Update on orbital anatomy.pdf", "Paperung/Medizinischer Hintergrund/René - 2006 - Update on orbital anatomy.pdf",
"Paperung/Medizinischer Hintergrund/Der Periorbitalbereich.excalidraw.md", "Paperung/Medizinischer Hintergrund/Der Periorbitalbereich.excalidraw.md",
"Paperung/Medizinischer Hintergrund/Äquator_Auge.avif", "1_Trash/CompositorUp0date/Compositor.excalidraw.md",
"Was ich so gemacht habe/Arbeitszeit und so.md", "1_Trash",
"Paperung/Medizinischer Hintergrund/orbitarand.jpg", "Notizen/Untitled 1.md",
"Paperung/Medizinischer Hintergrund/Orbital_bones.png", "Notizen/Untitled.md",
"Paperung/Medizinischer Hintergrund/frontalschnitt.jpg", "Notizen/Compositor.md",
"Paperung/Medizinischer Hintergrund/frontalschnitt.png", "Notizen/16.10.2025.md",
"Paperung/Medizinischer Hintergrund/Coupe_frontale_médio_orbitaire,_segment_postérieur..JPG", "Attachments/Images/CryptoMatte",
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/2cf15b36-fb8e-42cd-aa97-f3e526a600a4_mdSq.jpg",
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon.html", "Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon.html",
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/mediafix_03808_md.jpg",
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/mediafix_02179_md.jpg",
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/logo-flexicon-xl.svg",
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon.htm", "Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon.htm",
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/consent.js", "Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/consent.js",
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/runtime.12f88696.js", "Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/runtime.12f88696.js",
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/iframeResizer.min.js", "Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/iframeResizer.min.js"
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/platform.js",
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/app.045fb875.css",
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/roboto-combined.css",
"Paperung/Medizinischer Hintergrund/Orbita - DocCheck Flexikon_files/container_2KILmzZO.js",
"Paperung/Drawing 2025-11-30 22.08.28.excalidraw.md",
"Prewrite/Hair Node System für Wimpern und Augenbrauen.md",
"Paperung/Untitled.md",
"Motivator.excalidraw.md",
"Paperung/Zusammenfassung Facial Features.md",
"Paperung/Facial modeling and measurement based upon homologous topographical features.md",
"Paperung/Größe des Augapfels.md",
"Zu recherchierende Dinger.md",
"Untitled.md",
"TODO.md",
"Modellieren in Blender.md",
"Linux.md",
"Prewrite/1. Einleitung.md",
"Paperung/Related Works/UnityEyes.md",
"Paperung/Related Works/UnityEyes 2.md",
"Paperung/RIT-Eyes.md",
"Drawings/cropped_Bekerman et al. - 2014 - Variations in Eyeball Diameters of the Healthy Adults.md",
"Paperung/Related Works/RIT-Eyes.md",
"CompositorUp0date/Compositor.excalidraw.md",
"Prewrite/2. Grundlagen.md",
"Notizen/Untitled 1.md",
"Drawing 2025-10-31 18.39.54.excalidraw.md",
"Paperung/Genome-wide mapping of global-to-local genetic effects on human facial shape.md"
] ]
} }

Binary file not shown.

After

Width:  |  Height:  |  Size: 60 KiB

View File

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 166 KiB

After

Width:  |  Height:  |  Size: 166 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 242 KiB

After

Width:  |  Height:  |  Size: 242 KiB

View File

Before

Width:  |  Height:  |  Size: 6.9 KiB

After

Width:  |  Height:  |  Size: 6.9 KiB

View File

Before

Width:  |  Height:  |  Size: 129 KiB

After

Width:  |  Height:  |  Size: 129 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 864 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 88 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 102 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 KiB

BIN
Eyelid_Mask.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

BIN
Gray894.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 46 KiB

53
Notizen/Compositor.md Normal file
View File

@@ -0,0 +1,53 @@
---
excalidraw-plugin: parsed
tags: [excalidraw]
---
==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== You can decompress Drawing data with the command palette: 'Decompress current Excalidraw file'. For more info check in plugin settings under 'Saving'
# Excalidraw Data
## Text Elements
Scene Render ^E7VriKO9
Matte Pick ^JdpW4AYI
## Element Links
AgcCBDuz: https://simonsgeile.cloud/s/ePjpeCDRdaDCFpt/preview
%%
## Drawing
```compressed-json
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
```
%%

File diff suppressed because one or more lines are too long

Binary file not shown.

Before

Width:  |  Height:  |  Size: 198 KiB

View File

@@ -0,0 +1,187 @@
## TODO:
- Was ist eine Szene
- https://docs.blender.org/manual/en/2.81/scene_layout/scene/introduction.html
- Was sind ViewLayer (und wie kann man sie verwenden, wie verwenden wir sie)
https://docs.blender.org/manual/en/2.81/render/layers/layers.html
- Was sind AOVs
https://docs.blender.org/manual/en/latest/render/shader_nodes/output/aov.html
## Compositor
Blenders hat einen mächtiges Compositor-System, welches die Möglichkeit bietet für die Filmproduktion oder Grafikerstellung verschiedenste Effekte auf die Render-Ergebnisse anzuwenden und diese als Bilder abzuspeichern.
Wie auch für Materialien und Geometrie-Erzeugung bietet Blender dazu einen Node-basierten Editor. In diesem können Eingangs-Nodes definiert werden, welche bestimmte Bilder oder Werte für die Nachbearbeitung bereitstellen. Diese können dann nach Bedarf mit weiteren Nodes - z. B. Farbe zu Graustufen umwandeln - nachbearbeitet werden und anschließend abgespeichert werden. Es ist auch möglich, mehrere Bilder zu einem zu vereinen.
Es gibt grundsätzlich zwei Input-Nodes, die verwendet werden können, um auf verschiedene Render-Ergebnisse zuzugreifen:
Zunächst sind das die __Render Layer__-Nodes. Diese erlauben es auf die Render-(Zwischen-)Ergebnisse eines __ViewLayers__ zuzugreifen. Dazu kann man im Node die Szene und den ViewLayer aus der Szene auswählen. Die Ausgänge Image und Alpha sind immer vorhanden. Image ist das "fertig" gerenderte Bild des ViewLayers, mit Farben, Schatten, Glanzlicht, etc. angewandt. Der Alpha-Ausgang gibt Zugriff auf eine Textur, die für jeden Pixel angibt, wie durchsichtig dieser ist. Ein Alpha-Wert von 1 gibt an, dass der Pixel vollständig undurchsichtig (opaque) ist. Ein Wert von 0 gibt an, dass der Pixel unsichtbar ist.
In den Einstellungen des ViewLayers können weitere Ausgänge aktiviert werden. Dies sind einerseits Zwischenergebnisse aus dem Render-Prozess, die für die Berechnung weiterer Effekte wie Beleuchtung nötig sind. Diese Zwischenergebnisse werden oft unter dem Begriff des _G-Buffer_ (Graphicsbuffer) zusammen gefasst und enthalten Daten, die geometrische Informationen der Szene enthalten. Ein Beispiel dafür ist z. B. der Depth-Buffer, welcher für jeden Pixel angibt, wie weit dieser von der Kamera entfernt ist. Weitere übliche sind der Normal-Buffer und Positions-Buffer, wobei ersterer die Orientierung der Oberflächen in der Welt und zweiterer die Position jedes Pixels im 3D-Raum speichert. Zwischenergebnisse der Beleuchtungsberechnung können ebenfalls ausgegeben werden. Die Mathematik, Bestandteile und Zwischenergebnisse der Beleuchtungsberechnung sind bedauerlicherweise jenseits des Umfangs dieser Arbeit und werden daher nicht weiter ausgeführt.
Abbildung XYZ zeigt Beispielhaft verschiedene Render-(Zwischen-)Ergebnisse einer Szene, auf die man mithilfe der __Render Layer__-Node zugreifen kann. Bei der gezeigten Szene handelt es sich um den Splash-Screen, der beim Starten von Blender 4.5 angezeigt wird. Die Abbildung zeigt das fertige Render-Ergebnis, den Depth-, Normal- und Position-Buffer, Diffuse-Beleuchtung (Direkte Beleuchtung / Streulicht), Diffuse-Color (Unbeleuchtete Oberflächenfarben), Glossy-Beleuchtung (Glanzlicht und Reflektionen) sowie Umgebungsverdeckung.
Außerdem ist es möglich für Szene sogenannte Cryptomatte-Masken zu erzeugen. Cryptomatte ist eine open-source Software, die von Jonah Friedman und Andy Jones von Psyop, einem Film-Produktions-Studio, entwickelt wurde. Es erzeugt für eine 3D-Szene ein Bild, das je nach Konfiguration jedem Objekt, Material oder Asset in der Szene eine Id in Form einer zufälligen Farbe zuweist und ein Bild erzeugt, in dem alle Pixel diese ID-Farbe haben. Abbildung XXYX zeigt Beispielhaft den Splash-Screen von Blender 2.81 sowie die dazugehörige _Cryptomatte_. Anhand dieser Cryptomatte können dann Segmentierungsmasken für einzelne Objekte extrahiert und verwendet werden. Das besondere an Cryptomatte ist, dass diese Segmentierungsmasken in der Lage sind filmische Effekte wie Bewegungsunschärfe sowie Tiefenschärfe zu berücksichtigen und auch mit transparenten Objekten funktionieren.
```media-slider
---
compareMode: true
---
![[Blender_2.81_splash_screen-render.jpg||1-1]]
![[Blender_2.81_splash_screen-cryptomatte.jpg||1-2]]
```
Eigentlich wurde Cryptomatte entwickelt, um das Nachbearbeiten und kombinieren von einzelnen Elementen einer Szene zu ermöglichen. Für unseren Anwendungsfall, nämlich die Generierung von Segmentierungsmasken erweist es sich allerdings aus ausgesprochen nützlich, da es damit möglich ist die gewünschten Ground-Truth-Segmentierungsmasken zu erzeugen und abzuspeichern.
Um Cryptomatte verwenden zu können, muss in den Einstellungen der ViewLayer mindestens eine der Cryptomatte-Optionen aktiviert werden:
*Object* erzeugt eine Cryptomatte mit einer einzigartigen Id für jedes Objekt.
*Material* erzeugt eine Cryptomatte mit einzigartiger Id für die einzeln Materialien. Das ist nützlich, da es möglich ist auf einem 3D-Modell mehrere Materialien anzuwenden. In dieser Arbeit wird zum Beispiel ein Modell für Iris und Pupille verwendet. Damit erhalten beide die selbe Objekt-Id in einer Object-Cryptomatte. In der Material-Cryptomatte allerdings erhalten sie unterschiedliche Ids, da auf dem 3D-Modell für Iris und Pupille unterschiedliche Materialen verwendet werden.
Die Dritte Art ist *Asset*. Hier erhalten alle Objekte, die in der Hierarchie das gleiche Elternobjekt haben die selbe Id.
Die Option *Levels* bestimmt, wie viele Objekte pro Pixel unterschieden werden können. Das ist wichtig, da pro Cryptomatte-Bild nur zwei Ids unterschieden werden können. Je nach konfiguriertem Wert werden halb so viele Cryptomatte-Bilder ausgegeben. Um zum Beispiel sechs Ids pro Pixel unterscheiden zu können sind drei Cryptomatte-Bilder nötig. Im ersten Bild werden die zwei Objekte Unterschieden, die am meisten zu einem Pixel beitragen, im zweiten die Objekte, die am dritt- und viertmeisten beitragen usw.
Diese einzelnen Cryptomatte-Bilder können dann ebenfalls über den __Render Layers__-Node verwendet werden. In Abbildung ABC sind beispielhaft die drei Cryptomatte-Bilder einer Szene gezeigt. Es ist ersichtlich, dass daraus nicht trivial Segmentierungsmasken erzeugt werden können.
Um dies zu vereinfachen gibt es in Blenders Compositing-Editor die sogenannte __Cryptomatte__-Node. Wie auch bei der __Render Layers___-Node muss zunächst eine Szene und eine ViewLayer ausgewählt werden. Zusätzlich dazu kann die Object-, Material- oder Asset-Cryptomatte ausgewählt werden. Sie hat drei Ausgänge. Zum einen gibt es den __Pick__-Ausgang. Dieser gibt ein vereintes Bild zurück in dem alle Ids mit unterschiedlichen Farben dargestellt werden. Der zweite Ausgang heißt __Matte__. Im Feld __Matte-Ids__ können eine oder mehrere Objekt- bzw. Material-Namen eingetragen werden. Die kombinierte Segmentierungsmaske wird dann im __Matte__-Ausgang bereitgestellt. Wenn ein Bild mit dem __Image__-Eingang verbunden ist, kommt aus dem __Image__- Ausgang ein Bild, in dem nur die Pixel der ausgewählten Ids verfügbar sind.
Abbildung BLA zeigt eine Beispielhafte Konfiguration der Cryptomatte-Node. Am __Image__-Eingang ist das gerenderte Bild verbunden.
```media-slider
---
compareMode: false
---
![[cryptomatte_full_image.png|Vollständiges Bild (Image-Eingabe)]]
![[cryptomatte_pick.png|Pick-Ausgabe]]
![[cryptomatte_matte.png|Matte-Ausgabe]]
![[cryptomatte_masked_image.png|Image-Ausgabe]]
```
## Umbau der Szene:
Da innerhalb eines ViewLayers nur Kollektionen und keine einzelnen Objekte aktiviert und deaktiviert werden können, musste die Hierarchie der Szene angepasst werden. Die Abbildung zeigt die Hierarchie vor dem Umbau.
Die Kollektion Eye enthielt das eye-Objekt, welches die 3D-Geometrie für die Iris und Pupille hat (und daher auch zwei Materialien auf diesem Modell hat). Außerdem hat es ein Kind-Objekt Cornea, welches die Hornhaut und Sclera modelliert. Diese Eltern-Kind-Beziehung wurde hergestellt, damit das Verschieben und Rotieren des eye-Objekts den selben Effekt auf die Sclera hat.
Alle Lichtquellen sind in der Kollektion "Lichter" gesammelt. Diese werden aber in der derzeitigen Implementierung nicht mehr verwendet.
Camera ist die Kamera, aus deren Perspektive die Szene gerendert wird.
Abschließend enthält das Skin-Objekt einerseits die Geometrie für die Haut, andererseits aber auch die Augenbrauen sowie Wimpern. Der Grund für diese Beziehung ist genau wie bei eye und Cornea, die Tatsache, dass Transformationen, die die Haut betreffen auch Augenbrauen und Wimpern betreffen müssen.
![](https://simonsgeile.cloud/s/xEBNRpMRRxCqz9W/preview)
Da der Umbau von getrennten Szenen auf ViewLayer bereits einen signifikaten Einfluss auf die Python-Skripte haben würde, da insbesondere viele Objekte, die vorher doppelt oder dreifach existierten und dementsprechen getrennt bearbeitet werden mussten entfallen, war dieser Umbau auch eine gute Gelegenheit die Benennung der Objekte anzupassen, um deren Wiedererkennbarkeit in der Szene und auch im Quellcode zu vererinfachen.
Die Neue Hierarchie ist in Abbiludng ASDF gezeigt. Dies ist auch die Konfiguration des Main-ViewLayers
![](https://simonsgeile.cloud/s/E7JbMSGE6boLSST/preview)
Die Kollektion "eye" wurde zu "Iris and Pupil" umbenannt. Das darun enthaltene "eye"-Objekt, welches die Iris und Pupille darstellt wurde dementsprechend zu "Iris_Pupil" umbenannt. Das Mesh, das vorher nur "Iris" hieß wurde zu "Iris_Pupil.Mesh" umbenannt. Diese Umbenennung wurde analog auch für die restlichen Meshes durchgeführt.
Neu ist die Kollektion "Cornea and Sclera". Hier ist jetzt das Objekt "Cornea_Sclera" enthalten, welches vorher nur "Cornea" hieß. Diese Trennung in separate Kollektionen erlaubt es, Iris und Pupille sowie Hornhaut und Sclera separat von einander anzuzeigen bzw. auszublenden. Hierbei ist anzumerken, dass die Eltern-Kind-Beziehung weiterhin besteht und dadurch Transformationen weiterhin vom Eltern-Objekt auf das Kind-Objekt übertrage werden. Da sie in unterschiedlichen Kollektionen liegen ist diese Beziehung jetzt nur noch Referenziell. Blender stellt solche Beziehungen ausgegraut in der Hierarchie dar. Außerdem wurde diese Beziehung umgekehrt, da es intuitiv sinnvoller ist, wenn der Augapfel explizit gedreht wird und die Iris implizit folgt.
Zusätzlich wurde das Skin-Objekt mitsamt der Augenbrauen und Wimpern in die Kollektion "Skin and Hair" verschoben, wodurch diese ebenfalls separat ausgeblendet werden können.
Nachdem die Hierarchie angepasst wurde, wurden die ViewLayer erstellt. Dabei wurde zunächst der standard-ViewLayer von "ViewLayer" zu "All" umbenannt. Dadurch wird ersichtlich, dass hier alle Objekte dargestellt werden.
Es wurden zwei neue ViewLayer erstellt: "Iris and Pupil only" sowie "No Cornea and Sclera". In ersterem ist, wie der Name schon vermuten lässt, nur die Kollektion "Iris and Pupil" aktiv. Dieser ViewLayer erlaubt es Segmentierungsmasken zu rendern, in denen nur die Iris und die Pupille ohne Verdeckung durch Haut, Augenlider und Wimpern dargestellt sind.
![](https://simonsgeile.cloud/s/G6EfNtRkyb9dA6y/preview)
Im "No Cornea and Sclera"-ViewLayer sind alle Kollektionen außer "Cornea and Sclera" aktiviert. Da zur Zeit die Glanzlichter nicht durch tatsächliche Lichtquellen dargestellt werden, sondern Teil der Textur der Hornhaut sind, können diese nicht ohne weiteres separiert werden.
![](https://simonsgeile.cloud/s/cYyqGJFXqEoz4MT/preview)
Anschließend wurden die nicht mehr benötgiten Szenen (??? und ???) gelöscht und mit der Option "File -> Clean Up -> Purge unused data..." alle nun nicht mehr benutzten Objekte gelöscht.
Swappen der Hierarchie von Iris und Sclera:
Probleme:
Der Origin von Sclera und Iris war unterschiedlich, die Sclera war minimal rotiert im Verhältnis zur Iris. Da das Sclera objekt eine Komische Rotation (drei wilde Werte) hatte, konnte nicht einfach ausgerichtet werden.
Lösung: Kleines Script, um die Sclera zu rotieren, sodass zwei ausgewählte Vertices parallel zu einer der Globalen Achsen liegen.
Zweites Script, um Sclera Objekt so zu verschieben, dass die Spitze des Objekts mit dem Mittelpunkt der Iris eine Liniea parallel zur Globalen X-Achse bildet.
An dieser Stelle wurden bilder gerendert, um zu testen, ob die Ergebnisse sich ändern. Ja, aber nur, weil die Kamera-Position abhängig von der Spitze der Cornea ist, da die jetzt leicht anders Positioniert ist, ist auch der Kamera-Winkel anders.
Dann habe ich die Rotationen applied (Ctrl + A), sodass das gerade nach vorne schauende Auge eine Rotation von 0,0,0 hat, dadurch musste der Code geändert werden. Einerseits musste die "Default-Rotation" für das Auge angepasst werden, da vorher von 90° ausgegangen wurde, ist jetzt 0. Und im Code, der die Öffnung der Pupille macht mussten X,Y durch Y,Z ersetzt werden.
Dann wurden in der Hierarchie die Eltern-Kind-Beziehungen getauscht. Aus irgendwelchen Gründen musste die Rotation dann nochmal applied werden, dann waren die Ergebnisse Identisch.
Das Anwenden der Rotation, sodass diese nun 0,0,0 ist hat den Vorteil, dass dadruch das Auge nicht mehr in einem Gimbal-Lock ist (X und Z Rotation haben beide in die selbe Richtung gedreht).
# Segmentierungsmaske für das Augenlid
TODO: gucken, was ich da schon so in der MA geschrieben habe.
In der vorherigen Implementierung mit separatem Augenlid-Modell war es dank Cryptomatte trivial eine separate Segmentierungsmaske für das Augenlid zu erzeugen. Da im hier präsentierten Ansatz allerdings das Augenlid und die restliche Haut das selbe Modell sind, erhalten sie auch die selbe Segmentierungsmaske.
Eine einfache Lösung für dieses Problem wäre es, trotzdem für Augenlid und Haut verschiedene Materialien zu definieren, woraufhin in der Material-Cryptomatte dann separate Ids vergeben werden würden.
1. Vertex-Group erstellen und alle Vertices des Augenlids auswählen:
![](https://simonsgeile.cloud/s/WoLs4RnBxQMrXPS/preview)
2. Mit Geometry-Nodes diese Vertex-Group als Attribut im Shader Verfügbar machen:
1. Für das Skin-Objekt neuen Geometry-Nodes erstellen.
![](https://simonsgeile.cloud/s/2ktZE6Twz6FtsRW/preview)
2. Input- und Output-Attribute erstellen und verbinden:
1. Unter "Group Sockets" einen neuen Input und Output hinzufügen. Typ: Float
2. Einen sinnvollen Namen geben (eyelid_weight)
![](https://simonsgeile.cloud/s/sttLQpPTcgrRq9a/preview)
3. Im GeometryNodes-Modifier die Vertex-Gruppe "Eyelid_Segmentation" als Wert für "eyelid_weight" festlegen (dafür auf den Knopf klicken um von Single Value auf Input Group umzustellen)
4. Unter "Output Attributes" für eyelid_weight einen Namen eintragen. Das ist das Attribut, das später im Shader verwendet wird. Es wurde "eyelid_weight_attribute" gewählt
![](https://simonsgeile.cloud/s/4kd2sQ53opMcGp8/preview)
3. In den ViewLayer-Einstellungen der Main-Viewl den AOV-Output hinzufügen. Es wurde der Name "Eyelid_Segmentation" gewählt. Der Typ muss "Value" sein.
4. Shader anpassen:
1. Attribute-Node hinzufügen. Attribut-Type: Geometry, Name: "eyelid_weight_attribute"
![](https://simonsgeile.cloud/s/AiE4tANjaA3WQTN/preview)
Dadurch gibt die Attribute-Node die Gewichte der "Eyelid Segmentation"-Vertex Gruppe aus. Es ist zu sehen, dass sie noch nicht ganz richtig ist. Das kann am Ende des Prozesses mit Weight-Painting angepasst werden.
2. Da die Gewichte einen fließenden Übergang zwischen 0 und 1 haben, müssen wir die mit einer "Greater Than"-Node einen Schwellwert festlegen, der für eine harte Kante zwischen 0 und 1 (Haut und Augenlid) sorgt. Dafür wird der Factor-Output der Attribute-Node in den Value-Eingang gelinkt.
![](https://simonsgeile.cloud/s/q8Cjas44NDWangP/preview)
3. Da wir diesen Wert aber nicht als Material ausgeben wollen, sondern neben dem normalen Haut-Shader als Wert im Compositing benötigen, müssen wir den Ausgang des Greater-Than nicht in den "Material Output" pipen, sondern in eine "AOV Output"-Node. Da es sich um eine Float-Eigenschaft handelt und nicht um eine Farbe, wird der Greate Than Node mit dem Value-Eingang der AOV-Node verbunden. Dem Attribut muss ein Name gegeben werden. Der kann wieder willkürlich gewählt werden. Es wurde "eyelid_value" gewählt.
![](https://simonsgeile.cloud/s/PDHF3T5AgLT38Sx/preview)
![](https://simonsgeile.cloud/s/YHSsesdrsbd2Qcn/preview)
Es wurde für die Übersichtlichkeit ein Rahmen um die Nodes gesetzt, der dient allein der Dokumentation
5. Im Compositing hat die Render Layers Node für den Main-ViewLayer jetzt einen neuen Ausgang "Eyelid Segmentation"
![](https://simonsgeile.cloud/s/TPGirokpkMATgMD/preview)
6. .......
# Besserer Ansatz
Nach dem Aufschreiben des zuvor beschriebenen Ansatzes ist aufgefallen, dass die meisten Schritte, abgesehen vom AOV-Output des Shaders, nämlich das Erstellen der Vertexgruppe bzw. das Weight-Painting, sowie der Geometry-Nodes-Aufbau für die Shader-Attribute alle durch gar nicht notwendig sind, um das gewünschte Ziel zu erreichen.
Einzig notwendig ist die Shader-AOV-Deklaration für den ViewLayer sowie die AOV-Output-Node im Haut-Shader. Die anderen Komponenten sind nach Belieben ersetztbar.
Weightpainting hat nämlich einen entscheidenden Nachteil: die Präzision ist auf die Vertices der Geometrie beschränkt. Auch bei Subdivision-Oberfächen kann man Gewichte nur für die original Vertices und nicht die durch die Unterteilung entstandenen Vertices festlegen.
Ein ähnliches Problem besteht auch, wenn man Oberflächen einfärben möchte (was strenggenommen auch das ist, was wir hier machen wollen, auch wenn das Ergebnis verhältnismäßig unüblich ist). Wenn man die Farben der Oberfläche pro Vertex festlegen würde, bräuchte man für mehr bzw. feinere Details mehr Vertices. Gelöst wurde dieses Problem in der Computergrafik, indem für jeden Vertex Textur-Koordinaten festgelegt werden. Auf der Oberfläche wird zwischen den Texturkoordinaten linear (genauer bilinear, also in zwei Richtungen) interpoliert um für jeden Punkt die Texturkoordinate zu berechnen. Diese Textur-Koordinaten sind 2D-Vektoren zwischen (0, 0) und (1, 1), anhand denen meist Farben aus einer Textur (einem Bild) ausgelesen werden können. Die Texturkoordinaten sind somit eine Abbildung von 3D Geometrie auf eine 2D Fläche. Als Namen für die Achsen in dieser 2D Projektion haben sich U und V statt X und Y durchgesetzt. Daher nennt man die Gesamtheit der Texturkoordinaten eines Modells auch das "UV-Mapping" dieses Modells. Dabei ist anzumerken, dass diese Festlegung der Texturkoordinaten einerseits durch mathematische Funktionen geschehen kann, aber oft auch manuell festgelegt wird. Wird eine Textur anhand von UV-Mapping auf die Geometrie projeziert spricht man von "Texture-Mapping".
Das wird in der hier präsentierten Implementierung bereits verwendet, um zusätzliches Detail auf der Hautoberfläche darzustellen. Abbildung ASDF zeigt das UV-Mapping der verwendeten Haut-Geometrie. Rechts sieht man die 3D-Geometrie mit Textur und Drahtgitter für die Haut-Geometrie. Dort ist in orange ein Polygon ausgewählt. Auf der linken Seite ist die verwendete Textur gezeigt und das projezierte Drahtgitter. Auf der linken Seite sind ebenfalls in orange die gleichen Vertices ausgewählt wie im rechten Bild um den Zusammenhang zwischen den Räumen zu verdeutlichen. Es ist auch ersichtlich, dass bei Texture-Mapping die menge an Detail auf der Oberfläche nun nicht mehr (nur) abhängig von der Auflösung des Modells ist, sondern vor allem abhängig von der Auflösung der verwendeten Textur ist, da zwischen zwei Textur-Koordinaten und somit zwei Vertices theoretisch beliebig viele Pixel liegen können.
![](https://simonsgeile.cloud/s/ZK5AHYsPkawRHLj/preview)
![](https://simonsgeile.cloud/s/zHyzb9yAg2Dxmgm/preview)
Blender liefert im Shader-Graph die "Image Texture"-Node um einfach anhand der Textur-Koordinaten eine Textur auszulesen. Um also einfach eine Segmentierungsmaske für das Augenlid zu erstellen und als Shader AOV zu rendern, kann einfach eine Augenlid-Textur gemalt werden, die dann im Shader ausgelesen wird und als input für eine AOV-Output-Node verwendet wird.
## Schritte für das Implementieren
1. In den ViewLayer-Einstellungen der Main-View den AOV-Output hinzufügen. Es wurde der Name "Eyelid Mask" gewählt. Der Typ muss "Value" sein, das heißt, es wird ein einzelner Gleitkomma-Wert ausgegeben, anstatt einer Farbe.
![](https://simonsgeile.cloud/s/qsGxaQFY7QgZK9i/preview)
2. Als nächstes muss die Maske gezeichnet werden. Das kann direkt in Blender getan werden. Dazu bietet sich die Standardmäßig verfügbare "Texture Paint"-Ansicht an.
![](https://simonsgeile.cloud/s/CkKMZKX3Cgn3FCK/preview)
In dieser Ansicht ist auf der linken Seite eine Ansicht der 2D-Textur und auf der rechten Seite eine Ansicht der 3D-Geometrie. Auf beiden Ansichten kann mit der Maus (oder einem Grafiktablet) gemalt werden.
1. Zunächst muss eine neue Textur erzeugt werden
1. Diese Textur kann dann auf beiden oberflächen angezeigt werden (dazu kann man entweder den Shader verändern, oder die 3D-Ansicht auf Viewport stellen und den Anzeige-Modus von Material auf Single-Image ändern)
![](https://simonsgeile.cloud/s/X3yfJ9ko7pnsQPM/preview)
2. Dann kann mit dem Pinsel-Werkzeug gemalt werden. Da eine Segmentierungsmaske erzeugt werden soll, bleibt das gesamte Bild schwarz, außer auf den Vertices des Augenlids. Es kann Hilfreich sein, das Drahtgitter in der 3D-Ansicht zu aktivieren. Da es sich um eine Binärmaske handeln soll, ist es sinnvoll den weichen Übergang zwischen existierender Farbe und zu malender Farbe zu deaktiveren. Dazu kann in den Pinsel-Einstellungen der Falloff auf "Constant" gestellt werden.
![](https://simonsgeile.cloud/s/HEcECiFGQ54B97t/preview)
![](https://simonsgeile.cloud/s/bocDHoPRBYd5J9X/preview)
![](https://simonsgeile.cloud/s/FQD8neipqeKeoDW/preview)
Abbildung FASD demonstriert, dass bei UV-Mapping grundsätzlich berücksichtigt werden muss, dass die Kanten von Polygonen nicht unbedingt mit dem Pixelraster übereinstimmen. Das kann dazu führen, dass ein Pixel auf mehreren Polygonen liegen kann. Das kann in bestimmten Fällen zu unerwünschtem Verhalten führen. (Fußnote: Dem aufmerksamen Leser fällt auf, dass in der gezeigten Abbildung die Poygon-Grenzen nicht gerade sind, was bei einer bilinearen Interpolation nicht möglich ist. Das liegt daran, dass die Kanten der original Polygone unter Berücksichtigung der Subdivision angezeigt werden, bei der die original Kanten gebogen werden können. Warum Blender anfing mir das Drahtgitter auf diese Weise anzuzeigen entzieht sich meinem Verständnis.)
![](https://simonsgeile.cloud/s/gfSMAinam2DWiLz/preview)
Abbiludng Bla zeigt die fertig gemalte Segmentierungsmaske. Da grundsätzlich die Texturkoordinaten eines Vertices fest sind, werden sie durch die Shape-Keys nicht verändert und die Segmentierungmaske sieht in allen Öffnungsweiten des Auges plausibel aus.
Nachdem das Bild fertig bearbeitet wurde, muss es noch als Datei abgespeichert werden.
In der textures.py-Datei wurde der Code für die generierung des Skin-Materials so angepasst, dass wie in Abbilunsdfa zu sehen ist erstmal eine "Texture Image"-Node erzeugt wird, welche die Augenlid-Maske als Bild verwendet. Die Interpolation wird auf Kubisch (Cubic) gesetzt, für beste Interpolationsergebnisse zwischen den Pixeln. Damit die Segmentierungsmaske im Kompositing nur 0 und 1 enthält muss später noch eine Step-Operation durchgeführt werden. Außerdem wurde der Color Space auf "Non-Color" gesetzt. Das hat in diesem Fall zwar keine Auswirkungen, ist aber best-practice, wenn die Pixel des Bildes keine Farben repräsentieren. (TODO: Wenn Zeit ist: Exkurs sRGB, als Anhang)
![](https://simonsgeile.cloud/s/8JSyDyxCXqdG6jc/preview)
Außerdem wird eine AOV Output-Node erzeugt. Der Name muss der selbe sein, wie er in den Shader AOVs des ViewLayers festgelegt wurde. Hier "Eyelid Mask". Der Color-Ausgang der Texture Image Node wird mit dem Value EIngang des AOV Outputs verbunden.
Im Compositing Node-Tree erhält die "Render Layers"-Node jetzt einen zusätzlichen Ausgang "Eyelid Mask" (aber nur für den Main-ViewLayer). Dieser stellt jetzt eine Textur bereit in der die an die AOV OUtput-Nodes übergebenen Ergebnisse enthalten sind. Diese ist allerdings so noch nicht direkt als Segmentierungsmaske verwendbar, da sie nicht nur 0 und 1 enthält, sondern auch Werte dazwischen. Das kommt auf der einen Seite durch die verwendete Textur-Interpolation. Denn die kubische Interpolation erzeugt an Pixel-Übergängen zwischen einem schwarzen und einem weißen Pixel einen weichen Übergang aus Graustufen. Auf der anderen Seite liegt das aber daran, dass Blender mit dem Eevee-Renderer Temporal-Anti-Aliasing (TAA) verwendet um harte Pixelkanten zu glätten. Dies könnte deaktiviert werden, ist aber für normale Bilder grundsätzlich ein erwünschter Effekt um unnatürliche Kanten zu glätten und Flimmern von kleinen Details zu reduzieren. Das führt allerdings auch dazu, dass AOVs geglättet werden, daher wird eine "Greate Than"-Node verwendet, die als Eingangswert ("Value") den "Eyelid Mask"-Output der "Render Layer"-Node erhält. In dieser Node kann ein Schwellwert festgelegt werden. Für alle Pixel, deren Wert über diesen Schwellwert liegen wird 1 ausgegeben. Für alle, die drunter liegen 0. Dadurch wird trotz Kantenglättung im Renderprozess in der finalen Maske nur 0 und 1 ausgegeben.
Abbildung CYC demonstriert die Effekte von Kantenglättung und verschiedenen Textur-Interpolationsmethoden auf die finale Segmentierungsmaske.
(TODO: Wenn Zeit ist, kann das ja ein Exkurs werden. Es reicht eigentlich zu zeigen: (Kein) AA Kubisch vs Closest)
| | Closest | Linear | Cubic |
| ----------------------------- | ------- | ------ | ----- |
| No Antialiasing | | | |
| Antialiasing, no Greater Than | | | |
| Antialiasing, Greater Than | | | |
Der Code für das Generieren des Compositing Trees wurde so angepasst, dass statt

View File

View File

@@ -121,3 +121,17 @@ Augenbrauen und Wimpern modelliert:
Grundlagenrecherche Knochen im Gesicht Grundlagenrecherche Knochen im Gesicht
# 03.02.2026 # 03.02.2026
???
# 05.02.2026
Bestimmt schon von 10:00 bis 15:00
# 06.02.2026
Bestimmt schon von 11:00 bis 15:00 (4 Stunden) und dann von 22 bis 00:45 (2:45)
Szene umgebaut, sodass nur noch eine Szene nötig ist.
Dafür ViewLayer verwendet
Blend Datei und Hierarchie aufgeräumt
Dementsprechend Script angepasst
# 07.02.2026
Swappen der Hierarchie von Iris und Sclera: