Negative Volume

(John Brock) #41

I glad you found it.
As to the negative volume, that is completely valid from a NURBS surface modeling point of view. Certainly it is not useful for your hull modeling application.

By way of example, here are three rail sweeps using identical circle rails and a line profile.
I’ve set the backface color in the display mode to be magenta.
The one of the left has a negative volume, the one in the center has a positive volume, and the one on the right has a volume of zero.
All three are valid surfaces from a NURBS surface modeling point of view:


Clearly, only the center example is of use for modeling real world objects,

1 Like

Negative Volume should not exist John.

This is a programmer error. Even the one on the left the volume should be Infinity - (minus) the volume of the cylinder and not a negative volume of the cylinder.

I still believe you need to log this as an issue and get it fixed. Let the devs make it Abs(negative volume) or something.

As I said that negative value prevented Hydrostatics to calculate stuff properly. This is a serious issue.


Ivelin, it is not the negative math that is wrong, but rather your negavtive attitude… :wink:
IF you read up on the math you’ll discover that nurbs can and shall produce negative values even for something (as abstract from a mathematical point of view) as the definition “volume”.

But of course in an environment where the math is used to simulate and/or predict physics then it would make sense to pop up a warning, explaining that the math returned a value that probably is useless for the user due to a modelling error.



Negative volumes DO NOT EXIST, period!

Math of NURBS do not consider the positive infinite volume surrounding them. If the negative value of a volume is passed to the user then it is programming error.

It is not negative attitude it is realism and reliability of the software. It could be done in such a way that in case where two domains of the solid are created the volume is a sum of the volumes of the domains or abs(negative volume) either way this requires a fix.


Sure they do. It’s a positive volume in the mirrored parallel universe to ours. Which, by the way has a left-hand-rule coordinate system, which seems to be appreciated by boat designers:stuck_out_tongue_winking_eye:


It is not the “boat” designers that are the opposite!

Oh by the way here we should mention the ridiculous orientation of the ship in US and former USSR where Origin of the ship was it’s fore perpendicular. :wink: as if the ship would move backwards along the X axis or forward towards the negative (-X) direction. Ridiculous in my opinion.

As ridicuouls as having depths as positive Z.

(I have to mention here that Rhino’s current coordinate system orientation is exactly as I have been thaught the Ship should be oriented in space. (+X = Fore, +Y = Port, +Z - UP))

As for this I’ll accept it when I see proof.


In real life, no, neither does objects without volumes, like single surfaced, open objects, or any nurbs object that isn’t joined into a flawless solid. So the boat on your monitor is only mathematically defined surfaces that can be interpreted as joined into a closed volume, or an open polysurface if you don’t model both sides of the steel. And the moment a surface is lacking or a surface is twisting into and through it self it breaks the laws of physics and thus should in your world return a big fat VOLUME IS FALSE BECAUSE YOU MODELLED THIS WRONG YOU NOOB! error. :smiley: But Rhino doesn’t do that. Instead it tries to give you a most accurate volume calculation based on what you handed to it in the first place.

I have many times appreciated the estimated volume from crap models before spending the extra time on the final production part.

That I agree on. And giving sensible feedback when a user has accidentally done something wrong, or if the computer has messed up is called “Good UX” which is always important imo. At least when the user is close to a deadline.

Peace and cheers! Off to grab a beer.


Have a little faith, baby…!


Negative volume is more wrong than infinitely large or infinitely small volume. You’re wrong again!

That said,

The reason one would think single surfaced, open objects or non-joined nurbs have no volume is because it’s infinitely large (in case of single object) and infinite number of infinitely large volumes in case of non joined polysurfaces.

even so all of these are positive volumes close to + infinity or infinitely small close to 0 (zero).

I did nothing wrong as these surfaces exist and hydrostatics of them is calculated and on such draft the ship would not displace NEGATIVE VOLUME OF WATER. OMG!


I have more faith in someone discovering Negative Gravity than discovering Negative Volume!


funnysolid.3dm (115.5 KB)

Hi John,
Here is a file containing an open polysurface, which on “Cap” results in a closed solid with negative volume.
[Alternatively, I am able to create a solid with positive volume by joining it with the planar surface in the rhino file.]

(John Brock) #52

I opened your file and I didn’t find anything obviously wrong.
I Exploded it and ran RebuildEdges and Joined it again to make sure there weren’t any problems.
Then I can Cap. Again no problems.
It resulted in a closed, solid polysurface with a positive Volume:
Command: Volume
Calculating volume… Press Esc to cancel
Volume = 61391.313 (+/- 0.055) cubic millimeters

