# Cleaning up noisy photogrammetry building geometry (planar walls, straight ridges) while keeping the original texture

**URL:** <https://community.cesium.com/t/cleaning-up-noisy-photogrammetry-building-geometry-planar-walls-straight-ridges-while-keeping-the-original-texture/47402>\
**Category:** 3D Tiles\
**Created:** [September 26, 2026, 11:34am UTC](https://community.cesium.com/t/cleaning-up-noisy-photogrammetry-building-geometry-planar-walls-straight-ridges-while-keeping-the-original-texture/47402 "2026-09-26T11:34:11Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Nachiket\_B](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/nachiket_b/32/34982_2.png) [@Nachiket\_B](https://community.cesium.com/u/Nachiket_B)\
**Post date:** [September 26, 2026, 11:34am UTC](https://community.cesium.com/t/cleaning-up-noisy-photogrammetry-building-geometry-planar-walls-straight-ridges-while-keeping-the-original-texture/47402/1 "2026-09-26T11:34:11Z")

</div>

![compare gif (1)](https://global.discourse-cdn.com/cesium/original/3X/f/2/f283d9822c5617acdd1851aa3a73409e578286e2.gif)

![gift_slider](https://global.discourse-cdn.com/cesium/original/3X/5/7/57f03b95f477dd5c53cb070e16daada8bf8b929f.gif)

Hi all,

Anyone working with photogrammetry city meshes has probably hit this: the textures look great, but up close the geometry doesn’t hold up. Walls ripple, roof facets are full of triangle noise, ridges saw-tooth and building corners come out rounded. It’s fine from a distance, but it breaks down for close-up renders, lighting studies, measurement, or anything that goes into a CAD/BIM workflow.

The usual fixes all cost you something:

- **Remeshing/retopo** loses the UV mapping, so you have to re-bake the texture atlas.
- **Laplacian-style smoothing** softens everything, including the edges you wanted to keep.
- **Manual cleanup** doesn’t scale beyond a couple of buildings.

I built a Blender add-on called **Planer** to handle this for the digital twin work I do. It takes a different approach:

1. **Detects planar regions** in the mesh (walls, roof facets).
2. **Classifies each vertex** by how many regions it belongs to:
  - **One plane:** it’s projected onto that plane.
  - **Two planes:** it’s snapped onto their **intersection line** , so ridges and eaves come out mathematically straight.
  - **Three planes:** it’s snapped to the **three-plane intersection point** , so corners come out sharp.

3. **Moves vertices only.** Topology connectivity, UVs and materials are left alone, so the photo texture stays correctly mapped with no re-bake.

Every run also reports how far the result sits from the source surface, so you can check that it stayed faithful:

```auto
Refined: 195184->195184 faces, 812 planes, 96431 verts snapped
(4210 edge, 388 corner) | deviation mean 0.072m p95 0.275m max 0.864m

```

**[before/after image, rendered untextured so the geometry change is visible]**

**Practical notes:**

- A city block of about 195k faces takes around 4 minutes on a desktop CPU.
- The output is always a new object. The source mesh is never modified.
- It doesn’t fill holes or make meshes watertight. Open photogrammetry shells stay open.
- It needs Blender 4.2 or newer.

I’d like to hear how others here handle geometry clean-up on reality-mesh data before it goes into visualization or analysis pipelines. And if you have a problem mesh, I’m happy to run it through and share the result.

Product :- Search for PLANER – Photogrammetry mesh refiner

---

<div class="post-metadata">

**Author:** ![Nachiket\_B](https://sea2.discourse-cdn.com/cesium/user_avatar/community.cesium.com/nachiket_b/32/34982_2.png) [@Nachiket\_B](https://community.cesium.com/u/Nachiket_B)\
**Post date:** [September 27, 2026, 6:40am UTC](https://community.cesium.com/t/cleaning-up-noisy-photogrammetry-building-geometry-planar-walls-straight-ridges-while-keeping-the-original-texture/47402/3 "2026-09-27T06:40:19Z")

</div>

Tutorial Link: [https://youtu.be/m9oxz99Ysp0?si=vyhaAiTT5IxKI\_nY](https://youtu.be/m9oxz99Ysp0?si=vyhaAiTT5IxKI_nY)
