Python Developer for 3D Mesh Clipping Pipeline (Trimesh, Shapely, PyProj)
Budget: $30 – $250 USD
We are looking for an experienced Python developer with strong 3D geometry skills to implement an automated mesh clipping pipeline for building extraction. Given OBJ-based 3D city tiles and building footprint polygons, the script must select the correct tiles, clip the mesh using the footprint polygon, clean the result, and export a compressed GLB.
This is a headless pipeline only (no photogrammetry, no rendering/viewer work). The output will later be deployed on AWS.
Responsibilities
1) Tile Selection
- Read building footprint polygons (GeoJSON).
- Transform polygon coordinates to match the mesh CRS using pyproj.
- Detect which OBJ tiles intersect the footprint polygon using Shapely.
- Support multi-tile selection and merging when a building crosses tile boundaries.
2) Mesh Loading and Merging
- Load selected OBJ tiles into a unified mesh using Trimesh.
- If multiple tiles are selected, merge into a single Trimesh object.
3) Cutting Volume Creation
- Convert the 2D footprint polygon into a 3D cutting volume by extruding the polygon with a generous Z-height range.
- Create a Trimesh solid suitable for boolean operations.
4) Boolean Clipping
- Perform mesh intersection/clipping using Trimesh boolean operations (e.g., trimesh.boolean.intersection) or another robust boolean backend.
5) Mesh Cleanup
- Remove small disconnected components and floating geometry.
- Recompute normals and improve watertightness where feasible.
- Optional mesh simplification if it improves performance or output quality.
6) Export
- Export intermediate output as OBJ.
- Export final output as GLB with Draco compression using tools such as obj2gltf or gltf-pipeline.
Script Requirements
- CLI-only, headless execution.
- Modular structure suitable for AWS Batch integration.
- Clean, well-structured Python code.
- Input parameters must include:
- OBJ tile folder path
- Target polygon (GeoJSON or WKT)
- Output path (GLB)
Required Skills
Must Have
- Strong Python experience (3–5+ years).
- Experience with Trimesh (or equivalent mesh tools such as PyMeshLab/CGAL).
- Practical knowledge of boolean mesh operations and common failure cases.
- Experience with Shapely and pyproj.
- Understanding of 3D coordinate systems and projections.
- Ability to work with large meshes (50–300MB OBJ files).
Nice to Have
- Experience with obj2gltf or gltf-pipeline and Draco compression workflows.
- AWS familiarity (Batch, S3) for future integration.
- Computational geometry knowledge.
- Experience with tile-based 3D city models.
- Performance optimization for heavy mesh operations.
Deliverables
1) Python script or small package that:
- Loads and merges relevant tiles
- Transforms coordinates
- Builds a cutting mesh
- Clips via boolean operations
- Cleans the result
- Exports OBJ (intermediate) and GLB (final, compressed)
2) Documentation on how to run it.
3) A small CLI wrapper (example):
python clip.py --tile_folder /path/to/tiles --polygon building.geojson --output out.glb
This is a headless pipeline only (no photogrammetry, no rendering/viewer work). The output will later be deployed on AWS.
Responsibilities
1) Tile Selection
- Read building footprint polygons (GeoJSON).
- Transform polygon coordinates to match the mesh CRS using pyproj.
- Detect which OBJ tiles intersect the footprint polygon using Shapely.
- Support multi-tile selection and merging when a building crosses tile boundaries.
2) Mesh Loading and Merging
- Load selected OBJ tiles into a unified mesh using Trimesh.
- If multiple tiles are selected, merge into a single Trimesh object.
3) Cutting Volume Creation
- Convert the 2D footprint polygon into a 3D cutting volume by extruding the polygon with a generous Z-height range.
- Create a Trimesh solid suitable for boolean operations.
4) Boolean Clipping
- Perform mesh intersection/clipping using Trimesh boolean operations (e.g., trimesh.boolean.intersection) or another robust boolean backend.
5) Mesh Cleanup
- Remove small disconnected components and floating geometry.
- Recompute normals and improve watertightness where feasible.
- Optional mesh simplification if it improves performance or output quality.
6) Export
- Export intermediate output as OBJ.
- Export final output as GLB with Draco compression using tools such as obj2gltf or gltf-pipeline.
Script Requirements
- CLI-only, headless execution.
- Modular structure suitable for AWS Batch integration.
- Clean, well-structured Python code.
- Input parameters must include:
- OBJ tile folder path
- Target polygon (GeoJSON or WKT)
- Output path (GLB)
Required Skills
Must Have
- Strong Python experience (3–5+ years).
- Experience with Trimesh (or equivalent mesh tools such as PyMeshLab/CGAL).
- Practical knowledge of boolean mesh operations and common failure cases.
- Experience with Shapely and pyproj.
- Understanding of 3D coordinate systems and projections.
- Ability to work with large meshes (50–300MB OBJ files).
Nice to Have
- Experience with obj2gltf or gltf-pipeline and Draco compression workflows.
- AWS familiarity (Batch, S3) for future integration.
- Computational geometry knowledge.
- Experience with tile-based 3D city models.
- Performance optimization for heavy mesh operations.
Deliverables
1) Python script or small package that:
- Loads and merges relevant tiles
- Transforms coordinates
- Builds a cutting mesh
- Clips via boolean operations
- Cleans the result
- Exports OBJ (intermediate) and GLB (final, compressed)
2) Documentation on how to run it.
3) A small CLI wrapper (example):
python clip.py --tile_folder /path/to/tiles --polygon building.geojson --output out.glb
Related categories:
JavaScript
Python
Software Architecture
3D Modelling
Scripting
Documentation
GeoJSON