Editing Arcane University:LOD Model Creation

Jump to: navigation, search

Warning: You are not logged in. Your IP address will be publicly visible if you make any edits. If you log in or create an account, your edits will be attributed to your username, along with other benefits.

The edit can be undone. Please check the comparison below to verify that this is what you want to do, and then save the changes below to finish undoing the edit.
Latest revision Your text
Line 1: Line 1:
{{Trail|3D Art}}
 
 
[[File:Skyrim_Whiterun_LOD1.png|thumb|350px|right|A compiled LOD file of Whiterun, viewed in NifSkope.]]
 
[[File:Skyrim_Whiterun_LOD1.png|thumb|350px|right|A compiled LOD file of Whiterun, viewed in NifSkope.]]
 
'''LOD''', or '''level of detail''', is the method used in video games to render distant objects at a lower complexity, for better performance. For objects in Skyrim, this is achieved by using meshes with lower polycount created by the 3D artists. These models are then compiled into groups of 4x4, 8x8, and 16x16 cells during [[AU:LOD Generation|LOD Generation]]. The resulting compiled nifs are loaded and rendered for cells that are not occupied by or near the player character. This article will detail the methods for creating LOD models for objects in Skyrim.
 
'''LOD''', or '''level of detail''', is the method used in video games to render distant objects at a lower complexity, for better performance. For objects in Skyrim, this is achieved by using meshes with lower polycount created by the 3D artists. These models are then compiled into groups of 4x4, 8x8, and 16x16 cells during [[AU:LOD Generation|LOD Generation]]. The resulting compiled nifs are loaded and rendered for cells that are not occupied by or near the player character. This article will detail the methods for creating LOD models for objects in Skyrim.
Line 6: Line 5:
  
 
==Overview==
 
==Overview==
There are four levels of LOD used by Skyrim, referred to as LOD0, LOD1, LOD2, and LOD3. You may also hear them referred to as LOD4, LOD8, LOD16, and LOD32, respectively. This guide will use the former system.
+
There are four levels of LOD used by Skyrim, referred to as LOD0, LOD1, LOD2, and LOD3. Alternately, you may hear them referred to as LOD4, LOD8, LOD16, and LOD32, respectively. This guide will use the former system.
*'''LOD0''' is the first level, which appears first as the player moves away from the object. This usually happens at a distance of about two cells. Many medium-sized objects only have this first level, and then fade out at greater distances.
+
*'''LOD0''' is the first level, which appears first as the player moves away from the object. This usually happens at a distance of [INSERT DISTANCE IN CELLS]. Many medium-sized objects only have this first level, and then fade out at greater distances.
*'''LOD1''' is the second level, which becomes visible several cells away. This is used for larger objects like buildings, trees, and landscape objects.
+
*'''LOD1''' is the second level, which is visible around the [INSERT DISTANCE IN CELLS] range. This is used for larger objects like buildings, trees, and landscape objects.
*'''LOD2''' is the next level, which is visible only at great distances, and often uses the same model as LOD1. Only the largest objects require a model for LOD2. This is also the level which is shown by default on the map (although this is configurable by the user in an ini file).
+
*'''LOD2''' is the next level, which is visible only at great distances, and often uses the same model as LOD1. Only the largest objects require a separate model for LOD2. This is also the level which is shown by default on the map (although this is configurable by the user in an ini file).
 
*'''LOD3''' is not used in Skyrim.
 
*'''LOD3''' is not used in Skyrim.
<gallery mode=packed style="text-align:left margin:auto" caption="Skyrim Mountain Cliff 01">
+
<gallery mode=packed style="text-align:left" caption="Skyrim Mountain Cliff 01">
 
Skyrim_Mtn_Full.png | The full mountain cliff model (3399 tris). Note that it uses two meshes/texture sets, and tiles heavily.
 
Skyrim_Mtn_Full.png | The full mountain cliff model (3399 tris). Note that it uses two meshes/texture sets, and tiles heavily.
 
Skyrim_Mtn_LOD0.png | The LOD0 model (2391 tris) uses a single full-size texture (1k), still tiling.
 
Skyrim_Mtn_LOD0.png | The LOD0 model (2391 tris) uses a single full-size texture (1k), still tiling.
Line 18: Line 17:
 
</gallery>
 
</gallery>
  
