Page MenuHome

Smooth Vertices (Laplacian) produces NaN coordinates for loose vertices and edges
Confirmed, HighPublic


System Information
Operating system: Windows-10-10.0.19041-SP0 64 Bits
Graphics card: GeForce GTX 1080/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 446.14

Blender Version
Broken: version: 3.0.0 Alpha. Commit hash: 247abdbf4148843daf469285a6a63ab9cd0aeef9
Worked: Broken back to 2.65, which is around when the operator was introduced

I was missing build info, so I filled the above in manually

Short description of error
The Smooth Vertices (Laplacian) (bpy.ops.mesh.vertices_smooth_laplacian()) will generate NaN coordinates for any vertex or edge that is not part of a face.

This only happens if at least one face exists. A mesh with no faces does not trigger this bug.

Exact steps for others to reproduce the error

  1. Delete the starting objects
  2. Create a plane
  3. Go into edge-select mode and duplicate one of the plane's edges. Move it to the side a bit.
  4. Run the Smooth Vertices (Laplacian) operator. The edge should disappear, and its Transform should now be full of nans
  5. Go into vertex-select mode and extrude one of the plane's vertices
  6. Run the operator again. The vertex should disappear, with the same nan result
  7. Go into face-select mode and select the plane's face.
  8. Duplicate the face and move it to the side
  9. Delete only faces
  10. Run the operator again. The edges should all disappear

A file with everything set up is attached:

I haven't observed this with the Smooth Laplacian modifier.

Event Timeline

Fen (chemicalcrux) updated the task description. (Show Details)
Evan Wilson (EAW) changed the task status from Needs Triage to Confirmed.Jun 17 2021, 2:31 AM
Evan Wilson (EAW) added a project: Modeling.

I can confirm using Alpha 3.0.0 845f4cebadc8

Tested using:
OS: Windows-10-10.0.19041.630-SP0 64 Bits
GPU: GeForce GTX 470/PCIe/SSE2 NVIDIA Corporation 4.5.0 NVIDIA 391.35

Germano Cavalcante (mano-wii) triaged this task as High priority.Jun 22 2021, 4:17 PM

NaN coordinates indicate corrupted mesh that can trigger serious problems.
So I'm setting this report as having high priority.

Yes, I was getting a lot of crashes from this. Many operators will crash Blender if given NaN coordinates.

Unfortunately, I don't understand the logic at all, so I can't help much :p . I do see that the operator and the modifier use different validate_solution functions...perhaps the modifier's does something that the operator's does not?

AJP (astronotter) claimed this task.EditedJun 29 2021, 9:05 AM

I've done some digging and found the cause of the NaNs to be the initial linear system becoming filled with Infs, which in turn is because the 'areas' associated with loose edges are 0. There seem to be flags to detect 0 area already, but I believe they don't account for the system itself filling up with Inf and then giving an incorrect result.

This comment was removed by AJP (astronotter).