Crysis 2 Tessellation Article

Page 28 - Seeking answers? Join the AnandTech community: where nearly half-a-million members share solutions and discuss the latest tech.

Lonbjerg

Diamond Member
Dec 6, 2009
4,419
0
0
So people are trusting an old review using flawed drivers made by people how don't understand tessellation and suddenly we didn't go to the moon....oh waat...wrong conspiracy :whiste:
 

BFG10K

Lifer
Aug 14, 2000
22,709
2,971
126
It is clear that you don't like me, and I don't like you, but at the very least, we should show some respect to each other from this point on, starting with me.
This is an appeal to emotion logical fallacy. Please refrain from doing this. You were not personally insulted; your argument was called nonsensical. This is a tech forum. Get used to it.

You mentioned that the engine should not tessellate the ocean when it is not immediately visible through the view port, meaning to turn water tessellation off when you can't see it.
No, I said the engine should not generate any polygons at all for it, tessellated or otherwise. Or to be more specific, the engine should not be handling any ocean data at those map zones. Please try to pay attention and follow what’s being said.

There is an ocean behind the scene. Think of it as an island on top of the ocean.
The tessellation factor doesn’t appear to be decreasing according to distance. We'd expect that optimization at a minimum, even if they can’t manage to cull the mesh.

As to culling, its purpose is not to break up wired frames, but to eliminate the need to put texture and lighting etc on wired frames that will not be shown on the screen.
That’s one form of culling, yes. But there are other forms which discard entire hidden surfaces and don’t generate any work for the GPU. Again, Doom was doing this back in 1993.

Water is far complicated than most objects because it reflect light/images. In other words, if you put a mirror in a scene, then the problem with culling exposes as the viewer will detect that the mirror does not reflect objects correctly.
There are plenty of games that implement water reflections and mirrors without rendering entire maps full of meshes. Hidden water meshes play no part in the reflections of the visible meshes anyway, so I’m not sure how they’re relevant here.

That is not true. Again, the polygon is always there as it represents boundary and connection. Think of it as a waving flag with a pole in front. The wave of the flag should pass through point A to B even though the pole is in between point A and B on the flag. The texture of the part where it is blocked by the pole can be skipped, but not its wired frame. In this case, we are talking about one continuous ocean, one really big flag.
What’s happening here is more like a flag mesh being rendered across the entire map but only being visible on top of the flag pole. You wouldn’t expect that would you? Of course not. You’d expect flag polygons to be generated only in the vicinity of where they’re visible. The rest of the map data should not reference any flag information at all.

How about trees and rocks? Shall we put giant tree and rock meshes spanning the entire map, even if the objects are only visible in certain places? The ocean should be an object and like any object, it should only be referenced in the parts of the map where it’s visible.

I am glad that you mentioned those puddle of water on the ground. See for yourself (Caution, once you see this, you can never forget.)
I’ve already addressed the issue of reflective water with several points above.
 
Last edited:

3DVagabond

Lifer
Aug 10, 2009
11,951
204
106
amd_tessellation_16pixels_triangle.jpg

Image taken from http://www.geeks3d.com/20101201/amd-graphics-blog-tessellation-for-all/

I remembered it differently, and apparently wrong. Sorry for contradicting you and being wrong.
 

Seero

Golden Member
Nov 4, 2009
1,456
0
0
This is an appeal to emotion logical fallacy. Please refrain from doing this. You were not personally insulted; your argument was called nonsensical. This is a tech forum. Get used to it.
You said it.

You have made a foul out of yourself with this post by showing your lack of understanding to computer graphics.

No, I said the engine should not generate any polygons at all for it, tessellated or otherwise.
Nonsense.
Or to be more specific, the engine should not be handling any ocean data at those map zones.
Nonsense.
Please try to pay attention and follow what’s being said.
If you don't think that I am paying full attention down to words in what you said, then you are wrong. You on the other hand should pay more attention to what had already been said, over and over again.

I knew where you were going after, and thus I told you to turn it off. What is so hard to understand?
The tessellation factor doesn’t appear to be decreasing according to distance. We'd expect that optimization at a minimum, even if they can’t manage to cull the mesh.
It is idiotic to assume that no optimization has been done. Yes it may not be optimized to perfection. So what? You don't like it? Turn it off. Gee, how difficult is that? Do you know how?

