Only quads, huh? Newbie modeling question...

Hi guys,

Say I have the following model…


It seems that although each of the vertical faces of the outer cylinder is a perfect rectangle, I have to divide each face into smaller faces to account for the extra vertices required for each “step” at a different height.

This seems like a lot of waste (e.g. the face on the far in the pic left uses 7 quads to just to make a perfectly flat surface!)

I’m making some models to be used in a game engine, and I’m concerned this approach is too wasteful.

So my questions…

  1. Will it really slow rendering down that much, and I shouldn’t worry about it? Even if I have several models like this, or should I strive to reduce poly count in whatever way I can?

  2. Is there a better way to construct this model? E.g. should each of the outer faces be separated from each other so they only require 4 points each. If so, can I still make the outer surface smooth if they’re not “connected”? Something else entirely?

  3. Can I merge the same-face polys into one big poly somehow automatically using a Blender feature?

  4. The inner cylinder doesn’t suffer from the same problem, as its faces don’t share the same vertices as the steps, but extend all the way down hidden BEHIND the steps. Is this going to be a large overhead that should be avoided (i.e. partially hidden polys)

Not sure if all that makes sense, but any help or pointers much appreciated.

Thanks in advance,
Jon.

I don’t answer your questions, I got a general answer.

Every model consists of triangles - the diagonal in a quad is just not displayed and the quad is handled as such.
In a game engine a model is pretty much always handled triangulated.
You only need quads for a catmull clark subdivision for nothing else.

In your model you’d merge down the horizontal edgeloops to the base of the model forming one quad and one triangle, or 3 triangles for that matter on each sideface of the cylinder.

Brilliant!

So, something like this…?


Okay, so to do that, I had to manually select the faces, delete them, select the points, and create new faces.

Is there a quicker way to do that in Blender? E.g. select a bunch of faces and say “merge into the minimum number of polys required for this shape”?

Thanks again for your help.

Yeh, exactly like this.

You can either turn on vertex snapping and automerge, which is very handy cleaning up topology, or for this particular model just use edgeslide to slide down whole edgegroups and afterwards use remove doubles - which is a dirty method, but works. With latter you just have to be carful not to produce non manifold faces.

Lovely.

Thanks for your advice… I’m glad I asked! :wink:

In case you wonder, or someone else stumbling over this thread looking for answers:

In 2.5+ to 2.62 (current):

Edit Mode>Mesh>[X] Auto Merge Editing
Snap is the Magnet Icon, set it to Vertex, Closets and have “Snap on Itself” enabled.

If you now move one vertex close to another it’ll automatically snap and merge.

Arexma!

Saying that quads are good for Catmull-Clark is, to use your term, “bollocks.”

How about controlled loop flow?

How about controlled deformation? (e.g., animation)

How about problems like affine texture mapping?

How about pretty much every bit of topology wisdom written?

Triangles are useful. They have the advantage of reducing poly count when needed, for example. In the stair steps example, above, the tris are probably harmless (again assuming no Subsurf). But at the same time, unless the game is displaying thousands of these, I doubt it will be any noticeable performance change.

-rking

quad are very important for

loops with subsurf / control adding ect.
animation deformation which has to do with topology science

also physic deformation and this is may be a little limited in blender
but if you use external program to do some physical simulations like Fluid sim ect… topology can change everything!

but i don’t have any example for this affine texture thing ?
anyone has some good doc on this ?

thanks
salutations

Reporting for duty!

Not really.

It’s not my fault blender can’t select loops through triangles, and there are plenty of 3d packages where the triangles in a quad are displayed with a dotted diagonal.

Deformation is done on a per-vertex basis, thus triangles are deformed, not quads. Especially for controlled deformation without subdivision you exclusively need triangles, to control the fold of a quad. A quad at the elbow will have the diagonal parallel to the axis of the hinge joint, not perpendicular to it.
For high poly modelling you just don’t give a fuck about how the triangles are oriented. You put a sub-d modifier over your model and the triangles become so small at one point that you don’t see the false deformation anymore unless it’s an extreme bend.

That’s a tools problem and I don’t know ANY 3d package that discards the depth information of a vertex and renders the triangles as a 2D representation. And then again, there is no quad, it’s two triangles for OpenGL as well as DirectX.

