niftools / nifskope

A git repository for nifskope.
http://www.niftools.org
Other
553 stars 237 forks source link

BSLODTriShape Improvements #81

Open hexabits opened 9 years ago

hexabits commented 9 years ago

I've come upon the realization that no tool exists which can reliably edit BSLODTriShapes. Here is the problem summed up in a diagram:

bslod

Level 2 = Should disappear first Level 1 = Should disappear second Level 0 = Should never disappear

Add/Delete Issues

  1. Your 3D program might not add the triangles where you want them.
  2. Your 3D program might shuffle the entire triangle order.
  3. Which triangles are associated with which LOD level are lost on import.

Fixing this by hand would essentially be impossible, especially if the vertex order changes. The Triangle listed as using vertices 0,1,2 might not be the same as before, so you have no way of manually rearranging the triangles.

The artifacts from improper BSLODTriShape editing are primarily mesh holes from not increasing the triangle counts, or incorrect LOD switching behavior. If what used to belong in Level 0 is now in Level 2, it will disappear when it shouldn't. It's likely that the triangle was in Level 0 for a reason (it should never disappear, i.e. it's very visible).

The current "solution"

ttl269 commented 9 years ago

@jonwd7 Your muli-part solution seems good as it is universal and within nif and Nifskope.

NifSkope should be able to convert a BSLODTriShape to 3 NiTriShapes. It should append ":LOD0", ":LOD1", and ":LOD2" to each level's new NiTriShape.

I think that it would be good if Nifskope can convert BSLODTriShape into NiNode containing three NiTriShapes with above mentioned append to their names. And vice versa: Nifskope should be able to create BSLODTriShape only from NiNode containing NiTriShape blocks (max. three) and only from those having their name ending with ":LOD0", ":LOD1", ":LOD2". So, when user will want to have for example only LOD0 and LOD2 in BSLODTriShape, he would create (or get it from 3D soft exported with nif export plug-in) NiNode with only two NiTriShapes with appropriate append in names.

Because it is easy to create NiNode like structure of meshes with names in model in 3D soft (at least in Blender), so when the model is exported to nif, user get needed structure of NiNode->NiTriShapes in it.