<gallery mode=packed style="text-align:left margin:auto" caption="Skyrim Farmhouse 01">
+
{| style="margin:auto"
Skyrim_LOD_Farmhouse_Full.png | The full farmhouse model (2488 tris). It uses several meshes with different shaders and textures.
+
|[[File:Skyrim_Farmhouse_Full.png|thumb]]
Skyrim_LOD_Farmhouse_LOD0.png | The LOD0 model (368 tris) uses a single trimsheet-style texture (128x256).
+
|[[File:Skyrim_Farmhouse_LOD0.png|thumb]]
</gallery>
+
|-
 +
|colspan="2" style="text-align:center"|Caption
 +
|}
  
 
==Technical constraints==
 
==Technical constraints==
Line 29: Line 30:
 
*'''No collision:''' Since the model will only be loaded at a distance, it does not need [[AU:Mesh Collisions|collision]]. If it is included in the nif, it will be ignored at LOD Generation.
 
*'''No collision:''' Since the model will only be loaded at a distance, it does not need [[AU:Mesh Collisions|collision]]. If it is included in the nif, it will be ignored at LOD Generation.
 
*'''No BSXFlags:''' Similarly, the nif does not need [[AU:NIF Data Format#BSXFlags|BSXFlags]], since they too are irrelevant. They will also be ignored if included.
 
*'''No BSXFlags:''' Similarly, the nif does not need [[AU:NIF Data Format#BSXFlags|BSXFlags]], since they too are irrelevant. They will also be ignored if included.
 +
 
However, some features are supported by LOD:
 
However, some features are supported by LOD:
 
*'''Vertex Colors:''' LOD models do retain vertex color information, which is useful for maintaining faked shadow detail.
 
*'''Vertex Colors:''' LOD models do retain vertex color information, which is useful for maintaining faked shadow detail.
*'''Transparency:''' LOD meshes have a constant alpha testing threshold of 128. Alpha blending is not supported, and alpha testing cannot be turned off. This means there are a few things to note:
+
*'''Transparency:''' Only alpha testing is supported, but not alpha blending. This also means the diffuse textures can be compressed to BC1 without a loss of transparency gradients. Keep in mind as always, however, that transparency is very resource intensive.
** Any textures that have alpha channels will have transparency in LOD, even if it is not enabled with an alpha property in the nif.
+
** The diffuse textures can be compressed to BC1 without a loss of transparency gradients.
+
** Keep in mind, as always, that transparency is very resource intensive, and should be used carefully.
+
 
*'''Glow:''' LOD models can use the glow shader. Simply add "passthru" to the name of the TriShape in NifSkope, and xLODGen will pass the shader through.
 
*'''Glow:''' LOD models can use the glow shader. Simply add "passthru" to the name of the TriShape in NifSkope, and xLODGen will pass the shader through.
  
Line 40: Line 39:
 
Both methods can and should use downscaled textures, with few exceptions. At the distances that LOD is visible, 128x128 or sometimes 256x256 is usually sufficient. Polycount will depend on the complexity of the original mesh, and how large it is, so exercise your judgment. A good rule of thumb is to make LOD0 to have 20% of the triangles that the full mesh has, and LOD1 to have 10%. If this brings it down to the low hundreds, that should be all you need.  
 
Both methods can and should use downscaled textures, with few exceptions. At the distances that LOD is visible, 128x128 or sometimes 256x256 is usually sufficient. Polycount will depend on the complexity of the original mesh, and how large it is, so exercise your judgment. A good rule of thumb is to make LOD0 to have 20% of the triangles that the full mesh has, and LOD1 to have 10%. If this brings it down to the low hundreds, that should be all you need.  
  
===Method 1: Create extra-low poly and bake===
+
===Method 1: Decimate with custom model===
This method is ideal for objects that already use baked textures, or unique architecture. The workflow is exactly the same as baking from a high poly to low poly model. Simply retopologize your model to have fewer faces, adjust UVs if needed, and bake. Since it will only ever be seen from far away, automatic decimation may even produce an acceptable result. Finally, shrink the first LOD level along its normals by 3-5%. This will prevent flickering as the full model loads in on top of it in game.
+
This method is ideal for objects that already use baked textures, or unique architecture. The workflow is exactly the same as baking from a high poly to low poly model. Simply retopologize your model to have fewer faces, adjust UVs if needed, and bake. Since it will only ever be seen from far away, automatic decimation may even produce an acceptable result.
  
===Method 2: Adjust UVs and decimate===
+
===Method 2: Decimate and adjust UVs===
[[File:UV_0to1.png|thumb|upright=0.7|right|A UV map in blender, where all UVs are in the 0 to 1 range.]]
+
 
This method is good for things that use tiling textures, like city sets. This allows your set of LOD models to use the same common set of LOD textures, instead of each building having a baked LOD model. Although if your model could save a lot of geometry by baking, that may the better option.
 
This method is good for things that use tiling textures, like city sets. This allows your set of LOD models to use the same common set of LOD textures, instead of each building having a baked LOD model. Although if your model could save a lot of geometry by baking, that may the better option.
  
 
The important thing in this method is that in order for the LOD texture to go on the atlas, all the UVs must be within the 0 to 1 range. That is, they must all be in the same UV square, not going across its boundaries. So the first step is to do this, by cutting the UVs up, or squishing them into the bounds. The model will only be seen from very far away, so some squishing and stretching is tolerable. If you have a face that uses the tiling several times over, and can't be cut up, you can also make the LOD texture itself tiled. Just be sure to account for that every time you use it. For extremely intense tiling (like mountains) you can use the full texture, but do this sparingly, and only at LOD0.
 
The important thing in this method is that in order for the LOD texture to go on the atlas, all the UVs must be within the 0 to 1 range. That is, they must all be in the same UV square, not going across its boundaries. So the first step is to do this, by cutting the UVs up, or squishing them into the bounds. The model will only be seen from very far away, so some squishing and stretching is tolerable. If you have a face that uses the tiling several times over, and can't be cut up, you can also make the LOD texture itself tiled. Just be sure to account for that every time you use it. For extremely intense tiling (like mountains) you can use the full texture, but do this sparingly, and only at LOD0.
 
Once the UVs are all condensed, decimate or retopologize as usual. Shrink the first LOD level along its normals by 3-5%. This will prevent flickering as the full model loads in on top of it in game. Now it is ready for export.
 
  
 
'''A handy tip''': When making LOD models for a set, keep a separate file with all the related LOD materials collected, so you can then import them and assign them to whichever model you are making.
 
'''A handy tip''': When making LOD models for a set, keep a separate file with all the related LOD materials collected, so you can then import them and assign them to whichever model you are making.
  
 
==CK implementation==
 
==CK implementation==
For your object to have LOD, you must assign the LOD meshes to the static form. On this form, check the "Has Distant LOD" box, and use the button that is now enabled to open a window where you can assign meshes for each level of LOD. You can assign the same model for all levels, or a different one for each. Or, you could assign a model to just one or two levels, which is useful for medium-sized architecture.
+
For your object to have LOD, you must assign the LOD meshes to the static form. On this form, check the "Has Distant LOD" box, and use the button that is now enabled to open a window where you can assign meshes for each level of LOD. You can assign the same model for all levels, or a different one for each. Or, you could assign a model to just one or two levels, which is useful for medium-sized architecture. Now it is ready for [[AU:LOD Generation|LOD Generation]]!
 
{{note|Using xEdit, it is possible to assign LOD models without enabling the "Has Distant LOD" flag. The LOD will not be used unless the flag is on!}}
 
{{note|Using xEdit, it is possible to assign LOD models without enabling the "Has Distant LOD" flag. The LOD will not be used unless the flag is on!}}
If your mod simply adds new buildings or mountains, you're done! If you are creating a new worldspace or a total conversion mod, it's time for [[AU:LOD Generation|LOD Generation]].
 
  
 
==See also==
 
==See also==
 
*[[AU:LOD Generation|LOD Generation]]
 
*[[AU:LOD Generation|LOD Generation]]
 
*[[wikipedia:Level of detail (computer graphics)|LOD]] on Wikipedia
 
*[[wikipedia:Level of detail (computer graphics)|LOD]] on Wikipedia

Please note that all contributions to Beyond Skyrim are considered to be released under the Creative Commons Attribution-ShareAlike (see Beyond Skyrim Wiki:Copyrights for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource. Do not submit copyrighted work without permission!

To edit this page, please answer the question that appears below (more info):

Cancel | Editing help (opens in new window)

Templates used on this page: