Welcome! Log In Create A New Profile

Advanced
Re: T-Junctions re-visited
March 18, 2013 06:09PM
Quote
Roland Melkert
What are you two doing to me, I've just rewrote the vertex processing code for LDCad this weekend ;)

Yep - I suspect that I will have written smoothing for Bricksmith completely twice over by the time this is all done. But ... such research is probably necessary to fully understand the problem; you and anyone else on the leading edge are essentially doing that research.

Quote

I like the opt-out approach Ben is suggesting, but I also would like to do some more coding/testing to see how far the real-time (brute force) approach can be pushed, before adding any new meta's.

Agreed -- a perf optimization META is pretty useless if there isn't a perf problem. I think at the rate we are rapid-prototyping and the rate that spec change are approved, we'll have good test apps in plenty of time. :-)

Quote

One thing we might be overlooking is the fact parts also need to be BFC certified for reliable smoothing. This seems to be the biggest problem in my current setup.

I can confirm what Travis says: neither BFC certification in the model change nor BFC awareness in the renderer are necessary to smooth. This was a good thing for me...BrickSmith's rendering path ignores BFC completely. :-) (And generally it's nice that smoothing isn't dependent on BFC cert being 100%.)

I prefer to think of the problem in terms of 1-sided and 2-sided geometry. A BFC-aware program processing BFC cert geo is essentially creating a series of one-sided triangles - the program can use the BFC invert stack to reverse triangle winding so that the end data set is entirely CCW. A BFC-unaware program draws everything two-sided and must cope with back-facing normals.* I mention this because a 2-sided lighting program must somehow be able to cope with wrong-facing normals already, so having some normals face backward without smoothing is not a problem -- in fact, every normal faces the wrong way half the time as you rotate the model.

Two triangles face in opposite directions if they have a common edge whose vertices go in the same order in both triangles. So...um...

    C
   /|\
  / | \
 / 1|2 \
A---B---D

If you have triangle ABC and triangle CBD then the common edge BC is in opposite order between the two tris (BC in the first and CB in the second). Thus you know they are wound in the same direction for a given plane, and the crease is measured via the dot product of the CCW normal of each. (In other words, this is the 'sane' case.)

But if you have triangles ABC and triangle BCD, nwo the edge BC is in the same order in both triangles...one is CCW and one is CW (for a given viewpoint). In this case you need to do one of two things:

- One-sided case: treat them as not connected - they're not visually connected or
- Two-sided case: treat them as flipped.

So in BrickSmith's case, when I find this common edge I mark 1 and 2 as "flipped neighbors", not "regular neighbors." When I calculate the normal of B1 (that is, vertex B, for triangle 1), I flip the normal of 2 to get a normal facing in the direction that 1's face normal was facing, but smoothed. Then when I go back and calculate B2 (that is, vertex B for triangle 2), I flip the normal of 1 to get a normal facing in the direciton that 2's normal was facing, but smoothed.

Since the smoothing function is the same for B1 and B2, I get the same normal, but in opposite directions, and the lighting looks continuous since the lighting is two-sided.

My indexing-consolidation pass runs _after_ all normals are calculated (so that I only 'merge' 100% smoothed vertices). In this case, B1 and B2 both go in my VBO separately because their normals are different.

This case happens most often in things like mirrored sw minifig heads - every 'seam' at the mirror line is a flipped neighbor case. If I were to track BFC cert and keep an eye on the matrix inverts, I could have simply taken the mirror-half of the minifig head and flipped the order of all vertices.