That’s one form of culling, yes. But there are other forms which discard entire hidden surfaces and don’t generate any work for the GPU. Again, Doom was doing this back in 1993.
I already explained that in my first explanation post. How are you so sure that the time required to do all that filtering is faster than now? How much time needed to execute the code that discard the entire hidden surfaces? It requires all objects at the front to be tessellated and rendered in the order with respect to the viewport to avoid artifacts at the edges. How else do you know which pixel to discard without knowing which pixels occupied by the objects in front? To do it, you not only need the mesh of the object in front, but the mappings for that object. Mind you that there are many many objects used that assemble the city, and there are many objects in front of the city. Did you also missed the part where I said tests are needed to determine the answer? Maybe you have a super brain that can process all the possibility of all the different combination of coding just by looking at a screenshot, or maybe you just have a normal brain and skipped all the possibilities and jumped right into conclusions.

Doom uses voxels btw, not polygons.

There are plenty of games that implement water reflections and mirrors without rendering entire maps full of meshes. Hidden water meshes play no part in the reflections of the visible meshes anyway, so I’m not sure how they’re relevant here.
The statement you quote was about the complicity of reflection vs culling. In reality, water bounds off solid wall. To simulate this affect, you need far more processing power than tessellation at factor 64x, that is water with no environment reflection.

Look closely and the collusion point between the wall and the water in Crysis 2, water did not bounds off, they flow through the wall, and waves came through the wall. Again, the complicity of water simulation may be too complicated for you to understand. It is likely that simulated the water surface via one big piece actually take less processing power than water running around boundaries.

There are many different types of water effects in computer graphics, and Crysis 2 uses several types. Each has their purpose, and utilize resources differently. If you still believe that the method in your mind works best, then try it out yourself. I will love to see the result.
How about trees and rocks? Shall we put giant tree and rock meshes spanning the entire map, even if the objects are only visible in certain places? The ocean should be an object and like any object, it should only be referenced in the parts of the map where it’s visible.
All objects are there, but rather or not it will shown through the viewport at the time a frame is generated is very hard to predict at design stage. Designer needs to look at the map in almost every single angle and distance to determine what to put into a scene. If you play any MMO, you will know FPS plummets at populated towns. Why? Because the data of each individual players must be loaded even if you don't see them. If not, you will see people coming through naked as the armor is still loading.

Open your mind, the wireframe is not meant to be shown and the time needed to construct those wireframes is only a fraction of the load that GPU needs to carry out. Stop repeating yourself in saying "It is better not to draw things that is unnecessarily." We all know that, we just haven't found a way to do it effectively. If you are not seeing the ocean in the scene, then why keeps on complicating things that you don't see? If the answer is "because it is there", then you have just answered yourself on all the nonsense you typed above. You can't ignore the fact that there exists wireframe on things you don't see. The engine can't ignore the fact that there exists an ocean behind the city. Don't like the sound of it?
Get used to it.
 

BFG10K

Lifer
Aug 14, 2000
22,709
2,971
126
You have made a foul out of yourself with this post by showing your lack of understanding to computer graphics.
Careful there chief, that’s a personal insult. Do that again and you’ll be reported.

And it’s “fool”, not “foul”.

LOL.

I knew where you were going after, and thus I told you to turn it off. What is so hard to understand?
I’m pointing out the wasted resources and you’re telling me about using “quick fingers” to turn it off. That’s not an answer, that’s simpleton trolling.

Nonsense.
Again, not nonsense at all. The map should not reference the ocean at the data points it’s not being drawn.

It is idiotic to assume that no optimization has been done. Yes it may not be optimized to perfection. So what? You don't like it? Turn it off. Gee, how difficult is that? Do you know how?
I didn’t assume no optimization has been done. That’s a strawman argument. In your last two posts alone you’ve produced at least three logical fallacies.

At the very least the GPU/driver is optimizing something even if the game isn’t. But I’m talking about the specific case of the polygons in that mesh that are never rendered.

I already explained that in my first explanation post. How are you so sure that the time required to do all that filtering is faster than now?
Where did I say I was sure? What I said was that there are wasted tessellation resources rendering triangles in a mesh that are never visible. I also stated there’s an objectively provable performance hit in those areas, which benchmarks demonstrate.

Are you disputing either of these facts?

As for whether it can be done better, you haven’t seen the code to the engine so don’t pretend you know exactly how it works. You’re speculating as much as I am. We’d need Crytek to issue a statement to the effect of “we tried to optimize the mesh but found the hit was more than just rendering the whole thing”.

Ignoring the nVidia conspiracy theories, this seems way too much like a DX9 engine with tessellation bolted on top with a simplistic brute force approach.