If you got a vulcan mind strong enough to ignore the diagonals during modelling you cann apply all this wisdom.
Some tools have the diagonals dotted to indicate it’ll handle the two triangles as a quad, some just cull it completely - like Blender. Fact remains, a quad are two triangles, in the memory, under the hood and through the renderpipeline.

That’s bollocks. If you have a cube made of 6 quads, the 3D pipeline has to handle 12 triangles.
In the case above you save 46 triangles if I counted correctly. The resulting mesh has 84 triangles.
The result looks exactly the same, but your VBO doesn’t need to be fed 138 useless vertices.

If you do the math, a vertex needs triples of floats for XYZ, normal XYZ and lastly one with duplets of UV for the texture coordinates for each vertex. A single precision float has 4 bytes, so 48 bytes per vertex with 138 vertex thats 6624 bytes wasted for nothing in the memory, wasted transfering to the memory, wasted being texture mapped and rasterized.

So yeh, you could ignore that and just waste resources, then again, that’s what makes the difference between good realtime models and bad ones. Those resources wasted sum up and are better used for higher resolution texture maps, or fancy shader effects rather then rendering stuff that changes nothing of the look.

So for the last time:

Quads in Blender are triangles. Blender just doesn’t show the diagonals while other tools hint them until you actually triangulate it.
You don’t need quads for deformation, also not for texturing, the only reason why you use them is so that a catmull-clark subdivision works.
And topology wise it changes nothing either, the triangle is just not displayed as such so you see the loops better.

RickyBlender,

You can see an Affine Texture Map problem by taking the Default Cube and hitting Tab then Ctrl+t to triangulate it, then unwrap it and apply a UV Test Grid.

Now go in and scale the back pair of triangles. Look at what it does to the top. The “perspective” stretching cannot work, because you’ve modeled with triangles.

You could fix it by re-unwrapping, but that won’t work for dynamic transformations (such as animation).

-rking

Adding edge loop (CTRL + C) when modelling requires quads too.

Yeh. Same underlaying idea though.

For cutting in triangles you got to use the knive or mark the edges and cut them manually with subdivide. It’s hard to cut an edgeloop in a triangulated model, but not impossible.
If Blenders loopcut was smarter you could use it on a triangulated model, or if the handling of triangles would be smarter.

Triangulating a Quadbased model in Blender makes it forget all information about the Quads. A better handling until the triangulated export would be to keep the quad information intact, but show the triangles to be able to turn the edges as you need them.

Then again, the ultralowpoly game modelling days are over, then again with all the mobile platforms, GL ES and WebGL it’s coming back.

Righto, me again back for more help on this issue…

  1. Okay, so I understand that all quads are ultimately rendered as 2 triangles anyway, so does that imply that I needn’t strive to create quads in my model (if I’m not interested in catmull clark subdivision)?

  2. Also, in the model above, when everything was a quad, I was able to UV-Unwrap “Follow Active Quads”, which nicely placed all the vertical edges of the cynlinder so my image wrapped around it. It seems that now I have a series of quads & tris, I can unwrap the quads perfectly, but then I have to fiddle about with all the triangles to make them line up with the UV texture.

Is there a way I can unwrap the quads, but tell blender to keep the triangles attached to the quads when they’re unwrapped?

Thanks in advance.

1.) Usually you work quadbased until you start to triangulate and clean up the mesh for “low poly” usage anyways. You just want to pay attention not to build in too many triangles in the basemesh, especially working in Blender as it can’t handle quads as 2 triangles without discarding the quad information. If you easily want to add loopcuts and keep track of the topology you better stick to quads as long as possible. It also reserves the opportunity to subdivide the mesh nicely lateron and use it as sculpting base for creating normalmaps for the lowpoly model.

I’d say my general workflow for game models is:
Make any basemesh no matter the topology as fast as possible.
Sculpt in sculptris or anything else with dynamic subdivision.
Re-Topo quadbased, unwrap, bake maps. (quadbased to be able to use the model catmull clark subdivided e.g for renderscenes… intros, cuscenes, promo images…)
Triangulate the quadbased model, optimize the polycount and edge orientation, unwrap, bake again.

2.) regular unwrap should do the job if you set your seems good enough. setting seams is an art itself and needs practice. after a few models and looking at unwrapping tutorials you’ll find out what are good places for seams.
As the name implys “follow active quads” isn’t really working with triangles as they are not quads anymore to blender :wink:

Wow… some great information in that post, thanks!