I am using a newer build of Rhino V6 than is available currently.
I recall there was a problem with a negative volume that went through development a few weeks back.
Perhaps this change sorted this issue as well.
A new Service Release Candidate should be released later on this morning.
You could try that if you want.

Is there some reason you didn’t post this to the forum?
I don’t see anything “proproetary” about the model itself



Hi John,
I will test this when the new service release is out and post my findings here.

I am not certain what you meant by this. The Rhino file I uploaded today is not propreitary. Maybe you are confusing me with the person who started this thread/topic?


(John Brock) #54

It looked like you sent the file and message to me exclusively.
Maybe I wasn’t awake enough when I looked at it.
Either way, I think we’re on the right track.

1 Like

Volume without context is meaningless.

If you assume, in the way of solid object thinking, that everything “inside” a closed boundary defines your volume, you will always get positive volume values. To make thing’s useful, we should only use the finite partition of space for calculation. But is this always “inside”?

What about voids? Considering a solid block of steel. This block has a hollowed out core. Now you can define the positive volume of the whole block. You can determine the positive volume of the air inside the block. But with respect to the volume of steel, the air inside the block does not have positive volume. In fact, you need to subtract it from the volume enclosed by the outer boundary of the block.

With respect to the steel, the enclosed air is “outside”. So the volume of the steel with respect to the inner surface would be infinite and you would need to intersect this infinite space with the outermost boundary to get a finite result. Our you can just use the finite volume that you find on the “outside” of the inner boundary. But what about it’s volume? Since this volume now is “outside” and we used positive values for enclosed spaces “inside”, the value must be negative.

And this makes perfect sense, because the volume of the inner boundary (negative) added to the volume of the outer boundary gives you the volume of what’s between those boundaries.

You could define a separate set of “void BReps” that would always calculate positive volumes but will get subtracted from the volume afterwards. Or you could just use the Surface normal direction to determine what counts as “outside”. The latter does require fewer separate cases to keep track of and integrates nicely into the overall math involved… problem is that you may be able to construct faces that overlap and intersect themselves in a way that generates outside surfaces inside your boundary. If the inward facing surfaces get bigger you will finally end up calculating negative volumes.

Rhino will try to make BReps have positive volume by orienting all faces so they face outside. So if you expect a solid closed boundary and get a negative volume, you did something very wrong constructing this BRep.

1 Like
(John Brock) #56

Usually that’s true, but I have seen a few cases where Rhino either didn’t Join all the edges, or some unknown sequence occurred that resulted in an inverted, closed BREP. It’s not supposed to be possible but I have seen it.

Most of the time, Exploding, RebuildEdges, Join solves the problem. Occasionally, the solution requires a little more digging, but it’s not ALWAYS the user’s fault.


I did not intend to put any blame. What I meant is that negative volume for BReps usually is a sign for bad geometry. Sloppy or bad modelling is a quick way to bad geometry so this should be the first thing to check for. But even clean models can give bad results in some cases.

1 Like


We’re talking about a 3d object considered as Closed Solid Polysurface in Rhino, but still having negative volume because two surfaces touch making the volume split into two-domain object. If you make such analogies what should be real life 3d steel object and what should be the air?

The result of Rhino calculating the volume should say ‘Cumulative’ and it should sum both domains as one POSITIVE result.

(This answer is based on info about the situation 3-4 months ago. I haven’t touched Rhinoceros since then.) :slight_smile:


See, that’s where the magic happens. The surfaces don’t just touch, they intersect. In reality there is no such thing as a closed boundary surface that folds in on itself. A physical outside surface cannot pass through itself and become an inside surface.

But you can create a mathematical surface that does just that. Even if Rhino tries to keep volumes of Breps positive, in some cases it fails. You can even construct surfaces that have no inside or outside and have only one continuous side. Look up on Klein-Bottles.

You are (somewhat) correct, that a real life object with intersecting boundaries would split and the parts would both have well defined outsides and volumes.

Your model had bad with intersecting boundary geometry. The question whether the volume should be positive or negative is moot. Your ship should not split into two separate volumes. It should not fall apart and it should not have an infinitely thin seam. Since your model doesn’t accurately represent the thing you want to build, whatever volume calculation method you use will not give you usable values. Even the positive sum of all enclosed volumes would be too small.

Would you have ever found out about the bad model if rhino had just returned the “physical” volume of the enclosed space?


I have the case in front of my eyes, :smiley:, yet you’re arguing about it. :rofl:
They touch, period!