Doom uses voxels btw, not polygons.
This is a comically false statement; the original Doom and Quake engines used polygon based BSP rendering.
 

Seero

Golden Member
Nov 4, 2009
1,456
0
0
Careful there chief, that’s a personal insult. Do that again and you’ll be reported.
You can report anytime you want, you however don't need to tell me about it or post about it. I however will like to see it done.

And it’s “fool”, not “foul”.
Thank you. Fool it is.

... That’s a strawman argument. In your last two posts alone you’ve produced at least three logical fallacies...
You appear to be typing nonsensical statements that do nothing but pad your posts.

I’m pointing out the wasted resources and you’re telling me about using “quick fingers” to turn it off. That’s not an answer, that’s simpleton trolling.
You keep saying it is a waste. Did or did not I said we need to test about it? If it has smaller footprint on resources and faster run time then your method, then does it mean it does not waste resources? Or does it mean your method waste a lot more resources? One way or the other, I can't change this fact, and so can you. If you believe that water tessellation means waste of resources, then I suggest you to turn it off. What else can I say? You really sounded like you are in pain about it, so I suggest you to cut the source. Trolling? Lol.
At the very least the GPU/driver is optimizing something even if the game isn’t. But I’m talking about the specific case of the polygons in that mesh that are never rendered.
I know, you said this many times. Without proof, you can make as many claims you like.
It does waste computation. This has been proven by altering the water quality setting and observing a performance change in areas where no water is visible.
Instead of what I say, lets look at the original tessellation demo from ATI
http://www.youtube.com/watch?v=7jUGPFRt4bg

Pay attention to the mesh that are not visible as it is blocked, and see for yourself if they are being tessellated or not. Also note that nothing is partially tessellated either, everything is tessellated based on a single variable (tessellation factor of that model). Don't get me wrong, the tessellation in Dx11 also progressively tessellate. What gets really confusing is the fact that you can recycle a tessellated tile.

...Are you disputing either of these facts?...
Find one youtube vid where tessellation is done the way you believe is correct, except unigine as the way wireframe is displayed is augmented, not the real look of the wireframe.

The facts presented shows that tessellation on water has an effect on that stage, which there is nothing wrong as the stage contain an ocean. That is not what you are arguing though. You are saying that they should not tessellate things that are not going through the viewport. You can not use the existing stage to show that. You need to reconstruct the stage completely. In fact, you need to construct 2 stages, one with ocean tessellated as one piece, and one with the ocean tessellated as many many pieces. If a piece is not immediately shown through the viewport, then discard it. If a piece is going to show, then load it, and then tessellate it.

As for whether it can be done better, you haven’t seen the code to the engine so don’t pretend you know exactly how it works. You’re speculating as much as I am. We’d need Crytek to issue a statement to the effect of “we tried to optimize the mesh but found the hit was more than just rendering the whole thing”.
You got one thing wrong. I said things are the way it is for a legitimate reason. I was challenged to provide one of such legitimate reasoning, which I did, with note saying that testing is needed as results will only be shown through testing. You are the one who keep saying it is a waste it is a waste...

Ignoring the nVidia conspiracy theories, this seems way too much like a DX9 engine with tessellation bolted on top with a simplistic brute force approach.
While I can agree with this statement, but didn't Dirt 2 applied tessellation more or less the same way? I did not see anyone complain about it. I can't get any better vids showing the wireframe of Dirt 2, but see for yourself.
http://www.youtube.com/watch?v=D9p3PYOX1Vc


This is a comically false statement; the original Doom and Quake engines used polygon based BSP rendering.
You got me on this one.
 
Last edited:

3DVagabond

Lifer
Aug 10, 2009
11,951
204
106
The "optimizing" of the water mesh for detail can't really be done, unfortunately. It's optimized by distance from the camera. Since the mesh is everywhere it is always at range zero from the camera. It doesn't matter how far it stretches off away from the camera. It takes the mesh from the closest point and tessellates the crap out of it. This having it there all of the time and having it everywhere is real bad. There are much better ways of doing it.
 

Dribble

Platinum Member
Aug 9, 2005
2,076
611
136
Seero has a point about the water.

Step back and look at this logically.

Crysis 2 was developed by a large team of some of the most talented graphical engineers in the world. They spent many years on this. Before that they spent many years on crysis. This engine is their pride and joy, they have spent years optimising the bejerzers off it.

As we know both crysis and crysis 2 have the hidden water layer.

