IRC log for #brlcad on 20150828

00:35.26 *** join/#brlcad sofat (~sofat@202.164.45.212)
00:40.19 Stragus You really should focus on a way to make this work in a single pass
00:40.41 vasc i think that would require a miracle
00:41.10 vasc have you seen how the regular algorithm works?
00:41.21 vasc calling it a single "pass" is a misnomer
00:41.31 Stragus I mean a single raytracing pass
00:41.34 vasc the same hit points are looped over and over and over again
00:41.55 Stragus Fine, at least gather the raytracing hits just once
00:42.09 Stragus Any kind of sorting obviously involves revisiting hits multiple times
00:42.14 vasc that means buffers
00:42.22 vasc lots of buffers
00:42.31 vasc the classical time vs space tradeoff
00:42.58 Stragus Hum yes, that's true in some ways
00:43.10 vasc two z buffers two color buffer and one stencil buffer
00:43.39 Stragus Z buffers?...
00:43.48 Stragus Just gather and buffer all hits, sort, process
00:44.08 vasc you need to store the backs and the fronts of objects
00:44.15 vasc so you can do the csg
00:44.19 Stragus That's the hits you buffer
00:45.09 vasc if i had those z-buffers i don't think i would need the per pixel hit list at all
00:45.51 vasc you know... the DYNAMIC one
00:46.18 vasc i haven't quite gotten the peculaliar of these methods yet
00:46.22 Stragus Geometry is often flawed, it's possible to: Enter A, Enter B, Exit A, Exit B
00:46.26 vasc some claim to be O(kN)
00:46.29 Stragus So you do need to buffer stuff
00:46.47 vasc the 1989 one said its complexity was based on the number of segments
00:46.55 vasc per primitive
00:46.56 vasc max
00:47.16 vasc that's why you need those two buffers
00:47.19 vasc and the stencil bits
00:48.04 Stragus How many CSG primitivies can you have simultaneously with these stencil bits?
00:48.14 vasc depends on the paper
00:48.28 Stragus I mean... if you have 8 CSG primitives, then you could use a 8 bits stencil buffer to track if you are in/out of each object
00:48.32 Stragus That's a little limited
00:48.45 vasc the bits are used to encode which state of the CSG tree you are in
00:48.57 vasc not the primitive per se
00:49.25 Stragus Thinking.
00:49.35 vasc better ways of storing the csg tree mean more objects in same bits
00:50.23 Stragus Right, I see what they mean, with the object-based space partitionning
00:50.26 vasc log2(n+2) stencil bits for number of primitives in expression for blister
00:50.48 vasc which is the sorta crappy compress one
00:51.37 vasc if you read the rossignac paper
00:52.00 vasc he encodes the tree in a way that you can encode 10^38 primitives in 7 stencil bits
00:52.52 Stragus You'll want a 32 bits integer per ray anyhow, for efficient memory access, so that should be plenty
00:53.52 Stragus I'm not informed enough to know if all that is really preferable to buffering hits in shared memory and sorting
00:54.27 vasc i haven't wrapped my head around this properly yet
00:54.32 vasc quite
00:54.39 vasc it probably depends
00:54.48 vasc its sorting and more sorting vs buffers
00:55.13 vasc and the sorting may have dynamic reallocs
00:58.08 vasc i still haven't got how the sorting would be done
00:58.59 vasc http://i.imgur.com/YwIBlpt.png
00:59.02 vasc i don't get that
00:59.14 Stragus Probably some insertion sort since the hits will always be nearly sorted
00:59.50 vasc do i need like an array of size num_primitives+1
01:00.00 vasc i mean a 2d array
01:00.18 Stragus Hum, no
01:00.30 vasc or a 1d list of tuples with 1+n_primitives elements
01:00.37 vasc bits
01:01.26 vasc like {distance, prim0bit, prim1bit,....}
01:01.27 Stragus Let's assume you have some struct able to store 16 hits. Each ray is born which a bunch of such structs in shared memory. If they are exausted, then it's allocated dynamically from some global static buffer with atomics
01:01.46 vasc i'm just trying to understand this. in c.
01:01.53 vasc or c++
01:02.10 vasc then you apply that Roth table
01:02.34 vasc and filter stuff out
01:04.10 Stragus The struct should hold whatever information you need to register for each hit
01:04.21 Stragus Distance is obviously required for sorting
01:04.42 vasc yeah but what else do i need to annotate the hits with
01:04.52 vasc and how to generate that table for a tree
01:05.00 vasc and how to apply the tree table to the hits
01:05.08 vasc to transform and then filter them
01:05.27 vasc at least the list length doesn't seem to increase in the temp steps
01:05.49 vasc also
01:06.16 vasc from what i read you can compute if something is in/out by doing that dot(r.d,n) on the normal of each hit point
01:06.38 vasc so you don't need to store the info on cols 1,2 at all
01:06.47 vasc you can compute it with lots dot products
01:07.39 vasc so the first bullet and second bullet is tame
01:07.44 vasc in fact 1 is kinda done
01:07.50 vasc well 2 actually
01:07.52 vasc already
01:08.03 vasc just not the in/outs but that's just doing the normals with dot products
01:09.02 vasc so now we need that Roth table
01:09.09 vasc but for a TREE
01:09.44 vasc hm remembered one bit
01:10.21 vasc better to have that per primitive tupples thingie after all
01:11.21 vasc more dynallocs
01:11.28 vasc well at least this one is easy to compute
01:11.48 vasc i'm kinda curious how the current code actually does it again
01:11.50 vasc *shudder*
01:11.55 vasc last time i tried to read it was bad
01:14.52 vasc time to fire old netbeans to swim into the noodlestream of BRL-CAD boolean eval
01:19.11 vasc 2118 lines of code
01:20.04 vasc maybe i should print it and go read it at the beach
01:20.07 vasc it just doesn't compute
01:20.57 vasc http://brlcad.org/websvn/filedetails.php?repname=BRL-CAD&path=%2Fbrlcad%2Ftrunk%2Fsrc%2Flibrt%2Fbool.c
01:21.32 vasc and loads and loads of dynamic linked lists
01:22.37 vasc rt_boolfinal and rt_weave0seg are the ones that matter
01:22.58 vasc i mean rt_boolfinal and rt_boolweave
01:23.52 vasc i think i managed to remove the gotos of rt_boolweave once
01:25.22 vasc maybe i could try applying the automatic man-bot code cleaner on that code
01:25.26 vasc just like i did on the solver
01:26.26 vasc turns BRL-CADish code into cleanish nearly OpenCL compatible code
01:27.39 vasc i'm good at that. i turn my brain off and become a man-compiler
01:28.06 vasc a great skill to have as a maintainer
01:28.13 vasc not much of a developer skill though
01:28.50 vasc must have been from reviewing reformatting, fixing like 2-3 patches a day for like 5 years for freeciv
01:28.53 vasc i got good at that
01:29.32 vasc first to check if those two functions are all we need
01:29.38 vasc then time to get the hatchet
02:09.18 vasc remove unused functions and bug printfs done
02:09.30 vasc 1578 LOC
02:09.42 vasc that's 540 otu
02:09.44 vasc out
02:09.59 vasc still too bleeping complicated
02:10.22 Stragus I'm not fond of the way the code was written
02:10.39 Stragus I would have broken stuff into static inlined functions...
02:10.57 vasc next i'm gonna do inlining of small functions and cleanup more unused code
02:11.22 Stragus In their defense, compilers might not have been able to do proper inlining when it was written
02:11.27 vasc but its still a mess
02:12.11 vasc try porting *that* to opencl...
02:12.28 vasc %s/register //g
02:12.29 Stragus I would understand the purpose and rewrite, but that's me
02:12.49 vasc it's a real pain to rewrite this
02:12.56 vasc to convert it into opencl
02:13.02 vasc that's why i wanted something whole new
02:13.16 Stragus I would find it easier than trying to work with the existing code
02:13.22 vasc new to BRL-CAD at least. just like i did for bvhs and bots.
02:13.27 Stragus It's just... not designed for GPUs, or for parallel hardware
02:13.35 Stragus Right
02:13.37 vasc i have been doing a mixed approach.
02:14.14 vasc some is conversion of brl-cad code to opencl. partly the primitives because we had specific requirements on error output on those
02:14.26 vasc and partly because the alternatives aren't that much better
02:14.38 vasc except the triangles
02:14.40 vasc the bot
02:14.43 vasc i did that one
02:14.46 vasc even though its not complete
02:14.50 Stragus Primitives were just math, that's fine
02:14.51 vasc it doesn't support the plate mode and so on
02:15.00 Stragus This dynamic allocation stuff to manage hits and segments is... bad
02:15.03 vasc then i used the bvh instead of whateverr
02:15.13 vasc well yeah you saw the code right
02:16.15 Stragus Even if it were CPU code, I would never malloc() every little thing, I would use a static buffer that grows if and when required
02:16.20 vasc http://pastebin.com/2mTFicUL
02:16.24 vasc this is the calling code
02:16.25 Stragus doesn't like that code
02:16.54 vasc just there it moves segments from one list to another, then another then another
02:17.05 vasc and that's without the boolean processing
02:18.33 vasc http://pastebin.com/1cfyRbHe
02:18.37 vasc this is the boolean weaving
02:18.48 vasc after i removed the debug messages. all over 500 LOC of them
02:18.59 vasc i still left comments...
02:19.16 vasc more list SHIT
02:19.28 vasc double linked list SHIT and GOTOS
02:19.46 Stragus Eh yup
02:20.02 vasc and guess what it uses that per ray bitvector which states ALL intersected solids that i worked so hard to remove
02:20.35 vasc it even has handlers
02:20.37 Stragus A per-ray array of bits, N bits for N primitives?
02:20.39 vasc function pointers
02:20.55 vasc per ray array of bits. N bits for N primitives.
02:20.56 vasc yes.
02:21.24 vasc rt_boolfinal uses it
02:21.30 Stragus This is atrociously bad
02:21.35 Stragus Seriously... WTF
02:21.47 vasc const struct bu_bitv *solidbits
02:22.12 Stragus Don't bother trying to port to OpenCL, there's nothing you can use
02:22.17 Stragus Everything has to be rewritten
02:23.22 vasc see that's the thing
02:23.25 vasc i would like to
02:23.28 vasc but it's so...
02:23.29 vasc GAH
02:23.50 vasc after i dunno like 20 or 30 refactors
02:23.55 Stragus Understand what goes in, and what goes out, close your eyes and rewrite
02:23.55 vasc maybe it would shape up
02:24.03 Stragus I don't think so
02:24.23 Stragus The whole algorithm is based on fundamental concepts that must be changed, all of them
02:24.47 vasc well
02:24.54 vasc some lists are only being iterated
02:25.09 vasc or copied verbatim to others
02:25.12 vasc or filtered
02:25.37 vasc good luck getting which is which though
02:27.16 vasc if i wanted to do that
02:27.24 vasc first thing would be to change lists to arrays
02:27.32 vasc preferably well known sized arrays
02:27.38 vasc and remove gotos
02:27.46 vasc and the function pointers
02:28.39 Stragus Yup
02:32.17 vasc ok i think i removed the function pointers and inlined one function
02:35.19 vasc 4 gotos out
02:40.23 vasc another
02:42.28 vasc 10 more gotos
02:53.59 vasc a couple more but this one is a bit tangled
02:59.36 vasc ok... another 12 gotos or so
03:00.08 vasc and these were nearly useless
03:01.07 vasc the compiler can optimize those branches easily
03:02.42 vasc grep goto src/librt/bool.c |wc -l
03:02.42 vasc 49
03:02.45 vasc this is the old file
03:02.51 vasc grep goto bool.c |wc -l
03:02.51 vasc 19
03:02.54 vasc this is the new file
03:03.51 vasc the most hairy one is the rt_boolweave
03:04.42 vasc i mean rt_booleval
03:15.06 vasc 13
03:23.23 vasc 12
03:25.16 vasc bah
03:26.03 vasc well at least i'll have something smaller to look at
03:49.04 *** join/#brlcad merzo (~merzo@111-44-132-95.pool.ukrtel.net)
04:14.46 *** join/#brlcad vasc (~vasc@bl12-167-49.dsl.telepac.pt)
05:03.06 *** join/#brlcad merzo (~merzo@83-29-133-95.pool.ukrtel.net)
06:33.12 *** join/#brlcad Boquete (~piotr@dwd173.neoplus.adsl.tpnet.pl)
07:58.10 *** join/#brlcad merzo (~merzo@119-70-133-95.pool.ukrtel.net)
08:17.20 *** join/#brlcad Ch3ck_ (~Ch3ck@154.70.111.68)
10:02.21 *** join/#brlcad merzo (~merzo@user-94-45-58-141.skif.com.ua)
10:19.58 *** join/#brlcad sofat (~androirc@101.214.230.247)
10:29.42 *** join/#brlcad dracarys983 (dracarys98@nat/iiit/x-nujuyalijwjubmio)
10:29.57 *** join/#brlcad bhollister (~brad@2601:647:cb01:9750:7d54:b79d:72f2:3078)
10:32.55 *** join/#brlcad bhollister (~brad@2601:647:cb01:9750:7d54:b79d:72f2:3078)
10:34.35 *** join/#brlcad sofat (~androirc@101.214.230.247)
10:53.07 *** join/#brlcad sofat (~androirc@101.214.230.247)
11:00.16 *** join/#brlcad konrado (~konro@41.205.22.55)
11:13.15 *** join/#brlcad shaina (~shaina@117.214.247.98)
11:18.14 *** join/#brlcad ih8sum3r (~ih8sum3r@122.173.197.231)
11:38.41 *** join/#brlcad merzo (~merzo@user-94-45-58-141.skif.com.ua)
12:05.58 *** join/#brlcad sofat (~androirc@101.213.170.115)
12:30.14 *** join/#brlcad merzo (~merzo@user-94-45-58-141.skif.com.ua)
12:47.57 *** join/#brlcad merzo (~merzo@user-94-45-58-141.skif.com.ua)
13:24.48 *** join/#brlcad Ch3ck_ (~Ch3ck@154.70.111.105)
14:15.04 *** join/#brlcad sofat_ (~androirc@106.192.162.255)
14:35.51 *** join/#brlcad ih8sum3r (~ih8sum3r@122.173.197.231)
15:27.10 *** join/#brlcad localhost__ (~Ch3ck@154.70.98.105)
15:30.45 *** join/#brlcad merzo (~merzo@user-94-45-58-141.skif.com.ua)
15:32.30 brlcad maths22: hah, that's awesome!
15:32.37 brlcad maths22: did you have to make any source mods?
15:32.56 brlcad ih8sum3r: can you be more specific?
15:35.42 ih8sum3r brlcad: Hello, I'm getting this error: http://paste.ubuntu.com/12195946/ when I run startvm on server
15:36.14 ih8sum3r and
15:36.17 ih8sum3r vboxheadless --startvm OGV gives this : exec: /usr/local/lib/virtualbox/VBoxHeadless: Permission denied
16:07.41 brlcad ih8sum3r: try running those commands via sudo
16:09.07 ih8sum3r my ssh stops again :(
16:09.38 ih8sum3r contacting with my ISP provider to solve this, till then can you please set my ssh problem
16:10.16 brlcad i don't know what that means
16:10.35 ih8sum3r with ssh to brlcad.org I'm getting this : ssh_exchange_identification: Connection closed by remote host
16:10.45 brlcad pm me your IP
16:11.14 ih8sum3r Okay doing
16:11.59 ih8sum3r done please check
16:12.14 brlcad eh?
16:12.32 brlcad send me your IP in a private message (via IRC)
16:12.52 brlcad that is not your IP
16:12.57 brlcad that is a local address
16:13.10 Ch3ck_ brlcad, I've been having a similar issue
16:13.17 brlcad go to whatismyip.com
16:13.24 brlcad Ch3ck_: ditto then... :)
16:14.09 Ch3ck_ brlcad, (y)
16:14.33 *** join/#brlcad dracarys983 (dracarys98@nat/iiit/x-kdustzmopbtsohxg)
16:20.20 brlcad your ISPs are misconfigured, you IP address maps to a name and that name does not map back to that IP address
16:20.31 brlcad in both your cases, your IP maps to a name and that name does not resolve to anything
16:20.58 brlcad that's why the denials started occurring -- that's a common trick of people spoofing IP addresses
16:21.09 brlcad and is a failure of RFC931
16:22.17 brlcad try logging in now
16:23.23 ih8sum3r working now
16:23.24 brlcad I note that both of you seem to be on dynamic IP addresses, which means this problem will continue as soon as your IP changes
16:24.34 brlcad you should contact your ISP and ask them to either remove the DNS entry for their IP addresses or add the reverse mapping of DNS name to IP (which is currently missing)
16:25.03 brlcad you can confirm this yourself by running "nslookup YOURIP", then "nslookup WHATEVERNAME" that the first nslookup reported
16:25.07 brlcad they should match
16:26.22 Ch3ck_ brlcad, I see now
16:27.41 Ch3ck_ is back in bizznis!
16:27.57 brlcad you IP address is specifically whitelisted, so like I said -- you'll be unable to get in again as soon as your IP address changes
16:29.01 brlcad e-mail me or ``Erik your new IP (which may take hours/days to whitelist) to add to /etc/hosts.allow or bounce through an intermediate server that does not have misconfigured DNS and you should be good
16:30.15 Ch3ck_ brlcad, Alright, will do.
16:30.27 Ch3ck_ I have a small issue, it seems the bzflag server does not have gcc?
16:30.40 Ch3ck_ I've tried compiling brlcad and there's no gcc
16:32.27 brlcad there's no symlink (apparently)
16:32.28 sofat_ Ch3ck, i complied brlcad code on bz server using cmake
16:32.34 brlcad probably upgrade wiped it out recently
16:32.38 brlcad just use gcc47
16:33.23 Ch3ck_ Alright
16:43.52 *** join/#brlcad Boquete (~piotr@acou191.neoplus.adsl.tpnet.pl)
16:56.05 *** join/#brlcad konrado (~konro@41.205.22.38)
17:09.19 dracarys983 brlcad: I am interested on doing work on the spherical convergence algorithm you talked about in my project. Is there something I can read to get more familiar with the idea?
17:12.48 dracarys983 brlcad: I see that it was kind of stupid of me to have gone the other way if at the end spherical is the one that would stay instead of what I did.
17:19.28 *** join/#brlcad Stragus_ (~alexis@modemcable090.29-19-135.mc.videotron.ca)
17:23.22 brlcad dracarys983: awesome!
17:23.43 brlcad dracarys983: yes, start with researching pseudorandom spherical sampling
17:23.51 brlcad and/or spherical tessellation
17:24.46 dracarys983 Okay
17:24.48 brlcad you can think of spherical pseudorandom sampling as picking random points in a tessellation of a sphere
17:25.28 brlcad sorry QUASIRANDOM
17:25.36 brlcad wrong term
17:25.45 dracarys983 And we keep doing finer tessellation after each pass?
17:26.12 brlcad sampling with that approach, going from one quasirandom point to another quasirandom point, which ensures even unbiased coverage of the volume without any alignment affects
17:26.16 brlcad effects
17:26.38 dracarys983 Okay. quasirandom -- noted.
17:26.39 brlcad no, you just keep picking different points
17:27.32 brlcad well, I guess you could keep doing a finer tessellation .. that really would be an implementation detail
17:28.01 brlcad you're really just picking two quasirandom points at a given density and shooting a ray through those two points
17:28.42 brlcad just have to make sure the points are on or outside the sphere (especially if you tessellate) and that you exhaust all points in a set so that your sampling is "even" density
17:29.49 dracarys983 Um, "even" density means points should always be taken in pairs and all should be exhausted?
17:30.22 Stragus I have done multiple randomly rotated icosahedrons (or tesselated icosahedrons), seemed to work pretty well even with low sampling
17:31.10 brlcad dracarys983: yes, you're shooting through those two points and sampling the volume .. so you want the interior sampled with an even density
17:31.34 dracarys983 brlcad: Gotcha!
17:31.36 brlcad Stragus: yep, that's the basic idea for quasi
17:32.24 dracarys983 brlcad: Why is quasi-randomness important here?
17:32.41 brlcad read up on what it means and it should hopefully become apparent ;)
17:32.43 Stragus *nods* Just saying it's a good approach as some other quasi-random distribution techniques require way too many random numbers, it's costly
17:34.28 dracarys983 brlcad: Okay. Thanks for the heads up.
17:35.16 brlcad dracarys983: whatever you do, keep track of your seed -- must be reproducible behavior
17:35.35 brlcad Stragus: *nod*
17:35.51 brlcad though this isn't a performant-critical function
17:37.02 dracarys983 brlcad: Sure thing
17:37.06 brlcad it's for some unknowable analysis bit that will use the information for some application-domain calculation(s) that can take a while to be computed or compute in the background or whatever
17:37.42 brlcad on-demand volume, surface areas, centroids, moments, interference reporting, etc
17:38.13 dracarys983 basically all analysis performed right now by gqa
17:38.22 dracarys983 Maybe plus a couple
17:38.49 brlcad fast would be fine and dandy, but more concerned that the calculations are correct, values actually converge to within a specified epsilon, etc
17:39.06 brlcad need to be able to compute the error bars on what is reported
17:40.44 dracarys983 Precision precedes speed here then
17:41.14 dracarys983 brlcad: Will keep in mind.
17:41.25 Stragus liked the part about unknowable analysus on undefined formation for vague applications in some ambiguous context
17:41.31 Stragus analysis* too
17:44.56 brlcad :)
17:46.12 brlcad Stragus: thanks for all your help with vasc! I see he's still stuck on the terrible depth peeling papers, but you seemed to slowly start getting him convinced that a different direction is better
17:47.15 brlcad depth peeling is just a terrible idea ... we tested it out 9 or so years ago and it completely falls apart on big models with the number of iterations it has to perform
17:48.06 Stragus Indeed, Lee had also hired some guy to try it out. I don't recall the numbers but Rayforce was over 100x faster
17:48.26 brlcad don't see why he's so averse to fast on-demand dynamic allocation (which will likely never need to occur or will probably only occur once some small percentage of the time)
17:48.47 Stragus Probably because there isn't a paper about it :p
17:48.48 brlcad big static buffer to stash results
17:48.51 Stragus Yup
17:48.53 brlcad sort them
17:48.56 brlcad eval
17:48.56 brlcad done
17:49.19 brlcad all crazy fast steps
17:49.31 Stragus Yes, and very GPU-friendly when done properly
17:57.02 brlcad even cpu friendly, coherent
17:57.56 brlcad it's been plan for a long time to accumulate all partitions (and their segments) during tracing so that they can be sorted+evaled in separate steps
17:58.11 brlcad that's basically the goto hell in boolweave now per ray
17:58.37 Stragus That code really needs to be rewritten, even on CPUs
17:58.46 brlcad this is going to be a bit of code that will be REALLY easy to get wrong
17:59.23 brlcad boolweave isn't just doing booleans -- it account for floating point fuzz in provably correct ways while also being performant (in 1980's terms)
17:59.58 brlcad just eliminating the registeres and gotos without re-architecting the rest is pretty much guaranteed to slow it down by 5-25%
18:00.15 brlcad and will likely produce wrong results
18:00.38 brlcad I would eaily bet that vasc got that wrong the other night, introduced incorrect weaving
18:00.57 Stragus I really would rewrite the whole thing, but taking care of understanding all the floating point fuzz magic that the old code implemented
18:01.00 brlcad gotta back it up to what the algorithm is doing and just apply that to coherent processing (whether gpu or not)
18:01.36 brlcad the fundamental algorithm can be expressed in less than 100 lines of code iirc
18:02.03 brlcad handling all geometry cases including bad geometry and fuzz jacks that up a bit, but not a crazy amount
18:02.20 brlcad the other 10x code in boolweave+boolfinal is old school optimization
18:03.48 Stragus Old school optimization should have involved not calling malloc() for every little piece of data :p
18:04.08 brlcad malloc used to be free compared to the calculations
18:04.46 brlcad and it doesn't actually alloc iirc -- it's using pooled structures getting added to lists
18:07.17 brlcad ``Erik: trying to load the virtual box kernel driver and it's saying: depends on kernel - not available or version mismatch
18:07.35 brlcad ``Erik: can only presume that means /usr/src/sys is out of sync (ahead of) the running kernel?
18:08.19 brlcad is there one staged for reboot or are the actual sources needing an update or something?
18:08.36 brlcad "kldload vboxdrv" to see it
18:12.15 *** join/#brlcad vasc (~vasc@bl8-192-144.dsl.telepac.pt)
18:16.32 brlcad and there he be! howdy vasc :) depth peeling sucks
18:17.20 brlcad rossignac is awesome, good old friend
18:17.21 brlcad but that was pretty much a toy technique -- it falls apart on real models really fast, really hard
18:18.34 brlcad you end up with too many layers, way too many iterations
18:19.45 brlcad great for demos with relatively simple somewhat flat hierarchies
18:29.35 *** join/#brlcad Izakey (~Izakey@41.205.22.9)
18:31.33 maths22 brlcad: no source mods
18:31.37 brlcad maths22: did you e-mail your log?
18:31.42 brlcad maths22: wow, cool
18:31.53 maths22 What log?
18:31.56 brlcad last time I tried, required a few mods
18:32.01 maths22 The benchmark one?
18:32.01 brlcad the benchmark log
18:32.11 maths22 All I did was install svn and cmake
18:32.20 maths22 Check out, and built
18:32.24 brlcad optimized build?
18:32.28 maths22 No
18:32.34 brlcad oh, sweet .. even faster
18:33.03 brlcad if you can try an optimized / release build, would be great to get that log mailed
18:33.16 brlcad and know the vgr for it
18:33.20 *** join/#brlcad sofat_ (~androirc@106.192.162.255)
18:33.27 maths22 I can run an optimized build. I guess that model pi is quad core, so I can speed up compilation
18:33.35 brlcad no rush :)
18:33.51 brlcad how you been, ltns!
18:34.17 brlcad google's completely redoing the gci interface this year, I shared what you worked on with them
18:34.17 maths22 I've been doing well
18:34.33 brlcad helping with some of the design requirements
18:34.34 maths22 Did you see the beta.brlcad.org/wp menubar
18:34.40 maths22 Good about GCI
18:36.48 brlcad cool, no I hadn't seen that
18:36.56 brlcad looks like it's working responsive too
18:37.01 maths22 I need to do the circle around the logo.
18:37.02 brlcad awesome
18:37.11 maths22 I used the bootstrap menubar-makes things easier
18:37.13 brlcad logo color is a bit off too
18:37.31 brlcad notes we need to publish an official icon set still
18:37.43 brlcad did you see sofat_'s documentation interface?
18:37.50 sofat_ Yee
18:37.51 sofat_ Yes
18:38.08 maths22 I used the same logo that was already there
18:38.10 sofat_ I want to link my work with this website
18:38.21 sofat_ It is possible ?
18:38.22 brlcad sofat_: yeah, definitely
18:38.25 maths22 I last took alook at sofat_'s stuff a few months ago
18:38.35 brlcad maths22: take a quick peek, it's pretty cool
18:39.01 brlcad it's just the docs, but it's sync'd with our repo docs and has awesome navigation
18:39.29 sofat_ Any think wrong with my old stuff ?
18:39.34 maths22 sofat_: is it a wordpress plugin or something like that?
18:39.38 brlcad basic raw editing ability too, but won't be focusing on that the first go round
18:39.39 maths22 That is what I remember it being
18:39.46 maths22 But I didn't look closely
18:40.21 sofat_ Yes in gsoc i made plugin to handle the editing
18:40.43 brlcad sofat_: give him the url ;)
18:42.26 sofat_ https://github.com/sofathitesh/brlcad-code
18:43.06 sofat_ For document we just made the page which hold the wordpress theme style
18:43.11 sofat_ My work is there
18:43.31 sofat_ brlcad.org/~nouhrasofat/
18:46.24 sofat_ maths22, if you any problem to use plugin so please tell me
18:46.29 sofat_ Face
18:47.04 maths22 sofat_: How is the language list genrated
18:47.31 sofat_ Using google language translator plugin
18:47.36 maths22 I have read recently that it is a good idea to not use flags to indicate languages-particularly where the same language is spoken in many countries
18:47.41 *** join/#brlcad Shubham (012720ce@gateway/web/freenode/ip.1.39.32.206)
18:47.47 maths22 Using google translate makes sense
18:48.05 sofat_ Yes ;-)
18:48.06 brlcad there's two language lists
18:48.10 maths22 The order of that list is rather odd as well
18:48.18 maths22 brlcad: ours, and google translate's?
18:48.32 sofat_ Yes
18:48.35 brlcad the drop-down is google translate, the ones before it are our manual translations (which will generally be superior)
18:48.46 maths22 That makes sense
18:48.53 brlcad the tutorials were all manually translated to spanish, for example
18:48.53 maths22 What is the order of the drop down?
18:49.22 maths22 brlcad: I'm rebuilding in release mode on the pi
18:49.28 brlcad cool
18:49.41 brlcad maths22: any idea why I get an empty img tags on beta?
18:49.52 brlcad see http://brlcad.org/tmp/missing.png
18:50.20 sofat_ What is rebuilding please tell me?
18:50.38 ih8sum3r brlcad: Is this website's mockup made by inderpreet? If I'm not wrong
18:50.44 ih8sum3r beta.brlcad.org
18:50.46 ih8sum3r one
18:51.01 starseeker glowers at MSVC Release config...
18:51.25 brlcad ih8sum3r: the mockup predates inderpreet iirc, but has had many people working on it the past ... four years?
18:51.31 brlcad it started as a GCI task
18:52.04 brlcad maths22: you recall the first originator? you?
18:52.11 ih8sum3r oh! I see
18:52.20 maths22 I think I started it, then anita did the theme
18:52.34 maths22 The images were never there on beta
18:52.51 maths22 They never imported right from Anita's GCI task
18:53.06 maths22 I updated drupal my first year, then did the wordpress migration my second
18:53.32 maths22 ih8sum3r: inderpreet did the wiki, I think, but he did not do wordpress
18:53.33 sofat_ Waao
18:53.44 maths22 sofat_: ?
18:54.18 maths22 brlcad: I also brought fisheye back online about a week ago
18:54.40 brlcad heh, so I should keep an eye on the cpus?
18:54.51 sofat_ For you means great you have much knowledge in small age ;-)
18:56.29 brlcad sofat_: he's not quite so young any more, but his level of experience is definitely advanced and impressive for someone of his age :)
18:56.43 maths22 brlcad: probably, but they have seemed OK lately
18:56.49 maths22 No making branches :(
18:57.00 maths22 They just take a long time and a lot of cpu to process
18:57.02 brlcad that's probably good
18:57.07 sofat_ Yes i see
19:05.45 maths22 Because?
19:06.18 vasc i'm working on my own toy technique
19:07.38 brlcad maths22: just because it had whatever problem it had before where it was locking up the server
19:07.51 brlcad giving it less work is a good idea until that is sorted out
19:07.56 brlcad is it the same version or updated?
19:08.33 sofat_ Hey i am passed my final evaluation . thanks to mr sean and starseeker
19:08.41 sofat_ Thank you so much
19:09.02 brlcad sofat_: thank you for all your efforts
19:09.13 brlcad the work doesn't stop here, though ;)
19:09.21 sofat_ Yah i know
19:09.39 brlcad you did well, despite the communication challenges
19:10.10 ih8sum3r Hey, I got mail too. Thanks everyone from the core of my heart. Specially to Sean my mentor, Erik who had provided me lot of guidance.
19:10.14 sofat_ Thanks so much for you trust on me
19:10.16 *** join/#brlcad kintel (~kintel@unaffiliated/kintel)
19:10.51 sofat_ You gave me chance to did this think happen i just say thank you so much
19:12.40 brlcad since notifications are going out already
19:13.03 brlcad two more did not pass this year, so 9 out of 12 passed
19:14.02 brlcad two others were very close to failure, maybe should have failed so they would learn, but were ultimately passed
19:17.02 maths22 brlcad: still the save version-will update soon
19:17.31 maths22 brlcad: where is the list of gsoc projects?
19:19.58 brlcad brlcad.org/wiki/Google_Summer_of_Code/2015
19:30.44 Boquete hey brlcad, brlcad will be an org in Google Code in 2015?
19:35.39 *** join/#brlcad sofat_ (~androirc@106.192.162.255)
19:36.17 *** join/#brlcad Ch3ck_ (~Ch3ck@154.70.98.105)
19:36.48 brlcad Boquete: hablas espan~ol?
19:37.23 brlcad Boquete: that is not yet decided, but I do love GCI :)
19:37.31 Boquete Sorry I do not speak spanish :D
19:37.45 brlcad ah, no problem
19:37.56 Boquete brlcad, hope you will be there, I'm really looking forward to be in Brl-cad :D
19:38.04 brlcad there's a place in panama called boquete -- thought you might be from there ;)
19:38.31 brlcad Boquete: glad to hear it, but you're welcome to get involved regardless ;)
19:38.59 konrado hello brlcad and other members of the community thanks for helping me get through with GSoC successfully.
19:39.00 brlcad even if you have to jump ship to a different org, anything you do with us will almost certainly be experience that translates to better chances of winning ;)
19:39.52 brlcad konrado: thank you for all your efforts! you made a lot of progress
19:40.08 brlcad there's obviously still more work, but it's an exciting feature that is much wanted
19:42.04 konrado I would do my best to make all the improvement I can.
19:43.16 *** join/#brlcad Boquete (~piotr@acou191.neoplus.adsl.tpnet.pl)
19:43.43 vasc hmmm.. this almost works...
19:45.23 Boquete Sorry I disconnected :v brlcad about my nickname, It was "changed" word "bouquet", but funny thing is that I heard in .. spanish or portugeese it mean "bad/dirty" word :v That's why I was not sure about using it. I use it on IRC but on Google Melange I used "antonow" (like Oleg Antonow, you know this russian constructor). Hope nobody will feels bad about my nickname :D
19:46.16 Boquete Ow I checked now what it mean in portugeese.. lol. I think I need change my nickname. BUT in spanish it mean gap xD
19:47.02 Stragus "Bouquet" is a french word too, like a... bundle
19:47.32 Boquete Ow yes it's too
19:48.36 Boquete https://en.wikipedia.org/wiki/Baguette That was first meaning of my nickname. I just changed it a little :D
19:48.49 brlcad Boquete: https://en.wikipedia.org/wiki/Boquete,_Chiriqu%C3%AD
19:48.56 brlcad it's a very beautiful place
19:49.23 vasc i always get the subtraction and the xor working but not the intersection
19:49.24 vasc BAH
19:49.49 vasc in my little toy example
19:49.54 Boquete So I think I will keep this nickname. I hope that no one feels offended
19:50.15 brlcad it means "gap" or some sort of opening in spanish
19:50.18 brlcad you can't please everyone
19:50.48 brlcad similar to french meaning (a bouqet of flowers "opens up")
19:51.15 Boquete I wanted to changed on Google Melange from antonow to Boquete (I use it everywhere) but I think I cant. I will write to Stephanie before GCI :D
19:51.39 brlcad write the melange devs first
19:51.48 brlcad see if one will change it for you instead of bothering steph
19:52.13 Boquete Ow yes, right
19:52.37 Boquete I will check it later (before GCI) and I will see hwo can I contact :D
19:52.44 brlcad there is going to be a completely redesigned website for GCI 2015, so it might not matter at all
19:52.50 brlcad the new site is not based on melange
19:52.52 Boquete Ow I heard that
19:53.57 Boquete I heard that ther's going to be few more changes but nothing sure so I don't want to spread the word :D
19:54.07 brlcad there definitely will be
19:54.28 brlcad one pretty big one
19:54.46 brlcad but it's a good one in the grand scheme of things
19:55.13 Boquete Last year that I can contribute in GCI 2015. So nervous
19:55.30 vasc bouquet
19:55.31 Boquete That's bad I didn't know about GCI before.. :/
19:55.34 Boquete Yes?
19:56.59 brlcad no, not really
19:57.25 brlcad vasc: yes, just a typo ;)
19:57.32 Boquete I mean "Yes?" was to vasc :D
19:57.53 brlcad he was correcting my spelling
19:58.22 Boquete Oh ok :D
19:58.58 ``Erik brlcad: /usr/src/sys and /boot/kernel should be in sync, but those should be newer than what's live right now, been waiting for a good time to reboot...
20:01.36 brlcad ``Erik: ah, so that would explain why the module won't load
20:02.20 vasc too many years of french classes to that to you
20:02.38 brlcad ``Erik: good time for a reboot whenever you are ready, in case disaster ensues :)
20:03.48 brlcad missing, a word he is
20:03.57 vasc figures. it can't get the normals right
20:04.01 vasc the surfaces either
20:14.55 vasc bah
20:15.04 vasc this isn't working like its suppose to
20:34.57 vasc well it kinda looks ok
20:35.03 vasc kinda
20:35.06 ``Erik brlcad: I'll be around for a little bit if you want to hit that big button... (I kinda don't want to be the trigger-man... might be good to crank a backup before doing that?)
20:40.06 vasc the normal look different from stock
20:46.03 vasc i think the normals are all screwed up
21:11.50 brlcad ``Erik: good idea, okay I'll kick off a backup first .. that'll probably take a long time to finish, so maybe we can give the reboot a go on sunday if it's done
21:12.15 brlcad ``Erik: is there anything specific needed to put the new kernel in place?
21:12.26 brlcad or anything else that would be good to do while we're rebooting?
21:13.58 vasc so what's bad about rossignac's paper brlcad?
21:15.04 brlcad hm? I shared the reasons why...
21:17.00 vasc the too many iterations?
21:17.27 brlcad we implemented that paper about 9 years ago
21:17.40 vasc oh?
21:17.44 brlcad even using blister, you can see problems
21:17.53 vasc that paper is after blister
21:17.57 brlcad cst sure
21:17.59 vasc it claims to fix the blister surface acne
21:18.02 brlcad but really just rebranded
21:18.26 brlcad that was all really hable's work, rossignac was his advisor iirc
21:18.42 vasc well yeah hable's the first author
21:18.44 brlcad regardless, the issue is that the method just really falls apart on real models
21:19.21 brlcad doesn't work well with arbitrary depth, really assumes few depths to be performant
21:21.11 brlcad production models usually have crazy complexity, especially compared to our sample demos
21:22.00 brlcad object counts in the 10^5 to 10^8 range with depths commonly in the dozens to hundreds range
21:22.30 brlcad and that's for a single vehicle, not considering full scenes with lots going on
21:22.52 vasc so which method you use? it seems 1980s stuff
21:23.06 brlcad what do you mean?
21:23.16 vasc i cleaned up the code
21:23.20 vasc and it just ...
21:23.21 vasc well
21:23.35 vasc it generates list of segments and more lists of segments and evals them against the tree
21:23.36 brlcad I know, lots of comments and questions :)
21:23.56 vasc uses a dynamic stack
21:24.07 vasc and a bitvector per ray with size of n primitives
21:24.11 brlcad some things I noticed you changed were guaranteed to slow it down (but also necessary to ultimately speed it up)
21:24.30 vasc ?
21:24.49 vasc the opencl code doesn't do csg right now
21:24.55 brlcad you should have noticed that there's pretty much not a limit on anything -- that's part why everything was dynamic
21:25.10 brlcad not just a throwback to days when malloc cost less than a division
21:25.13 vasc there's always a choice between multiple passes and more memory
21:25.39 vasc like the bitvector for one
21:25.53 vasc i could just iterate the list of hits and see if the primitive is in there
21:26.45 brlcad except traversing a list is slow as you noted
21:26.55 vasc in fact i did just that while i was trying to implement the goldfeather algorithm
21:27.04 vasc there's that too
21:27.11 vasc we need static arrays not dynamic linked lists
21:27.23 brlcad sure
21:27.28 brlcad well, we need arrays
21:27.39 vasc its a start to do the arrays first
21:27.43 vasc and then bound them somehow
21:27.45 brlcad whether they are technically static or just really big and rarely ever need to grow is the big question
21:28.11 vasc i tried cleaning up the gotos in that code as well
21:28.15 vasc but its real hard
21:28.23 vasc i went down to 13 gotos
21:28.24 brlcad that's part where I can almost guarantee you didn't get it right ;)
21:28.40 brlcad and almost certainly slowed it down if you did straight up conversions
21:28.53 vasc i didn't just use any mechanical algorithm
21:28.54 brlcad there's lots of dragons in the boolean weaving goto logic
21:29.00 vasc want to try my version of it?
21:29.16 brlcad of course :)
21:29.40 vasc haven't tried compiling it
21:29.56 brlcad for what it's worth, I've rewritten the boolean weaving code three times over the years
21:30.18 brlcad the first time I was a naive student appalled at all the gotos, coming from a "all gotos are evil" education
21:30.35 vasc let's see
21:30.45 brlcad first attempt compiled great, and was outright wrong
21:31.31 brlcad second attempt years later, wiser and more carefully undertaken compiled great, was demonstrably correct and was some 15% slower iirc
21:32.09 brlcad third attempt was much better performance wise, but actually was more code and (arguably) harder to read
21:32.53 brlcad really for performance, the state of the current code is half-irrelevant
21:33.12 brlcad it needs to be completely restructured for coherency, processed differently
21:33.19 brlcad the core algorithm is something like 100 lines of code
21:34.07 brlcad boolweave/final has a LOT of magic built into it for handling real geometry fast, i.e., handling floating point conditions with extreme consistency and verifiable behavior
21:34.35 brlcad that's usually the part that gets dorked up on a naive restructure
21:35.38 vasc i just cleaned up some gotos and inlined some functions and removed the debug thigns
21:35.43 vasc the debug messages
21:35.45 brlcad the robustness logic bumps that 100 lines of logic a fair bit and the rest you see (the goto spagetti) is mostly unrolled optimization, which kicks it up to the 1500-2000 lines sizing you see
21:36.24 brlcad for gpgpu/opencl, it's really just a matter of going back to the core algorithm and inputs, and figuring out how to pack that data in arrays
21:36.41 vasc yes. when i know WHAT the core algorithm actually is
21:36.46 brlcad which is almost certainly going to need to be large pages of memory storing results, sort them, evaluate
21:37.37 vasc sorting is quite likely
21:37.45 vasc but the dynalloc i hope to avoid
21:38.12 vasc i can just try redoing that algorithm
21:38.15 vasc but its gonna be pain
21:38.26 vasc like i said i just replaced the kd-trees for the bvhs and it was fine
21:38.30 vasc was trying to do the same here
21:42.28 vasc cpu code like that is really hairy to port over
21:42.37 vasc we needed something less heavy on complexity
21:43.17 brlcad no disagreement there, but that's also why I say trying to transcode the existing is going to be ..
21:43.20 brlcad really hard
21:43.47 brlcad I at least wouldn't start there -- I'd start with the same inputs and then compare outputs
21:43.56 brlcad i.e., just implement how I'd do the eval
21:44.20 brlcad for what it's worth, here's a completely different approach expanded with some of the production stability tolerance testing needed
21:44.30 brlcad written by one of our core devs years ago in java
21:44.37 brlcad http://brlcad.org/websvn/filedetails.php?repname=BRL-CAD&path=%2Fjbrlcad%2Ftrunk%2Fsrc%2Forg%2Fbrlcad%2Fgeometry%2FPartition.java&peg=34288
21:44.47 vasc http://pastebin.com/QQrGudYu
21:44.49 vasc try this one
21:45.27 brlcad you can look for the intersect(), subtract(), and union() functions
21:45.46 brlcad can't get to pastebin.com, blocked
21:45.54 brlcad ~paste
21:45.54 infobot i guess paste is http://pastebin.org/ or http://bin.cakephp.org/ or http://pastebin.ca/
21:46.15 brlcad (org is blocked too)
21:46.24 vasc that doesn't have the boolean evaluator
21:46.31 vasc oh
21:46.33 brlcad and ca, sorry -- debian's is good though
21:46.35 brlcad yeah it does
21:46.41 brlcad it's completely OO fashion, very different
21:48.12 vasc gah
21:48.15 brlcad and iirc, that implementation was verified to a large extent (and written by one of our most senior devs before he retired, for fun)
21:48.16 vasc well yeah
21:48.30 vasc is it more accurate or less accurate?
21:48.45 brlcad does not compute
21:48.49 brlcad it's faithful
21:49.01 brlcad so it's doing the right thing
21:49.10 vasc so you mean you get the same results?
21:49.16 vasc even if it doesn't implement the xor operator?
21:49.24 brlcad right
21:49.28 brlcad we don't use xor
21:49.36 vasc scratches his head
21:49.37 brlcad i ripped that out of one of our branches
21:49.51 brlcad xor will probably be gone in v8
21:49.55 vasc so you check the outputs and got the same outputs?
21:50.05 vasc exact same
21:50.11 brlcad yep
21:50.36 vasc i'm usually not a big fan of java porting in a case like this because the code obfuscates memory allocation a lot
21:50.51 vasc but i'll see
21:50.57 brlcad sure, it's just a reference for understanding the algorithm
21:51.19 brlcad with all the C optimizations obviously yanked
21:52.01 brlcad it's actually shorter than the C version by quite a lot, even more so if you ignore the logging statements
21:52.27 vasc so why don't you port that over to C and use that instead ?
21:52.33 brlcad and it fixed a limitation of the C version
21:52.55 brlcad it was an order or so slower :)
21:53.03 vasc even ported over?
21:53.07 vasc java is slowe
21:53.10 vasc slow
21:53.32 brlcad yep, untested what that code implemented coherently would be like
21:53.42 brlcad it's still not using arrays and you'd want to
21:54.05 brlcad still needs the partitions coming in sorted
21:54.11 brlcad so you need them all first
21:54.21 brlcad front to back processing, etc
21:54.35 vasc its like this
21:54.40 vasc the per pixel lists aren't that big
21:54.49 brlcad lists of what?
21:54.57 vasc as a first approach i can just inline insertion sort them
21:55.04 vasc like we do in so much of the code already
21:55.24 vasc when i get a good library then i can do a global segmented sort
21:55.26 vasc or something
21:55.37 brlcad how you sort probably won't make a huge difference
21:55.51 brlcad just saying that sorting is assumed with this evaluation approach/code
21:56.09 brlcad certainly ways to do it without sorting, but haven't thought about it much
21:56.12 vasc the sorting ain't the problem. the problem is the list partitioning and filtering and merging and dynamically growing them
21:56.17 vasc and reallocating stacks
21:56.19 vasc and so on and on
21:56.28 vasc gotos
21:56.39 vasc lots and lots of memory caches
21:56.44 vasc per pixel
21:57.03 brlcad so the lists you're referring to are partitions or segments along the shotline?
21:57.10 vasc well its like this
21:57.24 brlcad wonders why you rarely answer questions :)
21:57.34 vasc the current code first shoots all the rays and to compute how large the per pixel hit point lists will be
21:57.51 vasc then it does one huge malloc of that for all pixels
21:58.08 vasc and recomputes the shots again to fill those per pixel arrays of hit points
21:58.14 vasc so i got the arrays of hit points per pixel
21:58.35 vasc i was trying to use an algorithm which could enable me to do the csg incrementally so i would avoid all of this
21:58.36 brlcad need more than hit points, you need at least segments, but ideally partitions and segments
21:58.39 vasc but nevermind
21:58.50 brlcad to guarantee correct solidity preservation
21:58.58 vasc the segments are tuples of in/out hitpoints right?
21:59.09 brlcad yes
21:59.09 vasc now the partitions i'm more vague about
21:59.19 brlcad and partitions are one or more segments
21:59.38 brlcad you need to know that a given segment "belongs with" another
21:59.48 vasc because?
21:59.58 brlcad when evaluating them, it matters when it comes time to merge or split
22:00.10 vasc merging and splitting. evil.
22:00.17 brlcad is that the same object, or another reference from a different object
22:00.31 brlcad CSG == lots of merging and splitting
22:01.04 vasc well the goldfeather algorithm doesn't care about that crap
22:01.15 vasc it only wants the front and back of an object
22:01.25 brlcad this is also a huge deviation from most academia -- solid modeling has somewhat different requirements
22:01.27 vasc shame i can't implement it properly
22:01.32 vasc no man
22:01.51 brlcad there are older solid modeling papers on this topic
22:01.53 vasc i read about the way you do the csg computation in a thesis by jahnsen
22:02.02 vasc from 1989
22:02.11 vasc but it's ...
22:02.12 brlcad csg goes back to the 60's and 70's
22:02.18 vasc well i can understand it conceptually
22:02.39 vasc but as a practical high-performance algorithm? or a simple one? no
22:03.08 brlcad there's also general CSG from a computational geometry perspective, CSG as a modeling operator on boundaries, and CSG for solid modeling (our domain)
22:03.15 brlcad all three have somewhat different behaviors
22:03.37 brlcad how you track and what you track is different for all three
22:03.49 vasc so let me see if i get this: you have initially a bunch of segments. and then you partition them.
22:03.53 vasc but how and for what?
22:04.12 vasc and where does the tree eval kick in
22:04.21 vasc and should be tree be optimized into a different form
22:04.25 vasc questions questions
22:05.02 brlcad no no.. when you intersect a primitive, you get back a partition with one or more segments if there is a hit
22:05.04 vasc jahnsen's thesis goes on and on about it
22:05.06 vasc but i didn't get it
22:05.17 brlcad partitioning isn't an action
22:05.26 brlcad it's just a grouping
22:05.27 vasc so initially a partition is one partition per object ?
22:05.49 brlcad at the leaves of the CSG hierarchy, yes
22:05.50 vasc so you partition the hits of a primitive
22:06.01 brlcad it's a set of in/out segments
22:06.14 brlcad and whether those can be combined per the boolean logic depends
22:06.43 vasc ok but the boolean logic tree isn't in the order and some of those objects might not even be in that pixel even if they are in the tree
22:07.03 vasc and how do you combine the segments
22:07.58 vasc do you sometimes break partitions?
22:08.07 brlcad disregarding all optimizations (and there are many), consider a ray going through a complex single object (one boolean recipe)
22:08.13 vasc like split a primitive partition in the middle?
22:08.34 brlcad you evaluate the ray against all the primitives, each returning a partition with segments in it
22:09.01 brlcad since this is the same object, that drives a given boolean evaluation to know that those partitions are mergeable
22:09.27 brlcad so it can look at each segment in turn, and apply the boolean expression rules
22:09.52 brlcad which creates new segments, destroys segments, splits them, etc, based on the unions/subtractions/intersects
22:10.46 brlcad evaluate the whole expression, and you're left with a partition with one or more segments for that object
22:10.52 vasc from what i get you only need like three operators. union, intersection, and negation
22:11.00 vasc and maybe the solid one
22:11.09 vasc the others can be done as combinations
22:11.27 brlcad it's boolean algebra, you technically only need two operators, but in practice more are used in order to do various optimization operations
22:11.46 vasc the user might like them but it doesn't mean the machine uses them directly
22:11.55 vasc its a RISCy way of seeing things
22:12.17 brlcad e.g., A xor B is equiv to (A minus B) union (B minus A)
22:12.33 brlcad but is evaluatable in one step, so I can put that in my boolean tree and cut two ops
22:12.59 vasc the minus isn't a basic op either
22:13.08 vasc i wonder how simplifiable that is
22:13.11 brlcad sure it is
22:13.25 brlcad basic CSG is union, subtraction (minus), and intersection
22:13.49 brlcad boolean algebra brings in more concepts, but that's the userland of CSG
22:14.19 brlcad for solid modeling, for example, there's no conceptualization of a not operator (even though we obviously use that construct when evaluating an expression for efficiency)
22:15.06 brlcad you end up with infinity spaces, which violates notions of solidity closure testing
22:15.34 brlcad you can certainly use it when evaluating though
22:15.53 vasc i mean a-b is kinda like a|~(a&b)
22:16.04 vasc or whatever
22:16.09 brlcad yep, there are tons of transforms like that possible
22:16.37 brlcad given the entire expression, there are reductions possible, sometimes even eliminations (called null object tree contraction in csg parlance)
22:16.45 vasc yes
22:16.59 vasc but let's say we support the goldfeather ones
22:17.19 vasc union, intersection, difference
22:17.37 vasc i think it has negation too
22:18.09 vasc oh
22:18.11 brlcad reductions are an optimization
22:18.20 brlcad the algorithm should work regardless
22:18.27 brlcad now normalization is a different topic
22:18.32 vasc but brlcad has half-planes yes?
22:18.46 vasc half-spaces
22:18.51 brlcad want to use goldfeather's normalization approach, go for it (just recognize that it's one of many possible normalizations)
22:18.55 vasc i just discard those right now
22:19.09 vasc do we even use a normalization right now?
22:19.11 brlcad they're a pain because they totally violate many notions :)
22:19.24 vasc didn't seem like it
22:19.25 brlcad librt has a variety of normalization routines
22:19.30 vasc wow
22:19.36 brlcad but for the eval, it just uses what it was given
22:19.50 brlcad so you could do any normalization you wanted beforehand
22:20.15 brlcad that's really your baseline that is needed regardless
22:20.59 brlcad that's kind of getting ahead, optimizing something to evaluate less that doesn't yet evaluate anything :)
22:21.43 *** part/#brlcad Izakey (~Izakey@41.205.22.9)
22:22.39 vasc forgot that one
22:22.40 brlcad if the expression is A u B u C - D and D's segments completely overlap ABC (creating a null case), there's nothing wrong with the boolean evaluator doing the unions (wasted computation) at this point
22:23.00 brlcad there's so much validation that has to happen to prove the evaluation is correct, it's not funny
22:23.07 vasc its ok
22:23.18 vasc i just want to understand the basic at this point
22:24.59 brlcad it definitely gets more complicated too .. my earlier example was a single object that was mergeable -- continuing up a hierarchy (above the region level) where overlaps become possible introduces another layer of complexity
22:25.57 brlcad A u B where A and B are not mergeable results in a separate partition for A and B with an overlap getting reporting
22:26.08 brlcad this starts getting into the solid modeling domain
22:27.26 brlcad and in that same context, A - B is okay even though it's really existentially questionable
22:27.30 brlcad what is a copper sphere subtracted from a wooden cylinder, for example
22:27.54 vasc its good for drilling holes
22:27.59 brlcad definitely can't union them, but we can say the shape is subtractable as conventino
22:28.41 brlcad at least without introducing a notion of multi-materials or different grouping operators
22:28.58 vasc some unions aren't mergeable?
22:29.13 vasc i mean i get all those log messages whenever i try to render everything
22:29.16 vasc like OVERLAP whatever
22:29.27 brlcad there's no copper in the wood, so subtracting it is kind of nonsensical except from a convention standpoint
22:29.47 vasc i get that the surface materials will look uhh odd
22:30.00 brlcad yep, those overlaps are technically modeling errors, but must be detectable and reportable
22:30.00 vasc unless you nanocoat that wood
22:30.23 brlcad if I coated it, I have introduced a new object C
22:30.44 vasc it just grounded itself into the wood by friction you see
22:30.54 vasc or something
22:30.59 brlcad solid modeling works on a materials science basis as these things are meant to represent physical things manufactured
22:31.06 vasc yeah
22:31.12 vasc in that case what you want is tools
22:31.26 vasc you have blocks of materials and you use TOOLS to carve them
22:31.28 vasc not csg
22:31.56 brlcad what's unobtanium subtracted from dark matter? or alloy #125 subtracted from alloy #82921
22:32.06 brlcad it's nonsensical
22:32.11 vasc you can't subtract them
22:32.18 vasc you can use a tool to drill a hole in it
22:32.34 vasc or cut it
22:32.47 vasc a materialess tool
22:32.51 vasc made of fluffleware
22:33.10 brlcad you're not getting it :)
22:33.40 brlcad you posed a non-problem ...
22:33.44 vasc yes
22:33.52 vasc back to brass tacks
22:34.16 vasc so the segments are indivisible and immutable
22:34.18 brlcad that's why we do allow subtractions and by *convention* we basically treat it as materialless
22:34.20 vasc but the partitions aren't
22:34.46 brlcad but it's important to realize it's just convention -- would be completely valid to say it's an invalid operation too
22:35.00 brlcad it's allowed because modelers do that kind of thing all the time
22:35.01 vasc its until something better comes along
22:35.16 vasc did you see that video the other guy showed?
22:35.26 *** join/#brlcad kintel (~kintel@unaffiliated/kintel)
22:35.32 brlcad not all the way through my backlog yet, don't think so
22:35.34 vasc http://www.mattkeeter.com/projects/antimony/3/
22:36.41 vasc ah whatever back to csg
22:37.05 vasc its like this
22:37.13 vasc i could reorder segments fine
22:37.19 vasc it doesn't change array size
22:37.41 vasc i could even change the boundaries of the partitions
22:37.50 vasc at most you can have as many partitions as segments right?
22:37.53 vasc so its bounded too
22:38.05 vasc the problem is duplication, elimination, and crap like that
22:38.57 vasc can you have duplicate segments?
22:40.55 vasc i also don't get where the equivalents of rt_boolean_weave and rt_bool_final are in that code
22:41.03 vasc the java one
22:46.18 brlcad sure you can have duplicates
22:46.26 vasc oh neat
22:46.35 brlcad they'd be in different partitions
22:46.59 brlcad in the same partition would probably be a bug in a primitive
22:47.05 brlcad I think
22:47.27 brlcad would have to think about that more, might be some weird procedural case where that'd be valid somehow
22:48.20 brlcad like I said, you will need to pay attention to both segments and partitions
22:48.38 brlcad but in terms of processing limits, coherency containers and such -- sure, I think that's a limit
22:49.07 brlcad trying to think if you could have a boolean recipe where you'd end up with more segments than you start with...
22:50.29 brlcad at least the naive case of 1 long segment getting chopped up 10 short segments will result in 11 segments, so 1+10 isn't violated
22:50.41 vasc i need to read jansen's thesis better
22:50.46 vasc i feel like we are missing something
22:50.58 vasc even in this style of csg eval
22:51.08 brlcad 2 long, 5 short subtractions on each gives 12, 2+5+5 is good
22:51.14 vasc its 111 pages
22:51.25 brlcad not at all surprising
22:51.37 vasc of all the things i read his is the one that describes your techniques the most
22:51.40 vasc for the bool eval
22:52.26 brlcad link? feels like I read it, but not sure
22:53.28 brlcad not that I can get into browsing a 111 page thesis right this minute.. heh
22:53.38 vasc well he describes every method really
22:54.04 vasc repository.tudelft.nl/assets/uuid...de4c.../TR%20DISS%201555(1).PDF
22:54.12 vasc crap google
22:54.30 vasc http://repository.tudelft.nl/assets/uuid:552472ce-de4c-42a9-9fb2-fd3919bb64b5/TR%20DISS%201555(1).PDF
22:54.46 vasc start at page 43
22:55.19 vasc i keep skimming it. it's well written but i don't have the mood for it
22:55.26 vasc maybe eventually it will sink in
22:55.52 *** join/#brlcad chick_ (~chick_@41.205.22.26)
22:56.38 brlcad ahh, have to be careful -- there's a lot of research, this included that talks about boolean evaluation of boundary representations
22:57.00 brlcad surface evaluation, not necessarily solid evaluation
22:57.26 brlcad facetted modeling and doing booleans on facet sets is another topic altogether
22:58.02 brlcad that's evaluating mesh against mesh, deriving resulting meshes
22:58.28 brlcad this is very different from a ray-tracing based approach where you are directly evaluating primitives (and keeping them in implicit form)
22:59.04 brlcad the basic applications of booleans is about the same, but just have to make sure you don't go down a rabit hole
22:59.21 brlcad the java code should be more help in terms of figuring out how to apply booleans given two partitions
23:01.24 vasc the talk about solids comes way before that
23:01.38 vasc i think this is like the state of the art in csg whatever in 1989
23:01.41 brlcad on the surface, evaluating the segments is really really simple -- "A union B" takes the inHit of A to the outHit of B if the outHit of A comes after the inHit of B, resulting in a single segment ... otherwise it's two segments merged
23:01.46 vasc and guess what the same techniques apply too
23:02.03 vasc so why not do that?
23:02.35 brlcad no reason not to! :)
23:02.37 brlcad that's why I showed you the java code that distills it that simply

Generated by irclog2html.pl Modified by Tim Riker to work with infobot.