Arbeit mit Texturen: Unterschied zwischen den Versionen

Aus EEP Wiki
Wechseln zu: Navigation, Suche
 
(54 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
<b><font size="4">7. Arbeiten mit Texturen</font></b>
+
Dieser Artikel beschreibt den Umgang mit Texturen. Das Anmelden von Texturen in der Datei <tt>texturen.txt</tt> und damit das Verfügbarmachen für den Home-Nostruktor beschreibt der Artikel [[Schritt für Schritt - Arbeiten mit dem Home-Nostruktor 13.0]].
  
 +
Texturen sind die "Tapeten" der Modelle. Ihr Inhalt liegt in einer Bilddatei mit einer Zusammenstellung aus bearbeitetem Bild- und Fotomaterial oder eigens erstelltem fotorealistischem Material. Gute Texturen sind eine der Grundvoraussetzungen für ein gutes und realistisches Aussehen eines Modells.
  
 +
== Texturieren oder Auskonstruieren? ==
  
Wie in der Vorbereitung bereits erwähnt sind Texturen eine Zusammenstellung aus bearbeitetem Bild- und Fotomaterial bzw. eigens erstellten fotorealistischen Material. Die Texturen sind ein entscheidender Bestandteil, um unseren späteren Modell ein gutes und realistisches Aussehen zu verleihen. Der Einsatz von Texturen stellt ein Standardverfahren der Computergrafik zur Verbesserung der Qualität von dreidimensionalen Szenerien dar. Die grundlegende Motivation für den Einsatz von Texturen ist es, den Realismus in der Darstellung von komplexen Oberflächenstrukturen zu verbessern, ohne dabei die Komplexität des gegebenen polygonalen Modells zu erhöhen.  
+
Der Einsatz von Texturen stellt ein Standardverfahren der Computergrafik zur Verbesserung der Qualität von dreidimensionalen Szenerien dar. Ziel ist, den Realismus in der Darstellung von komplexen Oberflächenstrukturen zu verbessern, ohne dabei die Komplexität des gegebenen polygonalen Modells zu erhöhen.
  
Für die Erstellung der Texturen ist der Einsatz von Grafik- bzw. Bildbearbeitungsprogrammen unverzichtbar. Im Kapitel "Empfohlene Zusatzsoftware" sind einige solcher Programme aufgelistet. Die dort erwähnten Programme werden als "Open Source" angeboten und machen somit eine kostspielige Investition in Kaufsoftware zumindest vorerst überflüssig. Die Arbeit mit Grafikprogrammen ist je nach Programmtyp und -tiefe teilweise sehr komplex. Es ist hier am Besten sich zu Beginn der Texturarbeit verschiedene Programme herunterzuladen und diese einfach auszuprobieren. Oftmals merkt man intuitiv recht schnell, welches Programm  zu einem passt und welches eben eher weniger. Unser Kapitel zu "Arbeiten mit Texturen" wird den Teilsektor der Texturarbeit im HomeNos selbst behandeln. Für Hilfestellungen bei der Texturerstellung selbst stehen in den jeweiligen Grafikprogrammen Hilfetexte und teilweise auch Tutorials bereit.
+
Mit zunehmender Hardware-Leistung und wachsenden Ansprüchen an die Detaillierung der eep-Modelle ist seit einigen Jahren eine Tendenz zu feinerer konstruktiver Ausdifferenzierung der Modelle zu beobachten. Während es früher durchaus üblich war, z.B. ganze Gebäudeteile wie Fenster, Türen etc. auf eine Wand des Modells per Textur aufzutragen, wird heute allgemein erwartet, dass die Laibungen in der Wand, Tür- oder Fensterrahmen bis hin zu den einzelnen Fenstersprossen auskonstruiert werden. Das bedeutet einen höheren Konstruktionsaufwand und eine Vervielfältigung der Polygonzahl im Modell, verbunden mit der Atomisierung der Texturvorlage. Wo früher ein komplettes Fenster auf der Textur lag, liegen jetzt mehrere Hölzer in verschiedenen Maserungen und Farbschattierungen. Das Bauen wird so abstrakter, das Ergebnis dagegen realistischer.
  
 +
<center>[[Datei:Texturieren_Konstruieren.png]]</center>
  
<b><font size="4">7.1. Unterstütze Bilddateiformate</font></b>
+
Links: Komplette Fassadentextur aus der Frühzeit von eep. Mitte: Texturausschnitt mit Materialien für die Fensterkonstruktion bei einem Free-Modell (rechts). Der realistischere Effekt wird mit höherer Polygonanzahl erkauft.
  
  
Der HomeNos unterstützt die Bilddateiformate<br>
+
== Werkzeuge für die Textur-Erstellung == 
  
::.tga (Truevision Advanced Raster Graphics Array),<br>  
+
Für die Erstellung der Texturen ist der Einsatz von Grafik- bzw. Bildbearbeitungsprogrammen unverzichtbar. Im Kapitel <em>Empfohlene Zusatzsoftware</em>, Abschnitt [[Bildbearbeitung]] sind einige solcher Programme aufgelistet. Die dort erwähnten Programme werden als Open Source angeboten und machen somit eine kostspielige Investition in Kaufsoftware zumindest vorerst überflüssig. Die Arbeit mit Grafikprogrammen ist je nach Programmtyp und -mächtigkeit teilweise komplex.
  
::.dds (direct draw surface) und<br>
+
Dieser Artikel konzentriert sich auf die Texturarbeit im Home-Nostruktor selbst.
  
::.png (portable network graphics)<br>
 
  
 +
== Unterstütze Bilddateiformate ==
  
  
Alle drei Dateiformate zeichnen sich dadurch aus, dass sie mit sogenannte Alphakanälen arbeiten und diese abspeichern können. Dies ist für die Arbeit an einem Modell sehr wichtig, wie wir uns in einem kurzen Beispiel ansehen. Wir erinnern uns vielleicht an unsere Stadthaustextur im Kapitel "Arbeiten mit .kon.Dateien". Im folgenden sehen wir einen Ausschnitt der Textur. Dort ist die Fensterreihe im ersten Stockwerk und die Eingangstür nun mit einem Alphakanal belegt, der grün dargestellt wird:
+
Der Home-Nostruktor unterstützt diese Bilddateiformate:<br>
  
[[Datei:6.textur-mit-alpha.jpg]]
+
* .tga (Truevision Advanced Raster Graphics Array)
  
Der Texturausschnitt <b>mit dem Alphakanal</b> sieht auf eine .kon-Datei aufgebracht nun im 3D-Betrachter folgendermaßen aus:
+
* .dds (Direct draw surface)
  
[[Datei:6.textur-mit-alpha-3d-betrachter.jpg]]
+
* .png (Portable network graphics)<br>
  
und die gleiche .kon-Datei mit der Textur <b>ohne Alphakanal:</b>
 
  
[[Datei:6.textur-ohne-alpha-3d-betrachter.jpg]]
 
  
Denken wir nun daran, daß wir in unserem Stadthaus ggf. eine Inneneinrichtung modellieren möchten, die später im Modell sichtbar sein soll, können wir bereits erahnen wie wichtig die Unterstützung von Dateiformaten mit Alphakanal ist.
+
Alle drei Dateiformate zeichnen sich dadurch aus, dass sie mit Alphakanälen arbeiten und diese abspeichern können. Dies ist für die Arbeit an einem Modell sehr wichtig.  
  
<b><font size="4">7.2. Anlegen von Texturen</font></b>
 
  
 +
Die Abbildung zeigt die Fassade aus dem obigen Free-Modell. Für die letzte [[Levels_of_Details|LOD-Stufe]] wurde auf sämtliche Details verzichtet, weil sie aus großer Entfernung ohnehin nicht sichtbar wären. Damit die Fensteröffnungen aber nachts leuchten können, sind sie jetzt durchbrochen. Das geschieht mittels Alphakanal in der Grafikdatei. Hier (in Photo-Paint) ist der ausgestanzte Teil in Karodarstellung sichtbar.
 +
 +
<center>[[Datei:Alpha_01.png]]</center>
  
Neue Texturen für unser Modell legen wir im .kon-Dateien-Dialog mit der Schaltfläche [[Datei:img_25.jpg]] an. Wir erhalten nun folgendes Dialogfenster, in welchem wir die Eigenschaften der neuen Textur festlegen können:
+
Der Texturausschnitt sieht auf eine .kon-Datei aufgebracht (oder als Objekt eingefügt) nun im 3D-Betrachter folgendermaßen aus:
  
[[Datei:6.textur-neuetextur-anlegen.jpg]]
+
<center>[[Datei:Alpha_02.png]]</center>
  
 +
Hinter den Öffnungen sind teilweise leuchtende Scheiben oder eine Einfachtextur mit Vorhängen positioniert.
  
<b><font size="3">Parameter und Kurzbeschreibungen</font></b><br>
 
  
::<b><font color="blue">id()</font></b><br>
+
== Anlegen von Texturen ==
:: Unter diesem Parameter wird die eindeutige Textur-ID angegeben. Nur Ganzzahlen sind möglich. Null vor einer Zahl (wie bei Namen) ist kein gültiger Wert. Dieser Parameter muss unbedingt angegeben werden. Bei der Anlage der  :::Textur über unser Dialogfeld wird die ID der Textur automatisch vergeben. Möchten wir - aus welchen Gründen auch immer - bestimmte ID-Werte vergeben, können wir auf das "händische" Anlegen einer Textur zurückgreifen, was wir :::im Kapitel "Die Vorbereitung" bereits besprochen haben.
 
  
::<b><font color="blue">name()</font></b><br>
 
::Name der Datei mit dem Texturbild ohne Endung (*.tga, *.dds, *png). Der Name kann alphanumerisch sein, darf aber keine Leerzeichen und Umlaute enthalten. Für die Übersicht sinnvoll ist ein Name, der der Texturen-ID entspricht. ::Dieser Parameter muss unbedingt angegeben werden. Der Name ergibt sich bei der automatischen Anlage der Textur über das Dialogfeld aus dem Dateinamen unserer Bilddatei, die wir über die Schaltfläche "Texture Bitmap" ::hinzufügen.
 
  
::<b>automipmap()</b><br>
+
Neue Texturen legen Sie im .kon-Dateien-Dialog mit Klick auf das Symbol [[Datei:img_25.jpg]] in der Fußzeile des Home-Nostruktors an. Es erscheint einDialogfenster, in welchem Sie die Eigenschaften der neuen Textur festlegen:
::Gibt an, dass Mipmaplevel mit verringerter Auflösung automatisch erstellt worden sind. Es muss kein Wert übergeben werden, um das Mipmapping tatsächlich einzuschalten.
 
  
::<b><font color="red">opacity()</font></b><br>
+
<center>[[Datei:neue_Textur.png]]</center>
:: <font color="red">Gibt an, dass und in welchem Grade eine Textur eine Fläche durchsichtig erscheinen lassen soll. Gültige Werte sind 0.0 (unsichtbar) bis 1.0 (opak). Dieser Parameter wird nur dann benutzt, wenn die Textur tatsächlich eine ::Opazität, also Transparenzgrad erhalten soll, wie z.B. bei Glasscheiben usw.</font>
 
  
::<b><font color="red">billboarding()</font></b><br>
 
:: <font color="red">Mit diesem Parameter wird die Fläche der Polygone durchbrochen. Wird nur dann benutzt, wenn die Textur Durchbrüche aufweist (Fensteraussparungen, Geländerzwischenräume usw.)</font>
 
  
::<b><font color="red">repeat_s()</font></b><br>
+
=== Parameter und Kurzbeschreibungen ===
:: <font color="red">Wenn dieser Parameter vorhanden ist, werden die Texturen in X-Richtung wiederholt, sobald sie den Bereich 0.0 - 1.0 überschreiten. Zum Parameter wird kein Wert übergeben.</font>
 
  
::<b><font color="red">repeat_t()</font></b><br>
+
<b>id()</b><br>
::<font color="red">Wenn dieser Parameter vorhanden ist, werden die Texturen in Y-Richtung wiederholt, sobald sie den Bereich 0.0f- 1.0 überschreiten. Zum Parameter wird kein Wert übergeben.</font>
+
Unter diesem Parameter wird die eindeutige [[Schritt für Schritt - Arbeiten mit dem Home-Nostruktor 13.0|Textur-ID (s. Artikel)]] angegeben.  
  
::<b>magfilter()</b><br>
+
<b>name()</b><br>
::Gibt den Magnification-Filter an. Gültige Werte sind: 0 und 1. Dieser Parameter muss unbedingt angegeben werden!
+
Name der Datei mit dem Texturbild ohne Endung <tt>(*.tga, *.dds, *png)</tt>. Der Name ist alphanumerisch, darf jedoch keine Leerzeichen oder Umlaute enthalten. Für die Übersicht sinnvoll ist ein Name, der der Texturen-ID entspricht.  
 +
Dieser Parameter muss unbedingt angegeben werden. Wenn Sie keinen Namen vergeben: Der Name ergibt sich bei der automatischen Anlage der Textur über das Dialogfeld aus dem Dateinamen der Bilddatei, die Sie über die Schaltfläche <tt>Texture Bitmap</tt> hinzufügen.
  
::<b>minfilter()</b><br>
+
<b>automipmap()</b><br>
::Gibt den Minification-Filter an. Gültige Werte sind: 0, 1, 2, 3, 4, 5. Dieser Parameter muss unbedingt angegeben werden!
+
<pre>Für Anfänger unerheblich: Diesen Eintrag verwenden, ohne ihn verstehen zu wollen.</pre><br/>
 +
Gibt an, dass Mipmaplevel mit verringerter Auflösung automatisch erstellt werden. Es muss kein Wert übergeben werden, um das Mipmapping tatsächlich einzuschalten.
  
:<b><font color="blue">blaue Parameter</font></b> <font color="blue">= automatisch generiert [id()] bzw. von Dateiname der verwendeten Bilddatei [name()]</font><br>
+
<b>opacity()</b><br>
:<b><font color="red">rote Parameter</font></b> <font color="red">= im Texturdialog editierbar</font><br>
+
<pre>Für Anfänger unerheblich: Diesen Eintrag verwenden, ohne ihn verstehen zu wollen.</pre><br/>
:<b>schwarze Parameter</b> = im automatisierten Verfahren nicht vorgesehen<br>
+
Gibt an, dass und in welchem Grade eine Textur eine Fläche durchsichtig erscheinen lassen soll. Gültige Werte sind 0.0 (unsichtbar) bis 1.0 (opak). Dieser Parameter wird nur dann benutzt, wenn die Textur tatsächlich komplett eine Opazität, also einen Transparenzgrad erhalten soll. Wenn nur Teile der Textur transparent sein sollen, wird ein anderes verfahren angewendet.
  
 +
<b>billboarding()</b><br>
 +
<pre>Für Anfänger wichtig.</pre><br/>
 +
Mit diesem Parameter wird die Fläche der Polygone durchbrochen. Wird nur dann benutzt, wenn die Textur Durchbrüche aufweist (Fensteraussparungen, Geländerzwischenräume usw.).
  
<b><font size="4">Erklärungen zu den Texturparametern:</font></b>
+
<b>repeat_s()</b><br>
 +
<pre>Für Anfänger wichtig.</pre><br/>
 +
Wenn dieser Parameter vorhanden ist, werden die Texturen in X-Richtung wiederholt, sobald sie den Bereich 0.0 - 1.0 überschreiten. Zum Parameter wird kein Wert übergeben.
 +
 
 +
<b>repeat_t()</b><br>
 +
<pre>Für Anfänger wichtig.</pre><br/>
 +
Wenn dieser Parameter vorhanden ist, werden die Texturen in Y-Richtung wiederholt, sobald sie den Bereich 0.0 - 1.0 überschreiten. Zum Parameter wird kein Wert übergeben.
 +
 
 +
<b>magfilter()</b><br>
 +
<pre>Für Anfänger unerheblich: Diesen Eintrag verwenden, ohne ihn verstehen zu wollen.</pre><br/>
 +
Gibt den Magnification-Filter an. Gültige Werte sind: 0 und 1. Dieser Parameter muss angegeben werden.
 +
 
 +
<b>minfilter()</b><br>
 +
<pre>Für Anfänger unerheblich: Diesen Eintrag verwenden, ohne ihn verstehen zu wollen.</pre><br/>
 +
Gibt den Minification-Filter an. Gültige Werte sind: 0, 1, 2, 3, 4, 5.  Dieser Parameter muss angegeben werden.
 +
 
 +
 
 +
=== Erklärungen zu den Texturparametern ===
  
  
 
<b><u>Mipmapping</u> (automipmap)</b>
 
<b><u>Mipmapping</u> (automipmap)</b>
  
Mipmapping bezeichnet eine Technik, bei der Texturen in größeren Entfernungen mit verringerter Auflösung dargestellt werden. Dies kann Flimmereffekte beseitigen und gibt bessere Kontrolle über die Darstellung von Objekten in größerer Entfernung. Mit dem Parameter automipmap() werden die Mipmap-Level automatisch berechnet, indem die Farbwerte jeweils vierer Texel zu einem verrechnet werden (Einfache Mittelung). Mit dem Schlüsselwort "MipMapLevel" hat man die Möglichkeit von Hand erzeugte Mipmaplevel anzugeben, allerdings wird dies nicht mehr praktiziert, da diese über das DDS-Tool automatisch erzeugt und mitgespeichert werden.
+
Bezeichnet eine Technik, bei der Texturen in größeren Entfernungen mit verringerter Auflösung dargestellt werden. Dies kann Flimmereffekte beseitigen und gibt bessere Kontrolle über die Darstellung von Objekten in größerer Entfernung. Mit dem Parameter automipmap() werden die Mipmap-Level automatisch berechnet, indem die Farbwerte jeweils vierer Texel zu einem verrechnet werden (Einfache Mittelung). Mit dem Schlüsselwort "MipMapLevel" hat man die Möglichkeit, von Hand erzeugte Mipmaplevel anzugeben, allerdings wird dies nicht mehr praktiziert, da diese über das DDS-Tool automatisch erzeugt und mitgespeichert werden.
  
  
Zeile 88: Zeile 105:
 
<b><u>Opazität</u> (opacity)</b>
 
<b><u>Opazität</u> (opacity)</b>
  
Diese Einstellung ist weit weniger universell verwendbar, als man vielleicht zunächst meinen könnte. Eine Textur mit einer Opazität = 1 wird zwar in Anteilen die Szenerie hinter ihr sichtbar sein lassen, jedoch betrifft das nur die Polygone, die zum Zeichenzeitpunkt der halb durchsichtigen Fläche bereits gezeichnet wurden. Da Modelle in der Regel nicht von hinten nach vorne gezeichnet werden wird das Bild nicht immer korrekt erscheinen. Diese Einstellung war ursprünglich nur für Rauchwolken gedacht.
+
Diese Einstellung ist weit weniger universell verwendbar, als es zunächst scheint. Eine Textur mit einer Opazität = 1 wird zwar in Anteilen die Szenerie hinter ihr sichtbar sein lassen, jedoch betrifft das nur die Polygone, die zum Zeichenzeitpunkt der halb durchsichtigen Fläche bereits gezeichnet wurden. Da Modelle in der Regel nicht von hinten nach vorne gezeichnet werden, wird das Bild nicht immer korrekt erscheinen. Diese Einstellung war ursprünglich nur für Rauchwolken gedacht.
  
  
Zeile 94: Zeile 111:
 
<b><u>Billboarding:</u></b>
 
<b><u>Billboarding:</u></b>
  
Texel mit der Farbe RGB: 0,0,0 (schwarz) werden nicht gezeichnet. Man sieht dann an diesen Stellen die Szenerie dahinter. Beim Auto-Mipmapping können hier Probleme auftreten, da vollautomatisch nicht immer korrekt bestimmt werden kann, ob ein Texel jetzt unsichtbar ist, oder nicht. Etwa, wenn zwei unsichtbare und zwei sichtbare zu einem verrechnet werden. Dieser Effekt bildet unschöne schwarze Ränder an den Stellen, wo die Grenze zwischen den sichtbaren Flächen und Durchbrüchen ist, kann aber sehr leicht vermieden werden.
+
Texel mit der Farbe RGB: 0,0,0 (schwarz) werden nicht gezeichnet. Man sieht dann an diesen Stellen die Szenerie dahinter. Beim Auto-Mipmapping können hier Probleme auftreten, da vollautomatisch nicht immer korrekt bestimmt werden kann, ob ein Texel jetzt unsichtbar ist, oder nicht. Etwa, wenn zwei unsichtbare und zwei sichtbare zu einem verrechnet werden. Dieser Effekt bildet unschöne schwarze Ränder an den Stellen, wo die Grenze zwischen den sichtbaren Flächen und Durchbrüchen liegt, kann aber sehr leicht vermieden werden.
  
  
  
<b><u>Textuhrwiederholungen</u> (repeat_s, repeat_ t)</b>
+
<b><u>Texturwiederholungen</u> (repeat_s, repeat_ t)</b>
  
Mit den Parametern repeat_s(), repeat_t() gibt man an, dass die Textur in X- bzw. Y-Richtung wiederholt werden soll, wenn die Texturkoordinaten den Bereich zwischen 0 und 1 überschreiten. Dies kann im Zusammenhang mit den Texturfiltern zu Problemen führen. Wenn beim Filtern Texelwerte herangezogen werden müssen, die jenseits der Texturgrenzen liegen. Hier können Streifen entstehen, die die Farbe der gegenüberliegenden Texturseite einmischen. Ohne "Repeat" hätten die verwendeten nicht existierenden Texel die Farben der letzten existierenden. Auch beim Einsatz des Billboardings kann es passieren, dass unsichtbare Texel an einem Texturrand wieder sichtbar werden. In solchen Fällen kann man entweder die Filtermethoden auf "NEAREST" stellen, auf die Wiederholung verzichten, oder aber die Textur so anordnen, dass auf beiden Seiten, dieselben Pixel verwendet werden. (Man kopiert hierzu die erste Pixelreihe der linken Seite und fügt diese auf der rechten Seite ein).
+
Mit den Parametern repeat_s() und/oder repeat_t() gibt man an, dass die Textur in X- bzw. Y-Richtung wiederholt werden soll, wenn die Texturkoordinaten den Bereich zwischen 0 und 1 überschreiten. Dies kann im Zusammenhang mit den Texturfiltern zu Problemen führen. Wenn beim Filtern Texelwerte herangezogen werden müssen, die jenseits der Texturgrenzen liegen. Hier können Streifen entstehen, die die Farbe der gegenüberliegenden Texturseite einmischen. Ohne "Repeat" hätten die verwendeten nicht existierenden Texel die Farben der letzten existierenden. Auch beim Einsatz des Billboardings kann es passieren, dass unsichtbare Texel an einem Texturrand wieder sichtbar werden. In solchen Fällen kann man entweder die Filtermethoden auf "NEAREST" stellen, auf die Wiederholung verzichten, oder aber die Textur so anordnen, dass auf beiden Seiten, dieselben Pixel verwendet werden. (Man kopiert hierzu die erste Pixelreihe der linken Seite und fügt diese auf der rechten Seite ein).
  
  
Zeile 106: Zeile 123:
 
<b><u>Texturfilter</u> (magfilter, minfilter)</b>
 
<b><u>Texturfilter</u> (magfilter, minfilter)</b>
  
Grundsätzlich steht der Renderer vor dem Problem, dass er entscheiden muss, welches Bildelement (Texel) einer, durch die 3D->2D Projektion unter einem Pixel zu liegen kommenden texturierten Fläche, die Farbwerte für das Pixel liefern soll. Es gibt zwei Situationen.
+
Grundsätzlich steht der Renderer vor dem Problem, dass er "entscheiden" muss, welches Bildelement (Texel) einer durch die 3D->2D Projektion unter einem Pixel zu liegen kommenden texturierten Fläche die Farbwerte für das Pixel liefern soll. Es gibt zwei Situationen.
  
:•In der einen sind die texturierten Flächen soweit weg, dass mehrere Texel in ein Pixel fallen: Hier wird der sogenannte Minifikation-Filter aktiv.<br>
+
* In der einen sind die texturierten Flächen soweit weg, dass mehrere Texel in ein Pixel fallen: Hier wird der sogenannte Minifikation-Filter aktiv.<br>
:•In der anderen überdeckt ein Texel mehrere Pixel: Hier wird die Darstellung durch den Magnifikationfilter beeinflusst.<br>
+
* In der anderen überdeckt ein Texel mehrere Pixel: Hier wird die Darstellung durch den Magnifikationfilter beeinflusst.<br>
  
<b>Werte für den Magnifikationfilter:</b>
+
<b><u>Werte für den Magnifikationfilter</u></b>
  
<b>0:</b> GL_NEAREST, es wird das Texel die Farbe eines Pixels bestimmen, dessen Zentrum dem Pixelzentrum am nächsten liegt.<br>
+
<b> 0 </b> GL_NEAREST: Es wird das Texel die Farbe eines Pixels bestimmen, dessen Zentrum dem Pixelzentrum am nächsten liegt.<br>
<b>1:</b> GL_LINEAR, es werden die vier einem Pixel zunächst liegenden Texel zur Farbbestimmung herangezogen<br>
+
<b> 1 </b> GL_LINEAR: Es werden die vier Pixel einem nächst liegenden Texel zur Farbbestimmung herangezogen.<br>
  
  
 +
<b><u>Werte für den Minifikationfilter</u></b><br/>
  
<b>Werte für den Minifikationfilter:</b>
+
<b><u> 0:</u></b> GL_NEAREST: Das dem Pixelmittelpunkt zunächst liegende Texel bestimmt die Farbe des Pixels.<br/>  
  
<b>0:</b> GL_NEAREST, das dem Pixelmittelpunkt zunächst liegende Texel bestimmt die Farbe des Pixels.  
+
<b><u>1:</u></b> GL_LINEAR: Die vier dem Pixelmittelpunkt zunächst liegenden Texel werden zur Farbe des Pixels verrechnet.<br/>
  
<b>1:</b> GL_LINEAR, die vier dem Pixelmittelpunkt zunächst liegenden Texel werden zur Farbe des Pixels verrechnet.  
+
<b><u>2:</u></b> GL_NEAREST_MIPMAP_NEAREST: Wie GL_NEAREST, nur werden abhängig von der Entfernung Mipmaplevel zur Farbbestimmung <br/>benutzt.  
  
<b>2:</b> GL_NEAREST_MIPMAP_NEAREST, wie GL_NEAREST, nur werden abhängig von der Entfernung Mipmaplevel zur Farbbestimmung benutzt.  
+
<b><u>3:</u></b> GL_LINEAR_MIPMAP_NEAREST: Es wird abhängig von der Entfernung ein Mipmaplevel benutzt, die endgültige Farbe des Pixels jedoch aus den vier Zunächstliegenden Texeln in dem Mipmaplevel gemittelt.  
  
<b>3:</b> GL_LINEAR_MIPMAP_NEAREST, es wird abhängig von der Entfernung ein Mipmaplevel benutzt, die endgültige Farbe des Pixels jedoch aus den vier Zunächstliegenden Texeln in dem Mipmaplevel gemittelt.  
+
<b><u>4:</u></b> GL_NEAREST_MIPMAP_LINEAR: Es werden die beiden am besten zu der Entfernung passenden Mipmaplevel benutzt. Relevant ist aber immer nur das Texel, das dem Pixelmittelpunkt am nächsten liegt.  
  
<b>4:</b> GL_NEAREST_MIPMAP_LINEAR, es werden die beiden am besten zu der Entfernung passenden Mipmaplevel benutzt. Relevant ist aber immer nur das Texel, was dem Pixelmittelpunkt am nächsten liegt.  
+
<b><u>5:</u></b> GL_LINEAR_MIPMAP_LINEAR: Es werden die beiden am besten zu der Entfernung passenden Mipmaplevel benutzt. Die Farbwerte die jeder Mipmaplevel beisteuert werden aus den dem Pixelzentrum nächstliegenden Texeln gemittelt.
  
<b>5:</b> GL_LINEAR_MIPMAP_LINEAR, es werden die beiden am besten zu der Entfernung passenden Mipmaplevel benutzt. Die Farbwerte die jeder Mipmaplevel beisteuert werden aus den dem Pixelzentrum nächstliegenden Texeln gemittelt.
 
  
 +
<b><u>repeat s+t max SUMME 15 aus s*t / 2 tex 2mal rendern</u></b> <font color="green">(ToDo: Wer versteht das? Fragt HW1, der Autor dieses Artikels)</font>
  
<b><font color="red">repeat s+t max SUMME 15 aus s*t
 
  
2 tex 2mal rendern</font></b>
+
=== Texturabbildung ===
  
 +
Die Texturabbildung beschreibt die Art und Weise, wie die Textur auf das Objekt gelegt wird.
  
 +
Man unterscheidet nach der Anzahl der Texturkoordinaten:<br>
  
<b><font size="4">7.3. Texturabbildung</font></b>
+
Im Home-Nostruktor werden fast ausschließlich zweidimensionale Texturen eingesetzt, daher beschränken sich die folgenden Erläuterungen auf diesen Fall. Dabei haben die Texturkoordinaten zwei Dimensionen "u" und "v", die hier aber zum besseren Verständnis (wie im Home-Nostruktor) als "x" und "y" bezeichnet werden. Diese zwei Koordinaten geben eine relative Position auf der Textur an:
  
Die Texturabbildung beschreibt die Art und Weise, wie eine gegebene Textur auf das darzustellende Objekt gelegt wird, das heißt die Zuordnung zwischen Texturkoordinaten und Objektkoordinaten.
 
  
Man unterscheidet nun nach der Anzahl der Texturkoordinaten:<br>
+
<center>[[Datei:1000-tga_uv-dialog-schaubild_zoom59.png]]</center>
 
 
:•eindimensionale Texturen<br>
 
:•zweidimensionale Texturen<br>
 
:•dreidimensionale Texturen<br>
 
 
 
Es werden allerdings hauptsächlich zweidimensionale Texturen eingesetzt, daher beschränken sich die folgenden Erläuterungen auf diesen Fall. Dabei haben die Texturkoordinaten zwei Dimensionen "u" und "v", die wir aber zum besseren Verständnis (wie im HomeNos ) als "x" und "y" bezeichnen wollen. Diese zwei Koordinaten geben eine relative Position auf unserer Textur an. Hier ein Beispiel einer zweidimensionale Textur - unsere Stadthaustextur:
 
  
 +
<b>Abb.: Beispiel Haustextur mit u/v bzw. x/y-Texturkoordinaten</b>
  
[[Datei:1000-tga_uv-dialog-schaubild_zoom59.png]]
+
Diese Form des Koordinatensystems verwendet statt fester Pixelzuweisung Prozentwerte. Direct3D unterstützt Mip-Mapping, d.h. beim Laden der Texturen kann man Direct3D anweisen, von einer Textur mehrere kleinere Kopien, (sogenannte Mipmap-Level) zu erstellen, oder wenn bereits vorhanden, im Speicher zu behalten (bei 256x256 also: 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1). Direct3D wählt je nach Entfernung des Polygons von der Kamera, welcher Textur-Mipmap-Level verwendet wird, da es überflüssig ist, eine Textur von 256x256 zur Laufzeit auf eine Größe von ein paar Pixeln (bei weit entfernten Objekten) herunterzurechnen. Das Ergebnis ist bei einer kleineren Textur bei großer Entfernung genau dasselbe, nur dass der PC durch die Abbildung der kleineren Textur viel Renderingzeit spart.  
  
<b>Abb.: Beispiel Haustextur mit u/v bzw. x/y-Texturkoordinaten</b>  
+
<pre>Die folgenden drei Absätze sind für Anfänger unerheblich.</pre>
 
 
Diese Form des Koordinatensystems mag am Anfang etwas merkwürdig erscheinen, warum nicht einfach die Positionen in Pixeln angeben? Direct3D unterstützt Mip-Mapping, d.h. beim Laden der Texturen kann man Direct3D anweisen, von einer Textur mehrere kleinere Kopien, (sogenannte Mipmap-Level) zu erstellen, oder wenn bereits vorhanden im Speicher zu behalten (bei 256x256 also: 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1). Direct3D wählt je nach Entfernung des Polygons von der Kamera, welcher Textur-Mipmap-Level verwendet wird, da es absolut keinen Sinn macht, eine Textur von 256x256 zur Laufzeit auf eine Größe von ein paar Pixeln (bei weit entfernten Objekten) runterzurechnen. Das Ergebnis ist bei einer kleineren Textur bei großer Entfernung genau dasselbe, nur das wir durch die Abbildung der kleineren Textur viel Renderingzeit sparen.
 
  
 
Es ergeben sich nun bei der Abbildung einer zweidimensionalen Textur auf ein dreidimensionales Objekt folgende Probleme:<br<>
 
Es ergeben sich nun bei der Abbildung einer zweidimensionalen Textur auf ein dreidimensionales Objekt folgende Probleme:<br<>
:•Verzerrungen<br>
+
* Verzerrungen<br>
:•Streckungen und Stauchungen<br>
+
* Streckungen und Stauchungen<br>
:•Wiederholungen von Texturen<br>
+
* Wiederholungen von Texturen<br>
 
 
Die Aufgabe der Abbildung ist es nun, für einen Punkt in Objektkoordinaten den passenden Punkt in Texturkoordinaten zu finden. Es gibt für die Abbildung von Texturen auf dreidimensionale polygonale Objekte zwei empirische Verfahren:<br>
 
:•Auffalten von benachbarten Polygonen in eine Ebene<br>
 
:•Zweiteilige Abbildung<br>
 
 
 
Beim Auffalten des Objekts wird ein Polygon "n" solange um die Achse zwischen den Polygonen "n" und "n" -1 gedreht, bis die beiden Polygone in einer Ebene liegen. Dieser Vorgang wird für jedes Polygon des Objekts durchgeführt. Vor dem Auffalten des Polygons ist es allerdings notwendig, Informationen über die Nachbarschaftsbeziehungen zwischen den einzelnen Polygonen des Objekts zu speichern, da das Auffalten des Objekts nicht eindeutig ist. In der Folge kann die Textur direkt auf die Ebene projiziert werden und somit kann jedem Polygoneckpunkt eine Texturkoordinate zugeordnet werden. Bei Anwendung dieses Verfahrens kann es allerdings zu Diskontinuitäten der Texturdarstellung an den Polygonkanten kommen.
 
 
 
 
 
  
<b><font size="4">6.4. Texturierung im *.kon-Dialog des HomeNos</font></b>
+
Die Aufgabe der Abbildung ist es nun, für einen Punkt in Objektkoordinaten den passenden Punkt in Texturkoordinaten zu finden. Es gibt für die Abbildung von Texturen auf dreidimensionale polygonale Objekte zwei Verfahren:<br>
 +
* Auffalten von benachbarten Polygonen in eine Ebene<br>
 +
* Zweiteilige Abbildung<br>
  
Die Texturierung einer geometrischen Figur nehmen wir mittelbar über den Vertexdialog [[Datei:img_22.jpg]] des jeweiligen Einzelvertex der Figur oder aber <b><font color="red">unmittelbar</font></b> direkt <b><font color="red">bei der Erstellung</font></b> einer solchen geometrischen Figur vor. Wir erinnern uns hier an das Kapitel "Arbeit mit .kon-Dateien". Dort haben wir bereits die Methode der <b><font color="red">unmittelbaren Texturierung</font></b> kennengelernt. <b>Unmittelbar</b> meint hier, daß wir die <b>Texturkoordinaten direkt bei der Erstellung</b> unseres Figur eingeben:
+
Beim Auffalten des Objekts wird ein Polygon "n" solange um die Achse zwischen den Polygonen "n" und "n"-1 gedreht, bis die beiden Polygone in einer Ebene liegen. Dieser Vorgang wird für jedes Polygon des Objekts durchgeführt. Vor dem Auffalten des Polygons ist es allerdings notwendig, Informationen über die Nachbarschaftsbeziehungen zwischen den einzelnen Polygonen des Objekts zu speichern, da das Auffalten des Objekts nicht eindeutig ist. In der Folge kann die Textur direkt auf die Ebene projiziert werden und somit kann jedem Polygoneckpunkt eine Texturkoordinate zugeordnet werden. Bei Anwendung dieses Verfahrens kann es allerdings zu Diskontinuitäten der Texturdarstellung an den Polygonkanten kommen.
  
 +
== Texturierung im *.kon-Dialog des Home-Nostruktors ==
  
 +
Die Texturierung einer geometrischen Figur wird <b>mittelbar</b> über den Vertexdialog [[Datei:img_22.jpg]] des jeweiligen Einzelvertex der Figur vorgenommen. Möglich ist ebenso die <b>unmittelbare</b> direkte Texturierung. <b>Unmittelbar</b> meint hier, dass Sie die Texturkoordinaten direkt bei der Erstellung der Figur eingeben:
  
<b><u><font size="4">Unmittelbare Texturierung:</font></u></b>
+
<b><font size="4">Unmittelbare Texturierung:</font></b>
  
[[Datei:3.1_rechteckdialog_homenos_mit-beschr.jpg]]
+
<center>[[Datei:3.1_rechteckdialog_homenos_mit-beschr.jpg]]</center>
  
Wie in der Grafik zu sehen ist, geben wir die Anfangswerte der Texturkoordinaten in X- und Y-Richtung in den Feldern "Textur X" bzw. "Textur Y" ein.  In den beiden Felder rechts neben Textur X/Y finden wir Eingabefelder für die Länge und Höhe, d.h. für "Länge" = Länge der Strecke in X-Richtung und für "Höhe" = Länge der Strecke in Y-Richtung.
+
Die Abbildung zeigt: Sie geben die Anfangswerte der Texturkoordinaten in X- und Y-Richtung in den Feldern "Textur X" bzw. "Textur Y" ein.  In den beiden Feldern rechts neben Textur X/Y liegen die Eingabefelder für die Länge und Höhe, d.h. für "Länge" = Länge der Strecke in X-Richtung und für "Höhe" = Länge der Strecke in Y-Richtung.
  
Wenn wir die Werte aus der Beispielgrafik betrachten, so kommen wir zu folgendem Ergebnis:
+
Das bedeutet:
  
 
- In <b>X-Richtung</b> wird die Textur von Koordinate 0.0005 bis 0.9995 (0.0005 + 0.9990) aufgebracht
 
- In <b>X-Richtung</b> wird die Textur von Koordinate 0.0005 bis 0.9995 (0.0005 + 0.9990) aufgebracht
Zeile 189: Zeile 196:
 
- In <b>Y-Richtung</b> wird die Textur von Koordinate 0.0005 bis 0.9995 (0.0005 + 0.9990) aufgebracht
 
- In <b>Y-Richtung</b> wird die Textur von Koordinate 0.0005 bis 0.9995 (0.0005 + 0.9990) aufgebracht
  
Wünschen wir nun z.Bsp., daß die Textur in <b>X-Richtung</b> von der Mitte (0.5) bis zu dreivierteln (0.75) unserer Textur aufgebracht wird, und in </b>Y-Richtung vom Anfang (0.0005) bis zur Mitte (0.5) der Textur, so geben wir folgendes in unser Dialogfeld ein:
+
Wünschen Sie beispielsweise, dass die Textur in <b>X-Richtung</b> von der Mitte (0.5) bis zu drei Vierteln (0.75) der Textur aufgebracht wird, und in <b>Y-Richtung</b> vom Anfang (0.0005) bis zur Mitte (0.5) der Textur, so geben Sie folgende Werte in das Dialogfeld ein:
  
[<b><u>Anmerkung:</u></b> Als Anfangs- und Endwert der Texturkoordinaten nehmen wir <b><u>stets Werte etwas größer Null</u></b> und <b><u>etwas kleiner Eins</u></b>. Denn würde die Textur direkt von Beginn unseres Bildes, d.h. von 0 bis 1 auf unserem Modell aufgebracht, kann es an der Rändern unserer geometrischen Figur zur Bildung von weißen Streifen kommen]
+
[[Datei:signal_gelb.png]] Als Anfangs- und Endwert der Texturkoordinaten wählen Sie <b><u>stets Werte etwas größer 0</u></b> bzw.<b><u>etwas kleiner 1</u></b>. Denn würde die Textur direkt von Beginn desBildes, d.h. von 0 bis 1, auf das Modell aufgebracht, käme es an der Rändern der geometrischen Figur zur Bildung von unerwünschten Effekten.
  
[[Datei:6.textur-aufbringen-bsp-1.jpg]]
+
<center>[[Datei:6.textur-aufbringen-bsp-1.jpg]]</center>
  
  
  
<b><u><font color="blue"><font size="4">"Mittelbare Texturierung</font></font></u></b>
+
<b><font size="4">Mittelbare Texturierung</font></b>
  
Wollen wir die Textur mittelbar, d.h <b><font color="blue">nach der Erstellung unserer geometrischen Figur</font>>/b> aufbringen, so tun wir dies über den <b><font color="blue">Vertexdialog</font></b> der jeweiligen Einzelpunkte/ Vertecies. Hierzu rufen wir uns den angesprochenen Vertexdialog des Punktes über die Schaltfläche [[Datei:img_22.jpg]] auf, dem wir eine Texturkoordinate zuweisen möchten. Im Dialogfenster dort geben wir nun die direkten Koordinaten in X- und Y-Richtung ein. Dies tun wir in den Feldern <b><fonto color="blue">TexturX</font></b> und <b><font color="blue">TexturY</font></b>. Im der nachfolgenden Beispielgrafik haben wir so den Vertex 1 (linker, unterer Vertex) mit den Koordinaten TexturX: 0.0039 und TexturY: 0.0005 versehen.
+
Sie geschieht über den <b>Vertexdialog</b> der jeweiligen Einzelpunkte/ Vertizes. Hierzu rufen Sie den Vertexdialog des betreffenden Vertex mit Klick auf die Schaltfläche [[Datei:img_22.jpg]] auf. Im Dialogfenster geben Sie die direkten Koordinaten in X- und Y-Richtung ein. Dies geschieht in den Feldern <b>TexturX</b> und <b>TexturY</b>. In der unten stehenden Beispielgrafik wurde so der Vertex 1 (linker, unterer Vertex) mit den Koordinaten TexturX: 0.0039 und TexturY: 0.0005 versehen.
  
Die Texturkoordinaten können auch durch <b><fonot color="blue">direkte Auswahl</font></b> eines Punktes <b><font color="blue">auf dem Bild</font></b>, im Dialog "Textur" gesetzt werden. Der Dialog "Textur" (rechts in der Grafik zu sehen) öffnet sich durch einen Mausklick auf das Bild in der "Texturvorschau". Die Texturkoordinate (TexturX/TexturY) selbst wird durch einen Doppelklick mit der linken Maustaste an der gewünschten Stelle des Bildes im Dialog "Textur" gesetzt. Für "genaues Treffen" eines Pixels im Bild steht die Zoom-Funktion im Dialog zur Verfügung.
+
Die Texturkoordinaten können auch durch <b>direkte Auswahl</b> eines Punktes <b>auf dem Vorschaubild</b> im Dialog "Textur" gesetzt werden. Der Dialog "Textur" (in der Grafik rechts ) öffnet sich durch Klick auf das Bild in der "Texturvorschau". Die Texturkoordinate (TexturX/TexturY) selbst wird durch einen Doppelklick mit der linken Maustaste an der gewünschten Stelle des Bildes im Dialog "Textur" gesetzt. Für "genaues Treffen" eines Pixels im Bild steht die Zoom-Funktion im Dialog zur Verfügung.
  
[[Datei:6.4.texturierung_kon-dialog_zoom88.png]]
+
<center>[[Datei:6.4.texturierung_kon-dialog_zoom88.png]]</center>
  
  
<b><u>Abschlussbemerkung:</u></b>
+
<b>Abschlussbemerkung:</b>
  
Für die Texturierung der geometrischen Figuren über den Dialog ist es sinnvoll, die Texturkoordinaten aus der Arbeit an der Textur im jeweiligen Grafikprogramm zu entnehmen. Ebenso kann es hilfreich sein, sich bei der Erstellung einer Textur vorab eine Art virtuelles gleichmaschiges Muster in Form eines Schachbretts zu erstellen. So kann man sich z.B. Texturschritte bzw. Koordinaten in X- und Y-Richtung von z.B 0.0 ,0.1, 0.2, 0.3, bis 1.0 festlegen. Dies erleichtert das spätere Aufbringen der Textur auf die jeweilige Figur, indem man für die X- und Y-Werte sodann die Koordinaten von z.B. 0.1,0.2, 0.3, etc. verwendet und diese ohne weitergehenden Berechnungen eingeben kann.
+
Für die Texturierung der geometrischen Figuren über den Dialog ist es sinnvoll, die Texturkoordinaten aus der Arbeit an der Textur im jeweiligen Grafikprogramm zu entnehmen. Ebenso kann es hilfreich sein, sich bei der Erstellung einer Textur vorab ein virtuelles Maschennetz in Form eines Schachbretts zu erstellen. So kann man z.B. Texturschritte bzw. Koordinaten in X- und Y-Richtung von z.B 0.0 ,0.1, 0.2, 0.3, bis 1.0 festlegen. Dies erleichtert das spätere Aufbringen der Textur auf die jeweilige Figur, indem man für die X- und Y-Werte anschließend die Koordinaten von z.B. 0.1,0.2, 0.3, etc. verwendet und diese ohne weitergehende Berechnungen eingibt.
  
  
 
<center>[[Datei:6.textur-maschena.jpg]]<br>
 
<center>[[Datei:6.textur-maschena.jpg]]<br>
  
<b>Abb.: Beispiel gleichmaschiges Muster</b></center>
+
<b>Beispiel für ein Maschennetz</b></center>
 
 
 
 
 
 
  
 +
== Weiterführende Themen ==
  
 +
[[Texturbeispiele]]
  
 +
[[Tauschtexturen ]]
  
  
 
[http://wiki.eepshopping.de/index.php?title=Hauptseite_EEP_Wiki&redirect=no Zurück zur Startseite]
 
[http://wiki.eepshopping.de/index.php?title=Hauptseite_EEP_Wiki&redirect=no Zurück zur Startseite]

Aktuelle Version vom 28. April 2021, 09:01 Uhr

Dieser Artikel beschreibt den Umgang mit Texturen. Das Anmelden von Texturen in der Datei texturen.txt und damit das Verfügbarmachen für den Home-Nostruktor beschreibt der Artikel Schritt für Schritt - Arbeiten mit dem Home-Nostruktor 13.0.

Texturen sind die "Tapeten" der Modelle. Ihr Inhalt liegt in einer Bilddatei mit einer Zusammenstellung aus bearbeitetem Bild- und Fotomaterial oder eigens erstelltem fotorealistischem Material. Gute Texturen sind eine der Grundvoraussetzungen für ein gutes und realistisches Aussehen eines Modells.

Texturieren oder Auskonstruieren?

Der Einsatz von Texturen stellt ein Standardverfahren der Computergrafik zur Verbesserung der Qualität von dreidimensionalen Szenerien dar. Ziel ist, den Realismus in der Darstellung von komplexen Oberflächenstrukturen zu verbessern, ohne dabei die Komplexität des gegebenen polygonalen Modells zu erhöhen.

Mit zunehmender Hardware-Leistung und wachsenden Ansprüchen an die Detaillierung der eep-Modelle ist seit einigen Jahren eine Tendenz zu feinerer konstruktiver Ausdifferenzierung der Modelle zu beobachten. Während es früher durchaus üblich war, z.B. ganze Gebäudeteile wie Fenster, Türen etc. auf eine Wand des Modells per Textur aufzutragen, wird heute allgemein erwartet, dass die Laibungen in der Wand, Tür- oder Fensterrahmen bis hin zu den einzelnen Fenstersprossen auskonstruiert werden. Das bedeutet einen höheren Konstruktionsaufwand und eine Vervielfältigung der Polygonzahl im Modell, verbunden mit der Atomisierung der Texturvorlage. Wo früher ein komplettes Fenster auf der Textur lag, liegen jetzt mehrere Hölzer in verschiedenen Maserungen und Farbschattierungen. Das Bauen wird so abstrakter, das Ergebnis dagegen realistischer.

Texturieren Konstruieren.png

Links: Komplette Fassadentextur aus der Frühzeit von eep. Mitte: Texturausschnitt mit Materialien für die Fensterkonstruktion bei einem Free-Modell (rechts). Der realistischere Effekt wird mit höherer Polygonanzahl erkauft.


Werkzeuge für die Textur-Erstellung

Für die Erstellung der Texturen ist der Einsatz von Grafik- bzw. Bildbearbeitungsprogrammen unverzichtbar. Im Kapitel Empfohlene Zusatzsoftware, Abschnitt Bildbearbeitung sind einige solcher Programme aufgelistet. Die dort erwähnten Programme werden als Open Source angeboten und machen somit eine kostspielige Investition in Kaufsoftware zumindest vorerst überflüssig. Die Arbeit mit Grafikprogrammen ist je nach Programmtyp und -mächtigkeit teilweise komplex.

Dieser Artikel konzentriert sich auf die Texturarbeit im Home-Nostruktor selbst.


Unterstütze Bilddateiformate

Der Home-Nostruktor unterstützt diese Bilddateiformate:

  • .tga (Truevision Advanced Raster Graphics Array)
  • .dds (Direct draw surface)
  • .png (Portable network graphics)


Alle drei Dateiformate zeichnen sich dadurch aus, dass sie mit Alphakanälen arbeiten und diese abspeichern können. Dies ist für die Arbeit an einem Modell sehr wichtig.


Die Abbildung zeigt die Fassade aus dem obigen Free-Modell. Für die letzte LOD-Stufe wurde auf sämtliche Details verzichtet, weil sie aus großer Entfernung ohnehin nicht sichtbar wären. Damit die Fensteröffnungen aber nachts leuchten können, sind sie jetzt durchbrochen. Das geschieht mittels Alphakanal in der Grafikdatei. Hier (in Photo-Paint) ist der ausgestanzte Teil in Karodarstellung sichtbar.

Alpha 01.png

Der Texturausschnitt sieht auf eine .kon-Datei aufgebracht (oder als Objekt eingefügt) nun im 3D-Betrachter folgendermaßen aus:

Alpha 02.png

Hinter den Öffnungen sind teilweise leuchtende Scheiben oder eine Einfachtextur mit Vorhängen positioniert.


Anlegen von Texturen

Neue Texturen legen Sie im .kon-Dateien-Dialog mit Klick auf das Symbol Img 25.jpg in der Fußzeile des Home-Nostruktors an. Es erscheint einDialogfenster, in welchem Sie die Eigenschaften der neuen Textur festlegen:

Neue Textur.png


Parameter und Kurzbeschreibungen

id()
Unter diesem Parameter wird die eindeutige Textur-ID (s. Artikel) angegeben.

name()
Name der Datei mit dem Texturbild ohne Endung (*.tga, *.dds, *png). Der Name ist alphanumerisch, darf jedoch keine Leerzeichen oder Umlaute enthalten. Für die Übersicht sinnvoll ist ein Name, der der Texturen-ID entspricht. Dieser Parameter muss unbedingt angegeben werden. Wenn Sie keinen Namen vergeben: Der Name ergibt sich bei der automatischen Anlage der Textur über das Dialogfeld aus dem Dateinamen der Bilddatei, die Sie über die Schaltfläche Texture Bitmap hinzufügen.

automipmap()

Für Anfänger unerheblich: Diesen Eintrag verwenden, ohne ihn verstehen zu wollen.


Gibt an, dass Mipmaplevel mit verringerter Auflösung automatisch erstellt werden. Es muss kein Wert übergeben werden, um das Mipmapping tatsächlich einzuschalten.

opacity()

Für Anfänger unerheblich: Diesen Eintrag verwenden, ohne ihn verstehen zu wollen.


Gibt an, dass und in welchem Grade eine Textur eine Fläche durchsichtig erscheinen lassen soll. Gültige Werte sind 0.0 (unsichtbar) bis 1.0 (opak). Dieser Parameter wird nur dann benutzt, wenn die Textur tatsächlich komplett eine Opazität, also einen Transparenzgrad erhalten soll. Wenn nur Teile der Textur transparent sein sollen, wird ein anderes verfahren angewendet.

billboarding()

Für Anfänger wichtig.


Mit diesem Parameter wird die Fläche der Polygone durchbrochen. Wird nur dann benutzt, wenn die Textur Durchbrüche aufweist (Fensteraussparungen, Geländerzwischenräume usw.).

repeat_s()

Für Anfänger wichtig.


Wenn dieser Parameter vorhanden ist, werden die Texturen in X-Richtung wiederholt, sobald sie den Bereich 0.0 - 1.0 überschreiten. Zum Parameter wird kein Wert übergeben.

repeat_t()

Für Anfänger wichtig.


Wenn dieser Parameter vorhanden ist, werden die Texturen in Y-Richtung wiederholt, sobald sie den Bereich 0.0 - 1.0 überschreiten. Zum Parameter wird kein Wert übergeben.

magfilter()

Für Anfänger unerheblich: Diesen Eintrag verwenden, ohne ihn verstehen zu wollen.


Gibt den Magnification-Filter an. Gültige Werte sind: 0 und 1. Dieser Parameter muss angegeben werden.

minfilter()

Für Anfänger unerheblich: Diesen Eintrag verwenden, ohne ihn verstehen zu wollen.


Gibt den Minification-Filter an. Gültige Werte sind: 0, 1, 2, 3, 4, 5. Dieser Parameter muss angegeben werden.


Erklärungen zu den Texturparametern

Mipmapping (automipmap)

Bezeichnet eine Technik, bei der Texturen in größeren Entfernungen mit verringerter Auflösung dargestellt werden. Dies kann Flimmereffekte beseitigen und gibt bessere Kontrolle über die Darstellung von Objekten in größerer Entfernung. Mit dem Parameter automipmap() werden die Mipmap-Level automatisch berechnet, indem die Farbwerte jeweils vierer Texel zu einem verrechnet werden (Einfache Mittelung). Mit dem Schlüsselwort "MipMapLevel" hat man die Möglichkeit, von Hand erzeugte Mipmaplevel anzugeben, allerdings wird dies nicht mehr praktiziert, da diese über das DDS-Tool automatisch erzeugt und mitgespeichert werden.


Opazität (opacity)

Diese Einstellung ist weit weniger universell verwendbar, als es zunächst scheint. Eine Textur mit einer Opazität = 1 wird zwar in Anteilen die Szenerie hinter ihr sichtbar sein lassen, jedoch betrifft das nur die Polygone, die zum Zeichenzeitpunkt der halb durchsichtigen Fläche bereits gezeichnet wurden. Da Modelle in der Regel nicht von hinten nach vorne gezeichnet werden, wird das Bild nicht immer korrekt erscheinen. Diese Einstellung war ursprünglich nur für Rauchwolken gedacht.


Billboarding:

Texel mit der Farbe RGB: 0,0,0 (schwarz) werden nicht gezeichnet. Man sieht dann an diesen Stellen die Szenerie dahinter. Beim Auto-Mipmapping können hier Probleme auftreten, da vollautomatisch nicht immer korrekt bestimmt werden kann, ob ein Texel jetzt unsichtbar ist, oder nicht. Etwa, wenn zwei unsichtbare und zwei sichtbare zu einem verrechnet werden. Dieser Effekt bildet unschöne schwarze Ränder an den Stellen, wo die Grenze zwischen den sichtbaren Flächen und Durchbrüchen liegt, kann aber sehr leicht vermieden werden.


Texturwiederholungen (repeat_s, repeat_ t)

Mit den Parametern repeat_s() und/oder repeat_t() gibt man an, dass die Textur in X- bzw. Y-Richtung wiederholt werden soll, wenn die Texturkoordinaten den Bereich zwischen 0 und 1 überschreiten. Dies kann im Zusammenhang mit den Texturfiltern zu Problemen führen. Wenn beim Filtern Texelwerte herangezogen werden müssen, die jenseits der Texturgrenzen liegen. Hier können Streifen entstehen, die die Farbe der gegenüberliegenden Texturseite einmischen. Ohne "Repeat" hätten die verwendeten nicht existierenden Texel die Farben der letzten existierenden. Auch beim Einsatz des Billboardings kann es passieren, dass unsichtbare Texel an einem Texturrand wieder sichtbar werden. In solchen Fällen kann man entweder die Filtermethoden auf "NEAREST" stellen, auf die Wiederholung verzichten, oder aber die Textur so anordnen, dass auf beiden Seiten, dieselben Pixel verwendet werden. (Man kopiert hierzu die erste Pixelreihe der linken Seite und fügt diese auf der rechten Seite ein).


Texturfilter (magfilter, minfilter)

Grundsätzlich steht der Renderer vor dem Problem, dass er "entscheiden" muss, welches Bildelement (Texel) einer durch die 3D->2D Projektion unter einem Pixel zu liegen kommenden texturierten Fläche die Farbwerte für das Pixel liefern soll. Es gibt zwei Situationen.

  • In der einen sind die texturierten Flächen soweit weg, dass mehrere Texel in ein Pixel fallen: Hier wird der sogenannte Minifikation-Filter aktiv.
  • In der anderen überdeckt ein Texel mehrere Pixel: Hier wird die Darstellung durch den Magnifikationfilter beeinflusst.

Werte für den Magnifikationfilter

0 GL_NEAREST: Es wird das Texel die Farbe eines Pixels bestimmen, dessen Zentrum dem Pixelzentrum am nächsten liegt.
1 GL_LINEAR: Es werden die vier Pixel einem nächst liegenden Texel zur Farbbestimmung herangezogen.


Werte für den Minifikationfilter

0: GL_NEAREST: Das dem Pixelmittelpunkt zunächst liegende Texel bestimmt die Farbe des Pixels.

1: GL_LINEAR: Die vier dem Pixelmittelpunkt zunächst liegenden Texel werden zur Farbe des Pixels verrechnet.

2: GL_NEAREST_MIPMAP_NEAREST: Wie GL_NEAREST, nur werden abhängig von der Entfernung Mipmaplevel zur Farbbestimmung
benutzt.

3: GL_LINEAR_MIPMAP_NEAREST: Es wird abhängig von der Entfernung ein Mipmaplevel benutzt, die endgültige Farbe des Pixels jedoch aus den vier Zunächstliegenden Texeln in dem Mipmaplevel gemittelt.

4: GL_NEAREST_MIPMAP_LINEAR: Es werden die beiden am besten zu der Entfernung passenden Mipmaplevel benutzt. Relevant ist aber immer nur das Texel, das dem Pixelmittelpunkt am nächsten liegt.

5: GL_LINEAR_MIPMAP_LINEAR: Es werden die beiden am besten zu der Entfernung passenden Mipmaplevel benutzt. Die Farbwerte die jeder Mipmaplevel beisteuert werden aus den dem Pixelzentrum nächstliegenden Texeln gemittelt.


repeat s+t max SUMME 15 aus s*t / 2 tex 2mal rendern (ToDo: Wer versteht das? Fragt HW1, der Autor dieses Artikels)


Texturabbildung

Die Texturabbildung beschreibt die Art und Weise, wie die Textur auf das Objekt gelegt wird.

Man unterscheidet nach der Anzahl der Texturkoordinaten:

Im Home-Nostruktor werden fast ausschließlich zweidimensionale Texturen eingesetzt, daher beschränken sich die folgenden Erläuterungen auf diesen Fall. Dabei haben die Texturkoordinaten zwei Dimensionen "u" und "v", die hier aber zum besseren Verständnis (wie im Home-Nostruktor) als "x" und "y" bezeichnet werden. Diese zwei Koordinaten geben eine relative Position auf der Textur an:


1000-tga uv-dialog-schaubild zoom59.png

Abb.: Beispiel Haustextur mit u/v bzw. x/y-Texturkoordinaten

Diese Form des Koordinatensystems verwendet statt fester Pixelzuweisung Prozentwerte. Direct3D unterstützt Mip-Mapping, d.h. beim Laden der Texturen kann man Direct3D anweisen, von einer Textur mehrere kleinere Kopien, (sogenannte Mipmap-Level) zu erstellen, oder wenn bereits vorhanden, im Speicher zu behalten (bei 256x256 also: 128x128, 64x64, 32x32, 16x16, 8x8, 4x4, 2x2, 1x1). Direct3D wählt je nach Entfernung des Polygons von der Kamera, welcher Textur-Mipmap-Level verwendet wird, da es überflüssig ist, eine Textur von 256x256 zur Laufzeit auf eine Größe von ein paar Pixeln (bei weit entfernten Objekten) herunterzurechnen. Das Ergebnis ist bei einer kleineren Textur bei großer Entfernung genau dasselbe, nur dass der PC durch die Abbildung der kleineren Textur viel Renderingzeit spart.

Die folgenden drei Absätze sind für Anfänger unerheblich.

Es ergeben sich nun bei der Abbildung einer zweidimensionalen Textur auf ein dreidimensionales Objekt folgende Probleme:<br<>

  • Verzerrungen
  • Streckungen und Stauchungen
  • Wiederholungen von Texturen

Die Aufgabe der Abbildung ist es nun, für einen Punkt in Objektkoordinaten den passenden Punkt in Texturkoordinaten zu finden. Es gibt für die Abbildung von Texturen auf dreidimensionale polygonale Objekte zwei Verfahren:

  • Auffalten von benachbarten Polygonen in eine Ebene
  • Zweiteilige Abbildung

Beim Auffalten des Objekts wird ein Polygon "n" solange um die Achse zwischen den Polygonen "n" und "n"-1 gedreht, bis die beiden Polygone in einer Ebene liegen. Dieser Vorgang wird für jedes Polygon des Objekts durchgeführt. Vor dem Auffalten des Polygons ist es allerdings notwendig, Informationen über die Nachbarschaftsbeziehungen zwischen den einzelnen Polygonen des Objekts zu speichern, da das Auffalten des Objekts nicht eindeutig ist. In der Folge kann die Textur direkt auf die Ebene projiziert werden und somit kann jedem Polygoneckpunkt eine Texturkoordinate zugeordnet werden. Bei Anwendung dieses Verfahrens kann es allerdings zu Diskontinuitäten der Texturdarstellung an den Polygonkanten kommen.

Texturierung im *.kon-Dialog des Home-Nostruktors

Die Texturierung einer geometrischen Figur wird mittelbar über den Vertexdialog Img 22.jpg des jeweiligen Einzelvertex der Figur vorgenommen. Möglich ist ebenso die unmittelbare direkte Texturierung. Unmittelbar meint hier, dass Sie die Texturkoordinaten direkt bei der Erstellung der Figur eingeben:

Unmittelbare Texturierung:

3.1 rechteckdialog homenos mit-beschr.jpg

Die Abbildung zeigt: Sie geben die Anfangswerte der Texturkoordinaten in X- und Y-Richtung in den Feldern "Textur X" bzw. "Textur Y" ein. In den beiden Feldern rechts neben Textur X/Y liegen die Eingabefelder für die Länge und Höhe, d.h. für "Länge" = Länge der Strecke in X-Richtung und für "Höhe" = Länge der Strecke in Y-Richtung.

Das bedeutet:

- In X-Richtung wird die Textur von Koordinate 0.0005 bis 0.9995 (0.0005 + 0.9990) aufgebracht

- In Y-Richtung wird die Textur von Koordinate 0.0005 bis 0.9995 (0.0005 + 0.9990) aufgebracht

Wünschen Sie beispielsweise, dass die Textur in X-Richtung von der Mitte (0.5) bis zu drei Vierteln (0.75) der Textur aufgebracht wird, und in Y-Richtung vom Anfang (0.0005) bis zur Mitte (0.5) der Textur, so geben Sie folgende Werte in das Dialogfeld ein:

Signal gelb.png Als Anfangs- und Endwert der Texturkoordinaten wählen Sie stets Werte etwas größer 0 bzw.etwas kleiner 1. Denn würde die Textur direkt von Beginn desBildes, d.h. von 0 bis 1, auf das Modell aufgebracht, käme es an der Rändern der geometrischen Figur zur Bildung von unerwünschten Effekten.

6.textur-aufbringen-bsp-1.jpg


Mittelbare Texturierung

Sie geschieht über den Vertexdialog der jeweiligen Einzelpunkte/ Vertizes. Hierzu rufen Sie den Vertexdialog des betreffenden Vertex mit Klick auf die Schaltfläche Img 22.jpg auf. Im Dialogfenster geben Sie die direkten Koordinaten in X- und Y-Richtung ein. Dies geschieht in den Feldern TexturX und TexturY. In der unten stehenden Beispielgrafik wurde so der Vertex 1 (linker, unterer Vertex) mit den Koordinaten TexturX: 0.0039 und TexturY: 0.0005 versehen.

Die Texturkoordinaten können auch durch direkte Auswahl eines Punktes auf dem Vorschaubild im Dialog "Textur" gesetzt werden. Der Dialog "Textur" (in der Grafik rechts ) öffnet sich durch Klick auf das Bild in der "Texturvorschau". Die Texturkoordinate (TexturX/TexturY) selbst wird durch einen Doppelklick mit der linken Maustaste an der gewünschten Stelle des Bildes im Dialog "Textur" gesetzt. Für "genaues Treffen" eines Pixels im Bild steht die Zoom-Funktion im Dialog zur Verfügung.

6.4.texturierung kon-dialog zoom88.png


Abschlussbemerkung:

Für die Texturierung der geometrischen Figuren über den Dialog ist es sinnvoll, die Texturkoordinaten aus der Arbeit an der Textur im jeweiligen Grafikprogramm zu entnehmen. Ebenso kann es hilfreich sein, sich bei der Erstellung einer Textur vorab ein virtuelles Maschennetz in Form eines Schachbretts zu erstellen. So kann man z.B. Texturschritte bzw. Koordinaten in X- und Y-Richtung von z.B 0.0 ,0.1, 0.2, 0.3, bis 1.0 festlegen. Dies erleichtert das spätere Aufbringen der Textur auf die jeweilige Figur, indem man für die X- und Y-Werte anschließend die Koordinaten von z.B. 0.1,0.2, 0.3, etc. verwendet und diese ohne weitergehende Berechnungen eingibt.


6.textur-maschena.jpg
Beispiel für ein Maschennetz

Weiterführende Themen

Texturbeispiele

Tauschtexturen


Zurück zur Startseite