* Allen originally solved this with a clever trick: the lighting environment is mirrored around the XY plane, so back-facing triangles are lit from behind and appear correct. With the new shader-based renderer, I simply flip the noraml in-shader if it is facing the wrong way in screen space.
SubjectAuthorViewsPosted
T-Junctions re-visited Travis Cobbs343March 11, 2013 10:38PM
Re: T-Junctions re-visited Tim Gould143March 11, 2013 11:31PM
Re: T-Junctions re-visited Roland Melkert117March 12, 2013 11:17AM
Re: T-Junctions re-visited Ben Supnik110March 12, 2013 11:17AM
Re: T-Junctions re-visited Roland Melkert107March 12, 2013 11:22AM
Re: T-Junctions re-visited Ben Supnik109March 12, 2013 11:32AM
Re: T-Junctions re-visited Roland Melkert109March 12, 2013 11:41AM
Re: T-Junctions re-visited Ben Supnik110March 12, 2013 11:55AM
Re: T-Junctions re-visited Roland Melkert110March 13, 2013 10:08AM
Re: T-Junctions re-visited Travis Cobbs119March 13, 2013 11:27AM
Re: T-Junctions re-visited Allen Smith127March 12, 2013 02:01PM
Re: T-Junctions re-visited Michael Heidemann108March 13, 2013 09:27AM
Re: T-Junctions re-visited Ben Supnik114March 13, 2013 10:37AM
Re: T-Junctions re-visited Tim Gould110March 13, 2013 02:31PM
Re: T-Junctions re-visited Michael Heidemann104March 13, 2013 03:42PM
Re: T-Junctions re-visited Michael Heidemann92March 17, 2013 04:35AM
Re: T-Junctions re-visited Ben Supnik83March 17, 2013 08:43AM
Re: T-Junctions re-visited Michael Heidemann87March 17, 2013 08:59AM
Re: T-Junctions re-visited Ben Supnik81March 17, 2013 09:02AM
Re: T-Junctions re-visited Magnus Forsberg86March 17, 2013 09:15AM
Re: T-Junctions re-visited Travis Cobbs93March 17, 2013 10:09PM
Re: T-Junctions re-visited Ben Supnik103March 18, 2013 07:30AM
Re: T-Junctions re-visited Travis Cobbs108March 18, 2013 10:57AM
Re: T-Junctions re-visited Ben Supnik100March 18, 2013 11:27AM
Re: T-Junctions re-visited Travis Cobbs101March 18, 2013 12:23PM
Re: T-Junctions re-visited Ben Supnik110March 18, 2013 01:41PM
Re: T-Junctions re-visited Roland Melkert103March 18, 2013 02:51PM
Re: T-Junctions re-visited Travis Cobbs103March 18, 2013 02:59PM
Re: T-Junctions re-visited Roland Melkert97March 18, 2013 03:41PM
Re: T-Junctions re-visited Ben Supnik100March 18, 2013 06:09PM
Re: T-Junctions re-visited Roland Melkert104March 19, 2013 11:38AM
Re: T-Junctions re-visited Ben Supnik101March 19, 2013 11:43AM
Re: T-Junctions re-visited Roland Melkert105March 19, 2013 07:07PM
Re: T-Junctions re-visited Travis Cobbs98March 19, 2013 10:13PM
Re: T-Junctions re-visited Tim Gould105March 20, 2013 03:56AM
Re: T-Junctions re-visited Travis Cobbs99March 20, 2013 10:13AM
Re: T-Junctions re-visited Ben Supnik89March 20, 2013 10:23AM
Re: T-Junctions re-visited Travis Cobbs98March 20, 2013 10:29AM
Re: T-Junctions re-visited Travis Cobbs97March 20, 2013 10:26AM
Re: T-Junctions re-visited Ben Supnik77March 20, 2013 11:18AM
Re: T-Junctions re-visited Ben Supnik84March 20, 2013 06:42AM
Re: T-Junctions re-visited Roland Melkert90March 20, 2013 11:36AM
Re: T-Junctions re-visited Philippe Hurbain83March 20, 2013 06:36AM
Re: T-Junctions re-visited Ben Supnik90March 20, 2013 06:58AM
Re: T-Junctions re-visited Allen Smith80March 20, 2013 09:08AM
Re: T-Junctions re-visited Roland Melkert111March 20, 2013 11:35AM
Re: T-Junctions re-visited Ben Supnik139March 20, 2013 11:50AM
Re: T-Junctions re-visited Michael Heidemann110March 18, 2013 03:54PM
Re: T-Junctions re-visited Roland Melkert118March 13, 2013 10:03AM
Re: T-Junctions re-visited Tim Gould93March 13, 2013 03:56PM
Re: T-Junctions re-visited Sergio Reano93March 13, 2013 03:51PM
Re: T-Junctions re-visited Roland Melkert130March 13, 2013 04:36PM
Re: T-Junctions re-visited Tim Gould105March 13, 2013 05:10PM
Re: T-Junctions re-visited Ben Supnik90March 14, 2013 08:17PM
Re: T-Junctions re-visited Tim Gould157March 14, 2013 08:41PM
Re: T-Junctions re-visited Ben Supnik135March 15, 2013 10:56AM
Re: T-Junctions re-visited Roland Melkert119March 15, 2013 11:36AM
Re: T-Junctions re-visited Ben Supnik102March 13, 2013 06:58PM
Re: T-Junctions re-visited Roland Melkert98March 13, 2013 07:27PM
Re: T-Junctions re-visited Ben Supnik90March 13, 2013 07:37PM
Re: T-Junctions re-visited Roland Melkert104March 13, 2013 07:59PM
Re: T-Junctions re-visited Ben Supnik108March 13, 2013 08:18PM
Re: T-Junctions re-visited Travis Cobbs128March 14, 2013 03:23PM
Re: T-Junctions re-visited Roland Melkert124March 14, 2013 03:34PM
Re: T-Junctions re-visited Tim Gould142March 14, 2013 03:41PM
Re: T-Junctions re-visited Roland Melkert107March 15, 2013 11:33AM
Re: T-Junctions re-visited Tim Gould93March 13, 2013 07:43PM
Re: T-Junctions re-visited Roland Melkert96March 13, 2013 08:08PM
Re: T-Junctions re-visited Tim Gould94March 13, 2013 08:18PM
Re: T-Junctions re-visited Ben Supnik131March 14, 2013 08:15PM
Re: T-Junctions re-visited Roland Melkert136March 15, 2013 11:29AM
Re: T-Junctions re-visited Travis Cobbs113March 15, 2013 12:27PM
Re: T-Junctions re-visited Ben Supnik106March 15, 2013 05:08PM
Re: T-Junctions re-visited Travis Cobbs97March 16, 2013 11:29PM
Re: T-Junctions re-visited Ben Supnik82March 17, 2013 08:58AM
Re: T-Junctions re-visited Roland Melkert84March 17, 2013 12:35PM
Re: T-Junctions re-visited Travis Cobbs97March 18, 2013 12:28PM
Re: T-Junctions re-visited Travis Cobbs109March 18, 2013 12:32PM
Re: T-Junctions re-visited Roland Melkert95March 18, 2013 05:00PM
Re: T-Junctions re-visited Travis Cobbs115March 18, 2013 11:05PM
Re: T-Junctions re-visited Roland Melkert115March 19, 2013 11:38AM
Re: T-Junctions re-visited Sergio Reano119March 26, 2013 02:46PM
Re: T-Junctions re-visited Roland Melkert90March 27, 2013 11:19AM
Re: T-Junctions re-visited Sergio Reano113March 27, 2013 01:48PM



Sorry, only registered users may post in this forum.

Click here to login