KatsBits Community

Game Editing => idTech Editing Hints & Tips => Topic started by: kat on June 25, 2015, 04:37:33 PM

Title: What is 'smoothing', what are 'smooth groups'
Post by: kat on June 25, 2015, 04:37:33 PM
A more extensive and up-to-date tutorial on Mesh Smoothing is available here » (https://www.katsbits.com/tutorials/idtech/what-are-smooth-groups-and-mesh-smoothing-on-models.php)



Generally speaking "smoothing" is the act of shading (lighting) faces on a 3D model in such as way as to create the illusion of a much 'rounder' or 'fuller' structure; it should not be confused with a "smooth" sub-divided mesh (adding extra faces by sub-dividing the parent object) as both are functionally different in nature.

Whenever you use a none industry standard application to develop content for games you always (pretty much without fail) hit some rather large brick walls; smoothing, or "smooth groups" is one such wall and one of the biggest to get around. The main reason for this is that game development studios often integrate an in-game solution to smoothing modelled 3D assets that's often based on the way their main 3D content tools work with (and output) "smooth-groups". This presents a big problem for the hobbyist custom content maker in the sense that they are not (generally speaking) going to have access to the same type of professionally capable tools to make their custom 3D content as a development studio, so being 100% compatible is always in question, is it the tools causing problems or the user? And so on.

Because of the way software companies have implemented smooth groups into their various 3D applications, it means that SoftImage's XSI won't be using the same method as 3DS Max's which will again be different to LightWaves handling of it, which is different to Blenders...

Quote
Design Note: There are generally speaking three ways to create smoothing on 3D objects, by...;
  • Smoothing based on 'Angle'
    Basically this tells the 3D app to smooth lighting over surfaces based on the angular different between neighbouring faces; for instance, if you had a smoothing angle of 10° set across a collection of faces lying on a flat plain, they would all be considered part of the same smoothing 'group'. But, if you angled one of the faces so that it was 20° from the horizontal (tilted upwards) the edge along which the faces are bent creates a 'border', as a result, two 'groups' on either side of the inclined edge are formed; because it had gone over the 10° limit that had previously been set, it forces the 3D app to consider the polygons either side of the 'border' created by the incline as separate 'groups'.
  • Smoothing by 'Group'
    A 'group' is literally just that, a 'group' or collection of selected faces that are given a common 'identifier' which tells the 3D app to 'smooth' all the faces that carry the same identifier as part of the same group of faces. So having different 'identifiers' on different collections of faces means that borders are created where those individual groups meet.
  • Hard or Soft 'Edges'
    This method is similar to the above 'group' smoothing in that the technique is applied directly to the mesh itself; the main qualitative difference however, is that areas of smoothing are defined by the edges of faces (edge-loops - the lines that define and travel along the outer limits of a polygon face). Generally speaking, a single contiguous 'smoothing' is applied over an entire model, edges are then selected and 'marked' as being 'hard' or 'soft' (on/off). Where ever a hard edge is found a smoothing boundary is formed with the end result being the appearance of smoothed 'groups' (smoothed 'zones').

Forced Smoothing (forcing smooth groups)
Normally the way around the problem of smooth groups is to 'hack' or 'force' the smoothing on 3D objects by splitting vertexes to create polygon 'islands' - these are faces that can be detached from the main body of a mesh whilst remaining part of the parent object itself (see image below).


A forced smooth group based on vertex splitting to create polygon islands on a mesh object.

An alternative method is to create smooth groups using UVW map islands; and object is UVW mapped in such a way as to create individual 'islands' on the overall UVW; borders or UVW edges between each island are read and render in such a way as to create 'groups' on a mesh (see image below).


An example of laying out individual UVW map sections to create 'islands' which are often rendered as 'smooth groups' by game engines - hard/group edges follow the borders laid out by each UVW map section.