Assassin's Creed IV: Black Flag Ocean Technology Talk

Started by
20 comments, last by TheLastOfUs 10 years, 2 months ago



Take a look at this. There is a demo and a paper somewhere. Most realistic water I've seen.

NBA2K, Madden, Maneater, Killing Floor, Sims http://www.pawlowskipinball.com/pinballeternal

Advertisement

That ocean does not have many rogue waves....not very realistic to me at all. Black Flag seems more realistic.

The ProLand video linked above is pretty much a verbatim implementation of the usual suspect, which is the Simulating Ocean Water paper by Tessendorf:

http://graphics.ucsd.edu/courses/rendering/2005/jdewall/tessendorf.pdf

NVIDIA covers a compute shader based version of it:

https://developer.nvidia.com/sites/default/files/akamai/gamedev/files/sdk/11/OceanCS_Slides.pdf

And the shading approach is pretty much covered by NVIDIA as well. It's worth downloading the NV SDK and looking at the OceanCS sample in detail.

The AC3 work appears to be quite a bit more complex, but it appears to still be grounded in the FFT approach. No point tackling it if you don't understand the Tessendorf paper.

SlimDX | Ventspace Blog | Twitter | Diverse teams make better games. I am currently hiring capable C++ engine developers in Baltimore, MD.

Thank you for your help.

The #1 question I wish someone would answer is simply - when I see waves go up in the game - there is this turquoise color in the upwell of the wave / peak - basically like a gradient. Wondering how they accomplished that.

Similar to this picture

assassins-creed-iv-black-flag-general-sc

That's covered in the FXGuide article under SSS. They're a bit hand-wavy but the essentials are there. Read it carefully.

SlimDX | Ventspace Blog | Twitter | Diverse teams make better games. I am currently hiring capable C++ engine developers in Baltimore, MD.

Thank you so much for your help Promit - found it. Seems like its subsurface scattering phenomena using a ramp gradient.

Last question - was the ocean one big mesh or was it individual planes i wonder?

Last question - was the ocean one big mesh or was it individual planes i wonder?

I cant say for sure but they probably used some LOD system similar to the ones used in terrain rendering where the ocean is divided in patches with different LODs based on distance from camera, etc.

I cant say for sure but they probably used some LOD system similar to the ones used in terrain rendering where the ocean is divided in patches with different LODs based on distance from camera, etc.

Though if it's procedural, they can generate the ocean mesh chunk by chunk during runtime, and discard the mesh when out-of-view. Certain procedural algorithms can, given a state, generate a low-res mesh, and then procedurally generate more and more detailed versions (higher LOD) of that same mesh when needed.

I cant say for sure but they probably used some LOD system similar to the ones used in terrain rendering where the ocean is divided in patches with different LODs based on distance from camera, etc.

Though if it's procedural, they can generate the ocean mesh chunk by chunk during runtime, and discard the mesh when out-of-view. Certain procedural algorithms can, given a state, generate a low-res mesh, and then procedurally generate more and more detailed versions (higher LOD) of that same mesh when needed.

Thank you! I managed to get the following from a dev on twitter:

He says the ocean is 1 mesh on a plane - which is procedural and done by a pixel shader (runtime-generated). I think you hit the nail on the head. He also says they used LOD's between shallow/deep water oceans and further waves are lesser detailed but detail only as the boat gets closer to the water.

Procedural seems to be some kind of code that "Streams" or processes graphics differently, am I right Servant? Not understanding how that exactly works when an ocean is 1 plane and generated "procedurally"

The usual way things are done is: put mesh in a file, load mesh into game, render mesh. In that way, the mesh is pre made by some artist and stored in there.

"procedural" generation means that whatever data you're using (it could be anything really, textures, geometry, random AI states, etc, for now we're with geometry) gets generated by some process in code. That process produces the data you're going to use.

Of course, nothing imposes that you can't store that data and load it later (it would still be "procedurally generated") but in this case, I doubt you'd get anything useable from storing an ocean.

So the distinction is between something artist authored and something procedurally generated. That line can be blurred easily since nothing is completely procedural (or random), you still have to input some parameters most of the time. For example, terrain generation, you'll probably want a value of how high will be the highest peak, how rough the terrain is going to be, you might want to raise or lower the ocean level, and so on.

Say, in Minecraft, the terrain isn't completely random, the biomes aren't generated out of thin air, they have to be specified somewhere, the trees they use, their animals, the ground blocks, etc.

All of these parameters are input in an algorithm (for complex stuff like terrain, it could be complete modules of algorithms with specific tasks) and the output is the data you're going to use.

"I AM ZE EMPRAH OPENGL 3.3 THE CORE, I DEMAND FROM THEE ZE SHADERZ AND MATRIXEZ"

My journals: dustArtemis ECS framework and Making a Terrain Generator

This topic is closed to new replies.

Advertisement