Problem mit Cubeworld und UV
Übersicht

shootermakerBetreff: Problem mit Cubeworld und UV |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo,
Bei meinem Spiel wird die ganze Welt mit einzelnen Cubes erstellt. Damit die Perform. nicht in den Keller geht, werden Cubes in 16 x 16 blöcke eingeteilt. Jetzt muss ich über die UV befehle bei addvertex bestimmen wo welche Texture auf die Cubes soll: Beispiel bei der Front eines Würfels: Code: [AUSKLAPPEN] ;============================================FRONT V[08]=AddVertex(s\Surface,X#-1,Y#+1,Z#-1,TexZ,TexS) V[09]=AddVertex(s\Surface,X#+1,Y#+1,Z#-1,TexZ+TSize ,TexS) V[10]=AddVertex(s\Surface,X#+1,Y#-1,Z#-1,TexZ+TSize ,TexS+TSize) V[11]=AddVertex(s\Surface,X#-1,Y#-1,Z#-1,TexZ,TexS+TSize) davor wird die TexZ und TexS Position ermittelt mit: Code: [AUSKLAPPEN] TexZ#=World( XX, YY, ZZ)\tz*TSize ;Zeile TexS#=World( XX, YY, ZZ)\ts*TSize ;Spalte Das wird dann so geladen das Texturpacket ist 1024 x 1024 und hat mehrere Texturen mit der Größe 128x128 im Bild Code: [AUSKLAPPEN] Global texturepack = LoadTexture("Texture.bmp",1+256) Global TSize#=0.125 ;eine Teil Textur aus der Datei Global TexS#,TexZ# Das Problem: ![]() Man sieht immer ein Stück der nächstgelegenen Textur im Packet. Also ob Blitzbasic ungenau arbeiten würde mit den U und V pos. Hoffentlich kan mir jemand helfen. mich wurmt das Problem schon einige Zeit. ![]() |
||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das passiert bei mir, wenn ich bestimmte Grafikkarteneinstellungen vornehme. Habe deswegen die UV-Koordinaten leicht überzogen, damit es dann nicht mehr auftritt. | ||
shootermaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Das mit den "überziehen" der Textur, also bei U und V z.b. +0.001 ist mir bekannt und würde das Problem beseitigen.
Jedoch ist die Textur dann nicht mehr Kachelbar, Da eine scharfe Kante entsteht. ![]() Weißt du noch eine bessere Lösung? |
||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Nicht direkt. Aber stell testweise doch mal deine Grafikkarteneinstellungen auf mieseste Qualität um. Vielleicht liegt es daran, was ich stark vermute, weil es bei mir auch in kommerziellen Spielen auftritt.
Technisch gesehen zieht sich der bilineare Filter ja die nächsten anliegenden Pixel und die sind in deinem großen Texturbild halt Gras und Sand, und daher kommen die Farben. Da müsste man den Filter anders einstellen oder die Texturen in einzelne Texturen reinkopieren, sodass es keine Interferenzen mit den anderen drumherumliegenden Texturen gibt. |
||
shootermaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Ich würde ja gerne einzelne Texturfiles benutzen.
Das geht aber leider nicht, da ich dafür doch für jeden Würfel ein eigenes Mesh brauche. Anders wäre es einfach zu ruckelig. Bei mir werden aber immer 16X16 würfel zu einem Mesh. Also kann man das ja nur über die UV - pos. setzen. Oder? Deine Idee mit dem reinkopieren der Texturfiles in jeweils ein einziges wäre bestimmt nicht schlecht, aber das funktioniert doch auch nur wieder wenn ich für jeden Würfel ein Mesh habe, oder? |
||
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
Der billigste Weg ist, jedes Tile in deinem Tilesetz einfach nicht nur einmal, sondern gleich als 3x3-Block zu haben und auf deinen Würfeln dann die UV-Koordinaten des jeweils mittleren anzugeben. ![]() Der saubere Weg ist, für jede Mipmapping-Stufe jeweils eine Pixelreihe für jeden Rand doppelt zu speichern, wie von Pac-Man angedeutet. |
||
MrKeks.net |
shootermaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo und danke für eure Antworten.
Ganz ehrlich, das ist nicht ganz professional. Am Ende bleibt mir wohl nicht mehr viel übrig als mein schönes Singlesurface-Cube-System wieder zu löschen und stumpf die Cubes einzeln zu setzen. Was ich dann mit der Performance mache weiß ich noch nicht. ![]() Seit mir bitte nicht böse, aber das mit den Pixel nachzeichnen oder die Textur 9-mal in das File zu zeichnen ist wirklich keine elegante Lösung. Jemand hatte 2005 das gleiche Problem und hat es mit der Verschiebung der Texturcoordinaten hinbekommen. https://www.blitzforum.de/foru...ight=clamp Vielleicht kann sich jemand diesen alten Thread mal ansehen und daraus schlau werden, beim mir wird bei verschiebung der Texturcoords. zwar dieser unschöne Effekt der nebenstehenden Texturen gelöst, aber die Textur wird halt dan eben scharfkantig und nicht mehr kachelbar. ![]() Hoffentlich kann mir jemanden helfen. |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Das UV-Mapping von Blitz3D arbeitet absolut genau und perfekt! Man muss sich nur überlegen wie die Grafikkarten arbeiten. Einzig, Blitz3D ist mit seiner übertriebenen anisotropen Filterung nicht für alle Sachen perfekt geeignet. Man kann es auch leider nicht selbst einstellen.
Tipp: Beispielsweise eine Textur von 256x256er Kantenlänge, die auf 256 in u und v skaliert wurde, beginnen dessen Texel bei 0.5x0.5 und enden bei 255.5x255.5 Das ist auch logisch und übereinstimmt mit einem glatten Raster. Eine Textur sollte man sich wie ein Schachbrett vorstellen, dessen Texel in der Mitte jeder Felder stehen. Die einzelnen Pixelfarben orientieren sich dann anhand der Positionen (Entfernungen bzw. Gewichtung) der Texel. Jeder Pixel kann aus einer Mischfarbe von 4 (*) umliegenden Texeln bestehen. * Außer, aufgrund der Perspektive oder Entfernung einer Textur zur Kamera, wenn eine Vielzahl von Texeln sich am Ort eines Pixels aufhalten. Hier kommt die anisotrope Filterung zugute und verhindert flackernde Interferenzmuster. Diese ist leider bei Blitz3D sehr extrem übertrieben eingestellt, was jedoch den Vorteil hat, dass die Grafikkarte das ganze schneller verarbeiten kann. - - - Um dein Problem zu lösen, mach die Tiles pro Textur größer oder grab einfach etwas weniger von ab. Kopiere statt eines Tiles von 64x64 einfach dessen Wiederholungsmuster von 32x32 umrum. Das Tile hätte dann 128x128 Pixel wovon nur die mittleren 64x64 benutzt werden. Verschleiß beträgt hier allerdings 75%, für den anisotropen Effekt ist dann auch für Extremsituationen ausreichend Puffer vorhanden. Vielleicht kann man hier auch noch optimieren und die Tiles auf 96x96 ausdehnen, mit einem 16x16 Rahmen umrum. Probieren. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Interessant wäre noch die Anzahl der unterschiedlichen Texturen, auch innerhalb eines Clusters. Wenn das in der Praxis sowieso nur eine Hand voll ist kannst Du auch überlegen einfach nur gleiche Texturen in ein Surface zusammenzufassen. Dann brauchst Du nicht zu kacheln und brauchst folglich auch keine Pixel Border.
Ansonsten siehe Hectics Post. |
||
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final) |
![]() |
Mr.Keks |
![]() Antworten mit Zitat ![]() |
---|---|---|
shootermaker hat Folgendes geschrieben: Seit mir bitte nicht böse, aber das mit den Pixel nachzeichnen oder die Textur 9-mal in das File zu zeichnen ist wirklich keine elegante Lösung. Doch, bin dir böse. Du hast einfach keine andere Wahl als doppelte Pixelreihen, weil auch am Rand interpoliert werden muss (siehe hectics Post). Wenn du es elegant machen willst, dann vervierfache die Textur so wie von hectic beschrieben beim Laden intern (oder nur einmal beim ersten Programmstart).
|
||
MrKeks.net |
shootermaker |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Hallo und danke für eure Hilfe.
Also die 3 Möglichkeiten sind:
- Von der Textur die Ränder kopieren und neben der Textur setzen. - Statt unterschiedliche Texturen in ein Surface, jeweils die gleichen Texturen in ein Surface setzen Da es mir aber fast lieber wäre die Texturen einzeln zu haben und nicht in einem großen File, bin ich mir fast sicher das ich die letzte Methode benutze. Hab aber noch eine Frage: Da ich ja die Blöcke dann auf Entfernung nicht mehr ausblenden kann, muss ich alle Blöcke immer angezeigt lassen. Ist das in sachen Performance immer noch einigermaßen schnell? Es wird KEIN Minecraft Clone wie warscheinlich fast alle jetzt denken. ![]() |
||
PacMani |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Warum jeder meint, das Minecraft das erste Spiel mit solchen Blocksystemen ist und alles andere nur Klone, verstehe ich nicht... hatte schon vor zehn Jahren etwas ähnliches gespielt ![]() Das wird auf jeden Fall mächtig in die Performance reinhacken, wenn du alles rendern lässt. Ich weiß ja nicht, wie komplex deine Level werden, aber auf jeden Fall sollte die CameraRange dann nicht allzu groß sein. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group