Bojian Wu

ustcbjwu [AT] gmail.com
Chinese Academy of Sciences (CAS)

Google Summer of Code(GSOC 2016) Blog

Daily and Weekly Update

Bonding Period

Week 1

Week 2

Week 3

Week 4

Week 5

Week 6

Week 7

Week 8

Week 9/10/11

Week 12

Week 13

Week 14

Daily and Weekly Update

Bonding Period

20160516
  • Running an example with input of 'plate mode' single plane and following the source code of rtshot.c, then getting a general understanding of the raytracing process(several main procedure including building directory, walking tree, preparing data and ray tracing etc.)
  • 20160517
  • Today is the deadline of SIGGRAPH Asia 2016, I need to help for others' submission in our lab.
  • 20160518
  • Generating plate mode cube(manually) and doing raytracing.
  • 20160519
  • Visualization of 'plate mode' for BoT primitives in MGED
    For BoT, when rendering geometrical models in MGED, it will call rt_bot_plot(...)(about line 913 in bot.c), so changing the routines implemented in this function will generate different rendering results.
  • 20160520 Diving into rt_prep(...) and focusing on code related to binary space partitioning.
    20160521 Reading code about rt_shootray(...) and getting familiar with basic ray intersection pipeline.
    20160522 Reading 'The Hacker's Guide to BRL-CAD', paying attention to some basic requirements and coding styles mentioned in this file.
    Summary This is the last week of bonding period, actually, I almost finish all the preparing tasks listed in my proposal, including warming up in IRC, doing tests and verifications about plate mode for BoT, reading related documents and so on.
    From next week, I will pay much more attention to the internal data structure and functions used in the program and start coding.

    Week 1

    20160523 Reading g_bot_include.c cause this file contains lots of ray-tracing related basic routines(and these functions are almost finally called when doing ray-tracing in BoT primitives). Besides, *thickness* values are primary used in static int XGLUE(rt_bot_plate_segs_, TRI_TYPE)(...).
    20160524 Understanding data structure for BoT and starting designing data structure for B-rep primitives in order to integrate some extra information like thickness value array and so on.
    20160525 Discussing how to design the data structure of brep.
    20160526 Going through source code of openNURBS and checking if we can integrate additional information, like thickness value, into its built-in data structure.
    20160527 Getting familiar with openNURBS
    20160528 Weekend
    20160529 Weekend
    Summary Actually, the basic task in this week is about how to design the data structure for brep primitives, after reading source code of openNURBS(opennurbs_brep.h), I found there exists a built-in variable both in ON_Brep and ON_BrepFace for storing user defined data, so we can consider to use it for our need and store *thickness* value into brep or each face.

    Week 2

    20160530 Drafting a first version demo for generating plate mode brep primitives.
    20160531 Designing a new tool named 'brep_surf' and generating plate mode brep which contains only one face, by mimicing sample codes from 'brep_cobb' and 'brep_cube' etc.
    20160601 Exporting and importing brep primitives. Cause openNURBS does not support archiving user defined data, so I need to write it manually.
    20160602 Changing information related to outputing information when using 'l' command in MGED.
    20160603 Discussion the availability of my code and trying to refine it later.
    20160604 Weekend
    20160605 Weekend
    Summary This week, I mainly focus on plate mode NURBS export and import. Besides, in order to validate my code, I design a tool named 'brep_surf' to generate a plate mode single brep surface with thickness value provided by command line arguments. From next week, I will pay more attentions on ray tracing part.

    Week 3

    20160606 Following ray tracing pipeline of BoT again and re-organizing my thought of the whole procedure.
    20160607 Paying attention to ray tracing method involved in BoT like 'piece_shot' and 'shot', they are different and will be called in different situation.
    20160608 Reading code about how to build BVH for b-rep primitive, the related function is brep_build_bvh(...)(about line 353 in brep.cpp).
    20160609 Chinese Traditional Dragon Boat Festival
    20160610
    20160611
    20160612 Understanding the procedure of build bounding volume hierarchy(BVH) for b-rep primitives.
    Summary In order to start to work on ray tracing of plate mode NURBS smoothly, I firstly re-organize the related codes for BoT, cause it is a good template to follow, and this counts for the preparation for my later work.

    Week 4

    20160613 Reading related papers about ray tracing of NURBS surface(more details will be presented on this page)
    20160614 Designing a model and testing current status of NURBS ray tracing.
    20160615 Comparing ray tracing behaviours in BoT and B-rep for preparation of later coding because my target is trying to keep them more consistent.
    20160616 Considering more test case including ray starting from inside and outside the model.
    20160617 Drafting an initial version of plate mode ray tracing.
    20160618 Weekend
    20160619 Weekend
    Summary Generally, I read the related paper involved in the real implementation of ray-NURBS intersection computation and figure out the pipeline of it, then I follow the code and finish a rough version of plate mode NURBS ray tracing and submitted a patch. More details can be found on the blog, I run lots of tests and get some results.

    Week 5

    20160620 Discussing and preparing for mid-term evaluation
    20160621
    20160622
    20160623
    20160624
    20160625 Weekend
    20160626 Weekend
    Summary Making a short summary of what I have done till now and preparing for mid-term evaluation. Because I have submitted two patches which cover all my work in previous several weeks, so I need to move on and plan to do something else like tessellation. And more details can be found on my blog, I run a lot of tests and evaluations.

    Week 6

    20160627 Doing research on tessellation of NURBS and reading related papers(more details on the blog), actually this paper is recommended on the official website.
    20160628 Reading the code of old implementation of NURBS tessellation(about line 59 in nurb_tess.c and line 595 in bspline.cpp) and surface tree subdivision(about line 1019 in opennurbs_ext.cpp)
    20160629 Discussing with brlcad about how to test my implementation about plate mode NURBS raytracing
    20160630 Busy with my summer school course assignments
    20160701 Busy with my summer school course assignments
    20160702 Weekend
    20160703 Weekend
    Summary Discussing with @starseeker and @brlcad for ideas about further testing of plate mode NURBS ray tracing, and focuing on more complex models like surface with trimmed curves etc. Besides, learning Ayam on how to model and some other tools built in MGED with regard to testing.

    Week 7

    20160704 Designing a tool to transform old represented b-rep model into my new format(integrating plate mode information)
    20160705 Constructing new models for further testing, still working on this.
    20160706 Learning how to use gqa
    20160707 Designing several examples for testing(both BoT and B-rep), generally, they should represent same shape but different format, one is bag of triangles and the other is NURBS surface.
    20160708 Using Ayam and 3dsmax(Ayam can generate b-rep model while 3dsmax BoT) to design several simple case for testing(like single plane and hemisphere).
    20160709 Weekend
    20160710 Weekend
    Summary Cause during this week, I am busy with my summer course, so I pay less attention on it. What I have done is that I make a short plan for further test, and learn how to use gqa as a quantity measuring tool(but actually, I do find some problems when using it, please refer to my blog for details). Besides, I use Ayam and 3dsmax to design several simple similar models in order to do the comparison.

    Week 8

    20160711 Figuring out why *gqa* does not work well on several examples.
    20160712 A short analysis of gqa. Is it really accurate?
    20160713 Using obj-g to generate 'plate-nocos' models, but this tool gives 'memory leak' error.
    20160714 Generating sphere and plane again and testing gqa agin.
    20160715 A validation of my assumption before(please refer to the details posted in Week 7 and 8)
    20160716 Weekend
    20160717 Weekend
    Summary I figured out why the volume of (same)planes generated by BoT and B-rep are different, and it was caused by type of BoT('plate' and 'plate-nocos'). Then I used obj-g to get several models from *.obj, it gave me memory leak error, then I fixed it and generated several simple models like plane and sphere. At last, I used gqa to check the volume, it gave similar result.

    Week 9/10/11

    20160718-20160803 Visiting and attending SIGGRAPH 2016 held in Anaheim, Los Angeles, CA, US
    20160804 Using openNURBS API to generate trimmed B-rep surface and validate ray-tracing routine
    20160805 Testing 'rtshot' result of trimmed B-rep surface, it works well.
    20160806 Weekend
    20160807 Weekend
    Summary Cause I am stuck in the numerical test of plate mode ray tracing in these days, so I am thinking about whether it is enough for the ray-tracing test, so I design two trimmed B-rep models and run the ray tracing procedure, it turns out the results seem to be acceptable. I am currently looking for other extreme cases for further testing.

    Week 12

    20160808 -
    20160809 -
    20160810 -
    20160811 -
    20160812 -
    Summary -