Texturieren Frage

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

mpreu

Betreff: Texturieren Frage

BeitragSo, Jul 07, 2013 17:14
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jul 07, 2013 18:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jul 07, 2013 18:08
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jul 07, 2013 19:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein das geht nicht, zumindest nicht mit Blitz3D. Es ist eh besser in mehrere Texturen zu teilen und/oder mit Multitexturing zu arbeiten.

Xeres

Moderator

BeitragSo, Jul 07, 2013 19:31
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Kruemelator

BeitragSo, Jul 07, 2013 19:35
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jul 07, 2013 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
@xerxes, welches tool würde sich denn dafür eignen?
also nur wenn du da näheres weißt.

Xeres

Moderator

BeitragSo, Jul 07, 2013 21:07
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)
 

Mr.Floppy

BeitragDi, Jul 09, 2013 18:56
Antworten mit Zitat
Benutzer-Profile anzeigen
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

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group