0

I test some decimation / simplification tools to reduce triangles number of many OBJ files who represent a 3D model programmatically.

I have a problem with the function "Simplification: Quadric Edge Collapse Decimation (with texture) in MeshLab.

When I run the function I get the message : Filter failure message

I found a workaround with the IDE, I apply the function Filters / Texture / Converts PerVertex UV into PerWedge UV and then apply the simplification filter... But in the MeshLabXML api i can't find the filter to convert UV texture coordinates...

Anyone have had the problem? And resolved it?

Clement
  • 3
  • 1
  • 3

2 Answers2

0

You have two alternatives to do that:

First takes two steps:

  1. Convert your mesh to per-wedge-textured using the command meshlabserver -i inputMesh.obj -o tmpMesh.obj -m wt
  2. Apply your other filters using meshlabserver -i tmpMesh.obj -o outputMesh.obj -m wt -s myScript.mlx

The second alternative is do everything in just a step, by calling the filter Convert PerVertex UV into PerWedge UV in your mlx script before of calling Simplification: Quadric Edge .... Also, I suggest to call Remove Unreferenced Verticesjust by sanity.

Try saving this script to a file named textureSimplify.mlx

<!DOCTYPE FilterScript>
<FilterScript>
 <filter name="Remove Unreferenced Vertices"/>
 <filter name="Convert PerVertex UV into PerWedge UV"/>
 <filter name="Simplification: Quadric Edge Collapse Decimation (with texture)">
  <Param value="3000" name="TargetFaceNum" description="Target number of faces" isxmlparam="0" tooltip="" type="RichInt"/>
  <Param value="0" name="TargetPerc" description="Percentage reduction (0..1)" isxmlparam="0" tooltip="" type="RichFloat"/>
  <Param value="0.3" name="QualityThr" description="Quality threshold" isxmlparam="0" tooltip="" type="RichFloat"/>
  <Param value="1" name="Extratcoordw" description="Texture Weight" isxmlparam="0" tooltip="" type="RichFloat"/>
  <Param value="false" name="PreserveBoundary" description="Preserve Boundary of the mesh" isxmlparam="0" tooltip="" type="RichBool"/>
  <Param value="1" name="BoundaryWeight" description="Boundary Preserving Weight" isxmlparam="0" tooltip="" type="RichFloat"/>
  <Param value="true" name="OptimalPlacement" description="Optimal position of simplified vertices" isxmlparam="0" tooltip="" type="RichBool"/>
  <Param value="true" name="PreserveNormal" description="Preserve Normal" isxmlparam="0" tooltip="" type="RichBool"/>
  <Param value="true" name="PlanarQuadric" description="Planar Simplification" isxmlparam="0" tooltip="" type="RichBool"/>
  <Param value="false" name="Selected" description="Simplify only selected faces" isxmlparam="0" tooltip="" type="RichBool"/>
 </filter>

</FilterScript>

Edit the line <Param value="3000" name="TargetFaceNum" to change the value 3000 to your desired number of faces, and then execute the script using the command:

> meshlabserver -i inputMesh.obj -o outputMesh.obj -m wt -s textureSimplify.mlx
Rockcat
  • 3,002
  • 2
  • 14
  • 28
  • Thanks for your response. It works. But it is difficult to automate, because you have to check that the OBJ file is in PerVertex UV or in PerWedge UV otherwise the command crashes and i need to process many files... with ou without texture, with PerVertex UV or in PerWedge UV... – Clement Feb 19 '20 at 16:07
0

Since Meshlab 2020.12, meshlabserver has been replaced by PyMeshLab.

Quadric Edge Collapse is documented here.

sebastian
  • 1,438
  • 1
  • 15
  • 23