Home Technical Talk

How to create proper LODs?

Hello, I make a small VR Project in Unity and I want to create the LODs for my models myself. But when I reduce the poly count the normals of the mesh don't match the baked normals anymore. So the result is clearly visible changes when the LOD level is switched.

The Problem is, not the difference in shape, but always in the lighting since the normals don't match.


How do you deal with this? Do I have to bake a new normal map for every LOD level? Can I only remove polygons so the smoothing groups don't change?



Thank You

Replies

  • gnoop
    Options
    Offline / Send Message
    gnoop sublime tool

    I always model lod02 first and bake normal map for it . Then I do projected vertex normals so lod01 works same way dx11 automatic tessellation and displacement does. Any extra vertex in lod01 gets its vertex normal interpolated and only visual position of vertex is changing, not shading. That way it still perfectly matches the normal map you baked for lod02.

    I use data transfer modifier in Blender for that. To project /transfer vertex normal directions from one lod to another or rather from hi poly . In Maya it's Attribute transfer. For Max there are 3d party tools.

    You can transfer vertex normals from lod02 to lod03 in same manner too but usually at some point you have to do compromises because obviously there are not that many vertexes any more.

    Using hard/spli edges is a workaround too since vertex normals stay in same direction through all lods .

    So a combination of hard edges and projected from one lod to another vertex normals usually works.


    ps. Also don't bake cylindrical parts . Use rounded /beveled corners shaders to bake cylinders edges and intersections. Let surface of cylinders be shaded by vertex normals only and have flat 127.127.255 color in normal map. That way any added curvature by extra tessellation for lod01, any extra loops would still have same perfect look.

    Usually vertex normal transfer/projection is only necessary on holes in cylinders . Don't use supporting loops for good shading. Since you gonna kill those loops in next lod anyway. Use hard edge and edited /projected "explicit" vertex normals ( in MAx terms) instead.

    If polycount isn't much of a limitation you can just model in subdiv style . Bake the normal map for base mesh ( a kind of lod03) and use subdiv levels as closer lods. That way new vertexes get interpolated nomals automatically .

    But usually subdiv modelling still requires lots of support loops and thus it wouldn't be as efficient as edited "explicit" normals. But takes less thinking usually :) and ok for many things too.

    ps2. For this lamp you could just copy/paste vertex normals in few places from lod01 to lod02. One by one. Would be quicker than projection setup

  • poopipe
    Options
    Offline / Send Message
    poopipe grand marshal polycounter

    I recommend gnoop's approach

  • second_ich
    Options
    Offline / Send Message

    @gnoop Thanks for your explanation. I see there is a lot to learn. I never used anything like vertex normal projection. You have a very different approach. I usually start with the high poly for baking, mostly Subdiv model. Then I remove Subdiv and support loops and create the low poly. LODs are then just a less detailed version of this lowpoly.

    Now I use 3ds Max. So I have to find a tool for projecting vertex normals.


Sign In or Register to comment.