How to innovate the First person shooter (FPS) genre?

Started by
76 comments, last by TeamToBeDetermined 2 months, 2 weeks ago

RmbRT said:
So there are really only 8 × 8 possible positions for a terrain feature within a cell at 3 octaves

That's wrong. The number of possible positions for a peak is practically infinite and limited only by the precision we use for the height values.
The grid resolution only constrains the number of peaks we can express, since we require 3 values to define a peak at all.

That's no nitpicking. It's really important.

RmbRT said:
But I want pointy mountain tops, sharp mountain ridges, but also smooth plains and also river beds etc.

You get them from the higher frequencies. To show sharp features, you need to increase resolution, so a round peak becomes small enough to look sharp.

RmbRT said:
Which are impossible in a purely FDM approach if I do not calculate the octaves and maybe even apply erosion or something.

You mean FBM i guess. (It means Fractal Brownian Motion. 200 years ago people believed heat is some kind of fluid flowing through matter. Later they detected atoms, and saw them jittering randomly. The wider the jitter, the higher the temperature. So it was no fluid, but actually the motion of atoms which caused heat. That's where the term Brownian Motion comes from afaik.)

But yes. Ideally you need one more octave each time you double resolution. So for a 256 x 256 terrain you need to call your noise function 8 times for each texel. But even if you do this at runtime it would be no performance problem. And as shown here, erosion can be done at runtime too. So what's your problem with doing it for a static world generated offline?

RmbRT said:
It's like vector graphics vs. pixel graphics. I want to determine the semantic elements of the landscape, and then generate the shape based on that, instead of letting all semantics emerge on their own.

Then let's go back to meshes and graphs.
Which conflicts with your goals: You want to use heightmaps. You want to understand nature and replicate its processes.
But nature does not use parametric patches to design shapes. Nature uses discrete small little things which interact.
Only after nature has done it's work, we can analyze the shapes, and fit a parametric representation so it reproduces the shape.
But you can not emerge natural creation from a representation which already defines the end result of this same process you want to reproduce.

Something does not fit together. You have to make a choice.
Do you want to define the end result like an artist does? Use Blender and model your dream landscape. (seriously - why not?)
Do you want to simulate or imitate nature procedurally, so the outcome gives you a landscape? Use the tools discussed here.

RmbRT said:
This semantics-first approach lets me easily add stuff like roads, rivers, and other things, because I can perfectly plaster them on the terrain without erosion or searching or anything. I basically know the path it will take a priori because I already know the exact semantic structure of the entire region.

Ok. I've got you wrong all the time. But i also don't understand why you use noise or randomness at all. I would work on an editor to model splines. Model mountain ridges, streets, rivers, some definition of elevation on a loop, etc. Your heightmap should grow considering such input. Noise may become useful at same point in the future, to add some details. But at the moment, your primary problem is to find a geometrical definition for your semantics?

Or is that not the whole picture yet? You rather want some procedural approach to generate those semantics on top of such system? A computer artist who can model those splines defining mountains, having some deeper understanding about how mountains form in nature? Something like that?

If so, then my opinion is: It is much easier and practical to simulate nature, so it gives you all that without a need for curves, patches, related adjacency data structures like meshes, abstract concepts such as semantics, and even artificial intelligence.

RmbRT said:
Of course you get more realistic results with erosion and all that simulation stuff.

Yeah, but that's irrelevant for now. You can always erode your stuff, no matter how you create it. Even i treat erosion as a 'post-process' in practice.

RmbRT said:
But let's say you want to build a town somewhere during the game, so after the landscape already exists. The terrain needs to be flattened out there retroactively. And let's say you then need to place a roadway connecting the town to another town.

Yes. That's exactly why i (and the games industry or Hollywood as well) believe in proc. gen. If i add a new street or river, i only want to draw a spline. Details have to be created automatically, changes in terrain may require re-simulation. It may take hours. But having some sleep over night is better than paying 100 artists to move some rocks around.
Anything i have proposed considers this obvious goal.

RmbRT said:
Multi-layer noise based terrain fails to clearly define its features, because it is a fractal.

It is a start.
Ofc. you can paint a low res heightmap, scale it up using noise to add details, then erode to make it look realistic.
You add a street? Rasterize it to heightmap, apply filters to flatten if needed. It's easy.

Or, personally i could draw heightmaps in a 2D vector editor like Adobe Illustrator. It can do this, extruding gradients towards a given loop, etc.

Or i could use a game engine like Unreal, which also can create / edit terrain from few splines. It can do it in real time, showing the the final result with all procedural texturing and bells and whistles.

One does not rule the other out. I can use all those tools in interchange.

Those tools are meant for manual design, and many implement proc. gen. as well. Houdini seems the king. It can do everything. Heightmaps, particles, SDF primitives, fluid simulations, creating entire cities, and you can use it to implement your idea about semantics. Many of those tools are available with fair pricing for indie devs. Many are even free. So if you don't know yet how to turn vague ideas into practice, look up for what other people, with the same vision and working on it for decades, already have achieved. It's inspiring, and low power HW targets do not rule out modern tools. See mobile games.

RmbRT said:
That meant to get cool looking mountains like Skyrim or something, I'd need high detail noise, which has exponential cost to generate.

I think i have already surpassed the mountains of Skyrim, using a 64W CPU for full blown 3D particle simulations.
I also had a game in the works for Nokia phones running Java. Car racing over a procedural terrain generated at runtime. Low fps, but it worked. Others run details erosion sim in realtime in a browser. Others erode entire planets generated and scaled up procedurally while you fly towards them.

And you say you can't create a heightmap from procedural noise fast enough? I don't believe it.
I've asked several times why you worry about perf., but all i know is your world is static, so it can be built offline.
So what do we talk about?

RmbRT said:
And what I'm generating is not strictly a terrain shape, but an entire world with artifacts of civilisation, such as towns, bridges, roads, trade routes, etc. My terrain needs to be shaped in a manner that explicitly allows the placement of a castle city in a meaningful location on a mountain within a cell.

Generate a distance field from your cities and roads, and use it flatten / raise / blend that noisy clueless terrain, to shape it into form at will. It's easy.

It really sounds you want to work on streets and architecture first. Surrounding it with some procedural terrain won't be that much of a problem after that, i think.

RmbRT said:
So where you take randomness and then post-process it to make it intelligible, I take intelligible things and make them look more real by adding randomness afterwards.

I do not use any randomness. I did those procedural noises only for fun, and the heightmap erosion only to learn about the process, so far.

Regarding architecture and traffic networks, i'd love to generate a dystopian city destroyed by earthquakes ideally. But i'll run out of time to work on this i'm afraid.

Advertisement

Aressera said:
I think you haven't fully explored all of the options available for noise generation.

Aressera said:
As for grid artifacts, these are avoided by the quadratic interpolation. You should also familiarize yourself with signal processing concepts like the Nyquist sampling theorem and Fourier transform.

I know fully well the techniques you are talking about. I studied signal processing in university, among other things. I also know the power-of-2 octave noise stuff and that you do not require much work to add a more detailed LOD. And I read your blog post. And I find both of your techniques impressive for detailed landscape generation. But as I said: stripping away lower octaves will result in either overly smooth or overly jagged shapes, which prevents me from ever having any sharp features in a faraway LOD of a mountain while also having smooth plains at the same faraway LOD. I refer back to Skyrim for this. They have great mountains which at low LOD are not achievable using mere layered noise. I want Skyrim-quality landscapes at arbitrarily low LOD.

waterfall, Skyrim Remastered, PC gaming, The Elder Scrolls V: Skyrim, screen shot
Can you get a mountain like that using only lower detail levels in layered noise?

Thus I decided to simply place macroscopic features into my empty terrain, like mountain peaks, etc. Each cell of terrain can feature one macroscopic terrain feature, such as a mountain, a plain, a sea, or whatever. And then based on those constraints, I generate terrain that fits that requirement and also blends into the surrounding cells. And then I use a noise to determine static relationships between terrain cells, so that two adjacent mountain cells may or may not have a mountain ridge connecting them into one big mountain, or they stay two separate mountains. And the same I do for every object of interest. I first place the requirement for an object to be there, and then I generate terrain in a way that respects that requirements. Or I can generate the terrain to explicitly allow for the later addition of something in a deterministic place, such as a road, a town, etc. You cannot ever do that with your noise layers, because they are completely devoid of semantics. As I said, you cannot get a painting from layered noise, but you can get one from randomly placed objects in a scenery. And you can generate each object with some noisiness in its parameters to make it unique.

Your methods are great if you do not want any semantic annotation for your landscapes. But I need a full semantic representation of my terrain to make it not just into a world, but into a game world that's interactive. Not every little hill needs a semantic node, and I will use layered noise for adding unevenness etc. to my terrain. But the macroscopic scale of every region is designed according to an algorithm chosen based on its individual parameters. So depending on region, I use the mountain generation algorithm, the plain generation algorithm, or mountain ridge generation, mountain forest generation, etc. I choose the semantics of everything first. I can choose a priori whether I want to have a waterfall somewhere, and then can hand-tailor a terrain generation algorithm just for that. Of course it adds a lot more code than just having noise and applying erosion and other post-processing to it, but I can have multiple LOD versions for the waterfall generator and can still have a clearly recognisable waterfall even at the lowest LOD that may reduce an entire mountain to maybe a hundred triangles. Your non-semantic generation cannot do that, unless I try to run pattern recognition on the final landscape to recognise the fact that there's a waterfall supposed to be there, and then also display that at low detail.

(I just saw JoeJ's post, but I'm going to bed. I will reply tomorrow.)

Walk with God.

RmbRT said:
Or I can generate the terrain to explicitly allow for the later addition of something in a deterministic place, such as a road, a town, etc. You cannot ever do that with your noise layers, because they are completely devoid of semantics. As I said, you cannot get a painting from layered noise, but you can get one from randomly placed objects in a scenery. And you can generate each object with some noisiness in its parameters to make it unique.

You are not thinking far outside the box. Why couldn't I modify the noise result to place a road or building? Due to the manner in which the noise is constructed (iteratively at progressively finer LOD), there are many opportunities to modify the terrain shape, similar to how the erosion is applied on top of the terrain noise. For an example, see the recent blog post I made about generating impact craters. There isn't much difference between what I did for the impact craters and what would be necessary to place structures or roads on the terrain. You simply rasterize the feature(s) into the tile pixel grid at the current LOD, and use that result to modify the output of the terrain generation.

If I need the terrain to be flat for a building, I can do that by rasterizing its footprint into the overlapping tiles. If I need to place a road between two locations, I can represent the road as a series of line segments which get rasterized into the tiles. Similarly for rivers.

The noise itself doesn't have semantics, but there's no reason why I can't add semantics to control how the noise is generated and how it is applied. For instance, I can assign a terrain type to a particular area, and then the noise is transformed by math functions to produce different shapes depending on the area. This can be driven by higher-level systems that provide necessary inputs. For instance, a global climate model can determine surface temperature, which alters the materials that can be present on the surface. The composition of the planet can be simulated in a physically correct manner from first principles (Gibbs free energy minimization) and can be used to affect the kinds of materials that a planet can have.

RmbRT said:
but I can have multiple LOD versions for the waterfall generator and can still have a clearly recognisable waterfall even at the lowest LOD that may reduce an entire mountain to maybe a hundred triangles. Your non-semantic generation cannot do that, unless I try to run pattern recognition on the final landscape to recognise the fact that there's a waterfall supposed to be there, and then also display that at low detail.

Can you really see a waterfall at that distance when it becomes smaller than a pixel? My whole terrain system is built around pixel-correct LOD, such that I can guarantee that triangles are never larger than e.g. 4 or 8 pixels. Thus as you zoom in, the triangles always stay about the same size in screen space and there is no visual difference between distant mountains and near terrain. Also, as LOD is progressively increased there is never any significant popping due to the constraint on screen-space triangle size. Thus, as you zoom in waterfalls can arise naturally without the user noticing that they were not present when zoomed very far out.

I can also certainly identify waterfalls using the output of erosion simulation - find places where the slope is high and with a significant amount of water. Then you can spawn particle systems and audio sources etc. Textures can be animated using the fluid velocity vectors computed during erosion simulation.

I believe your style of “top-down” procedural generation can only go so far - it will always be limited by how much work you put into it, it doesn't scale well. The palette of your generation will only consist of the colors you choose, but there won't be much opportunity for emergent behavior. Whereas simulation-based approaches will be able to produce things you couldn't even think of, provided the simulation has good enough fidelity and complexity.

RmbRT said:
Can you get a mountain like that using only lower detail levels in layered noise?

Noone said you could get detailed mountains from just 3 levels of random noise.

Idk how Bethesda does its terrain. Watching some videos showing terrain mods, i'm not even sure if they use a low poly mesh or a height map. The distribution of peaks however looks a lot like the thing you get from fbm. And they use instanced low poly rock models scattered over the terrain.

Afaict, the dinosaur among terrain tools is World Machine. It was the most widely used tool for the games industry in the years 2000 at least. It can import a heightmap, edit and modify that with hand drawn features (loops of splines to define some elevation, spline roads and rivers, etc.), and after that you can design noise to add details, finally enhanced with erosion simulation.
There also is Terragen, also still widely used in games and movies. It was initially i purely noise based tool iirc. I have used it too for artworks. And yes, you can create quite nice terrains just from noise. Today the tool has erosion simulation as well, procedural rock placement, etc. The usual stuff.
Nowadays there are some newer tools as well, like World Creator and Gaea. The former has rich tools to design manually, the latter not so much afaict. Both do erosion simulaton. Both are very good and affordable.
Houdini also has all of those features and is the leading tool for proc. gen in general currently. It's not limited to heightmaps and people use it to generate nice rock models.

I would assume Bethesda has used such external tools, maybe multiple of them. But since their mountains clearly lack definition and structure, i would not wonder either if they had custom in editor terrain generation they made themselves. If so, they have improved a lot for Starfield. But it still looks a lot like noise driven.
(A better example would be Elden Ring. In this game they do achieve eye candy landscape vistas which look like a landscape painting. They use this to reward the player. And they also use terrain for level design. Bethesda does neither, afaict.)

So if you want mountains to look like Skyrim, save a lot of time you will need for other things, and use existing tools. Do at least some research on how they work.
Or follow the advices we gave here to do it yourself. Because all related tools i know work that way.

A semantic definition (whatever this means), won't create detailed realistic mountains out of nothing. You rule out all the building blocks such as noise and erosion, so the remainder is just that - nothing. And your low poly target won't help you, since terrain models usually are low poly anyway, even for AAA games like Skyrim.

You will at some point arrive at the same conclusion, or you will end up with terrain which simply does not look as good as Skyrim.
It's one thing to have vague visions and ideas, which our imagination turns into a expectation of awesomeness, but it's a very different thing to get there for real. Usually we have to do some things we initially did not want to do along the way.

FPS is just nostalgy)

joyoungyo said:
FPS is just nostalgy)

It's dead, Jim.

But you are a bit harsh.
It implies you think some other genre is more modern, and has some thing FPS games had not?
What is this thing? Why is FPS old but X feels new?

I'd say good way to innovate with the FPS genre right now be be to lighten up on the realism. I'm not to into the FPS genre but a lot of recent games I know of tend to be realistic modern or sci-fi. Maybe play with the time period the game takes place in or think more “Ratchet and Clank” with the weaponry.

This topic is closed to new replies.

Advertisement