How Homework 2 was marked
First I compiled and ran your code to reproduce your submitted output. Then I checked if the bk.json
was valid with cjio validate
and val3dity
. Next was a visual inspection of bk.json
in ninja (orientation + grouping) and with blender (face merging + holes). Finally I read your report.
Compiles and runs
- 0 - no
- 1 - yes
mesh grouping
- 0 - no
- 1 - yes
correct mesh orientations
- 0 - not working at all
- 0.5 - there are still some incorrectly oriented surfaces
- 1 - it works perfectly
face merging
- 0 - not working
- 0.25 - not working, but you have a reasonable idea on how to implement it in your report
- 0.5 - face merging is working, but only for a small number of faces
- 1 - face merging is working for most or all faces
holes
- 0 - no holes visible in CityJSON
- 0.5 - one or more holes cause an error with val3dity
- 1 - holes are working, no visible problems
CityJSON valid [1]
- 1/2 pt for success with
cjio validate
- 1/2 pt for no major errors with
val3dity
Report
- 3 - clear description of key parts, serious analysis of pros/cons, good discussion of other group’s work
- 2 - some issues (eg had to check code to clarify, superficial analysis)
- 1 - major elements missing
- 0 - not done
Discussion with other group
- 1 - yes
- 0 - no
General feedback
Based on the reports I really got the impression that almost everyone got a good grasp on the DCEL datastructure. I’m very pleased with that.
Basically everyone got the OBJ import, the orientation and the CityJSON more or less right. The face merging and hole detection was clearly a bit more tricky and not everyone did that. However even without that many teams still got a very good mark.
For the orientation people used different methods. The fastest method was based on selecting the highest vertex in a mesh, then finding the incident edge with the lowest slope and then picking the triangle with the highest vertex opposite to that edge. If this triangle points upward, it has the correct orientation. However, most people picked a method based on ray intersection testing (as described in the assignment). Notice that it is important in this case that you define a ray that is guaranteed to intersect the mesh (and ideally any manifold mesh). I have not been very critical on this point as it was not an explicit requirement in the assignment, but for some teams it probably would have been possible to create a mesh where their orientation test would fail.
Quite a few teams did a successful hole detection (in addition to proper face merging). Well done! The idea is basically to find the incident rings to a face after merging. And then decide for each ring if it is interior or exterior. I saw a few different methods to decide this. 1) based on the length of the rings. This is not very robust, as the interior ring can in theory be much long than the exterior ring that contains it. 2) based on the signed area of three consecutive points in the ring. This is also not robust, since a ring is often not convex. 3) based on the signed area of the entire ring. This is the way to go as that should always work.
Finally, not all teams seem to have validated their CityJSON output with cjio
and val3dity
. This was written in the assignment description! Eg. some teams had made BuildingParts
without a parent Building
, which is not schema valid CityJSON. Make sure to check these things for the next assignment!