<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.gargi.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gargi</id>
	<title>Gargi.org - Benutzerbeiträge [de]</title>
	<link rel="self" type="application/atom+xml" href="https://www.gargi.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Gargi"/>
	<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Spezial:Beitr%C3%A4ge/Gargi"/>
	<updated>2026-10-16T18:52:17Z</updated>
	<subtitle>Benutzerbeiträge</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://www.gargi.org/index.php?title=Blender_5_hilfreiche_Einstellungen&amp;diff=1654</id>
		<title>Blender 5 hilfreiche Einstellungen</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Blender_5_hilfreiche_Einstellungen&amp;diff=1654"/>
		<updated>2026-07-05T09:25:06Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* Bloom Effekt aktivieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
=Blender 5 hilfreiche Einstellungen=&lt;br /&gt;
&lt;br /&gt;
==Körnung transparentes Material im Viewport==&lt;br /&gt;
&lt;br /&gt;
Bei transparenten Material wird mit EEVEE Next eine Körnung sichtbar. Stellt wenn es stört von Dithered auf Blended in den Surface Settings beim Rendering im Material um.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Blended.png]]&lt;br /&gt;
&lt;br /&gt;
==Bloom Effekt aktivieren==&lt;br /&gt;
&lt;br /&gt;
Um einen Bloom Effekt zu erzeugen (EEVEE / Cycles) muss hierzu eine Glare Node im Compositor eingefügt werden. Im Compositing Fenster legt zunächst einen neuen Nodetree für die Szene an:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Bloom1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Dann fügt einen Glare Node ein. &#039;&#039;&#039;Shift+A&#039;&#039;&#039; und Glare suchen. Diesen zwischen die beiden vorhandenen Nodes droppen lassen. Die Methode müsst Ihr auf &#039;&#039;&#039;Bloom&#039;&#039;&#039; einstellen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Bloom.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Damit Euch der Bloom angezeigt wird, müsst Ihr im 3D Viewport das Viewoprt Shading aktivieren und dann beim Compositor Camera oder Always auswählen. Wenn Ihr Camera nehmt, dann seht Ihr den Bloom Effekt nur im Camera - View.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Bloom2.png]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:Bloom2.png&amp;diff=1653</id>
		<title>Datei:Bloom2.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:Bloom2.png&amp;diff=1653"/>
		<updated>2026-07-05T09:24:46Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:Bloom1.png&amp;diff=1652</id>
		<title>Datei:Bloom1.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:Bloom1.png&amp;diff=1652"/>
		<updated>2026-07-05T09:24:27Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Blender_5_hilfreiche_Einstellungen&amp;diff=1651</id>
		<title>Blender 5 hilfreiche Einstellungen</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Blender_5_hilfreiche_Einstellungen&amp;diff=1651"/>
		<updated>2026-07-05T09:24:17Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* Bloom Effekt aktivieren */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
=Blender 5 hilfreiche Einstellungen=&lt;br /&gt;
&lt;br /&gt;
==Körnung transparentes Material im Viewport==&lt;br /&gt;
&lt;br /&gt;
Bei transparenten Material wird mit EEVEE Next eine Körnung sichtbar. Stellt wenn es stört von Dithered auf Blended in den Surface Settings beim Rendering im Material um.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Blended.png]]&lt;br /&gt;
&lt;br /&gt;
==Bloom Effekt aktivieren==&lt;br /&gt;
&lt;br /&gt;
Um einen Bloom Effekt zu erzeugen (EEVEE / Cycles) muss hierzu eine Glare Node im Compositor eingefügt werden. Im Compositing Fenster legt zunächst einen neuen Nodetree für die Szene an:&lt;br /&gt;
&lt;br /&gt;
[[Bild:Bloom1.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Dann fügt einen Glare Node ein. &#039;&#039;&#039;Shift+A&#039;&#039;&#039; und Glare suchen. Diesen zwischen die beiden vorhandenen Nodes droppen lassen. Die Methode müsst Ihr auf &#039;&#039;&#039;Bloom&#039;&#039;&#039; einstellen.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Bloom.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Damit Euch der Bloom angezeigt wird, müsst Ihr im 3D Viewport das Viewoprt Shading aktivieren und dann beim Compositor Camera oder Always auswählen. Wenn Ihr Camera nehmt, dann seht Ihr den Bloom Effekt nur im Camera - View.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Bloom2.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Blender_5_hilfreiche_Einstellungen&amp;diff=1650</id>
		<title>Blender 5 hilfreiche Einstellungen</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Blender_5_hilfreiche_Einstellungen&amp;diff=1650"/>
		<updated>2026-07-05T08:20:30Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* Körnung transparentes Material im Viewport */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
=Blender 5 hilfreiche Einstellungen=&lt;br /&gt;
&lt;br /&gt;
==Körnung transparentes Material im Viewport==&lt;br /&gt;
&lt;br /&gt;
Bei transparenten Material wird mit EEVEE Next eine Körnung sichtbar. Stellt wenn es stört von Dithered auf Blended in den Surface Settings beim Rendering im Material um.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Blended.png]]&lt;br /&gt;
&lt;br /&gt;
==Bloom Effekt aktivieren==&lt;br /&gt;
&lt;br /&gt;
[[Bild:Bloom.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:Bloom.png&amp;diff=1649</id>
		<title>Datei:Bloom.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:Bloom.png&amp;diff=1649"/>
		<updated>2026-07-05T08:20:16Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Blender_5_hilfreiche_Einstellungen&amp;diff=1648</id>
		<title>Blender 5 hilfreiche Einstellungen</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Blender_5_hilfreiche_Einstellungen&amp;diff=1648"/>
		<updated>2026-07-05T08:19:57Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* Blender 5 hilfreiche Einstellungen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
=Blender 5 hilfreiche Einstellungen=&lt;br /&gt;
&lt;br /&gt;
==Körnung transparentes Material im Viewport==&lt;br /&gt;
&lt;br /&gt;
Bei transparenten Material wird mit EEVEE Next eine Körnung sichtbar. Stellt wenn es stört von Dithered auf Blended in den Surface Settings beim Rendering im Material um.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Blended.png|600px]]&lt;br /&gt;
&lt;br /&gt;
==Bloom Effekt aktivieren==&lt;br /&gt;
&lt;br /&gt;
[[Bild:Bloom.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:Blended.png&amp;diff=1647</id>
		<title>Datei:Blended.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:Blended.png&amp;diff=1647"/>
		<updated>2026-07-05T08:19:11Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Blender_5_hilfreiche_Einstellungen&amp;diff=1646</id>
		<title>Blender 5 hilfreiche Einstellungen</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Blender_5_hilfreiche_Einstellungen&amp;diff=1646"/>
		<updated>2026-07-05T08:18:56Z</updated>

		<summary type="html">&lt;p&gt;Gargi: Die Seite wurde neu angelegt: „&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt; __TOC__ &amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt; =Blender 5 hilfreiche Einstellungen=  ==Körnung transparentes Material im Viewport==  Bei transparenten Material wird mit EEVEE Next eine Körnung sichtbar. Stellt wenn es stört von Dithered auf Blended in den Surface Settings beim Rendering im Material um.  600px  Kategorie:Worldbuilding“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
=Blender 5 hilfreiche Einstellungen=&lt;br /&gt;
&lt;br /&gt;
==Körnung transparentes Material im Viewport==&lt;br /&gt;
&lt;br /&gt;
Bei transparenten Material wird mit EEVEE Next eine Körnung sichtbar. Stellt wenn es stört von Dithered auf Blended in den Surface Settings beim Rendering im Material um.&lt;br /&gt;
&lt;br /&gt;
[[Bild:Blended.png|600px]]&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1645</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1645"/>
		<updated>2026-07-04T22:40:21Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* 14. Zusatztool: PingPong Looper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation von OpenVAT ==&lt;br /&gt;
&lt;br /&gt;
Bevor Vertex Animation Textures erstellt werden können, muss zunächst das kostenlose Blender-Add-on OpenVAT installiert werden. OpenVAT wird aktiv weiterentwickelt und ist offiziell für Blender 4.2 oder neuer verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
OpenVAT kann auf zwei Arten installiert werden:&lt;br /&gt;
&lt;br /&gt;
Blender Extensions (empfohlen)&lt;br /&gt;
* https://extensions.blender.org/add-ons/openvat/&lt;br /&gt;
GitHub-Projekt&lt;br /&gt;
* https://github.com/sharpen3d/openvat&lt;br /&gt;
&lt;br /&gt;
=== Installation über Blender Extensions ===&lt;br /&gt;
&lt;br /&gt;
Blender starten.&lt;br /&gt;
&#039;&#039;&#039;Edit → Preferences&#039;&#039;&#039; öffnen.&lt;br /&gt;
Zum Bereich &#039;&#039;&#039;Get Extensions&#039;&#039;&#039; wechseln.&lt;br /&gt;
Nach &#039;&#039;&#039;OpenVAT&#039;&#039;&#039; suchen.&lt;br /&gt;
Auf &#039;&#039;&#039;Install&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Add-on auch über die Blender Extensions Webseite heruntergeladen und anschließend über &#039;&#039;&#039;Edit → Preferences → Add-ons → Install...&#039;&#039;&#039; als ZIP-Datei installiert werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== 14. Zusatztool: PingPong Looper ==&lt;br /&gt;
&lt;br /&gt;
Dieses Add-on für Blender dupliziert die Animation, kehrt sie um und hängt sie an. &lt;br /&gt;
Dadurch entsteht ein nahtloser Loop ohne sichtbaren Übergang. Danach kann über openVAT exportiert werden.&lt;br /&gt;
&lt;br /&gt;
Ideal für VAT-Animationen wie Flaggen oder Simulationen.&lt;br /&gt;
&lt;br /&gt;
Code für das Add-on&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-height:400px; overflow:auto; border:1px solid #ccc; padding:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bl_info = {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;VAT PingPong Looper&amp;quot;,&lt;br /&gt;
    &amp;quot;author&amp;quot;: &amp;quot;Pierre&amp;quot;,&lt;br /&gt;
    &amp;quot;version&amp;quot;: (1, 0, 0),&lt;br /&gt;
    &amp;quot;blender&amp;quot;: (5, 0, 0),&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;View3D &amp;gt; Sidebar &amp;gt; VAT Loop&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Creates eased ping-pong Shape Key animation from simulated mesh frames for OpenVAT&amp;quot;,&lt;br /&gt;
    &amp;quot;category&amp;quot;: &amp;quot;Animation&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
import bpy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def smoothstep(t):&lt;br /&gt;
    return t * t * (3.0 - 2.0 * t)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def iter_action_fcurves(action):&lt;br /&gt;
    if action is None:&lt;br /&gt;
        return []&lt;br /&gt;
&lt;br /&gt;
    if hasattr(action, &amp;quot;fcurves&amp;quot;):&lt;br /&gt;
        return action.fcurves&lt;br /&gt;
&lt;br /&gt;
    fcurves = []&lt;br /&gt;
&lt;br /&gt;
    if hasattr(action, &amp;quot;layers&amp;quot;):&lt;br /&gt;
        for layer in action.layers:&lt;br /&gt;
            for strip in layer.strips:&lt;br /&gt;
                if hasattr(strip, &amp;quot;channelbags&amp;quot;):&lt;br /&gt;
                    for channelbag in strip.channelbags:&lt;br /&gt;
                        if hasattr(channelbag, &amp;quot;fcurves&amp;quot;):&lt;br /&gt;
                            fcurves.extend(channelbag.fcurves)&lt;br /&gt;
&lt;br /&gt;
    return fcurves&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def build_eased_pingpong_frames(start, end, ease_frames=12, hold_frames=0):&lt;br /&gt;
    frames = []&lt;br /&gt;
&lt;br /&gt;
    normal_end = max(start, end - ease_frames)&lt;br /&gt;
&lt;br /&gt;
    frames.extend(range(start, normal_end + 1))&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, ease_frames + 1):&lt;br /&gt;
        t = i / ease_frames&lt;br /&gt;
        eased = smoothstep(t)&lt;br /&gt;
        frame = normal_end + eased * (end - normal_end)&lt;br /&gt;
        frames.append(round(frame))&lt;br /&gt;
&lt;br /&gt;
    frames.extend([end] * hold_frames)&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, ease_frames + 1):&lt;br /&gt;
        t = i / ease_frames&lt;br /&gt;
        eased = smoothstep(t)&lt;br /&gt;
        frame = end - eased * (end - normal_end)&lt;br /&gt;
        frames.append(round(frame))&lt;br /&gt;
&lt;br /&gt;
    backward_start = normal_end - 1&lt;br /&gt;
    frames.extend(range(backward_start, start, -1))&lt;br /&gt;
&lt;br /&gt;
    cleaned = []&lt;br /&gt;
&lt;br /&gt;
    for f in frames:&lt;br /&gt;
        if not cleaned or f != cleaned[-1]:&lt;br /&gt;
            cleaned.append(f)&lt;br /&gt;
        elif f == end:&lt;br /&gt;
            cleaned.append(f)&lt;br /&gt;
