Techniques for rendering high polycount models I would like to know what common techniques are used for rendering large models, when using rasterisation within a graphics API, for example OpenGL or Vulkan. 

For example if I had a model with >10 million triangles, and it would be too slow to render the whole model, what optimisation steps or techniques could I use?

I am currently aware of:


Frustum culling
Occlusion culling


I would not know how to apply frustum culling to a single model. I know it can be used for multiple models:

for( int i=0; i &lt; numObjects; i++ )
{
    if( insideFrustrum( objects[i] )
    {
        addModelToBeRendered( objects[i] );
    }
}



Can frustum culling be applied to a single model/mesh?
What other techniques besides the two stated can be used when rendering large data-sets?
The straightforward solution is to simple not render the high poly model at all. Have a lower detail model that you can switch to once the model is too far away for it to make a difference. There is no point in rendering 20 triangles that all end up in the same pixel.

Next option is to partition the model and then cull the individual parts. You can also make each (set of) patch have different Levels of detail. 

This partition can take the form of patches that are mostly flat. That way you can use backface culling on the whole group by taking the dot product of the average normal and comparing it to the look vector, if it is too large only the backsides will be showing and there is no point in rendering that patch.