Are you trying to tell me that over say 10 years development they didn't *notice* that the water was being drawn? You have managed to produce a wireframe, they must have seen wireframes like that every day of their working lives for years and years. Yet some how all those devs were completely unaware about it until like magic a few forum posters where there to put them right?

Do you understand quite how silly that sounds?

If it's there then it's there because that is the most efficient way to do it. That is the only logical explanation anyone who is not a master DX11 programmer with intimate knowledge of the crysis 2 engine can make. We have none of them, just a lot of people who don't really understand spouting off opinions like they are fact - as the old saying goes "there's nothing more dangerous then a little bit of knowledge".
 
Last edited:

3DVagabond

Lifer
Aug 10, 2009
11,951
204
106
If it's there then it's there because that is the most efficient way to do it. That is the only logical explanation anyone who is not a master DX11 programmer with intimate knowledge of the crysis 2 engine can make. We have none of them, just a lot of people who don't really understand spouting off opinions like they are fact - as the old saying goes "there's nothing more dangerous then a little bit of knowledge".

There's really no need to be a master Dx11 programmer. It's not that complicated. It's not the most efficient way to do it, at all. It's the easiest way to do it. I've said it before, but game devs are not gods. They get placed on a pedestal around here. The game industry, with few exceptions, is as sleazy as any other entertainment industry. Just like any other job there are programmers who are good and there are plenty who are lazy and just do enough to keep their jobs.

Having this gigantic mesh that stretches on to infinity and is being generated whether it's rendered or not is not awesome programming. It also has nothing to do with the game engine. If you were to license Crytek engine 3 to use for a game the ocean would not be included. It's added later by script calls on the game map.
 

Dribble

Platinum Member
Aug 9, 2005
2,076
611
136
There's really no need to be a master Dx11 programmer. It's not that complicated. It's not the most efficient way to do it, at all. It's the easiest way to do it. I've said it before, but game devs are not gods. They get placed on a pedestal around here. The game industry, with few exceptions, is as sleazy as any other entertainment industry. Just like any other job there are programmers who are good and there are plenty who are lazy and just do enough to keep their jobs.

Having this gigantic mesh that stretches on to infinity and is being generated whether it's rendered or not is not awesome programming. It also has nothing to do with the game engine. If you were to license Crytek engine 3 to use for a game the ocean would not be included. It's added later by script calls on the game map.

So what you are saying is that you with minimal knowledge of what you are talking about know best, and the crysis devs who we might assume are experts at both rendering and the crysis engine in particular are in fact are just lazy and you know much better then them.

Well we can quickly discount crysis devs being no good because they have managed to produce in farcry, crysis and crysis 2 arguably the prettiest games for their time ever. That is not the work of lazy low quality devs. Hence the only logical assumption is that they are very very good at what they do.

Do I believe you or them? That's like asking me before brain surgery do I want an expert brain surgeon or some bloke who watched a few programmes about it on the discovery channel once (but is very confident he knows how to do it!).
 

3DVagabond

Lifer
Aug 10, 2009
11,951
204
106
So what you are saying is that you with minimal knowledge of what you are talking about know best, and the crysis devs who we might assume are experts at both rendering and the crysis engine in particular are in fact are just lazy and you know much better then them.

Well we can quickly discount crysis devs being no good because they have managed to produce in farcry, crysis and crysis 2 arguably the prettiest games for their time ever. That is not the work of lazy low quality devs. Hence the only logical assumption is that they are very very good at what they do.

Do I believe you or them? That's like asking me before brain surgery do I want an expert brain surgeon or some bloke who watched a few programmes about it on the discovery channel once (but is very confident he knows how to do it!).

Rendering a mesh everywhere even when you don't need it there is good? Go ahead and give them your money. I'm not saying that you can't donate to the alter of Crytek if you want to. They made a game for consoles. They ported it over to PC. They were "sponsored" by nVidia for a patch. They are making as much money as they can off of the Crysis brand. It doesn't make them comparable to brain surgeons. What a bunch of dribble. :p
 

Lonbjerg

Diamond Member
Dec 6, 2009
4,419
0
0
Rendering a mesh everywhere even when you don't need it there is good? Go ahead and give them your money. I'm not saying that you can't donate to the alter of Crytek if you want to. They made a game for consoles. They ported it over to PC. They were "sponsored" by nVidia for a patch. They are making as much money as they can off of the Crysis brand. It doesn't make them comparable to brain surgeons. What a bunch of dribble. :p

This has been debunked already, why do you persist in using lies as "arguments"?
 

Pantalaimon

