Texturieren Frage
Übersicht BlitzBasic Blitz3D
mpreuBetreff: Texturieren Frage |
So, Jul 07, 2013 17:14 Antworten mit Zitat |
|
---|---|---|
Ich habe mal eine ganz noobische Frage.
Wenn ich jetzt einen indoor level machen möchte und ich dort nur eine Textur dafür nehme dann wird bei einer 512x512 oder 1024x1024 textur das ganze doch recht grobpixelig. Soll heißen, Fußboden soll ein Steinboden werden und teils holz an den wänden. oder kann ich boden/wände etc. einfach jeweils gruppieren und dann jeweils verschiedene texturen zuweisen? Hättet ihr da vielleicht ein paar tips für mich? |
||
Spark Fountain |
So, Jul 07, 2013 18:01 Antworten mit Zitat |
|
---|---|---|
Willst du den Indoor-Level so machen, dass du einen Würfel bzw. Quader nimmst, und die Textur auf den Innenseiten anbringst? Wenn ja, dann könntest du stattdessen einfach die sechs Flächen einzeln erzeugen und dann jeweils die gewünschte Textur drauf pappen.
Ob es möglich ist, eine Textur quasi "rekursiv" auf eine Oberfläche aufzutragen, weiß ich allerdings nicht... Was ich damit meine ist, dass die Textur bei zunehmender Größe der Fläche nicht skaliert wird, sodass alles pixelig wird, sondern dass sie so oft nebeneinander platziert wird wie nötig, aber ohne Skalierung (sodass der Detaillevel höher ist). - Das einzige Element, das ich in Blitz3D kenne, bei dem das in etwa klappen sollte, ist die Plane, aber die ist meines Wissens nach unendlich groß... |
||
Gewinner der MiniBCC's #11, #13 und #28 |
mpreu |
So, Jul 07, 2013 18:08 Antworten mit Zitat |
|
---|---|---|
Ich meine ob man einen Teil einer Textur auch auf bestimmte Bereiche tilen kann.
Also Ich hab das Modell und eine Textur. Da ich ja nicht die ganze Textur nur für Wände nehmen will, nehme ich eine tilebare Grafik und plaziere diese nur in einem kleinen Teil auf der Textur.jpg Diese müsste dann aber auf den Wänden eben immer wieder wiederholt werden. Hoffe ich hab das jetzt besser erklärt. so kann ich den rest der textur.jp für mehr ausnutzen. und es sieht eben auch deteilreicher aus, als gestreckt und verwaschen. |
||
Kruemelator |
So, Jul 07, 2013 19:27 Antworten mit Zitat |
|
---|---|---|
Nein das geht nicht, zumindest nicht mit Blitz3D. Es ist eh besser in mehrere Texturen zu teilen und/oder mit Multitexturing zu arbeiten. | ||
XeresModerator |
So, Jul 07, 2013 19:31 Antworten mit Zitat |
|
---|---|---|
Wieso soll das nicht gehen? Kann man nicht ein Modell beliebig mit einer Textur versehen?
Natürlich mit der richtigen 3D Software, nicht mit B3d direkt. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Kruemelator |
So, Jul 07, 2013 19:35 Antworten mit Zitat |
|
---|---|---|
Texture Wrap/Clamp/Mirror ist nur am Tetxurerand möglich, nicht in der Texture. Und ich glaube, das war das gefragt wurde.
Nachtrag: Informiere dich mal zu Detail Mapping und Uv-Unwrapping. |
||
mpreu |
So, Jul 07, 2013 20:05 Antworten mit Zitat |
|
---|---|---|
@xerxes, welches tool würde sich denn dafür eignen?
also nur wenn du da näheres weißt. |
||
XeresModerator |
So, Jul 07, 2013 21:07 Antworten mit Zitat |
|
---|---|---|
Mit Blender geht sowieso alles und in Wings3D geht es auch - kommt eher auf deine Dateiformate und können an. Ein Modell zu texturieren sollte ansonsten ja irgendwie zur Grundausstattung gehören. Vielleicht findest du noch was interessantes dazu wenn du dich im Grafik-Subforum umschaust. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Mr.Floppy |
Di, Jul 09, 2013 18:56 Antworten mit Zitat |
|
---|---|---|
Soweit ich die Frage verstehe, ob Teilbereiche einer Textur gekachelt (tile) werden können ist die Antwort nein.
Modelleditoren funktionieren hier genau wie B3D. Um eine Textur über eine Fläche gekachelt darzustellen muss die UV-Map "größer" als das eigentliche Bild sein. Wollte man nun ein nur 64² px großes Quadrat eines 512² px Bildes für eine größere Fläche, z.B. 1024² B3D-Einheiten nutzen (Annahme: Pixel = B3D-Einheiten) müsste man diese Fläche in 64² B3D-Einheiten große Quads aufteilen und jedem die entsprechenden UV-Koordinaten des Textur-Teilbereiches zuordnen. Bei einer MineCraft-ähnlichen Engine würde das auch ohne weiteres funktionieren und man könnte durch ein (Quasi-)Singlesurface eventuell auch die Performance im Lot halten. Für alles andere ist dies jedoch nicht zielführend, da man eine Vielzahl grundsätzlich unbenötigter Polygone erzeugen müsste. Würde man, in obigen Beispiel die UV-Map auf eine 1024² Fläche vergrößern, würden das gesamte 512² px Bild 4 mal gekachelt werden und nicht nur ein bestimmter Teilbereich, da sich auch das gesamte Bild innerhalb der UV-Koordinaten befindet. Die einzige "vernünftige" Möglichkeit die ich kenne ist mit einzelnen Texturen zu arbeiten und diese, wenn benötigt mittels Anpassung der UV-Koordinaten zu kacheln. Viele technische Aspekte mal außen vor gelassen, macht es auch keinen Unterschied, ob man nun 4 x 64² px Texturen oder nur 1 x 128² px Textur benutzt. Das ist zumindest mein Wissensstand. Verbesserungen und Hinweise sind natürlich immer erwünscht. - edit - Hier mal ein Code-Beispiel: Code: [AUSKLAPPEN] ;Initialisiere Graphik im Fenstermodus
Graphics3D 640,480, 32, 2 ;Erstelle (leere) Textur mit 64 x 64 Pixel - Alternative zum Laden einer Bilddatei Global texture = CreateTexture(64, 64) ;Male ein Checker-Muster in die Textur SetBuffer TextureBuffer(texture) Rect 0, 0, 32, 32, 1 Rect 32, 32, 32, 32, 1 SetBuffer BackBuffer() ;Obligatorische Kamera Global camera = CreateCamera() ;Obligatorisches Licht Global light = CreateLight() ;Erstellt ein Mesh, welches die Vertexe usw. "beinhaltet" Global mesh = CreateMesh() PositionEntity mesh, 0, 0, 25 ;Mesh etwas von der Kamera weg positionieren, um die komplette Szene zu sehen EntityTexture mesh, texture ;Die geladene Textur dem Mesh zuweisen ;Erstellt eine Oberfläche für das Mesh, da das Mesh eigentlich nur ein Gerüst ohne Flächen ist Global surface = CreateSurface(mesh) ;Variablen für Vertexe Global v1, v2, v3, v4 ;Erstelle Viereck 1 ;================== ;4 Vertexe (=Eckpunkte) für ein "Quad" werden erstellt ;Hinweis: Ein UV-Koordinatensystem beginnt links oben mit jeweils 0 und endet rechts unten mit jeweils 1 ;; U entspricht der horizontalen Achse (X) und V entspricht der vertikalen Achse (Y) im 3D-Koordinatensystem ;; Die UV-Koordinaten verstehen sich relativ zu den Pixeln der Bilddatei. ;Beispiel: Die UV-Koordinaten der Mitte des Bildes sind U = 0.5 und V = 0.5 v1 = AddVertex(surface, -8, -8, 0, 0, 1) ;Die letzten beiden Parameter sind die U- und die V-Koordinate v2 = AddVertex(surface, -8, 0, 0, 0, 0) v3 = AddVertex(surface, 0, 0, 0, 1, 0) v4 = AddVertex(surface, 0, -8, 0, 1, 1) AddTriangle(surface, v1, v2, v3) ;Drei Eckpunkte ergeben ein Dreieck AddTriangle(surface, v1, v3, v4) ;Ein weiteres Dreieck ergibt ein Viereck ;Erstelle Viereck 2 ;================== v1 = AddVertex(surface, 0, 0, 0, 0, 2) ;Die UV-Map wird hier n-mal so groß v2 = AddVertex(surface, 0, 16, 0, 0, 0) ;mit n = Aktuelle Fläche / Fläche der 1:1 Aulösung v3 = AddVertex(surface, 16, 16, 0, 2, 0) v4 = AddVertex(surface, 16, 0, 0, 2, 2) AddTriangle(surface, v1, v2, v3) AddTriangle(surface, v1, v3, v4) ;FAZIT: ;====== ;=> Das erste Viereck soll hier die "Normalauflösung" darstellen, das zweite Viereck ist doppelt so groß, ;; die Textur muss beim zweiten Viereck also gekachelt werden um nicht verzerrt zu sein. ;=> Die UV-Map des zweiten Vierecks muss also - relativ - doppelt so groß sein wie die Textur ;=> Die Textur wird auf der Fläche 2^2 = 4 mal gekachelt. ;Obligatorisches Aktualisieren der Normalen UpdateNormals(mesh) ;Hintergrundfarbe für etwas besseren Kontrast CameraClsColor camera, 50, 50, 150 ;Szene rendern RenderWorld Text 10, 10, "Viereck 1: 8² - Textur 1:1" Text 10, 30, "Viereck 2: 16² - Textur gekachelt" Text 10, 450, "Beliebige Taste drücken um zu beenden." WaitKey() ;Speicher der Textur wieder frei geben FreeTexture texture End |
||
Übersicht BlitzBasic Blitz3D
Powered by phpBB © 2001 - 2006, phpBB Group