&lt;br /&gt;
    return cleaned&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLoopSettings(bpy.types.PropertyGroup):&lt;br /&gt;
    source_start: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Start Frame&amp;quot;,&lt;br /&gt;
        default=1,&lt;br /&gt;
        min=1&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    source_end: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;End Frame&amp;quot;,&lt;br /&gt;
        default=200,&lt;br /&gt;
        min=2&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    ease_frames: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Ease Frames&amp;quot;,&lt;br /&gt;
        default=5,&lt;br /&gt;
        min=0&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    hold_frames: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Hold Frames&amp;quot;,&lt;br /&gt;
        default=0,&lt;br /&gt;
        min=0&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    output_start: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Output Start&amp;quot;,&lt;br /&gt;
        default=1,&lt;br /&gt;
        min=1&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    keep_source: bpy.props.BoolProperty(&lt;br /&gt;
        name=&amp;quot;Hide Source Object&amp;quot;,&lt;br /&gt;
        default=True&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    object_name: bpy.props.StringProperty(&lt;br /&gt;
        name=&amp;quot;New Object Name&amp;quot;,&lt;br /&gt;
        default=&amp;quot;VAT_PingPong_Loop&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLOOP_OT_loop_me(bpy.types.Operator):&lt;br /&gt;
    bl_idname = &amp;quot;vatloop.loop_me&amp;quot;&lt;br /&gt;
    bl_label = &amp;quot;Loop me&amp;quot;&lt;br /&gt;
    bl_description = &amp;quot;Create eased ping-pong Shape Key animation from selected mesh&amp;quot;&lt;br /&gt;
    bl_options = {&amp;quot;REGISTER&amp;quot;, &amp;quot;UNDO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    def execute(self, context):&lt;br /&gt;
        settings = context.scene.vat_loop_settings&lt;br /&gt;
        src = context.active_object&lt;br /&gt;
&lt;br /&gt;
        if src is None or src.type != &amp;quot;MESH&amp;quot;:&lt;br /&gt;
            self.report({&amp;quot;ERROR&amp;quot;}, &amp;quot;Bitte zuerst ein Mesh-Objekt auswählen.&amp;quot;)&lt;br /&gt;
            return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        if settings.source_end &amp;lt;= settings.source_start:&lt;br /&gt;
            self.report({&amp;quot;ERROR&amp;quot;}, &amp;quot;End Frame muss größer als Start Frame sein.&amp;quot;)&lt;br /&gt;
            return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        scene = context.scene&lt;br /&gt;
        depsgraph = context.evaluated_depsgraph_get()&lt;br /&gt;
&lt;br /&gt;
        frames = build_eased_pingpong_frames(&lt;br /&gt;
            settings.source_start,&lt;br /&gt;
            settings.source_end,&lt;br /&gt;
            settings.ease_frames,&lt;br /&gt;
            settings.hold_frames&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
        scene.frame_set(frames[0])&lt;br /&gt;
        context.view_layer.update()&lt;br /&gt;
&lt;br /&gt;
        src_eval = src.evaluated_get(depsgraph)&lt;br /&gt;
        base_mesh = bpy.data.meshes.new_from_object(src_eval, depsgraph=depsgraph)&lt;br /&gt;
&lt;br /&gt;
        new_obj = bpy.data.objects.new(settings.object_name, base_mesh)&lt;br /&gt;
        context.collection.objects.link(new_obj)&lt;br /&gt;
&lt;br /&gt;
        bpy.ops.object.select_all(action=&amp;quot;DESELECT&amp;quot;)&lt;br /&gt;
        context.view_layer.objects.active = new_obj&lt;br /&gt;
        new_obj.select_set(True)&lt;br /&gt;
&lt;br /&gt;
        new_obj.shape_key_add(name=&amp;quot;Basis&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        shape_keys = []&lt;br /&gt;
&lt;br /&gt;
        for i, src_frame in enumerate(frames):&lt;br /&gt;
            scene.frame_set(src_frame)&lt;br /&gt;
            context.view_layer.update()&lt;br /&gt;
&lt;br /&gt;
            src_eval = src.evaluated_get(depsgraph)&lt;br /&gt;
            temp_mesh = bpy.data.meshes.new_from_object(src_eval, depsgraph=depsgraph)&lt;br /&gt;
&lt;br /&gt;
            if len(temp_mesh.vertices) != len(base_mesh.vertices):&lt;br /&gt;
                bpy.data.meshes.remove(temp_mesh)&lt;br /&gt;
                self.report({&amp;quot;ERROR&amp;quot;}, f&amp;quot;Vertex-Anzahl hat sich bei Frame {src_frame} geändert.&amp;quot;)&lt;br /&gt;
                return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            key = new_obj.shape_key_add(&lt;br /&gt;
                name=f&amp;quot;Frame_{i + settings.output_start:04d}_Src_{src_frame:04d}&amp;quot;&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
            for v_idx, vert in enumerate(temp_mesh.vertices):&lt;br /&gt;
                key.data[v_idx].co = vert.co&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            shape_keys.append(key)&lt;br /&gt;
&lt;br /&gt;
            bpy.data.meshes.remove(temp_mesh)&lt;br /&gt;
&lt;br /&gt;
        for i, key in enumerate(shape_keys):&lt;br /&gt;
            out_frame = settings.output_start + i&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame - 1)&lt;br /&gt;
&lt;br /&gt;
            key.value = 1.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame)&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame + 1)&lt;br /&gt;
&lt;br /&gt;
        if new_obj.data.shape_keys and new_obj.data.shape_keys.animation_data:&lt;br /&gt;
            action = new_obj.data.shape_keys.animation_data.action&lt;br /&gt;
            for fc in iter_action_fcurves(action):&lt;br /&gt;
                for kp in fc.keyframe_points:&lt;br /&gt;
                    kp.interpolation = &amp;quot;CONSTANT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        scene.frame_start = settings.output_start&lt;br /&gt;
        scene.frame_end = settings.output_start + len(frames) - 1&lt;br /&gt;
        scene.frame_set(scene.frame_start)&lt;br /&gt;
&lt;br /&gt;
        if settings.keep_source:&lt;br /&gt;
            src.hide_viewport = True&lt;br /&gt;
            src.hide_render = True&lt;br /&gt;
&lt;br /&gt;
        self.report(&lt;br /&gt;
            {&amp;quot;INFO&amp;quot;},&lt;br /&gt;
            f&amp;quot;Loop erstellt: {new_obj.name}, Frames {scene.frame_start}-{scene.frame_end}&amp;quot;&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
        return {&amp;quot;FINISHED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLOOP_PT_panel(bpy.types.Panel):&lt;br /&gt;
    bl_label = &amp;quot;VAT PingPong Looper&amp;quot;&lt;br /&gt;
    bl_idname = &amp;quot;VATLOOP_PT_panel&amp;quot;&lt;br /&gt;
    bl_space_type = &amp;quot;VIEW_3D&amp;quot;&lt;br /&gt;
    bl_region_type = &amp;quot;UI&amp;quot;&lt;br /&gt;
    bl_category = &amp;quot;VAT Loop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def draw(self, context):&lt;br /&gt;
        layout = self.layout&lt;br /&gt;
        settings = context.scene.vat_loop_settings&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Source Frames&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;source_start&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;source_end&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Loop Smoothing&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;ease_frames&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;hold_frames&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Output&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;output_start&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;object_name&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;keep_source&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.operator(&amp;quot;vatloop.loop_me&amp;quot;, icon=&amp;quot;MOD_CLOTH&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classes = (&lt;br /&gt;
    VATLoopSettings,&lt;br /&gt;
    VATLOOP_OT_loop_me,&lt;br /&gt;
    VATLOOP_PT_panel,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def register():&lt;br /&gt;
    for cls in classes:&lt;br /&gt;
        bpy.utils.register_class(cls)&lt;br /&gt;
&lt;br /&gt;
    bpy.types.Scene.vat_loop_settings = bpy.props.PointerProperty(type=VATLoopSettings)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def unregister():&lt;br /&gt;
    del bpy.types.Scene.vat_loop_settings&lt;br /&gt;
&lt;br /&gt;
    for cls in reversed(classes):&lt;br /&gt;
        bpy.utils.unregister_class(cls)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    register()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
Der Code kann direkt als Blender Add-on installiert werden (Edit → Preferences → Add-ons → Install).&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1644</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1644"/>
		<updated>2026-07-04T22:37:54Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* 14. Zusatztool: PingPong Looper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation von OpenVAT ==&lt;br /&gt;
&lt;br /&gt;
Bevor Vertex Animation Textures erstellt werden können, muss zunächst das kostenlose Blender-Add-on OpenVAT installiert werden. OpenVAT wird aktiv weiterentwickelt und ist offiziell für Blender 4.2 oder neuer verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
OpenVAT kann auf zwei Arten installiert werden:&lt;br /&gt;
&lt;br /&gt;
Blender Extensions (empfohlen)&lt;br /&gt;
* https://extensions.blender.org/add-ons/openvat/&lt;br /&gt;
GitHub-Projekt&lt;br /&gt;
* https://github.com/sharpen3d/openvat&lt;br /&gt;
&lt;br /&gt;
=== Installation über Blender Extensions ===&lt;br /&gt;
&lt;br /&gt;
Blender starten.&lt;br /&gt;
&#039;&#039;&#039;Edit → Preferences&#039;&#039;&#039; öffnen.&lt;br /&gt;
Zum Bereich &#039;&#039;&#039;Get Extensions&#039;&#039;&#039; wechseln.&lt;br /&gt;
Nach &#039;&#039;&#039;OpenVAT&#039;&#039;&#039; suchen.&lt;br /&gt;
Auf &#039;&#039;&#039;Install&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Add-on auch über die Blender Extensions Webseite heruntergeladen und anschließend über &#039;&#039;&#039;Edit → Preferences → Add-ons → Install...&#039;&#039;&#039; als ZIP-Datei installiert werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== 14. Zusatztool: PingPong Looper ==&lt;br /&gt;
&lt;br /&gt;
Dieses Add-on für Blender dupliziert die Animation, kehrt sie um und hängt sie an. &lt;br /&gt;
Dadurch entsteht ein nahtloser Loop ohne sichtbaren Übergang. Danach kann über openVAT exportiert werden.&lt;br /&gt;
&lt;br /&gt;
Ideal für VAT-Animationen wie Flaggen oder Simulationen.&lt;br /&gt;
&lt;br /&gt;
Code für das Add-on&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-height:400px; overflow:auto; border:1px solid #ccc; padding:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bl_info = {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;VAT PingPong Looper&amp;quot;,&lt;br /&gt;
    &amp;quot;author&amp;quot;: &amp;quot;Pierre&amp;quot;,&lt;br /&gt;
    &amp;quot;version&amp;quot;: (1, 0, 0),&lt;br /&gt;
    &amp;quot;blender&amp;quot;: (5, 0, 0),&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;View3D &amp;gt; Sidebar &amp;gt; VAT Loop&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Creates eased ping-pong Shape Key animation from simulated mesh frames for OpenVAT&amp;quot;,&lt;br /&gt;
    &amp;quot;category&amp;quot;: &amp;quot;Animation&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
import bpy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def smoothstep(t):&lt;br /&gt;
    return t * t * (3.0 - 2.0 * t)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def iter_action_fcurves(action):&lt;br /&gt;
    if action is None:&lt;br /&gt;
        return []&lt;br /&gt;
&lt;br /&gt;
    if hasattr(action, &amp;quot;fcurves&amp;quot;):&lt;br /&gt;
        return action.fcurves&lt;br /&gt;
&lt;br /&gt;
    fcurves = []&lt;br /&gt;
&lt;br /&gt;
    if hasattr(action, &amp;quot;layers&amp;quot;):&lt;br /&gt;
        for layer in action.layers:&lt;br /&gt;
            for strip in layer.strips:&lt;br /&gt;
                if hasattr(strip, &amp;quot;channelbags&amp;quot;):&lt;br /&gt;
                    for channelbag in strip.channelbags:&lt;br /&gt;
                        if hasattr(channelbag, &amp;quot;fcurves&amp;quot;):&lt;br /&gt;
                            fcurves.extend(channelbag.fcurves)&lt;br /&gt;
&lt;br /&gt;
    return fcurves&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def build_eased_pingpong_frames(start, end, ease_frames=12, hold_frames=0):&lt;br /&gt;
    frames = []&lt;br /&gt;
&lt;br /&gt;
    normal_end = max(start, end - ease_frames)&lt;br /&gt;
&lt;br /&gt;
    frames.extend(range(start, normal_end + 1))&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, ease_frames + 1):&lt;br /&gt;
        t = i / ease_frames&lt;br /&gt;
        eased = smoothstep(t)&lt;br /&gt;
        frame = normal_end + eased * (end - normal_end)&lt;br /&gt;
        frames.append(round(frame))&lt;br /&gt;
&lt;br /&gt;
    frames.extend([end] * hold_frames)&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, ease_frames + 1):&lt;br /&gt;
        t = i / ease_frames&lt;br /&gt;
        eased = smoothstep(t)&lt;br /&gt;
        frame = end - eased * (end - normal_end)&lt;br /&gt;
        frames.append(round(frame))&lt;br /&gt;
&lt;br /&gt;
    backward_start = normal_end - 1&lt;br /&gt;
    frames.extend(range(backward_start, start, -1))&lt;br /&gt;
&lt;br /&gt;
    cleaned = []&lt;br /&gt;
&lt;br /&gt;
    for f in frames:&lt;br /&gt;
        if not cleaned or f != cleaned[-1]:&lt;br /&gt;
            cleaned.append(f)&lt;br /&gt;
        elif f == end:&lt;br /&gt;
            cleaned.append(f)&lt;br /&gt;
&lt;br /&gt;
    return cleaned&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLoopSettings(bpy.types.PropertyGroup):&lt;br /&gt;
    source_start: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Start Frame&amp;quot;,&lt;br /&gt;
        default=1,&lt;br /&gt;
        min=1&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    source_end: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;End Frame&amp;quot;,&lt;br /&gt;
        default=200,&lt;br /&gt;
        min=2&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    ease_frames: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Ease Frames&amp;quot;,&lt;br /&gt;
        default=5,&lt;br /&gt;
        min=0&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    hold_frames: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Hold Frames&amp;quot;,&lt;br /&gt;
        default=0,&lt;br /&gt;
        min=0&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    output_start: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Output Start&amp;quot;,&lt;br /&gt;
        default=1,&lt;br /&gt;
        min=1&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    keep_source: bpy.props.BoolProperty(&lt;br /&gt;
        name=&amp;quot;Hide Source Object&amp;quot;,&lt;br /&gt;
        default=True&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    object_name: bpy.props.StringProperty(&lt;br /&gt;
        name=&amp;quot;New Object Name&amp;quot;,&lt;br /&gt;
        default=&amp;quot;VAT_PingPong_Loop&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLOOP_OT_loop_me(bpy.types.Operator):&lt;br /&gt;
    bl_idname = &amp;quot;vatloop.loop_me&amp;quot;&lt;br /&gt;
    bl_label = &amp;quot;Loop me&amp;quot;&lt;br /&gt;
    bl_description = &amp;quot;Create eased ping-pong Shape Key animation from selected mesh&amp;quot;&lt;br /&gt;
    bl_options = {&amp;quot;REGISTER&amp;quot;, &amp;quot;UNDO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    def execute(self, context):&lt;br /&gt;
        settings = context.scene.vat_loop_settings&lt;br /&gt;
        src = context.active_object&lt;br /&gt;
&lt;br /&gt;
        if src is None or src.type != &amp;quot;MESH&amp;quot;:&lt;br /&gt;
            self.report({&amp;quot;ERROR&amp;quot;}, &amp;quot;Bitte zuerst ein Mesh-Objekt auswählen.&amp;quot;)&lt;br /&gt;
            return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        if settings.source_end &amp;lt;= settings.source_start:&lt;br /&gt;
            self.report({&amp;quot;ERROR&amp;quot;}, &amp;quot;End Frame muss größer als Start Frame sein.&amp;quot;)&lt;br /&gt;
            return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        scene = context.scene&lt;br /&gt;
        depsgraph = context.evaluated_depsgraph_get()&lt;br /&gt;
&lt;br /&gt;
        frames = build_eased_pingpong_frames(&lt;br /&gt;
            settings.source_start,&lt;br /&gt;
            settings.source_end,&lt;br /&gt;
            settings.ease_frames,&lt;br /&gt;
            settings.hold_frames&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
        scene.frame_set(frames[0])&lt;br /&gt;
        context.view_layer.update()&lt;br /&gt;
&lt;br /&gt;
        src_eval = src.evaluated_get(depsgraph)&lt;br /&gt;
        base_mesh = bpy.data.meshes.new_from_object(src_eval, depsgraph=depsgraph)&lt;br /&gt;
&lt;br /&gt;
        new_obj = bpy.data.objects.new(settings.object_name, base_mesh)&lt;br /&gt;
        context.collection.objects.link(new_obj)&lt;br /&gt;
&lt;br /&gt;
        bpy.ops.object.select_all(action=&amp;quot;DESELECT&amp;quot;)&lt;br /&gt;
        context.view_layer.objects.active = new_obj&lt;br /&gt;
        new_obj.select_set(True)&lt;br /&gt;
&lt;br /&gt;
        new_obj.shape_key_add(name=&amp;quot;Basis&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        shape_keys = []&lt;br /&gt;
&lt;br /&gt;
        for i, src_frame in enumerate(frames):&lt;br /&gt;
            scene.frame_set(src_frame)&lt;br /&gt;
            context.view_layer.update()&lt;br /&gt;
&lt;br /&gt;
            src_eval = src.evaluated_get(depsgraph)&lt;br /&gt;
            temp_mesh = bpy.data.meshes.new_from_object(src_eval, depsgraph=depsgraph)&lt;br /&gt;
&lt;br /&gt;
            if len(temp_mesh.vertices) != len(base_mesh.vertices):&lt;br /&gt;
                bpy.data.meshes.remove(temp_mesh)&lt;br /&gt;
                self.report({&amp;quot;ERROR&amp;quot;}, f&amp;quot;Vertex-Anzahl hat sich bei Frame {src_frame} geändert.&amp;quot;)&lt;br /&gt;
                return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            key = new_obj.shape_key_add(&lt;br /&gt;
                name=f&amp;quot;Frame_{i + settings.output_start:04d}_Src_{src_frame:04d}&amp;quot;&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
            for v_idx, vert in enumerate(temp_mesh.vertices):&lt;br /&gt;
                key.data[v_idx].co = vert.co&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            shape_keys.append(key)&lt;br /&gt;
&lt;br /&gt;
            bpy.data.meshes.remove(temp_mesh)&lt;br /&gt;
&lt;br /&gt;
        for i, key in enumerate(shape_keys):&lt;br /&gt;
            out_frame = settings.output_start + i&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame - 1)&lt;br /&gt;
&lt;br /&gt;
            key.value = 1.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame)&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame + 1)&lt;br /&gt;
&lt;br /&gt;
        if new_obj.data.shape_keys and new_obj.data.shape_keys.animation_data:&lt;br /&gt;
            action = new_obj.data.shape_keys.animation_data.action&lt;br /&gt;
            for fc in iter_action_fcurves(action):&lt;br /&gt;
                for kp in fc.keyframe_points:&lt;br /&gt;
                    kp.interpolation = &amp;quot;CONSTANT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        scene.frame_start = settings.output_start&lt;br /&gt;
        scene.frame_end = settings.output_start + len(frames) - 1&lt;br /&gt;
        scene.frame_set(scene.frame_start)&lt;br /&gt;
&lt;br /&gt;
        if settings.keep_source:&lt;br /&gt;
            src.hide_viewport = True&lt;br /&gt;
            src.hide_render = True&lt;br /&gt;
&lt;br /&gt;
        self.report(&lt;br /&gt;
            {&amp;quot;INFO&amp;quot;},&lt;br /&gt;
            f&amp;quot;Loop erstellt: {new_obj.name}, Frames {scene.frame_start}-{scene.frame_end}&amp;quot;&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
        return {&amp;quot;FINISHED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLOOP_PT_panel(bpy.types.Panel):&lt;br /&gt;
    bl_label = &amp;quot;VAT PingPong Looper&amp;quot;&lt;br /&gt;
    bl_idname = &amp;quot;VATLOOP_PT_panel&amp;quot;&lt;br /&gt;
    bl_space_type = &amp;quot;VIEW_3D&amp;quot;&lt;br /&gt;
    bl_region_type = &amp;quot;UI&amp;quot;&lt;br /&gt;
    bl_category = &amp;quot;VAT Loop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def draw(self, context):&lt;br /&gt;
        layout = self.layout&lt;br /&gt;
        settings = context.scene.vat_loop_settings&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Source Frames&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;source_start&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;source_end&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Loop Smoothing&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;ease_frames&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;hold_frames&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Output&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;output_start&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;object_name&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;keep_source&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.operator(&amp;quot;vatloop.loop_me&amp;quot;, icon=&amp;quot;MOD_CLOTH&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classes = (&lt;br /&gt;
    VATLoopSettings,&lt;br /&gt;
    VATLOOP_OT_loop_me,&lt;br /&gt;
    VATLOOP_PT_panel,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def register():&lt;br /&gt;
    for cls in classes:&lt;br /&gt;
        bpy.utils.register_class(cls)&lt;br /&gt;
&lt;br /&gt;
    bpy.types.Scene.vat_loop_settings = bpy.props.PointerProperty(type=VATLoopSettings)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def unregister():&lt;br /&gt;
    del bpy.types.Scene.vat_loop_settings&lt;br /&gt;
&lt;br /&gt;
    for cls in reversed(classes):&lt;br /&gt;
        bpy.utils.unregister_class(cls)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    register()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1643</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1643"/>
		<updated>2026-07-04T22:36:59Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* 14. Zusatztool: PingPong Looper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation von OpenVAT ==&lt;br /&gt;
&lt;br /&gt;
Bevor Vertex Animation Textures erstellt werden können, muss zunächst das kostenlose Blender-Add-on OpenVAT installiert werden. OpenVAT wird aktiv weiterentwickelt und ist offiziell für Blender 4.2 oder neuer verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
OpenVAT kann auf zwei Arten installiert werden:&lt;br /&gt;
&lt;br /&gt;
Blender Extensions (empfohlen)&lt;br /&gt;
* https://extensions.blender.org/add-ons/openvat/&lt;br /&gt;
GitHub-Projekt&lt;br /&gt;
* https://github.com/sharpen3d/openvat&lt;br /&gt;
&lt;br /&gt;
=== Installation über Blender Extensions ===&lt;br /&gt;
&lt;br /&gt;
Blender starten.&lt;br /&gt;
&#039;&#039;&#039;Edit → Preferences&#039;&#039;&#039; öffnen.&lt;br /&gt;
Zum Bereich &#039;&#039;&#039;Get Extensions&#039;&#039;&#039; wechseln.&lt;br /&gt;
Nach &#039;&#039;&#039;OpenVAT&#039;&#039;&#039; suchen.&lt;br /&gt;
Auf &#039;&#039;&#039;Install&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Add-on auch über die Blender Extensions Webseite heruntergeladen und anschließend über &#039;&#039;&#039;Edit → Preferences → Add-ons → Install...&#039;&#039;&#039; als ZIP-Datei installiert werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== 14. Zusatztool: PingPong Looper ==&lt;br /&gt;
&lt;br /&gt;
Dieses Add-on dupliziert die Animation, kehrt sie um und hängt sie an. &lt;br /&gt;
Dadurch entsteht ein nahtloser Loop ohne sichtbaren Übergang.&lt;br /&gt;
&lt;br /&gt;
Ideal für VAT-Animationen wie Flaggen oder Simulationen.&lt;br /&gt;
&lt;br /&gt;
Code für das Add-on&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-height:400px; overflow:auto; border:1px solid #ccc; padding:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bl_info = {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;VAT PingPong Looper&amp;quot;,&lt;br /&gt;
    &amp;quot;author&amp;quot;: &amp;quot;Pierre&amp;quot;,&lt;br /&gt;
    &amp;quot;version&amp;quot;: (1, 0, 0),&lt;br /&gt;
    &amp;quot;blender&amp;quot;: (5, 0, 0),&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;View3D &amp;gt; Sidebar &amp;gt; VAT Loop&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Creates eased ping-pong Shape Key animation from simulated mesh frames for OpenVAT&amp;quot;,&lt;br /&gt;
    &amp;quot;category&amp;quot;: &amp;quot;Animation&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
import bpy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def smoothstep(t):&lt;br /&gt;
    return t * t * (3.0 - 2.0 * t)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def iter_action_fcurves(action):&lt;br /&gt;
    if action is None:&lt;br /&gt;
        return []&lt;br /&gt;
&lt;br /&gt;
    if hasattr(action, &amp;quot;fcurves&amp;quot;):&lt;br /&gt;
        return action.fcurves&lt;br /&gt;
&lt;br /&gt;
    fcurves = []&lt;br /&gt;
&lt;br /&gt;
    if hasattr(action, &amp;quot;layers&amp;quot;):&lt;br /&gt;
        for layer in action.layers:&lt;br /&gt;
            for strip in layer.strips:&lt;br /&gt;
                if hasattr(strip, &amp;quot;channelbags&amp;quot;):&lt;br /&gt;
                    for channelbag in strip.channelbags:&lt;br /&gt;
                        if hasattr(channelbag, &amp;quot;fcurves&amp;quot;):&lt;br /&gt;
                            fcurves.extend(channelbag.fcurves)&lt;br /&gt;
&lt;br /&gt;
    return fcurves&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def build_eased_pingpong_frames(start, end, ease_frames=12, hold_frames=0):&lt;br /&gt;
    frames = []&lt;br /&gt;
&lt;br /&gt;
    normal_end = max(start, end - ease_frames)&lt;br /&gt;
&lt;br /&gt;
    frames.extend(range(start, normal_end + 1))&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, ease_frames + 1):&lt;br /&gt;
        t = i / ease_frames&lt;br /&gt;
        eased = smoothstep(t)&lt;br /&gt;
        frame = normal_end + eased * (end - normal_end)&lt;br /&gt;
        frames.append(round(frame))&lt;br /&gt;
&lt;br /&gt;
    frames.extend([end] * hold_frames)&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, ease_frames + 1):&lt;br /&gt;
        t = i / ease_frames&lt;br /&gt;
        eased = smoothstep(t)&lt;br /&gt;
        frame = end - eased * (end - normal_end)&lt;br /&gt;
        frames.append(round(frame))&lt;br /&gt;
&lt;br /&gt;
    backward_start = normal_end - 1&lt;br /&gt;
    frames.extend(range(backward_start, start, -1))&lt;br /&gt;
&lt;br /&gt;
    cleaned = []&lt;br /&gt;
&lt;br /&gt;
    for f in frames:&lt;br /&gt;
        if not cleaned or f != cleaned[-1]:&lt;br /&gt;
            cleaned.append(f)&lt;br /&gt;
        elif f == end:&lt;br /&gt;
            cleaned.append(f)&lt;br /&gt;
&lt;br /&gt;
    return cleaned&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLoopSettings(bpy.types.PropertyGroup):&lt;br /&gt;
    source_start: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Start Frame&amp;quot;,&lt;br /&gt;
        default=1,&lt;br /&gt;
        min=1&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    source_end: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;End Frame&amp;quot;,&lt;br /&gt;
        default=200,&lt;br /&gt;
        min=2&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    ease_frames: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Ease Frames&amp;quot;,&lt;br /&gt;
        default=5,&lt;br /&gt;
        min=0&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    hold_frames: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Hold Frames&amp;quot;,&lt;br /&gt;
        default=0,&lt;br /&gt;
        min=0&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    output_start: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Output Start&amp;quot;,&lt;br /&gt;
        default=1,&lt;br /&gt;
        min=1&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    keep_source: bpy.props.BoolProperty(&lt;br /&gt;
        name=&amp;quot;Hide Source Object&amp;quot;,&lt;br /&gt;
        default=True&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    object_name: bpy.props.StringProperty(&lt;br /&gt;
        name=&amp;quot;New Object Name&amp;quot;,&lt;br /&gt;
        default=&amp;quot;VAT_PingPong_Loop&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLOOP_OT_loop_me(bpy.types.Operator):&lt;br /&gt;
    bl_idname = &amp;quot;vatloop.loop_me&amp;quot;&lt;br /&gt;
    bl_label = &amp;quot;Loop me&amp;quot;&lt;br /&gt;
    bl_description = &amp;quot;Create eased ping-pong Shape Key animation from selected mesh&amp;quot;&lt;br /&gt;
    bl_options = {&amp;quot;REGISTER&amp;quot;, &amp;quot;UNDO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    def execute(self, context):&lt;br /&gt;
        settings = context.scene.vat_loop_settings&lt;br /&gt;
        src = context.active_object&lt;br /&gt;
&lt;br /&gt;
        if src is None or src.type != &amp;quot;MESH&amp;quot;:&lt;br /&gt;
            self.report({&amp;quot;ERROR&amp;quot;}, &amp;quot;Bitte zuerst ein Mesh-Objekt auswählen.&amp;quot;)&lt;br /&gt;
            return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        if settings.source_end &amp;lt;= settings.source_start:&lt;br /&gt;
            self.report({&amp;quot;ERROR&amp;quot;}, &amp;quot;End Frame muss größer als Start Frame sein.&amp;quot;)&lt;br /&gt;
            return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        scene = context.scene&lt;br /&gt;
        depsgraph = context.evaluated_depsgraph_get()&lt;br /&gt;
&lt;br /&gt;
        frames = build_eased_pingpong_frames(&lt;br /&gt;
            settings.source_start,&lt;br /&gt;
            settings.source_end,&lt;br /&gt;
            settings.ease_frames,&lt;br /&gt;
            settings.hold_frames&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
        scene.frame_set(frames[0])&lt;br /&gt;
        context.view_layer.update()&lt;br /&gt;
&lt;br /&gt;
        src_eval = src.evaluated_get(depsgraph)&lt;br /&gt;
        base_mesh = bpy.data.meshes.new_from_object(src_eval, depsgraph=depsgraph)&lt;br /&gt;
&lt;br /&gt;
        new_obj = bpy.data.objects.new(settings.object_name, base_mesh)&lt;br /&gt;
        context.collection.objects.link(new_obj)&lt;br /&gt;
&lt;br /&gt;
        bpy.ops.object.select_all(action=&amp;quot;DESELECT&amp;quot;)&lt;br /&gt;
        context.view_layer.objects.active = new_obj&lt;br /&gt;
        new_obj.select_set(True)&lt;br /&gt;
&lt;br /&gt;
        new_obj.shape_key_add(name=&amp;quot;Basis&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        shape_keys = []&lt;br /&gt;
&lt;br /&gt;
        for i, src_frame in enumerate(frames):&lt;br /&gt;
            scene.frame_set(src_frame)&lt;br /&gt;
            context.view_layer.update()&lt;br /&gt;
&lt;br /&gt;
            src_eval = src.evaluated_get(depsgraph)&lt;br /&gt;
            temp_mesh = bpy.data.meshes.new_from_object(src_eval, depsgraph=depsgraph)&lt;br /&gt;
&lt;br /&gt;
            if len(temp_mesh.vertices) != len(base_mesh.vertices):&lt;br /&gt;
                bpy.data.meshes.remove(temp_mesh)&lt;br /&gt;
                self.report({&amp;quot;ERROR&amp;quot;}, f&amp;quot;Vertex-Anzahl hat sich bei Frame {src_frame} geändert.&amp;quot;)&lt;br /&gt;
                return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            key = new_obj.shape_key_add(&lt;br /&gt;
                name=f&amp;quot;Frame_{i + settings.output_start:04d}_Src_{src_frame:04d}&amp;quot;&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
            for v_idx, vert in enumerate(temp_mesh.vertices):&lt;br /&gt;
                key.data[v_idx].co = vert.co&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            shape_keys.append(key)&lt;br /&gt;
&lt;br /&gt;
            bpy.data.meshes.remove(temp_mesh)&lt;br /&gt;
&lt;br /&gt;
        for i, key in enumerate(shape_keys):&lt;br /&gt;
            out_frame = settings.output_start + i&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame - 1)&lt;br /&gt;
&lt;br /&gt;
            key.value = 1.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame)&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame + 1)&lt;br /&gt;
&lt;br /&gt;
        if new_obj.data.shape_keys and new_obj.data.shape_keys.animation_data:&lt;br /&gt;
            action = new_obj.data.shape_keys.animation_data.action&lt;br /&gt;
            for fc in iter_action_fcurves(action):&lt;br /&gt;
                for kp in fc.keyframe_points:&lt;br /&gt;
                    kp.interpolation = &amp;quot;CONSTANT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        scene.frame_start = settings.output_start&lt;br /&gt;
        scene.frame_end = settings.output_start + len(frames) - 1&lt;br /&gt;
        scene.frame_set(scene.frame_start)&lt;br /&gt;
&lt;br /&gt;
        if settings.keep_source:&lt;br /&gt;
            src.hide_viewport = True&lt;br /&gt;
            src.hide_render = True&lt;br /&gt;
&lt;br /&gt;
        self.report(&lt;br /&gt;
            {&amp;quot;INFO&amp;quot;},&lt;br /&gt;
            f&amp;quot;Loop erstellt: {new_obj.name}, Frames {scene.frame_start}-{scene.frame_end}&amp;quot;&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
        return {&amp;quot;FINISHED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLOOP_PT_panel(bpy.types.Panel):&lt;br /&gt;
    bl_label = &amp;quot;VAT PingPong Looper&amp;quot;&lt;br /&gt;
    bl_idname = &amp;quot;VATLOOP_PT_panel&amp;quot;&lt;br /&gt;
    bl_space_type = &amp;quot;VIEW_3D&amp;quot;&lt;br /&gt;
    bl_region_type = &amp;quot;UI&amp;quot;&lt;br /&gt;
    bl_category = &amp;quot;VAT Loop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def draw(self, context):&lt;br /&gt;
        layout = self.layout&lt;br /&gt;
        settings = context.scene.vat_loop_settings&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Source Frames&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;source_start&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;source_end&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Loop Smoothing&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;ease_frames&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;hold_frames&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Output&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;output_start&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;object_name&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;keep_source&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.operator(&amp;quot;vatloop.loop_me&amp;quot;, icon=&amp;quot;MOD_CLOTH&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classes = (&lt;br /&gt;
    VATLoopSettings,&lt;br /&gt;
    VATLOOP_OT_loop_me,&lt;br /&gt;
    VATLOOP_PT_panel,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def register():&lt;br /&gt;
    for cls in classes:&lt;br /&gt;
        bpy.utils.register_class(cls)&lt;br /&gt;
&lt;br /&gt;
    bpy.types.Scene.vat_loop_settings = bpy.props.PointerProperty(type=VATLoopSettings)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def unregister():&lt;br /&gt;
    del bpy.types.Scene.vat_loop_settings&lt;br /&gt;
&lt;br /&gt;
    for cls in reversed(classes):&lt;br /&gt;
        bpy.utils.unregister_class(cls)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    register()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1642</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1642"/>
		<updated>2026-07-04T22:35:16Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* 14. Zusatztool: PingPong Looper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation von OpenVAT ==&lt;br /&gt;
&lt;br /&gt;
Bevor Vertex Animation Textures erstellt werden können, muss zunächst das kostenlose Blender-Add-on OpenVAT installiert werden. OpenVAT wird aktiv weiterentwickelt und ist offiziell für Blender 4.2 oder neuer verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
OpenVAT kann auf zwei Arten installiert werden:&lt;br /&gt;
&lt;br /&gt;
Blender Extensions (empfohlen)&lt;br /&gt;
* https://extensions.blender.org/add-ons/openvat/&lt;br /&gt;
GitHub-Projekt&lt;br /&gt;
* https://github.com/sharpen3d/openvat&lt;br /&gt;
&lt;br /&gt;
=== Installation über Blender Extensions ===&lt;br /&gt;
&lt;br /&gt;
Blender starten.&lt;br /&gt;
&#039;&#039;&#039;Edit → Preferences&#039;&#039;&#039; öffnen.&lt;br /&gt;
Zum Bereich &#039;&#039;&#039;Get Extensions&#039;&#039;&#039; wechseln.&lt;br /&gt;
Nach &#039;&#039;&#039;OpenVAT&#039;&#039;&#039; suchen.&lt;br /&gt;
Auf &#039;&#039;&#039;Install&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Add-on auch über die Blender Extensions Webseite heruntergeladen und anschließend über &#039;&#039;&#039;Edit → Preferences → Add-ons → Install...&#039;&#039;&#039; als ZIP-Datei installiert werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== 14. Zusatztool: PingPong Looper ==&lt;br /&gt;
&lt;br /&gt;
[[File:vat_pingpong_looper.zip|Download Blender Addon]]&lt;br /&gt;
&lt;br /&gt;
Dieses Add-on dupliziert die Animation, kehrt sie um und hängt sie an. &lt;br /&gt;
Dadurch entsteht ein nahtloser Loop ohne sichtbaren Übergang.&lt;br /&gt;
&lt;br /&gt;
Ideal für VAT-Animationen wie Flaggen oder Simulationen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-height:400px; overflow:auto; border:1px solid #ccc; padding:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;bl_info = {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;VAT PingPong Looper&amp;quot;,&lt;br /&gt;
    &amp;quot;author&amp;quot;: &amp;quot;ChatGPT und Pierre&amp;quot;,&lt;br /&gt;
    &amp;quot;version&amp;quot;: (1, 0, 0),&lt;br /&gt;
    &amp;quot;blender&amp;quot;: (5, 0, 0),&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;View3D &amp;gt; Sidebar &amp;gt; VAT Loop&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Creates eased ping-pong Shape Key animation from simulated mesh frames for OpenVAT&amp;quot;,&lt;br /&gt;
    &amp;quot;category&amp;quot;: &amp;quot;Animation&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
import bpy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def smoothstep(t):&lt;br /&gt;
    return t * t * (3.0 - 2.0 * t)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def iter_action_fcurves(action):&lt;br /&gt;
    if action is None:&lt;br /&gt;
        return []&lt;br /&gt;
&lt;br /&gt;
    if hasattr(action, &amp;quot;fcurves&amp;quot;):&lt;br /&gt;
        return action.fcurves&lt;br /&gt;
&lt;br /&gt;
    fcurves = []&lt;br /&gt;
&lt;br /&gt;
    if hasattr(action, &amp;quot;layers&amp;quot;):&lt;br /&gt;
        for layer in action.layers:&lt;br /&gt;
            for strip in layer.strips:&lt;br /&gt;
                if hasattr(strip, &amp;quot;channelbags&amp;quot;):&lt;br /&gt;
                    for channelbag in strip.channelbags:&lt;br /&gt;
                        if hasattr(channelbag, &amp;quot;fcurves&amp;quot;):&lt;br /&gt;
                            fcurves.extend(channelbag.fcurves)&lt;br /&gt;
&lt;br /&gt;
    return fcurves&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def build_eased_pingpong_frames(start, end, ease_frames=12, hold_frames=0):&lt;br /&gt;
    frames = []&lt;br /&gt;
&lt;br /&gt;
    normal_end = max(start, end - ease_frames)&lt;br /&gt;
&lt;br /&gt;
    frames.extend(range(start, normal_end + 1))&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, ease_frames + 1):&lt;br /&gt;
        t = i / ease_frames&lt;br /&gt;
        eased = smoothstep(t)&lt;br /&gt;
        frame = normal_end + eased * (end - normal_end)&lt;br /&gt;
        frames.append(round(frame))&lt;br /&gt;
&lt;br /&gt;
    frames.extend([end] * hold_frames)&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, ease_frames + 1):&lt;br /&gt;
        t = i / ease_frames&lt;br /&gt;
        eased = smoothstep(t)&lt;br /&gt;
        frame = end - eased * (end - normal_end)&lt;br /&gt;
        frames.append(round(frame))&lt;br /&gt;
&lt;br /&gt;
    backward_start = normal_end - 1&lt;br /&gt;
    frames.extend(range(backward_start, start, -1))&lt;br /&gt;
&lt;br /&gt;
    cleaned = []&lt;br /&gt;
&lt;br /&gt;
    for f in frames:&lt;br /&gt;
        if not cleaned or f != cleaned[-1]:&lt;br /&gt;
            cleaned.append(f)&lt;br /&gt;
        elif f == end:&lt;br /&gt;
            cleaned.append(f)&lt;br /&gt;
&lt;br /&gt;
    return cleaned&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLoopSettings(bpy.types.PropertyGroup):&lt;br /&gt;
    source_start: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Start Frame&amp;quot;,&lt;br /&gt;
        default=1,&lt;br /&gt;
        min=1&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    source_end: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;End Frame&amp;quot;,&lt;br /&gt;
        default=200,&lt;br /&gt;
        min=2&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    ease_frames: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Ease Frames&amp;quot;,&lt;br /&gt;
        default=5,&lt;br /&gt;
        min=0&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    hold_frames: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Hold Frames&amp;quot;,&lt;br /&gt;
        default=0,&lt;br /&gt;
        min=0&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    output_start: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Output Start&amp;quot;,&lt;br /&gt;
        default=1,&lt;br /&gt;
        min=1&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    keep_source: bpy.props.BoolProperty(&lt;br /&gt;
        name=&amp;quot;Hide Source Object&amp;quot;,&lt;br /&gt;
        default=True&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    object_name: bpy.props.StringProperty(&lt;br /&gt;
        name=&amp;quot;New Object Name&amp;quot;,&lt;br /&gt;
        default=&amp;quot;VAT_PingPong_Loop&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLOOP_OT_loop_me(bpy.types.Operator):&lt;br /&gt;
    bl_idname = &amp;quot;vatloop.loop_me&amp;quot;&lt;br /&gt;
    bl_label = &amp;quot;Loop me&amp;quot;&lt;br /&gt;
    bl_description = &amp;quot;Create eased ping-pong Shape Key animation from selected mesh&amp;quot;&lt;br /&gt;
    bl_options = {&amp;quot;REGISTER&amp;quot;, &amp;quot;UNDO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    def execute(self, context):&lt;br /&gt;
        settings = context.scene.vat_loop_settings&lt;br /&gt;
        src = context.active_object&lt;br /&gt;
&lt;br /&gt;
        if src is None or src.type != &amp;quot;MESH&amp;quot;:&lt;br /&gt;
            self.report({&amp;quot;ERROR&amp;quot;}, &amp;quot;Bitte zuerst ein Mesh-Objekt auswählen.&amp;quot;)&lt;br /&gt;
            return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        if settings.source_end &amp;lt;= settings.source_start:&lt;br /&gt;
            self.report({&amp;quot;ERROR&amp;quot;}, &amp;quot;End Frame muss größer als Start Frame sein.&amp;quot;)&lt;br /&gt;
            return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        scene = context.scene&lt;br /&gt;
        depsgraph = context.evaluated_depsgraph_get()&lt;br /&gt;
&lt;br /&gt;
        frames = build_eased_pingpong_frames(&lt;br /&gt;
            settings.source_start,&lt;br /&gt;
            settings.source_end,&lt;br /&gt;
            settings.ease_frames,&lt;br /&gt;
            settings.hold_frames&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
        scene.frame_set(frames[0])&lt;br /&gt;
        context.view_layer.update()&lt;br /&gt;
&lt;br /&gt;
        src_eval = src.evaluated_get(depsgraph)&lt;br /&gt;
        base_mesh = bpy.data.meshes.new_from_object(src_eval, depsgraph=depsgraph)&lt;br /&gt;
&lt;br /&gt;
        new_obj = bpy.data.objects.new(settings.object_name, base_mesh)&lt;br /&gt;
        context.collection.objects.link(new_obj)&lt;br /&gt;
&lt;br /&gt;
        bpy.ops.object.select_all(action=&amp;quot;DESELECT&amp;quot;)&lt;br /&gt;
        context.view_layer.objects.active = new_obj&lt;br /&gt;
        new_obj.select_set(True)&lt;br /&gt;
&lt;br /&gt;
        new_obj.shape_key_add(name=&amp;quot;Basis&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        shape_keys = []&lt;br /&gt;
&lt;br /&gt;
        for i, src_frame in enumerate(frames):&lt;br /&gt;
            scene.frame_set(src_frame)&lt;br /&gt;
            context.view_layer.update()&lt;br /&gt;
&lt;br /&gt;
            src_eval = src.evaluated_get(depsgraph)&lt;br /&gt;
            temp_mesh = bpy.data.meshes.new_from_object(src_eval, depsgraph=depsgraph)&lt;br /&gt;
&lt;br /&gt;
            if len(temp_mesh.vertices) != len(base_mesh.vertices):&lt;br /&gt;
                bpy.data.meshes.remove(temp_mesh)&lt;br /&gt;
                self.report({&amp;quot;ERROR&amp;quot;}, f&amp;quot;Vertex-Anzahl hat sich bei Frame {src_frame} geändert.&amp;quot;)&lt;br /&gt;
                return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            key = new_obj.shape_key_add(&lt;br /&gt;
                name=f&amp;quot;Frame_{i + settings.output_start:04d}_Src_{src_frame:04d}&amp;quot;&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
            for v_idx, vert in enumerate(temp_mesh.vertices):&lt;br /&gt;
                key.data[v_idx].co = vert.co&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            shape_keys.append(key)&lt;br /&gt;
&lt;br /&gt;
            bpy.data.meshes.remove(temp_mesh)&lt;br /&gt;
&lt;br /&gt;
        for i, key in enumerate(shape_keys):&lt;br /&gt;
            out_frame = settings.output_start + i&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame - 1)&lt;br /&gt;
&lt;br /&gt;
            key.value = 1.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame)&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame + 1)&lt;br /&gt;
&lt;br /&gt;
        if new_obj.data.shape_keys and new_obj.data.shape_keys.animation_data:&lt;br /&gt;
            action = new_obj.data.shape_keys.animation_data.action&lt;br /&gt;
            for fc in iter_action_fcurves(action):&lt;br /&gt;
                for kp in fc.keyframe_points:&lt;br /&gt;
                    kp.interpolation = &amp;quot;CONSTANT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        scene.frame_start = settings.output_start&lt;br /&gt;
        scene.frame_end = settings.output_start + len(frames) - 1&lt;br /&gt;
        scene.frame_set(scene.frame_start)&lt;br /&gt;
&lt;br /&gt;
        if settings.keep_source:&lt;br /&gt;
            src.hide_viewport = True&lt;br /&gt;
            src.hide_render = True&lt;br /&gt;
&lt;br /&gt;
        self.report(&lt;br /&gt;
            {&amp;quot;INFO&amp;quot;},&lt;br /&gt;
            f&amp;quot;Loop erstellt: {new_obj.name}, Frames {scene.frame_start}-{scene.frame_end}&amp;quot;&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
        return {&amp;quot;FINISHED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLOOP_PT_panel(bpy.types.Panel):&lt;br /&gt;
    bl_label = &amp;quot;VAT PingPong Looper&amp;quot;&lt;br /&gt;
    bl_idname = &amp;quot;VATLOOP_PT_panel&amp;quot;&lt;br /&gt;
    bl_space_type = &amp;quot;VIEW_3D&amp;quot;&lt;br /&gt;
    bl_region_type = &amp;quot;UI&amp;quot;&lt;br /&gt;
    bl_category = &amp;quot;VAT Loop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def draw(self, context):&lt;br /&gt;
        layout = self.layout&lt;br /&gt;
        settings = context.scene.vat_loop_settings&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Source Frames&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;source_start&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;source_end&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Loop Smoothing&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;ease_frames&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;hold_frames&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Output&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;output_start&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;object_name&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;keep_source&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.operator(&amp;quot;vatloop.loop_me&amp;quot;, icon=&amp;quot;MOD_CLOTH&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classes = (&lt;br /&gt;
    VATLoopSettings,&lt;br /&gt;
    VATLOOP_OT_loop_me,&lt;br /&gt;
    VATLOOP_PT_panel,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def register():&lt;br /&gt;
    for cls in classes:&lt;br /&gt;
        bpy.utils.register_class(cls)&lt;br /&gt;
&lt;br /&gt;
    bpy.types.Scene.vat_loop_settings = bpy.props.PointerProperty(type=VATLoopSettings)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def unregister():&lt;br /&gt;
    del bpy.types.Scene.vat_loop_settings&lt;br /&gt;
&lt;br /&gt;
    for cls in reversed(classes):&lt;br /&gt;
        bpy.utils.unregister_class(cls)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    register()&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1641</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1641"/>
		<updated>2026-07-04T22:34:03Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* 14. Zusatztool: PingPong Looper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation von OpenVAT ==&lt;br /&gt;
&lt;br /&gt;
Bevor Vertex Animation Textures erstellt werden können, muss zunächst das kostenlose Blender-Add-on OpenVAT installiert werden. OpenVAT wird aktiv weiterentwickelt und ist offiziell für Blender 4.2 oder neuer verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
OpenVAT kann auf zwei Arten installiert werden:&lt;br /&gt;
&lt;br /&gt;
Blender Extensions (empfohlen)&lt;br /&gt;
* https://extensions.blender.org/add-ons/openvat/&lt;br /&gt;
GitHub-Projekt&lt;br /&gt;
* https://github.com/sharpen3d/openvat&lt;br /&gt;
&lt;br /&gt;
=== Installation über Blender Extensions ===&lt;br /&gt;
&lt;br /&gt;
Blender starten.&lt;br /&gt;
&#039;&#039;&#039;Edit → Preferences&#039;&#039;&#039; öffnen.&lt;br /&gt;
Zum Bereich &#039;&#039;&#039;Get Extensions&#039;&#039;&#039; wechseln.&lt;br /&gt;
Nach &#039;&#039;&#039;OpenVAT&#039;&#039;&#039; suchen.&lt;br /&gt;
Auf &#039;&#039;&#039;Install&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Add-on auch über die Blender Extensions Webseite heruntergeladen und anschließend über &#039;&#039;&#039;Edit → Preferences → Add-ons → Install...&#039;&#039;&#039; als ZIP-Datei installiert werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== 14. Zusatztool: PingPong Looper ==&lt;br /&gt;
&lt;br /&gt;
[[File:vat_pingpong_looper.zip|Download Blender Addon]]&lt;br /&gt;
&lt;br /&gt;
Dieses Add-on dupliziert die Animation, kehrt sie um und hängt sie an. &lt;br /&gt;
Dadurch entsteht ein nahtloser Loop ohne sichtbaren Übergang.&lt;br /&gt;
&lt;br /&gt;
Ideal für VAT-Animationen wie Flaggen oder Simulationen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-height:400px; overflow:auto; border:1px solid #ccc; padding:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# dein 200 Zeilen Code hier&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1640</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1640"/>
		<updated>2026-07-04T22:33:08Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* 14. Zusatztool: PingPong Looper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation von OpenVAT ==&lt;br /&gt;
&lt;br /&gt;
Bevor Vertex Animation Textures erstellt werden können, muss zunächst das kostenlose Blender-Add-on OpenVAT installiert werden. OpenVAT wird aktiv weiterentwickelt und ist offiziell für Blender 4.2 oder neuer verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
OpenVAT kann auf zwei Arten installiert werden:&lt;br /&gt;
&lt;br /&gt;
Blender Extensions (empfohlen)&lt;br /&gt;
* https://extensions.blender.org/add-ons/openvat/&lt;br /&gt;
GitHub-Projekt&lt;br /&gt;
* https://github.com/sharpen3d/openvat&lt;br /&gt;
&lt;br /&gt;
=== Installation über Blender Extensions ===&lt;br /&gt;
&lt;br /&gt;
Blender starten.&lt;br /&gt;
&#039;&#039;&#039;Edit → Preferences&#039;&#039;&#039; öffnen.&lt;br /&gt;
Zum Bereich &#039;&#039;&#039;Get Extensions&#039;&#039;&#039; wechseln.&lt;br /&gt;
Nach &#039;&#039;&#039;OpenVAT&#039;&#039;&#039; suchen.&lt;br /&gt;
Auf &#039;&#039;&#039;Install&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Add-on auch über die Blender Extensions Webseite heruntergeladen und anschließend über &#039;&#039;&#039;Edit → Preferences → Add-ons → Install...&#039;&#039;&#039; als ZIP-Datei installiert werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== 14. Zusatztool: PingPong Looper ==&lt;br /&gt;
&lt;br /&gt;
[[File:vat_pingpong_looper.zip|Download Blender Addon]]&lt;br /&gt;
&lt;br /&gt;
Dieses Add-on dupliziert die Animation, kehrt sie um und hängt sie an. &lt;br /&gt;
Dadurch entsteht ein nahtloser Loop ohne sichtbaren Übergang.&lt;br /&gt;
&lt;br /&gt;
Ideal für VAT-Animationen wie Flaggen oder Simulationen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;details&amp;gt;&lt;br /&gt;
&amp;lt;summary&amp;gt;PingPong Looper Script anzeigen&amp;lt;/summary&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# dein Code&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/details&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1639</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1639"/>
		<updated>2026-07-04T22:32:04Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* 14. Zusatztool: PingPong Looper */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation von OpenVAT ==&lt;br /&gt;
&lt;br /&gt;
Bevor Vertex Animation Textures erstellt werden können, muss zunächst das kostenlose Blender-Add-on OpenVAT installiert werden. OpenVAT wird aktiv weiterentwickelt und ist offiziell für Blender 4.2 oder neuer verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
OpenVAT kann auf zwei Arten installiert werden:&lt;br /&gt;
&lt;br /&gt;
Blender Extensions (empfohlen)&lt;br /&gt;
* https://extensions.blender.org/add-ons/openvat/&lt;br /&gt;
GitHub-Projekt&lt;br /&gt;
* https://github.com/sharpen3d/openvat&lt;br /&gt;
&lt;br /&gt;
=== Installation über Blender Extensions ===&lt;br /&gt;
&lt;br /&gt;
Blender starten.&lt;br /&gt;
&#039;&#039;&#039;Edit → Preferences&#039;&#039;&#039; öffnen.&lt;br /&gt;
Zum Bereich &#039;&#039;&#039;Get Extensions&#039;&#039;&#039; wechseln.&lt;br /&gt;
Nach &#039;&#039;&#039;OpenVAT&#039;&#039;&#039; suchen.&lt;br /&gt;
Auf &#039;&#039;&#039;Install&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Add-on auch über die Blender Extensions Webseite heruntergeladen und anschließend über &#039;&#039;&#039;Edit → Preferences → Add-ons → Install...&#039;&#039;&#039; als ZIP-Datei installiert werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== 14. Zusatztool: PingPong Looper ==&lt;br /&gt;
&lt;br /&gt;
[[File:vat_pingpong_looper.zip|Download Blender Addon]]&lt;br /&gt;
&lt;br /&gt;
Dieses Add-on dupliziert die Animation, kehrt sie um und hängt sie an. &lt;br /&gt;
Dadurch entsteht ein nahtloser Loop ohne sichtbaren Übergang.&lt;br /&gt;
&lt;br /&gt;
Ideal für VAT-Animationen wie Flaggen oder Simulationen.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;max-height:400px; overflow:auto; border:1px solid #ccc; padding:10px;&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
bl_info = {&lt;br /&gt;
    &amp;quot;name&amp;quot;: &amp;quot;VAT PingPong Looper&amp;quot;,&lt;br /&gt;
    &amp;quot;author&amp;quot;: &amp;quot;ChatGPT und Pierre&amp;quot;,&lt;br /&gt;
    &amp;quot;version&amp;quot;: (1, 0, 0),&lt;br /&gt;
    &amp;quot;blender&amp;quot;: (5, 0, 0),&lt;br /&gt;
    &amp;quot;location&amp;quot;: &amp;quot;View3D &amp;gt; Sidebar &amp;gt; VAT Loop&amp;quot;,&lt;br /&gt;
    &amp;quot;description&amp;quot;: &amp;quot;Creates eased ping-pong Shape Key animation from simulated mesh frames for OpenVAT&amp;quot;,&lt;br /&gt;
    &amp;quot;category&amp;quot;: &amp;quot;Animation&amp;quot;,&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
import bpy&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def smoothstep(t):&lt;br /&gt;
    return t * t * (3.0 - 2.0 * t)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def iter_action_fcurves(action):&lt;br /&gt;
    if action is None:&lt;br /&gt;
        return []&lt;br /&gt;
&lt;br /&gt;
    if hasattr(action, &amp;quot;fcurves&amp;quot;):&lt;br /&gt;
        return action.fcurves&lt;br /&gt;
&lt;br /&gt;
    fcurves = []&lt;br /&gt;
&lt;br /&gt;
    if hasattr(action, &amp;quot;layers&amp;quot;):&lt;br /&gt;
        for layer in action.layers:&lt;br /&gt;
            for strip in layer.strips:&lt;br /&gt;
                if hasattr(strip, &amp;quot;channelbags&amp;quot;):&lt;br /&gt;
                    for channelbag in strip.channelbags:&lt;br /&gt;
                        if hasattr(channelbag, &amp;quot;fcurves&amp;quot;):&lt;br /&gt;
                            fcurves.extend(channelbag.fcurves)&lt;br /&gt;
&lt;br /&gt;
    return fcurves&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def build_eased_pingpong_frames(start, end, ease_frames=12, hold_frames=0):&lt;br /&gt;
    frames = []&lt;br /&gt;
&lt;br /&gt;
    normal_end = max(start, end - ease_frames)&lt;br /&gt;
&lt;br /&gt;
    frames.extend(range(start, normal_end + 1))&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, ease_frames + 1):&lt;br /&gt;
        t = i / ease_frames&lt;br /&gt;
        eased = smoothstep(t)&lt;br /&gt;
        frame = normal_end + eased * (end - normal_end)&lt;br /&gt;
        frames.append(round(frame))&lt;br /&gt;
&lt;br /&gt;
    frames.extend([end] * hold_frames)&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, ease_frames + 1):&lt;br /&gt;
        t = i / ease_frames&lt;br /&gt;
        eased = smoothstep(t)&lt;br /&gt;
        frame = end - eased * (end - normal_end)&lt;br /&gt;
        frames.append(round(frame))&lt;br /&gt;
&lt;br /&gt;
    backward_start = normal_end - 1&lt;br /&gt;
    frames.extend(range(backward_start, start, -1))&lt;br /&gt;
&lt;br /&gt;
    cleaned = []&lt;br /&gt;
&lt;br /&gt;
    for f in frames:&lt;br /&gt;
        if not cleaned or f != cleaned[-1]:&lt;br /&gt;
            cleaned.append(f)&lt;br /&gt;
        elif f == end:&lt;br /&gt;
            cleaned.append(f)&lt;br /&gt;
&lt;br /&gt;
    return cleaned&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLoopSettings(bpy.types.PropertyGroup):&lt;br /&gt;
    source_start: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Start Frame&amp;quot;,&lt;br /&gt;
        default=1,&lt;br /&gt;
        min=1&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    source_end: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;End Frame&amp;quot;,&lt;br /&gt;
        default=200,&lt;br /&gt;
        min=2&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    ease_frames: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Ease Frames&amp;quot;,&lt;br /&gt;
        default=5,&lt;br /&gt;
        min=0&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    hold_frames: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Hold Frames&amp;quot;,&lt;br /&gt;
        default=0,&lt;br /&gt;
        min=0&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    output_start: bpy.props.IntProperty(&lt;br /&gt;
        name=&amp;quot;Output Start&amp;quot;,&lt;br /&gt;
        default=1,&lt;br /&gt;
        min=1&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    keep_source: bpy.props.BoolProperty(&lt;br /&gt;
        name=&amp;quot;Hide Source Object&amp;quot;,&lt;br /&gt;
        default=True&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    object_name: bpy.props.StringProperty(&lt;br /&gt;
        name=&amp;quot;New Object Name&amp;quot;,&lt;br /&gt;
        default=&amp;quot;VAT_PingPong_Loop&amp;quot;&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLOOP_OT_loop_me(bpy.types.Operator):&lt;br /&gt;
    bl_idname = &amp;quot;vatloop.loop_me&amp;quot;&lt;br /&gt;
    bl_label = &amp;quot;Loop me&amp;quot;&lt;br /&gt;
    bl_description = &amp;quot;Create eased ping-pong Shape Key animation from selected mesh&amp;quot;&lt;br /&gt;
    bl_options = {&amp;quot;REGISTER&amp;quot;, &amp;quot;UNDO&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
    def execute(self, context):&lt;br /&gt;
        settings = context.scene.vat_loop_settings&lt;br /&gt;
        src = context.active_object&lt;br /&gt;
&lt;br /&gt;
        if src is None or src.type != &amp;quot;MESH&amp;quot;:&lt;br /&gt;
            self.report({&amp;quot;ERROR&amp;quot;}, &amp;quot;Bitte zuerst ein Mesh-Objekt auswählen.&amp;quot;)&lt;br /&gt;
            return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        if settings.source_end &amp;lt;= settings.source_start:&lt;br /&gt;
            self.report({&amp;quot;ERROR&amp;quot;}, &amp;quot;End Frame muss größer als Start Frame sein.&amp;quot;)&lt;br /&gt;
            return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
        scene = context.scene&lt;br /&gt;
        depsgraph = context.evaluated_depsgraph_get()&lt;br /&gt;
&lt;br /&gt;
        frames = build_eased_pingpong_frames(&lt;br /&gt;
            settings.source_start,&lt;br /&gt;
            settings.source_end,&lt;br /&gt;
            settings.ease_frames,&lt;br /&gt;
            settings.hold_frames&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
        scene.frame_set(frames[0])&lt;br /&gt;
        context.view_layer.update()&lt;br /&gt;
&lt;br /&gt;
        src_eval = src.evaluated_get(depsgraph)&lt;br /&gt;
        base_mesh = bpy.data.meshes.new_from_object(src_eval, depsgraph=depsgraph)&lt;br /&gt;
&lt;br /&gt;
        new_obj = bpy.data.objects.new(settings.object_name, base_mesh)&lt;br /&gt;
        context.collection.objects.link(new_obj)&lt;br /&gt;
&lt;br /&gt;
        bpy.ops.object.select_all(action=&amp;quot;DESELECT&amp;quot;)&lt;br /&gt;
        context.view_layer.objects.active = new_obj&lt;br /&gt;
        new_obj.select_set(True)&lt;br /&gt;
&lt;br /&gt;
        new_obj.shape_key_add(name=&amp;quot;Basis&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        shape_keys = []&lt;br /&gt;
&lt;br /&gt;
        for i, src_frame in enumerate(frames):&lt;br /&gt;
            scene.frame_set(src_frame)&lt;br /&gt;
            context.view_layer.update()&lt;br /&gt;
&lt;br /&gt;
            src_eval = src.evaluated_get(depsgraph)&lt;br /&gt;
            temp_mesh = bpy.data.meshes.new_from_object(src_eval, depsgraph=depsgraph)&lt;br /&gt;
&lt;br /&gt;
            if len(temp_mesh.vertices) != len(base_mesh.vertices):&lt;br /&gt;
                bpy.data.meshes.remove(temp_mesh)&lt;br /&gt;
                self.report({&amp;quot;ERROR&amp;quot;}, f&amp;quot;Vertex-Anzahl hat sich bei Frame {src_frame} geändert.&amp;quot;)&lt;br /&gt;
                return {&amp;quot;CANCELLED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
            key = new_obj.shape_key_add(&lt;br /&gt;
                name=f&amp;quot;Frame_{i + settings.output_start:04d}_Src_{src_frame:04d}&amp;quot;&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
            for v_idx, vert in enumerate(temp_mesh.vertices):&lt;br /&gt;
                key.data[v_idx].co = vert.co&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            shape_keys.append(key)&lt;br /&gt;
&lt;br /&gt;
            bpy.data.meshes.remove(temp_mesh)&lt;br /&gt;
&lt;br /&gt;
        for i, key in enumerate(shape_keys):&lt;br /&gt;
            out_frame = settings.output_start + i&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame - 1)&lt;br /&gt;
&lt;br /&gt;
            key.value = 1.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame)&lt;br /&gt;
&lt;br /&gt;
            key.value = 0.0&lt;br /&gt;
            key.keyframe_insert(&amp;quot;value&amp;quot;, frame=out_frame + 1)&lt;br /&gt;
&lt;br /&gt;
        if new_obj.data.shape_keys and new_obj.data.shape_keys.animation_data:&lt;br /&gt;
            action = new_obj.data.shape_keys.animation_data.action&lt;br /&gt;
            for fc in iter_action_fcurves(action):&lt;br /&gt;
                for kp in fc.keyframe_points:&lt;br /&gt;
                    kp.interpolation = &amp;quot;CONSTANT&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        scene.frame_start = settings.output_start&lt;br /&gt;
        scene.frame_end = settings.output_start + len(frames) - 1&lt;br /&gt;
        scene.frame_set(scene.frame_start)&lt;br /&gt;
&lt;br /&gt;
        if settings.keep_source:&lt;br /&gt;
            src.hide_viewport = True&lt;br /&gt;
            src.hide_render = True&lt;br /&gt;
&lt;br /&gt;
        self.report(&lt;br /&gt;
            {&amp;quot;INFO&amp;quot;},&lt;br /&gt;
            f&amp;quot;Loop erstellt: {new_obj.name}, Frames {scene.frame_start}-{scene.frame_end}&amp;quot;&lt;br /&gt;
        )&lt;br /&gt;
&lt;br /&gt;
        return {&amp;quot;FINISHED&amp;quot;}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class VATLOOP_PT_panel(bpy.types.Panel):&lt;br /&gt;
    bl_label = &amp;quot;VAT PingPong Looper&amp;quot;&lt;br /&gt;
    bl_idname = &amp;quot;VATLOOP_PT_panel&amp;quot;&lt;br /&gt;
    bl_space_type = &amp;quot;VIEW_3D&amp;quot;&lt;br /&gt;
    bl_region_type = &amp;quot;UI&amp;quot;&lt;br /&gt;
    bl_category = &amp;quot;VAT Loop&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    def draw(self, context):&lt;br /&gt;
        layout = self.layout&lt;br /&gt;
        settings = context.scene.vat_loop_settings&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Source Frames&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;source_start&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;source_end&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Loop Smoothing&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;ease_frames&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;hold_frames&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.label(text=&amp;quot;Output&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;output_start&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;object_name&amp;quot;)&lt;br /&gt;
        layout.prop(settings, &amp;quot;keep_source&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        layout.separator()&lt;br /&gt;
&lt;br /&gt;
        layout.operator(&amp;quot;vatloop.loop_me&amp;quot;, icon=&amp;quot;MOD_CLOTH&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
classes = (&lt;br /&gt;
    VATLoopSettings,&lt;br /&gt;
    VATLOOP_OT_loop_me,&lt;br /&gt;
    VATLOOP_PT_panel,&lt;br /&gt;
)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def register():&lt;br /&gt;
    for cls in classes:&lt;br /&gt;
        bpy.utils.register_class(cls)&lt;br /&gt;
&lt;br /&gt;
    bpy.types.Scene.vat_loop_settings = bpy.props.PointerProperty(type=VATLoopSettings)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def unregister():&lt;br /&gt;
    del bpy.types.Scene.vat_loop_settings&lt;br /&gt;
&lt;br /&gt;
    for cls in reversed(classes):&lt;br /&gt;
        bpy.utils.unregister_class(cls)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    register()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1638</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1638"/>
		<updated>2026-07-04T22:26:10Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* OpenVAT in VRChat (Unity Built-in) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation von OpenVAT ==&lt;br /&gt;
&lt;br /&gt;
Bevor Vertex Animation Textures erstellt werden können, muss zunächst das kostenlose Blender-Add-on OpenVAT installiert werden. OpenVAT wird aktiv weiterentwickelt und ist offiziell für Blender 4.2 oder neuer verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
OpenVAT kann auf zwei Arten installiert werden:&lt;br /&gt;
&lt;br /&gt;
Blender Extensions (empfohlen)&lt;br /&gt;
* https://extensions.blender.org/add-ons/openvat/&lt;br /&gt;
GitHub-Projekt&lt;br /&gt;
* https://github.com/sharpen3d/openvat&lt;br /&gt;
&lt;br /&gt;
=== Installation über Blender Extensions ===&lt;br /&gt;
&lt;br /&gt;
Blender starten.&lt;br /&gt;
&#039;&#039;&#039;Edit → Preferences&#039;&#039;&#039; öffnen.&lt;br /&gt;
Zum Bereich &#039;&#039;&#039;Get Extensions&#039;&#039;&#039; wechseln.&lt;br /&gt;
Nach &#039;&#039;&#039;OpenVAT&#039;&#039;&#039; suchen.&lt;br /&gt;
Auf &#039;&#039;&#039;Install&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Add-on auch über die Blender Extensions Webseite heruntergeladen und anschließend über &#039;&#039;&#039;Edit → Preferences → Add-ons → Install...&#039;&#039;&#039; als ZIP-Datei installiert werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== 14. Zusatztool: PingPong Looper ==&lt;br /&gt;
&lt;br /&gt;
[[File:vat_pingpong_looper.zip|Download Blender Addon]]&lt;br /&gt;
&lt;br /&gt;
Dieses Add-on dupliziert die Animation, kehrt sie um und hängt sie an. &lt;br /&gt;
Dadurch entsteht ein nahtloser Loop ohne sichtbaren Übergang.&lt;br /&gt;
&lt;br /&gt;
Ideal für VAT-Animationen wie Flaggen oder Simulationen.&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1637</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1637"/>
		<updated>2026-06-27T14:38:15Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* 7. EXR Texture korrekt einstellen */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation von OpenVAT ==&lt;br /&gt;
&lt;br /&gt;
Bevor Vertex Animation Textures erstellt werden können, muss zunächst das kostenlose Blender-Add-on OpenVAT installiert werden. OpenVAT wird aktiv weiterentwickelt und ist offiziell für Blender 4.2 oder neuer verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
OpenVAT kann auf zwei Arten installiert werden:&lt;br /&gt;
&lt;br /&gt;
Blender Extensions (empfohlen)&lt;br /&gt;
* https://extensions.blender.org/add-ons/openvat/&lt;br /&gt;
GitHub-Projekt&lt;br /&gt;
* https://github.com/sharpen3d/openvat&lt;br /&gt;
&lt;br /&gt;
=== Installation über Blender Extensions ===&lt;br /&gt;
&lt;br /&gt;
Blender starten.&lt;br /&gt;
&#039;&#039;&#039;Edit → Preferences&#039;&#039;&#039; öffnen.&lt;br /&gt;
Zum Bereich &#039;&#039;&#039;Get Extensions&#039;&#039;&#039; wechseln.&lt;br /&gt;
Nach &#039;&#039;&#039;OpenVAT&#039;&#039;&#039; suchen.&lt;br /&gt;
Auf &#039;&#039;&#039;Install&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Add-on auch über die Blender Extensions Webseite heruntergeladen und anschließend über &#039;&#039;&#039;Edit → Preferences → Add-ons → Install...&#039;&#039;&#039; als ZIP-Datei installiert werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1636</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1636"/>
		<updated>2026-06-27T14:37:32Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* Installation von OpenVAT */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation von OpenVAT ==&lt;br /&gt;
&lt;br /&gt;
Bevor Vertex Animation Textures erstellt werden können, muss zunächst das kostenlose Blender-Add-on OpenVAT installiert werden. OpenVAT wird aktiv weiterentwickelt und ist offiziell für Blender 4.2 oder neuer verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
OpenVAT kann auf zwei Arten installiert werden:&lt;br /&gt;
&lt;br /&gt;
Blender Extensions (empfohlen)&lt;br /&gt;
* https://extensions.blender.org/add-ons/openvat/&lt;br /&gt;
GitHub-Projekt&lt;br /&gt;
* https://github.com/sharpen3d/openvat&lt;br /&gt;
&lt;br /&gt;
=== Installation über Blender Extensions ===&lt;br /&gt;
&lt;br /&gt;
Blender starten.&lt;br /&gt;
&#039;&#039;&#039;Edit → Preferences&#039;&#039;&#039; öffnen.&lt;br /&gt;
Zum Bereich &#039;&#039;&#039;Get Extensions&#039;&#039;&#039; wechseln.&lt;br /&gt;
Nach &#039;&#039;&#039;OpenVAT&#039;&#039;&#039; suchen.&lt;br /&gt;
Auf &#039;&#039;&#039;Install&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Add-on auch über die Blender Extensions Webseite heruntergeladen und anschließend über &#039;&#039;&#039;Edit → Preferences → Add-ons → Install...&#039;&#039;&#039; als ZIP-Datei installiert werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png|600px]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png|600px]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1635</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1635"/>
		<updated>2026-06-27T14:36:57Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* OpenVAT in VRChat (Unity Built-in) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
== Installation von OpenVAT ==&lt;br /&gt;
&lt;br /&gt;
Bevor Vertex Animation Textures erstellt werden können, muss zunächst das kostenlose Blender-Add-on OpenVAT installiert werden. OpenVAT wird aktiv weiterentwickelt und ist offiziell für Blender 4.2 oder neuer verfügbar.&lt;br /&gt;
&lt;br /&gt;
=== Download ===&lt;br /&gt;
&lt;br /&gt;
OpenVAT kann auf zwei Arten installiert werden:&lt;br /&gt;
&lt;br /&gt;
Blender Extensions (empfohlen)&lt;br /&gt;
** https://extensions.blender.org/add-ons/openvat/&lt;br /&gt;
GitHub-Projekt&lt;br /&gt;
** https://github.com/sharpen3d/openvat&lt;br /&gt;
&lt;br /&gt;
=== Installation über Blender Extensions ===&lt;br /&gt;
&lt;br /&gt;
Blender starten.&lt;br /&gt;
&#039;&#039;&#039;Edit → Preferences&#039;&#039;&#039; öffnen.&lt;br /&gt;
Zum Bereich &#039;&#039;&#039;Get Extensions&#039;&#039;&#039; wechseln.&lt;br /&gt;
Nach &#039;&#039;&#039;OpenVAT&#039;&#039;&#039; suchen.&lt;br /&gt;
Auf &#039;&#039;&#039;Install&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
Alternativ kann das Add-on auch über die Blender Extensions Webseite heruntergeladen und anschließend über &#039;&#039;&#039;Edit → Preferences → Add-ons → Install...&#039;&#039;&#039; als ZIP-Datei installiert werden.&lt;br /&gt;
&lt;br /&gt;
Jetzt eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png|600px]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png|600px]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1634</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1634"/>
		<updated>2026-06-27T14:34:24Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* OpenVAT in VRChat (Unity Built-in) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
OpenVAT installieren (ab Blender 4.2)&lt;br /&gt;
Eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png|600px]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png|600px]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png]]&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT16.png&amp;diff=1633</id>
		<title>Datei:VAT16.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT16.png&amp;diff=1633"/>
		<updated>2026-06-27T14:34:01Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT15.png&amp;diff=1632</id>
		<title>Datei:VAT15.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT15.png&amp;diff=1632"/>
		<updated>2026-06-27T14:33:43Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT14.png&amp;diff=1631</id>
		<title>Datei:VAT14.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT14.png&amp;diff=1631"/>
		<updated>2026-06-27T14:33:26Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT13.png&amp;diff=1630</id>
		<title>Datei:VAT13.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT13.png&amp;diff=1630"/>
		<updated>2026-06-27T14:33:13Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT12.png&amp;diff=1629</id>
		<title>Datei:VAT12.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT12.png&amp;diff=1629"/>
		<updated>2026-06-27T14:32:54Z</updated>

		<summary type="html">&lt;p&gt;Gargi: Gargi lud eine neue Version von Datei:VAT12.png hoch&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT11.png&amp;diff=1628</id>
		<title>Datei:VAT11.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT11.png&amp;diff=1628"/>
		<updated>2026-06-27T14:32:28Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT12.png&amp;diff=1627</id>
		<title>Datei:VAT12.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT12.png&amp;diff=1627"/>
		<updated>2026-06-27T14:31:48Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT10.png&amp;diff=1626</id>
		<title>Datei:VAT10.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT10.png&amp;diff=1626"/>
		<updated>2026-06-27T14:31:32Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT09.png&amp;diff=1625</id>
		<title>Datei:VAT09.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT09.png&amp;diff=1625"/>
		<updated>2026-06-27T14:31:13Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT08.png&amp;diff=1624</id>
		<title>Datei:VAT08.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT08.png&amp;diff=1624"/>
		<updated>2026-06-27T14:30:56Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT07.png&amp;diff=1623</id>
		<title>Datei:VAT07.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT07.png&amp;diff=1623"/>
		<updated>2026-06-27T14:30:38Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT06.png&amp;diff=1622</id>
		<title>Datei:VAT06.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT06.png&amp;diff=1622"/>
		<updated>2026-06-27T14:30:22Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT05.png&amp;diff=1621</id>
		<title>Datei:VAT05.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT05.png&amp;diff=1621"/>
		<updated>2026-06-27T14:30:02Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT04.png&amp;diff=1620</id>
		<title>Datei:VAT04.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT04.png&amp;diff=1620"/>
		<updated>2026-06-27T14:29:46Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT03.png&amp;diff=1619</id>
		<title>Datei:VAT03.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT03.png&amp;diff=1619"/>
		<updated>2026-06-27T14:29:28Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT02.png&amp;diff=1618</id>
		<title>Datei:VAT02.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT02.png&amp;diff=1618"/>
		<updated>2026-06-27T14:29:12Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT01.png&amp;diff=1617</id>
		<title>Datei:VAT01.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT01.png&amp;diff=1617"/>
		<updated>2026-06-27T14:28:56Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:VAT00.png&amp;diff=1616</id>
		<title>Datei:VAT00.png</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:VAT00.png&amp;diff=1616"/>
		<updated>2026-06-27T14:28:40Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1615</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1615"/>
		<updated>2026-06-27T14:28:26Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[Bild:VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
OpenVAT installieren (ab Blender 4.2)&lt;br /&gt;
Eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[Bild:VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[Bild:VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[Bild:VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[Bild:VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[Bild:VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT08.png|600px]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[Bild:VAT09.png|600px]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[Bild:VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[Bild:VAT11.png|600px]]&lt;br /&gt;
[[Bild:VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[Bild:VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[Bild:VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[Bild:VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[Bild:VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1614</id>
		<title>OpenVAT in VRChat</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=OpenVAT_in_VRChat&amp;diff=1614"/>
		<updated>2026-06-27T14:25:31Z</updated>

		<summary type="html">&lt;p&gt;Gargi: Die Seite wurde neu angelegt: „&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt; __TOC__ &amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;  = OpenVAT in VRChat (Unity Built-in) =  == Einleitung == OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.  Das ist besonders interessant für VR, da:  Anima…“&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;div style=&amp;quot;text-align=right; float: right; clear: none; background: none; padding-left:20px&amp;quot;&amp;gt;&lt;br /&gt;
__TOC__&lt;br /&gt;
&amp;lt;/div&amp;gt;&amp;lt;noinclude&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= OpenVAT in VRChat (Unity Built-in) =&lt;br /&gt;
&lt;br /&gt;
== Einleitung ==&lt;br /&gt;
OpenVAT (Vertex Animation Textures) ist eine Technik, bei der Animationen nicht über Bones, sondern über Texturen abgespielt werden. Dabei werden Vertex-Positionen in einer EXR-Datei gespeichert und im Shader wieder ausgelesen.&lt;br /&gt;
&lt;br /&gt;
Das ist besonders interessant für VR, da:&lt;br /&gt;
&lt;br /&gt;
Animationen komplett auf der GPU laufen&lt;br /&gt;
keine komplexen Rigs benötigt werden&lt;br /&gt;
Simulationen wie Stoff oder Flaggen sehr performant dargestellt werden können&lt;br /&gt;
&lt;br /&gt;
== 1. OpenVAT in Blender verwenden ==&lt;br /&gt;
[[VAT00.png|600px]]&lt;br /&gt;
&lt;br /&gt;
OpenVAT installieren (ab Blender 4.2)&lt;br /&gt;
Eine Animation erstellen (z. B. Cloth Simulation)&lt;br /&gt;
&lt;br /&gt;
== 2. OpenVAT auf das Objekt anwenden ==&lt;br /&gt;
[[VAT01.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Frame Range&#039;&#039;&#039; – Animationsbereich&lt;br /&gt;
&#039;&#039;&#039;Vertex Data: Standard (Position/Normal)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Deformation Basis: Start Frame&#039;&#039;&#039; → wichtig für Offset-Animation&lt;br /&gt;
&#039;&#039;&#039;Transform: Object&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Use Single Row&#039;&#039;&#039; → optimiert Texture Layout&lt;br /&gt;
&lt;br /&gt;
Dann auf &#039;&#039;&#039;Encode Vertex Animation Texture&#039;&#039;&#039; klicken.&lt;br /&gt;
&lt;br /&gt;
== 3. Shader Graph VRC installieren ==&lt;br /&gt;
[[VAT02.png|600px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Im VRChat Creator Companion:&lt;br /&gt;
&lt;br /&gt;
Repository hinzufügen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://z3y.github.io/vpm-package-listing/index.json &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Danach:&lt;br /&gt;
&lt;br /&gt;
Paket &#039;&#039;&#039;Shader Graph VRC&#039;&#039;&#039; installieren&lt;br /&gt;
im Projekt aktivieren&lt;br /&gt;
&lt;br /&gt;
[[VAT03.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
→ Standard ShaderGraph ist nicht VRChat-kompatibel&lt;br /&gt;
→ Dieses Paket macht Built-in Shader nutzbar&lt;br /&gt;
&lt;br /&gt;
== 4. Shader Graph in Unity installieren ==&lt;br /&gt;
[[VAT04.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Unity Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Shader Graph&#039;&#039;&#039; installieren&lt;br /&gt;
&lt;br /&gt;
== 5. OpenVAT Plugin installieren ==&lt;br /&gt;
[[VAT05.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Package Manager:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Add package from Git URL&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt; https://github.com/sharpen3d/openvat-unity.git &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== 6. Export aus Blender importieren ==&lt;br /&gt;
[[VAT06.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Alle Dateien in Unity kopieren:&lt;br /&gt;
&lt;br /&gt;
FBX (Mesh)&lt;br /&gt;
EXR (Animation)&lt;br /&gt;
JSON (optional)&lt;br /&gt;
&lt;br /&gt;
Empfohlen:&lt;br /&gt;
→ eigenes Verzeichnis erstellen&lt;br /&gt;
&lt;br /&gt;
== 7. EXR Texture korrekt einstellen ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Die EXR ist keine normale Textur, sondern enthält Vertex-Daten!&lt;br /&gt;
&lt;br /&gt;
Wichtige Einstellungen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Non Power of 2&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;Compression&#039;&#039;&#039; = None&lt;br /&gt;
&#039;&#039;&#039;MipMaps&#039;&#039;&#039; = Off&lt;br /&gt;
&#039;&#039;&#039;Wrap Mode&#039;&#039;&#039; = Clamp&lt;br /&gt;
&#039;&#039;&#039;Filter Mode&#039;&#039;&#039; = Point (oder Bilinear für smoothing)&lt;br /&gt;
&lt;br /&gt;
Sehr wichtig:&lt;br /&gt;
&lt;br /&gt;
Für jede Plattform separat einstellen:&lt;br /&gt;
&lt;br /&gt;
Windows&lt;br /&gt;
[[VAT07.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Android (Quest!)&lt;br /&gt;
&lt;br /&gt;
[[VAT08.png|600px]]&lt;br /&gt;
&lt;br /&gt;
iOS&lt;br /&gt;
&lt;br /&gt;
[[VAT09.png|600px]]&lt;br /&gt;
&lt;br /&gt;
→ Unity nutzt Plattform-Overrides&lt;br /&gt;
→ falsche Settings zerstören die Animation oder Qualität&lt;br /&gt;
&lt;br /&gt;
== 8. Shader auf VRChat Built-in umstellen ==&lt;br /&gt;
[[VAT10.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph:&lt;br /&gt;
&lt;br /&gt;
Graph Inspector öffnen&lt;br /&gt;
&#039;&#039;&#039;Active Targets → Built-In VRC&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Warum:&lt;br /&gt;
&lt;br /&gt;
VRChat nutzt die Built-in Pipeline&lt;br /&gt;
→ URP funktioniert nicht&lt;br /&gt;
&lt;br /&gt;
== 9. OpenVAT Tool ausführen ==&lt;br /&gt;
[[VAT11.png|600px]]&lt;br /&gt;
[[VAT12.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Menü:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Tools → OpenVAT Editor&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Dann:&lt;br /&gt;
&lt;br /&gt;
Export-Ordner auswählen&lt;br /&gt;
&#039;&#039;&#039;Process OpenVAT Content&#039;&#039;&#039; klicken&lt;br /&gt;
&lt;br /&gt;
== 10. Ergebnis ==&lt;br /&gt;
[[VAT13.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Unity erzeugt automatisch:&lt;br /&gt;
&lt;br /&gt;
Material&lt;br /&gt;
Prefab&lt;br /&gt;
aufbereitetes Mesh&lt;br /&gt;
&lt;br /&gt;
== 11. Albedo und Emission hinzufügen ==&lt;br /&gt;
[[VAT14.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im ShaderGraph ergänzen:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Texture2D Property&#039;&#039;&#039; erstellen (Albedo)&lt;br /&gt;
&#039;&#039;&#039;Sample Texture 2D&#039;&#039;&#039; Node&lt;br /&gt;
UV0 anschließen&lt;br /&gt;
Output → Base Color&lt;br /&gt;
&lt;br /&gt;
Optional Emission:&lt;br /&gt;
&lt;br /&gt;
Texture → Multiply (z. B. Stärke 1–3)&lt;br /&gt;
Output → Emission&lt;br /&gt;
&lt;br /&gt;
== 12. Textur im Material setzen ==&lt;br /&gt;
[[VAT15.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Im Material:&lt;br /&gt;
&lt;br /&gt;
Albedo Textur zuweisen&lt;br /&gt;
&lt;br /&gt;
== 13. Prefab testen ==&lt;br /&gt;
[[VAT16.png|600px]]&lt;br /&gt;
&lt;br /&gt;
Prefab in die Szene ziehen:&lt;br /&gt;
&lt;br /&gt;
Animation sollte direkt laufen&lt;br /&gt;
Funktion testen&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
OpenVAT ermöglicht:&lt;br /&gt;
&lt;br /&gt;
GPU-basierte Animationen&lt;br /&gt;
komplexe Simulationen ohne Bones&lt;br /&gt;
sehr gute Performance in VR&lt;br /&gt;
&lt;br /&gt;
Wichtige Learnings:&lt;br /&gt;
&lt;br /&gt;
EXR darf nicht verändert werden&lt;br /&gt;
Plattform-Overrides sind entscheidend (Quest!)&lt;br /&gt;
Shader muss VRChat-kompatibel sein&lt;br /&gt;
&lt;br /&gt;
Damit lassen sich hochwertige Animationen direkt in VRChat einsetzen.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Worldbuilding]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=MediaWiki:Sidebar&amp;diff=1613</id>
		<title>MediaWiki:Sidebar</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=MediaWiki:Sidebar&amp;diff=1613"/>
		<updated>2026-06-27T14:18:32Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
* navigation&lt;br /&gt;
** mainpage|mainpage-description&lt;br /&gt;
** http://www.gargamel.de|Mein Blog&lt;br /&gt;
** recentchanges-url|recentchanges&lt;br /&gt;
** randompage-url|randompage&lt;br /&gt;
** helppage|help&lt;br /&gt;
*Themenübersicht&lt;br /&gt;
** Category:Linux|Linux&lt;br /&gt;
** Category:Windows|Windows&lt;br /&gt;
** Category:Programmierung|Programmierung&lt;br /&gt;
** Milkshape Tutorials|Milkshape Tutorials&lt;br /&gt;
** Category:Hardware|Hardware&lt;br /&gt;
** Category:Netzwerk und Web|Netzwerk und Web&lt;br /&gt;
** Category:Gaming|Gaming&lt;br /&gt;
** Category:Worldbuilding|Worldbuilding&lt;br /&gt;
** Category:Apple Vision Pro|Apple Vision Pro&lt;br /&gt;
** Category:Raspberry Pi|Raspberry Pi&lt;br /&gt;
** http://www.myslug.de|NSLU2&lt;br /&gt;
* SEARCH&lt;br /&gt;
* TOOLBOX&lt;br /&gt;
* LANGUAGES&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Anwendungsgebiete_der_Apple_Vision_Pro&amp;diff=1612</id>
		<title>Anwendungsgebiete der Apple Vision Pro</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Anwendungsgebiete_der_Apple_Vision_Pro&amp;diff=1612"/>
		<updated>2026-06-07T21:10:20Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:Anwendung1.jpg|Anwendungsgebiete der Apple Vision Pro]]&lt;br /&gt;
&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
Dieser Artikel beschreibt persönliche Erfahrungen nach über einem Jahr täglicher Nutzung der Apple Vision Pro unter visionOS 26. Die genannten Anwendungen und Funktionen spiegeln reale Einsatzszenarien aus den Bereichen Arbeit, Unterhaltung, Gaming, 3D-Entwicklung und Kommunikation wider.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Anwendungsgebiete der Apple Vision Pro =&lt;br /&gt;
&lt;br /&gt;
Die Apple Vision Pro wird häufig auf ihre Rolle als Mixed-Reality-Headset reduziert. Nach über einem Jahr täglicher Nutzung hat sich für mich jedoch gezeigt, dass sie deutlich mehr ist: Kino, Arbeitsplatz, Spielkonsole, Kreativwerkzeug und Kommunikationsplattform in einem Gerät.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt die Anwendungsgebiete, die ich persönlich regelmäßig nutze.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Kino-Erlebnis mit der Apple Vision Pro ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung2.jpg|Videowiedergabe mit Skybox VR]]&lt;br /&gt;
&lt;br /&gt;
Der Bereich Entertainment ist für mich einer der wichtigsten Einsatzzwecke der Vision Pro.&lt;br /&gt;
&lt;br /&gt;
Dank hochauflösender OLED-Displays bietet das Gerät eine Bildqualität, die sich mit einer großen Kinoleinwand vergleichen lässt. Filme und Serien profitieren von tiefem Schwarz, kräftigen Farben und einer enormen Bildgröße.&lt;br /&gt;
&lt;br /&gt;
Unterstützt werden unter anderem:&lt;br /&gt;
&lt;br /&gt;
* Apple TV+&lt;br /&gt;
* Disney+&lt;br /&gt;
* Netflix&lt;br /&gt;
* Amazon Prime Video&lt;br /&gt;
* YouTube&lt;br /&gt;
* Mediatheken&lt;br /&gt;
&lt;br /&gt;
Mit Apps wie Skybox VR oder Moon Player lassen sich außerdem eigene Videos in 2D, 3D und 4K wiedergeben.&lt;br /&gt;
&lt;br /&gt;
Besonders beeindruckend sind die Immersive Videos von Apple, die Inhalte in 8K, 180 Grad und stereoskopischem 3D darstellen.&lt;br /&gt;
&lt;br /&gt;
== Spatiale Erinnerungen ==&lt;br /&gt;
&lt;br /&gt;
Ein besonderes Merkmal der Vision Pro sind spatiale Fotos und Videos.&lt;br /&gt;
&lt;br /&gt;
Durch die räumliche Darstellung entsteht der Eindruck, wieder direkt an einem Ort zu stehen. Erinnerungen wirken dadurch deutlich intensiver als auf klassischen Bildschirmen.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* Räumliche Fotos in 3D betrachten&lt;br /&gt;
* Spatiale Videos aufnehmen&lt;br /&gt;
* Inhalte per SharePlay gemeinsam erleben&lt;br /&gt;
* Einsatzmöglichkeiten für Präsentationen und Employer Branding&lt;br /&gt;
&lt;br /&gt;
== 3D-Modelle und Mixed Reality ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung3.jpg|3D-Modelle in Mixed Reality]]&lt;br /&gt;
&lt;br /&gt;
Für die Arbeit mit Blender und 3D-Modellen ist die Vision Pro ein wertvolles Werkzeug.&lt;br /&gt;
&lt;br /&gt;
Modelle können direkt als USDZ-Dateien geladen und in der realen Umgebung dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
Mögliche Einsatzbereiche:&lt;br /&gt;
&lt;br /&gt;
* Qualitätskontrolle von 3D-Modellen&lt;br /&gt;
* Produktvisualisierung&lt;br /&gt;
* Architekturmodelle&lt;br /&gt;
* 3D-Scanning&lt;br /&gt;
* Mixed-Reality-Präsentationen&lt;br /&gt;
&lt;br /&gt;
Mit visionOS 26 werden zusätzlich auch die PlayStation VR2 Sense Controller unterstützt, wodurch Anwendungen wie Shapelab VR auf der Vision Pro nutzbar werden.&lt;br /&gt;
&lt;br /&gt;
== Virtueller Arbeitsplatz ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung5.jpg|Mac Virtual Display]]&lt;br /&gt;
&lt;br /&gt;
Der Mac Virtual Display gehört zu meinen meistgenutzten Funktionen.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* Ultrawide-Arbeitsfläche&lt;br /&gt;
* Platz wie auf mehreren 4K-Monitoren&lt;br /&gt;
* Hohe Bildschärfe&lt;br /&gt;
* Schutz der Privatsphäre unterwegs&lt;br /&gt;
* Ideal für Blender, Unity und Videoschnitt&lt;br /&gt;
&lt;br /&gt;
Besonders auf Reisen oder im Homeoffice ersetzt die Vision Pro für mich mehrere physische Monitore.&lt;br /&gt;
&lt;br /&gt;
== Cloud Gaming mit GeForce NOW ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung6.jpg|Gaming über GeForce NOW]]&lt;br /&gt;
&lt;br /&gt;
Mit GeForce NOW kann die komplette Steam-Bibliothek über die Cloud genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Verwendet werden kann beispielsweise:&lt;br /&gt;
&lt;br /&gt;
* Xbox Controller&lt;br /&gt;
* Bluetooth-Controller&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* Keine leistungsstarke Hardware notwendig&lt;br /&gt;
* Große virtuelle Leinwand&lt;br /&gt;
* 4K-Gaming&lt;br /&gt;
* OLED-Bildqualität&lt;br /&gt;
&lt;br /&gt;
== Windows-PC mit Moonlight und Sunshine ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung7.jpg|Windows Desktop über Moonlight]]&lt;br /&gt;
&lt;br /&gt;
Neben Cloud-Gaming nutze ich häufig Moonlight und Sunshine.&lt;br /&gt;
&lt;br /&gt;
Dadurch lässt sich der komplette Windows-PC nahezu latenzfrei auf die Vision Pro streamen.&lt;br /&gt;
&lt;br /&gt;
Typische Einsatzbereiche:&lt;br /&gt;
&lt;br /&gt;
* Arbeiten mit Blender&lt;br /&gt;
* Videoschnitt&lt;br /&gt;
* Office-Anwendungen&lt;br /&gt;
* Gaming mit Maus und Tastatur&lt;br /&gt;
&lt;br /&gt;
Durch Headless-Dongles sind sogar virtuelle Auflösungen bis 8K möglich.&lt;br /&gt;
&lt;br /&gt;
== Remote-Arbeit und Fernzugriff ==&lt;br /&gt;
&lt;br /&gt;
Über Microsoft Remote Desktop oder aktuelle TestFlight-Versionen von Windows Remote Apps kann auf entfernte Rechner zugegriffen werden.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* Arbeiten von unterwegs&lt;br /&gt;
* VPN-Unterstützung&lt;br /&gt;
* Bluetooth-Maus und Tastatur&lt;br /&gt;
* Hohe Privatsphäre in öffentlichen Bereichen&lt;br /&gt;
&lt;br /&gt;
== Meetings und Persona ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung9.jpg|Persona Avatar]]&lt;br /&gt;
&lt;br /&gt;
Für Videokonferenzen nutze ich vor allem:&lt;br /&gt;
&lt;br /&gt;
* Zoom&lt;br /&gt;
* Cisco Webex&lt;br /&gt;
&lt;br /&gt;
Die Persona-Technologie von Apple erstellt dabei einen digitalen Avatar auf Basis des eigenen Gesichts.&lt;br /&gt;
&lt;br /&gt;
Besondere Merkmale:&lt;br /&gt;
&lt;br /&gt;
* Echtzeit-Gesichtserfassung&lt;br /&gt;
* Augenbewegungen werden übertragen&lt;br /&gt;
* Handtracking in Meetings&lt;br /&gt;
* Flexible Anordnung von Fenstern im Raum&lt;br /&gt;
&lt;br /&gt;
== Social Media und Surfen ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung10.jpg|Social Media und InSpaze]]&lt;br /&gt;
&lt;br /&gt;
Die Vision Pro eignet sich auch hervorragend für den täglichen Medienkonsum.&lt;br /&gt;
&lt;br /&gt;
Typische Anwendungen:&lt;br /&gt;
&lt;br /&gt;
* Facebook&lt;br /&gt;
* LinkedIn&lt;br /&gt;
* WhatsApp&lt;br /&gt;
* Messenger&lt;br /&gt;
* Safari&lt;br /&gt;
&lt;br /&gt;
Mit visionOS 26 wurde außerdem Eyescrolling eingeführt, wodurch Webseiten allein mit den Augen gescrollt werden können.&lt;br /&gt;
&lt;br /&gt;
Über Plattformen wie InSpaze lassen sich zudem Kontakte mit anderen Vision-Pro-Nutzern pflegen.&lt;br /&gt;
&lt;br /&gt;
== Native Spiele und Apple Arcade ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung11.jpg|Gaming auf der Vision Pro]]&lt;br /&gt;
&lt;br /&gt;
Der App Store bietet eine wachsende Auswahl nativer Spiele.&lt;br /&gt;
&lt;br /&gt;
Zu meinen Favoriten gehören:&lt;br /&gt;
&lt;br /&gt;
* Synth Riders&lt;br /&gt;
* Game Room&lt;br /&gt;
* Fishing Haven&lt;br /&gt;
* Demeo&lt;br /&gt;
* Gears &amp;amp; Goo&lt;br /&gt;
* Lego Builder&#039;s Journey&lt;br /&gt;
* ScummVM&lt;br /&gt;
&lt;br /&gt;
Besonders Demeo zeigt eindrucksvoll die Möglichkeiten von Mixed Reality und Eye-Tracking.&lt;br /&gt;
&lt;br /&gt;
== PCVR mit ALVR und PSVR2 Controllern ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung12.jpg|PCVR über ALVR]]&lt;br /&gt;
&lt;br /&gt;
Mit ALVR wird die Vision Pro zu einem vollwertigen PCVR-Headset.&lt;br /&gt;
&lt;br /&gt;
Dadurch erhält man Zugriff auf:&lt;br /&gt;
&lt;br /&gt;
* SteamVR&lt;br /&gt;
* VRChat&lt;br /&gt;
* Bigscreen&lt;br /&gt;
* Resonite&lt;br /&gt;
* Rec Room&lt;br /&gt;
&lt;br /&gt;
Sowie auf zahlreiche PCVR-Spiele wie:&lt;br /&gt;
&lt;br /&gt;
* Half-Life: Alyx&lt;br /&gt;
* Beat Saber&lt;br /&gt;
* Walkabout Mini Golf&lt;br /&gt;
* No Man&#039;s Sky&lt;br /&gt;
* Alien Rogue Incursion&lt;br /&gt;
&lt;br /&gt;
Durch die Unterstützung der PSVR2 Controller seit visionOS 26 wird die Nutzung deutlich komfortabler.&lt;br /&gt;
&lt;br /&gt;
== Weitere spannende Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung13.jpg|Exploring Mars und weitere Anwendungen]]&lt;br /&gt;
&lt;br /&gt;
Neben den großen Einsatzgebieten nutze ich regelmäßig weitere Anwendungen:&lt;br /&gt;
&lt;br /&gt;
* Exploring Mars&lt;br /&gt;
* Dinosaurier-Demo&lt;br /&gt;
* Fly&lt;br /&gt;
* Polycam&lt;br /&gt;
* Spatial Gallery&lt;br /&gt;
&lt;br /&gt;
Sie zeigen eindrucksvoll die Möglichkeiten von Mixed Reality und Spatial Computing.&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
Nach über einem Jahr Nutzung ist die Apple Vision Pro für mich weit mehr als nur ein Headset.&lt;br /&gt;
&lt;br /&gt;
Sie vereint:&lt;br /&gt;
&lt;br /&gt;
* Arbeitsplatz&lt;br /&gt;
* Heimkino&lt;br /&gt;
* Spielkonsole&lt;br /&gt;
* Kreativwerkzeug&lt;br /&gt;
* Kommunikationsplattform&lt;br /&gt;
&lt;br /&gt;
in einem einzigen Gerät.&lt;br /&gt;
&lt;br /&gt;
Gerade die Kombination aus hochauflösenden OLED-Displays, Eye-Tracking, Handtracking, Mixed Reality und der Möglichkeit, klassische PC-Anwendungen sowie PCVR zu nutzen, macht die Vision Pro für mich zu einem der spannendsten Geräte der letzten Jahre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Apple Vision Pro]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Anwendungsgebiete_der_Apple_Vision_Pro&amp;diff=1611</id>
		<title>Anwendungsgebiete der Apple Vision Pro</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Anwendungsgebiete_der_Apple_Vision_Pro&amp;diff=1611"/>
		<updated>2026-06-07T21:09:56Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:Anwendung1.jpg|Anwendungsgebiete der Apple Vision Pro]]&lt;br /&gt;
{{Hinweis|&lt;br /&gt;
Dieser Artikel beschreibt persönliche Erfahrungen nach über einem Jahr täglicher Nutzung der Apple Vision Pro unter visionOS 26. Die genannten Anwendungen und Funktionen spiegeln reale Einsatzszenarien aus den Bereichen Arbeit, Unterhaltung, Gaming, 3D-Entwicklung und Kommunikation wider.&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Anwendungsgebiete der Apple Vision Pro =&lt;br /&gt;
&lt;br /&gt;
Die Apple Vision Pro wird häufig auf ihre Rolle als Mixed-Reality-Headset reduziert. Nach über einem Jahr täglicher Nutzung hat sich für mich jedoch gezeigt, dass sie deutlich mehr ist: Kino, Arbeitsplatz, Spielkonsole, Kreativwerkzeug und Kommunikationsplattform in einem Gerät.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt die Anwendungsgebiete, die ich persönlich regelmäßig nutze.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Kino-Erlebnis mit der Apple Vision Pro ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung2.jpg|Videowiedergabe mit Skybox VR]]&lt;br /&gt;
&lt;br /&gt;
Der Bereich Entertainment ist für mich einer der wichtigsten Einsatzzwecke der Vision Pro.&lt;br /&gt;
&lt;br /&gt;
Dank hochauflösender OLED-Displays bietet das Gerät eine Bildqualität, die sich mit einer großen Kinoleinwand vergleichen lässt. Filme und Serien profitieren von tiefem Schwarz, kräftigen Farben und einer enormen Bildgröße.&lt;br /&gt;
&lt;br /&gt;
Unterstützt werden unter anderem:&lt;br /&gt;
&lt;br /&gt;
* Apple TV+&lt;br /&gt;
* Disney+&lt;br /&gt;
* Netflix&lt;br /&gt;
* Amazon Prime Video&lt;br /&gt;
* YouTube&lt;br /&gt;
* Mediatheken&lt;br /&gt;
&lt;br /&gt;
Mit Apps wie Skybox VR oder Moon Player lassen sich außerdem eigene Videos in 2D, 3D und 4K wiedergeben.&lt;br /&gt;
&lt;br /&gt;
Besonders beeindruckend sind die Immersive Videos von Apple, die Inhalte in 8K, 180 Grad und stereoskopischem 3D darstellen.&lt;br /&gt;
&lt;br /&gt;
== Spatiale Erinnerungen ==&lt;br /&gt;
&lt;br /&gt;
Ein besonderes Merkmal der Vision Pro sind spatiale Fotos und Videos.&lt;br /&gt;
&lt;br /&gt;
Durch die räumliche Darstellung entsteht der Eindruck, wieder direkt an einem Ort zu stehen. Erinnerungen wirken dadurch deutlich intensiver als auf klassischen Bildschirmen.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* Räumliche Fotos in 3D betrachten&lt;br /&gt;
* Spatiale Videos aufnehmen&lt;br /&gt;
* Inhalte per SharePlay gemeinsam erleben&lt;br /&gt;
* Einsatzmöglichkeiten für Präsentationen und Employer Branding&lt;br /&gt;
&lt;br /&gt;
== 3D-Modelle und Mixed Reality ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung3.jpg|3D-Modelle in Mixed Reality]]&lt;br /&gt;
&lt;br /&gt;
Für die Arbeit mit Blender und 3D-Modellen ist die Vision Pro ein wertvolles Werkzeug.&lt;br /&gt;
&lt;br /&gt;
Modelle können direkt als USDZ-Dateien geladen und in der realen Umgebung dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
Mögliche Einsatzbereiche:&lt;br /&gt;
&lt;br /&gt;
* Qualitätskontrolle von 3D-Modellen&lt;br /&gt;
* Produktvisualisierung&lt;br /&gt;
* Architekturmodelle&lt;br /&gt;
* 3D-Scanning&lt;br /&gt;
* Mixed-Reality-Präsentationen&lt;br /&gt;
&lt;br /&gt;
Mit visionOS 26 werden zusätzlich auch die PlayStation VR2 Sense Controller unterstützt, wodurch Anwendungen wie Shapelab VR auf der Vision Pro nutzbar werden.&lt;br /&gt;
&lt;br /&gt;
== Virtueller Arbeitsplatz ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung5.jpg|Mac Virtual Display]]&lt;br /&gt;
&lt;br /&gt;
Der Mac Virtual Display gehört zu meinen meistgenutzten Funktionen.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* Ultrawide-Arbeitsfläche&lt;br /&gt;
* Platz wie auf mehreren 4K-Monitoren&lt;br /&gt;
* Hohe Bildschärfe&lt;br /&gt;
* Schutz der Privatsphäre unterwegs&lt;br /&gt;
* Ideal für Blender, Unity und Videoschnitt&lt;br /&gt;
&lt;br /&gt;
Besonders auf Reisen oder im Homeoffice ersetzt die Vision Pro für mich mehrere physische Monitore.&lt;br /&gt;
&lt;br /&gt;
== Cloud Gaming mit GeForce NOW ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung6.jpg|Gaming über GeForce NOW]]&lt;br /&gt;
&lt;br /&gt;
Mit GeForce NOW kann die komplette Steam-Bibliothek über die Cloud genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Verwendet werden kann beispielsweise:&lt;br /&gt;
&lt;br /&gt;
* Xbox Controller&lt;br /&gt;
* Bluetooth-Controller&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* Keine leistungsstarke Hardware notwendig&lt;br /&gt;
* Große virtuelle Leinwand&lt;br /&gt;
* 4K-Gaming&lt;br /&gt;
* OLED-Bildqualität&lt;br /&gt;
&lt;br /&gt;
== Windows-PC mit Moonlight und Sunshine ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung7.jpg|Windows Desktop über Moonlight]]&lt;br /&gt;
&lt;br /&gt;
Neben Cloud-Gaming nutze ich häufig Moonlight und Sunshine.&lt;br /&gt;
&lt;br /&gt;
Dadurch lässt sich der komplette Windows-PC nahezu latenzfrei auf die Vision Pro streamen.&lt;br /&gt;
&lt;br /&gt;
Typische Einsatzbereiche:&lt;br /&gt;
&lt;br /&gt;
* Arbeiten mit Blender&lt;br /&gt;
* Videoschnitt&lt;br /&gt;
* Office-Anwendungen&lt;br /&gt;
* Gaming mit Maus und Tastatur&lt;br /&gt;
&lt;br /&gt;
Durch Headless-Dongles sind sogar virtuelle Auflösungen bis 8K möglich.&lt;br /&gt;
&lt;br /&gt;
== Remote-Arbeit und Fernzugriff ==&lt;br /&gt;
&lt;br /&gt;
Über Microsoft Remote Desktop oder aktuelle TestFlight-Versionen von Windows Remote Apps kann auf entfernte Rechner zugegriffen werden.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* Arbeiten von unterwegs&lt;br /&gt;
* VPN-Unterstützung&lt;br /&gt;
* Bluetooth-Maus und Tastatur&lt;br /&gt;
* Hohe Privatsphäre in öffentlichen Bereichen&lt;br /&gt;
&lt;br /&gt;
== Meetings und Persona ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung9.jpg|Persona Avatar]]&lt;br /&gt;
&lt;br /&gt;
Für Videokonferenzen nutze ich vor allem:&lt;br /&gt;
&lt;br /&gt;
* Zoom&lt;br /&gt;
* Cisco Webex&lt;br /&gt;
&lt;br /&gt;
Die Persona-Technologie von Apple erstellt dabei einen digitalen Avatar auf Basis des eigenen Gesichts.&lt;br /&gt;
&lt;br /&gt;
Besondere Merkmale:&lt;br /&gt;
&lt;br /&gt;
* Echtzeit-Gesichtserfassung&lt;br /&gt;
* Augenbewegungen werden übertragen&lt;br /&gt;
* Handtracking in Meetings&lt;br /&gt;
* Flexible Anordnung von Fenstern im Raum&lt;br /&gt;
&lt;br /&gt;
== Social Media und Surfen ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung10.jpg|Social Media und InSpaze]]&lt;br /&gt;
&lt;br /&gt;
Die Vision Pro eignet sich auch hervorragend für den täglichen Medienkonsum.&lt;br /&gt;
&lt;br /&gt;
Typische Anwendungen:&lt;br /&gt;
&lt;br /&gt;
* Facebook&lt;br /&gt;
* LinkedIn&lt;br /&gt;
* WhatsApp&lt;br /&gt;
* Messenger&lt;br /&gt;
* Safari&lt;br /&gt;
&lt;br /&gt;
Mit visionOS 26 wurde außerdem Eyescrolling eingeführt, wodurch Webseiten allein mit den Augen gescrollt werden können.&lt;br /&gt;
&lt;br /&gt;
Über Plattformen wie InSpaze lassen sich zudem Kontakte mit anderen Vision-Pro-Nutzern pflegen.&lt;br /&gt;
&lt;br /&gt;
== Native Spiele und Apple Arcade ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung11.jpg|Gaming auf der Vision Pro]]&lt;br /&gt;
&lt;br /&gt;
Der App Store bietet eine wachsende Auswahl nativer Spiele.&lt;br /&gt;
&lt;br /&gt;
Zu meinen Favoriten gehören:&lt;br /&gt;
&lt;br /&gt;
* Synth Riders&lt;br /&gt;
* Game Room&lt;br /&gt;
* Fishing Haven&lt;br /&gt;
* Demeo&lt;br /&gt;
* Gears &amp;amp; Goo&lt;br /&gt;
* Lego Builder&#039;s Journey&lt;br /&gt;
* ScummVM&lt;br /&gt;
&lt;br /&gt;
Besonders Demeo zeigt eindrucksvoll die Möglichkeiten von Mixed Reality und Eye-Tracking.&lt;br /&gt;
&lt;br /&gt;
== PCVR mit ALVR und PSVR2 Controllern ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung12.jpg|PCVR über ALVR]]&lt;br /&gt;
&lt;br /&gt;
Mit ALVR wird die Vision Pro zu einem vollwertigen PCVR-Headset.&lt;br /&gt;
&lt;br /&gt;
Dadurch erhält man Zugriff auf:&lt;br /&gt;
&lt;br /&gt;
* SteamVR&lt;br /&gt;
* VRChat&lt;br /&gt;
* Bigscreen&lt;br /&gt;
* Resonite&lt;br /&gt;
* Rec Room&lt;br /&gt;
&lt;br /&gt;
Sowie auf zahlreiche PCVR-Spiele wie:&lt;br /&gt;
&lt;br /&gt;
* Half-Life: Alyx&lt;br /&gt;
* Beat Saber&lt;br /&gt;
* Walkabout Mini Golf&lt;br /&gt;
* No Man&#039;s Sky&lt;br /&gt;
* Alien Rogue Incursion&lt;br /&gt;
&lt;br /&gt;
Durch die Unterstützung der PSVR2 Controller seit visionOS 26 wird die Nutzung deutlich komfortabler.&lt;br /&gt;
&lt;br /&gt;
== Weitere spannende Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung13.jpg|Exploring Mars und weitere Anwendungen]]&lt;br /&gt;
&lt;br /&gt;
Neben den großen Einsatzgebieten nutze ich regelmäßig weitere Anwendungen:&lt;br /&gt;
&lt;br /&gt;
* Exploring Mars&lt;br /&gt;
* Dinosaurier-Demo&lt;br /&gt;
* Fly&lt;br /&gt;
* Polycam&lt;br /&gt;
* Spatial Gallery&lt;br /&gt;
&lt;br /&gt;
Sie zeigen eindrucksvoll die Möglichkeiten von Mixed Reality und Spatial Computing.&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
Nach über einem Jahr Nutzung ist die Apple Vision Pro für mich weit mehr als nur ein Headset.&lt;br /&gt;
&lt;br /&gt;
Sie vereint:&lt;br /&gt;
&lt;br /&gt;
* Arbeitsplatz&lt;br /&gt;
* Heimkino&lt;br /&gt;
* Spielkonsole&lt;br /&gt;
* Kreativwerkzeug&lt;br /&gt;
* Kommunikationsplattform&lt;br /&gt;
&lt;br /&gt;
in einem einzigen Gerät.&lt;br /&gt;
&lt;br /&gt;
Gerade die Kombination aus hochauflösenden OLED-Displays, Eye-Tracking, Handtracking, Mixed Reality und der Möglichkeit, klassische PC-Anwendungen sowie PCVR zu nutzen, macht die Vision Pro für mich zu einem der spannendsten Geräte der letzten Jahre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Apple Vision Pro]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Anwendungsgebiete_der_Apple_Vision_Pro&amp;diff=1610</id>
		<title>Anwendungsgebiete der Apple Vision Pro</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Anwendungsgebiete_der_Apple_Vision_Pro&amp;diff=1610"/>
		<updated>2026-06-07T21:07:10Z</updated>

		<summary type="html">&lt;p&gt;Gargi: /* Remote-Arbeit und Fernzugriff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Datei:Anwendung1.jpg|Anwendungsgebiete der Apple Vision Pro]]&lt;br /&gt;
&lt;br /&gt;
= Anwendungsgebiete der Apple Vision Pro =&lt;br /&gt;
&lt;br /&gt;
Die Apple Vision Pro wird häufig auf ihre Rolle als Mixed-Reality-Headset reduziert. Nach über einem Jahr täglicher Nutzung hat sich für mich jedoch gezeigt, dass sie deutlich mehr ist: Kino, Arbeitsplatz, Spielkonsole, Kreativwerkzeug und Kommunikationsplattform in einem Gerät.&lt;br /&gt;
&lt;br /&gt;
Dieser Artikel beschreibt die Anwendungsgebiete, die ich persönlich regelmäßig nutze.&lt;br /&gt;
&lt;br /&gt;
__TOC__&lt;br /&gt;
&lt;br /&gt;
== Kino-Erlebnis mit der Apple Vision Pro ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung2.jpg|Videowiedergabe mit Skybox VR]]&lt;br /&gt;
&lt;br /&gt;
Der Bereich Entertainment ist für mich einer der wichtigsten Einsatzzwecke der Vision Pro.&lt;br /&gt;
&lt;br /&gt;
Dank hochauflösender OLED-Displays bietet das Gerät eine Bildqualität, die sich mit einer großen Kinoleinwand vergleichen lässt. Filme und Serien profitieren von tiefem Schwarz, kräftigen Farben und einer enormen Bildgröße.&lt;br /&gt;
&lt;br /&gt;
Unterstützt werden unter anderem:&lt;br /&gt;
&lt;br /&gt;
* Apple TV+&lt;br /&gt;
* Disney+&lt;br /&gt;
* Netflix&lt;br /&gt;
* Amazon Prime Video&lt;br /&gt;
* YouTube&lt;br /&gt;
* Mediatheken&lt;br /&gt;
&lt;br /&gt;
Mit Apps wie Skybox VR oder Moon Player lassen sich außerdem eigene Videos in 2D, 3D und 4K wiedergeben.&lt;br /&gt;
&lt;br /&gt;
Besonders beeindruckend sind die Immersive Videos von Apple, die Inhalte in 8K, 180 Grad und stereoskopischem 3D darstellen.&lt;br /&gt;
&lt;br /&gt;
== Spatiale Erinnerungen ==&lt;br /&gt;
&lt;br /&gt;
Ein besonderes Merkmal der Vision Pro sind spatiale Fotos und Videos.&lt;br /&gt;
&lt;br /&gt;
Durch die räumliche Darstellung entsteht der Eindruck, wieder direkt an einem Ort zu stehen. Erinnerungen wirken dadurch deutlich intensiver als auf klassischen Bildschirmen.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* Räumliche Fotos in 3D betrachten&lt;br /&gt;
* Spatiale Videos aufnehmen&lt;br /&gt;
* Inhalte per SharePlay gemeinsam erleben&lt;br /&gt;
* Einsatzmöglichkeiten für Präsentationen und Employer Branding&lt;br /&gt;
&lt;br /&gt;
== 3D-Modelle und Mixed Reality ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung3.jpg|3D-Modelle in Mixed Reality]]&lt;br /&gt;
&lt;br /&gt;
Für die Arbeit mit Blender und 3D-Modellen ist die Vision Pro ein wertvolles Werkzeug.&lt;br /&gt;
&lt;br /&gt;
Modelle können direkt als USDZ-Dateien geladen und in der realen Umgebung dargestellt werden.&lt;br /&gt;
&lt;br /&gt;
Mögliche Einsatzbereiche:&lt;br /&gt;
&lt;br /&gt;
* Qualitätskontrolle von 3D-Modellen&lt;br /&gt;
* Produktvisualisierung&lt;br /&gt;
* Architekturmodelle&lt;br /&gt;
* 3D-Scanning&lt;br /&gt;
* Mixed-Reality-Präsentationen&lt;br /&gt;
&lt;br /&gt;
Mit visionOS 26 werden zusätzlich auch die PlayStation VR2 Sense Controller unterstützt, wodurch Anwendungen wie Shapelab VR auf der Vision Pro nutzbar werden.&lt;br /&gt;
&lt;br /&gt;
== Virtueller Arbeitsplatz ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung5.jpg|Mac Virtual Display]]&lt;br /&gt;
&lt;br /&gt;
Der Mac Virtual Display gehört zu meinen meistgenutzten Funktionen.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* Ultrawide-Arbeitsfläche&lt;br /&gt;
* Platz wie auf mehreren 4K-Monitoren&lt;br /&gt;
* Hohe Bildschärfe&lt;br /&gt;
* Schutz der Privatsphäre unterwegs&lt;br /&gt;
* Ideal für Blender, Unity und Videoschnitt&lt;br /&gt;
&lt;br /&gt;
Besonders auf Reisen oder im Homeoffice ersetzt die Vision Pro für mich mehrere physische Monitore.&lt;br /&gt;
&lt;br /&gt;
== Cloud Gaming mit GeForce NOW ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung6.jpg|Gaming über GeForce NOW]]&lt;br /&gt;
&lt;br /&gt;
Mit GeForce NOW kann die komplette Steam-Bibliothek über die Cloud genutzt werden.&lt;br /&gt;
&lt;br /&gt;
Verwendet werden kann beispielsweise:&lt;br /&gt;
&lt;br /&gt;
* Xbox Controller&lt;br /&gt;
* Bluetooth-Controller&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* Keine leistungsstarke Hardware notwendig&lt;br /&gt;
* Große virtuelle Leinwand&lt;br /&gt;
* 4K-Gaming&lt;br /&gt;
* OLED-Bildqualität&lt;br /&gt;
&lt;br /&gt;
== Windows-PC mit Moonlight und Sunshine ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung7.jpg|Windows Desktop über Moonlight]]&lt;br /&gt;
&lt;br /&gt;
Neben Cloud-Gaming nutze ich häufig Moonlight und Sunshine.&lt;br /&gt;
&lt;br /&gt;
Dadurch lässt sich der komplette Windows-PC nahezu latenzfrei auf die Vision Pro streamen.&lt;br /&gt;
&lt;br /&gt;
Typische Einsatzbereiche:&lt;br /&gt;
&lt;br /&gt;
* Arbeiten mit Blender&lt;br /&gt;
* Videoschnitt&lt;br /&gt;
* Office-Anwendungen&lt;br /&gt;
* Gaming mit Maus und Tastatur&lt;br /&gt;
&lt;br /&gt;
Durch Headless-Dongles sind sogar virtuelle Auflösungen bis 8K möglich.&lt;br /&gt;
&lt;br /&gt;
== Remote-Arbeit und Fernzugriff ==&lt;br /&gt;
&lt;br /&gt;
Über Microsoft Remote Desktop oder aktuelle TestFlight-Versionen von Windows Remote Apps kann auf entfernte Rechner zugegriffen werden.&lt;br /&gt;
&lt;br /&gt;
Vorteile:&lt;br /&gt;
&lt;br /&gt;
* Arbeiten von unterwegs&lt;br /&gt;
* VPN-Unterstützung&lt;br /&gt;
* Bluetooth-Maus und Tastatur&lt;br /&gt;
* Hohe Privatsphäre in öffentlichen Bereichen&lt;br /&gt;
&lt;br /&gt;
== Meetings und Persona ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung9.jpg|Persona Avatar]]&lt;br /&gt;
&lt;br /&gt;
Für Videokonferenzen nutze ich vor allem:&lt;br /&gt;
&lt;br /&gt;
* Zoom&lt;br /&gt;
* Cisco Webex&lt;br /&gt;
&lt;br /&gt;
Die Persona-Technologie von Apple erstellt dabei einen digitalen Avatar auf Basis des eigenen Gesichts.&lt;br /&gt;
&lt;br /&gt;
Besondere Merkmale:&lt;br /&gt;
&lt;br /&gt;
* Echtzeit-Gesichtserfassung&lt;br /&gt;
* Augenbewegungen werden übertragen&lt;br /&gt;
* Handtracking in Meetings&lt;br /&gt;
* Flexible Anordnung von Fenstern im Raum&lt;br /&gt;
&lt;br /&gt;
== Social Media und Surfen ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung10.jpg|Social Media und InSpaze]]&lt;br /&gt;
&lt;br /&gt;
Die Vision Pro eignet sich auch hervorragend für den täglichen Medienkonsum.&lt;br /&gt;
&lt;br /&gt;
Typische Anwendungen:&lt;br /&gt;
&lt;br /&gt;
* Facebook&lt;br /&gt;
* LinkedIn&lt;br /&gt;
* WhatsApp&lt;br /&gt;
* Messenger&lt;br /&gt;
* Safari&lt;br /&gt;
&lt;br /&gt;
Mit visionOS 26 wurde außerdem Eyescrolling eingeführt, wodurch Webseiten allein mit den Augen gescrollt werden können.&lt;br /&gt;
&lt;br /&gt;
Über Plattformen wie InSpaze lassen sich zudem Kontakte mit anderen Vision-Pro-Nutzern pflegen.&lt;br /&gt;
&lt;br /&gt;
== Native Spiele und Apple Arcade ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung11.jpg|Gaming auf der Vision Pro]]&lt;br /&gt;
&lt;br /&gt;
Der App Store bietet eine wachsende Auswahl nativer Spiele.&lt;br /&gt;
&lt;br /&gt;
Zu meinen Favoriten gehören:&lt;br /&gt;
&lt;br /&gt;
* Synth Riders&lt;br /&gt;
* Game Room&lt;br /&gt;
* Fishing Haven&lt;br /&gt;
* Demeo&lt;br /&gt;
* Gears &amp;amp; Goo&lt;br /&gt;
* Lego Builder&#039;s Journey&lt;br /&gt;
* ScummVM&lt;br /&gt;
&lt;br /&gt;
Besonders Demeo zeigt eindrucksvoll die Möglichkeiten von Mixed Reality und Eye-Tracking.&lt;br /&gt;
&lt;br /&gt;
== PCVR mit ALVR und PSVR2 Controllern ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung12.jpg|PCVR über ALVR]]&lt;br /&gt;
&lt;br /&gt;
Mit ALVR wird die Vision Pro zu einem vollwertigen PCVR-Headset.&lt;br /&gt;
&lt;br /&gt;
Dadurch erhält man Zugriff auf:&lt;br /&gt;
&lt;br /&gt;
* SteamVR&lt;br /&gt;
* VRChat&lt;br /&gt;
* Bigscreen&lt;br /&gt;
* Resonite&lt;br /&gt;
* Rec Room&lt;br /&gt;
&lt;br /&gt;
Sowie auf zahlreiche PCVR-Spiele wie:&lt;br /&gt;
&lt;br /&gt;
* Half-Life: Alyx&lt;br /&gt;
* Beat Saber&lt;br /&gt;
* Walkabout Mini Golf&lt;br /&gt;
* No Man&#039;s Sky&lt;br /&gt;
* Alien Rogue Incursion&lt;br /&gt;
&lt;br /&gt;
Durch die Unterstützung der PSVR2 Controller seit visionOS 26 wird die Nutzung deutlich komfortabler.&lt;br /&gt;
&lt;br /&gt;
== Weitere spannende Anwendungen ==&lt;br /&gt;
&lt;br /&gt;
[[Datei:Anwendung13.jpg|Exploring Mars und weitere Anwendungen]]&lt;br /&gt;
&lt;br /&gt;
Neben den großen Einsatzgebieten nutze ich regelmäßig weitere Anwendungen:&lt;br /&gt;
&lt;br /&gt;
* Exploring Mars&lt;br /&gt;
* Dinosaurier-Demo&lt;br /&gt;
* Fly&lt;br /&gt;
* Polycam&lt;br /&gt;
* Spatial Gallery&lt;br /&gt;
&lt;br /&gt;
Sie zeigen eindrucksvoll die Möglichkeiten von Mixed Reality und Spatial Computing.&lt;br /&gt;
&lt;br /&gt;
== Fazit ==&lt;br /&gt;
&lt;br /&gt;
Nach über einem Jahr Nutzung ist die Apple Vision Pro für mich weit mehr als nur ein Headset.&lt;br /&gt;
&lt;br /&gt;
Sie vereint:&lt;br /&gt;
&lt;br /&gt;
* Arbeitsplatz&lt;br /&gt;
* Heimkino&lt;br /&gt;
* Spielkonsole&lt;br /&gt;
* Kreativwerkzeug&lt;br /&gt;
* Kommunikationsplattform&lt;br /&gt;
&lt;br /&gt;
in einem einzigen Gerät.&lt;br /&gt;
&lt;br /&gt;
Gerade die Kombination aus hochauflösenden OLED-Displays, Eye-Tracking, Handtracking, Mixed Reality und der Möglichkeit, klassische PC-Anwendungen sowie PCVR zu nutzen, macht die Vision Pro für mich zu einem der spannendsten Geräte der letzten Jahre.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Apple Vision Pro]]&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:Anwendung6.jpg&amp;diff=1609</id>
		<title>Datei:Anwendung6.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:Anwendung6.jpg&amp;diff=1609"/>
		<updated>2026-06-07T21:06:54Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:Anwendung5.jpg&amp;diff=1608</id>
		<title>Datei:Anwendung5.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:Anwendung5.jpg&amp;diff=1608"/>
		<updated>2026-06-07T21:06:43Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:Anwendung7.jpg&amp;diff=1607</id>
		<title>Datei:Anwendung7.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:Anwendung7.jpg&amp;diff=1607"/>
		<updated>2026-06-07T21:06:12Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:Anwendung9.jpg&amp;diff=1606</id>
		<title>Datei:Anwendung9.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:Anwendung9.jpg&amp;diff=1606"/>
		<updated>2026-06-07T21:05:07Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
	<entry>
		<id>https://www.gargi.org/index.php?title=Datei:Anwendung10.jpg&amp;diff=1605</id>
		<title>Datei:Anwendung10.jpg</title>
		<link rel="alternate" type="text/html" href="https://www.gargi.org/index.php?title=Datei:Anwendung10.jpg&amp;diff=1605"/>
		<updated>2026-06-07T21:04:28Z</updated>

		<summary type="html">&lt;p&gt;Gargi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Gargi</name></author>
	</entry>
</feed>