Senior member
Feb 6, 2006
341
40
91
Well we can quickly discount crysis devs being no good because they have managed to produce in farcry, crysis and crysis 2 arguably the prettiest games for their time ever. That is not the work of lazy low quality devs. Hence the only logical assumption is that they are very very good at what they do.

I don't think it's about whether the game is pretty, but was the pretty achieved in an efficient way.

In the case of Crysis 2 at least people are saying that while the game has been prettified further by the DX11 patch, the benefit and cost doesn't seem in balance due to all the pretty applied to parts of the screen that the players will never see.
 

sontin

Diamond Member
Sep 12, 2011
3,273
149
106
I don't think it's about whether the game is pretty, but was the pretty achieved in an efficient way.

In the case of Crysis 2 at least people are saying that while the game has been prettified further by the DX11 patch, the benefit and cost doesn't seem in balance due to all the pretty applied to parts of the screen that the players will never see.

The problem with Tessellation in Crysis 2 is that this is the first game which is really using Tessellation on more than half of all objects in the game. There is a "huge" performance impact, but for me there is a huge improvement, too.
 

faseman

Member
May 8, 2009
48
12
76
The problem with Tessellation in Crysis 2 is that this is the first game which is really using Tessellation on more than half of all objects in the game. There is a "huge" performance impact, but for me there is a huge improvement, too.

Yeah, I'm glad they tessellated the crap out of a concrete block. Those walls are great too! I spent over 40 hours just staring at them.
 

Modelworks

Lifer
Feb 22, 2007
16,240
7
76
One of the issues with tessellation being an on/off switch type of thing is it can become a nightmare for artists. When modeling content for games , animation also, the goal is to model in quads or faces with 4 vertexes for each face. Those are then subdivided easily into 2 triangles when you want to increase detail easily. The problem with letting a video card tessellate the mesh in game is that the artist has to either allow for that option, which will make the models look worse for anyone not using tessellation , or design meshes for the people not using tessellation. Tessellation implemented by a formula or a gpu doesn't have the benefit of understanding what the content is that it is rendering. An artist can tweak vertex or move things around for the best possible mesh but that can be destroyed if that same mesh is tessellated by the video card later resulting in a mesh that has more faces than needed, vertexes with 10+ edges coming off of it which look horrible when animated, and the overall flow of the mesh being disturbed. I think we will look back on tessellation in the gpu as being a fad, nothing more.
 

Modelworks

Lifer
Feb 22, 2007
16,240
7
76
The problem with Tessellation in Crysis 2 is that this is the first game which is really using Tessellation on more than half of all objects in the game. There is a "huge" performance impact, but for me there is a huge improvement, too.

They could have made it better and had it perform better had they just increased the polygon usage and not relied on math to interpret what the human eye perceives.
 

96Firebird

Diamond Member
Nov 8, 2010
5,711
316
126
In the future when I buy anything involving Crytek then I will make sure Tessellation is switched off. There you go that got around the simple problem and increased performance as well :)

Thats the way I see it as well...

Don't think tessellation adds any visual improvements? Turn it off...

Don't like the performance hit of tessellation? Turn it off...

Win/win!
 

SirPauly

Diamond Member
Apr 28, 2009
5,187
1
0
Yeah, I'm glad they tessellated the crap out of a concrete block. Those walls are great too! I spent over 40 hours just staring at them.

I know it! Why would developers add things to improve fidelity and realism? I prefer Crysis 2, before the patch, more performance.
 

railven

Diamond Member
Mar 25, 2010
6,604
561
126
Am I the only one that noticed in that video that Seero posted of Dirt 2 that the tessellated water has an end? It didn't run across the whole screen.

So, there is no way for the developers use size to render a water patch? It has to be rendered across the whole screen? Just curious, I'm not a graphics coder.

And for the MMO example, I've played a few MMOs where the characters don't load in naked - they don't load in until their full player loads in. Basically they magically pop up. The notion that all the players in a town/map have to load before in view prior sounds farfetched, I can easily go to a room and stand there by myself with high FPS with hundreds of people in another area, and my FPS won't tank until I walk into the room with all those users.
 

Pantalaimon

Senior member
Feb 6, 2006
341
40
91
Thats the way I see it as well...

Don't think tessellation adds any visual improvements? Turn it off...

Don't like the performance hit of tessellation? Turn it off...

Win/win!

That's your solution? So if I don't like a raw steak, I should stop eating steak altogether?

Explain to me again, how does tessellating something the viewer don't see, adds *visual* improvement?