neumond / blender-md3

.md3 models support for Blender
MIT License
62 stars 21 forks source link

Export smoothed model messes with UVs #3

Open plsmsphr opened 8 years ago

plsmsphr commented 8 years ago

Hi,

when exporting a smoothed model without sharp edges the UVs get messed up. So I'm forced to split the edges along the seams. This looks bad on a model with a normal map which is baked from a high poly mesh.

Is this a restriction from md3 format or can this be fixed in the export script?

neumond commented 8 years ago

Hi, I think I understand what is your problem. MD3 requires vertices to have hard-binded values of normal and UV, if you need same position, but with different normal or UV, you have to duplicate vertices. Script does detect cases where you have different normal values for same vertex and duplicates them automatically, but it doesn't consider UV coords.

neumond commented 8 years ago

I'm not sure whether I fixed it, but try this: https://github.com/neumond/blender-md3/tree/uvfix

plsmsphr commented 8 years ago

Thanks for the quick fix, the UVs are left untouched now, though there are still those sharp edges left.

I can manually create an object with split edges and still keep its normals smooth:

Maybe an option to export meshes without automatic edge splitting could solve this.

Btw, an option to export only selected meshes would be nice, so it wouldn't be necessary to create separate files for each model.

neumond commented 8 years ago

Oh my blender is little bit outdated, but let me guess https://www.blender.org/manual/modeling/modifiers/modify/data_transfer.html

First key thing to keep in mind when using this modifier is that it will not create destination data layers. Generate Data Layers button shall always be used for this purpose, once set of source data to transfer is selected. It should also be well understood that creating those data layers on destination mesh is not part of the modifier stack, which means e.g. that they will remain even once the modifier is deleted, or if source data selection is modified.

I think export script reads original normal data from the model, without data transfer applied.

My code for to_mesh conversion is pretty standard:

obj.to_mesh(bpy.context.scene, True, 'PREVIEW')

Here apply_modifiers=True. But DataTransfer seems to be slightly unusual modifier.