Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Schwarzer Rand bei geringem Zoom Level #7

Open
Hojoe42 opened this issue Apr 20, 2017 · 3 comments
Open

Schwarzer Rand bei geringem Zoom Level #7

Hojoe42 opened this issue Apr 20, 2017 · 3 comments

Comments

@Hojoe42
Copy link

Hojoe42 commented Apr 20, 2017

Wenn ein kleiner Zoom Level verwendet wird, z.B. 0,3 dann gibt es beim Scrollen nach Osten oder Westen teilweise schwarze Ränder. Je höher der Zoom Level desto größer die schwarzen Ränder.

WurfelTest.zip
In dem Beispiel kann man mit dem Scrollrad den Zoom ändern und mit A oder D die Kamera verschieben. Wenn man ganz heraus zoomt kann man das Problem schnell sehen.

Ist es überhaupt richtig den Zoom Level zu verwenden wenn man einen größeren Bereich der Spielwelt sehen will? Kann man die Kameraentfernung ändern?

@BSVogler
Copy link
Owner

BSVogler commented Apr 22, 2017

Hi Hojoe42!

Danke für dein Feedback. Bei einer orthografischen Projektion ist die Kameraentfernung unendlich groß. Die einzige Möglichkeit den Kartenausschnitt zu verändern ist daher durch die Skalierung.

Im Moment gibt es keine optimale Unterstützung für so Entfernungen. In der Theorie geht das aber schon. Das Problem liegt darin begründet, dass für ein flüßiges streaming immer 3x3 Chunks geladen werden. Wenn die Entfernung vergrößert werden soll, müssen die Chunk-Größen Verändert werden. Das geht über die CVars. Bei zu großen Angaben könnte die Performance aber Probleme machen. Da muss man ein bisschen mit rumexperimentieren. Wenn das Spiel z.B. die Höhe nicht nutzen soll (z.B. für Strageiespiele oder Schach), kann die Z-Achse auf z.B. auf 2 reduziert werden, was viele Algorithmen beschleunigt, da der Inhalt der Chunks dann enorm schrumpft.

Soll kein Zoom benutzt werden, sondern nur die Größe geändert werden, können die Grafiken auch verkleinert werden und die dazugehörigen Variablen. So kann man einfach viele kleine Tiles anzeigen.

=> In einem gewissen Rahmen kann man also gut skalieren, mit extremen Größen habe ich wenig Erfahrungswerte und da müsste man vielleicht die Engine etwas umschreiben bzw. optimieren.

Ich habe etwas in der Wiki dazu geschrieben. Das ist aber noch ausbaufähig.

Viele Grüße
Benedikt

@Hojoe42
Copy link
Author

Hojoe42 commented Apr 22, 2017

Hallo,

Danke. Das mit der Kameraentfernung habe ich fast geahnt, es gäbe ja sonst an den Rändern Verzerrungen, oder?

Kurz zum Hintergrund. Ich wollte so etwas wie http://gnomoria.com/ ausprobieren. Unter Media gibt es noch ein paar Bilder. Dort gibt es im 'normalen' Modus ein 128 x 128 Blöcke großes Spielfeld mit einer Tiefe von 128 Blöcke. Das sind 2 M Blöcke. Die müssen eigentlich alle im Speicher verwaltet werden.

Was meinst du ist das mit der WurfelEngine machbar?

Ich habe jetzt im init() meines Controllers folgendes eingebaut:

    Map.setDefaultGenerator(new BlockTestMapGenerator());
    super.init();
    CVarSystemMap cVars = getMap().getCVars();
    cVars.register(new IntCVar(20), "chunkBlocksX");
    cVars.register(new IntCVar(50), "chunkBlocksY");
    cVars.register(new IntCVar(10), "chunkBlocksZ");

Damit kann man ohne die schwarzen Ränder scrollen.

@BSVogler
Copy link
Owner

BSVogler commented Apr 22, 2017

In den Speicher für die Spiellogik ist es absolut kein Problem.
Blogpost dazu

Ich habe intern noch mal was umgebaut, so dass die Grenzen der Spielwelt flexibler sind, aber die Dimensionen sollten passen. Du kannst ausrechnen wie groß die Spielwelt sein kann. Jeder Block benötigt 4 byte:
20*50*10*4 byte=40kB per Chunk
Da ein Chunk 1000m^2 groß ist (20*50), macht das für 500MB: 500000MB/40kB=12.500 Chunks also 12,5 km^2. Zum Vergleich. Das wäre 762 mal so groß wie die Spielwelt von Gnomoria. Gnomorias Engine ist der Wurfel Engine in diesem Punkt also unterlegen. Mit mehr Speicher ist natürlich mehr Spielwelt drin.

So zumindest die Theorie. Flaschenhalt ist dann aber auch wie erwähnt das Rendering. Wenn die Kamera nicht so weit rauszoomt, sollte das aber kein Problem sein.

Wenn tausende Entities irgendwo rum laufen, könnte es wegen der CPU in die Knie gehen, da habe ich leider keine Messwerte und man kann noch optimieren (Octrees z.B.).

EDIT: Wenn Gnomoria nicht 128*128*10 sondern 128^3 ist, dann ist der Vergleich natürlich etwas anders.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants