| 00:21.59 | *** join/#brlcad konrado_ (~konro@41.205.22.58) | |
| 00:30.58 | *** join/#brlcad vasc (~vasc@bl12-167-49.dsl.telepac.pt) | |
| 00:31.04 | vasc | the quartic solver is broken | 
| 00:31.20 | vasc | bn_poly_quartic_roots | 
| 00:32.13 | vasc | because bn_poly_quartic_roots is broken what gets called to solve the equation on a quartic when you call rt_poly_roots is actually bn_poly_findroot | 
| 00:32.19 | vasc | which uses Laguerre's method | 
| 00:33.04 | vasc | anyway i'll cleanup the cubic and quadric code with code i got from numerical recipes in C | 
| 00:33.16 | vasc | i'm still banging on how to do the proper quartic solver | 
| 00:35.53 | vasc | hm nevermind | 
| 00:35.57 | vasc | i found my bug :-P | 
| 01:23.19 | starseeker | vasc: IIRC, the numerical recipes in C code is not compatibly licensed | 
| 01:24.25 | starseeker | in fact, very much NOT compatibly licensed | 
| 01:24.46 | starseeker | i.e. not usable :-( | 
| 01:25.52 | vasc | hm | 
| 01:26.04 | vasc | well we already in svn quadric solver uses their code | 
| 01:26.08 | vasc | kinda | 
| 01:26.16 | vasc | i can revert the cubic root one | 
| 01:26.23 | starseeker | the regular code or the opencl code? | 
| 01:26.35 | vasc | it's buggy anyway | 
| 01:26.39 | vasc | the regular one | 
| 01:26.45 | vasc | it uses the same algorithm... | 
| 01:26.50 | vasc | except it supports imags | 
| 01:26.59 | starseeker | same algorithm sure, but we have to stear clear of the code | 
| 01:27.33 | vasc | which code? i wrote it by reading the book in maths | 
| 01:27.45 | vasc | i didn't use code samples | 
| 01:28.55 | starseeker | vasc: when you say "uses their code" that has a pretty specific meaning - generally, it's not "independent implementation of mathematical algorithm" | 
| 01:28.56 | vasc | its kind of a shame. the code had less branches but it has some z-shit | 
| 01:29.20 | vasc | uh | 
| 01:29.22 | vasc | sure whatever | 
| 01:29.26 | vasc | i didn't copy c code | 
| 01:29.55 | starseeker | nods | 
| 01:30.09 | vasc | http://www.it.uom.gr/teaching/linearalgebra/NumericalRecipiesInC/c5-6.pdf | 
| 01:30.11 | vasc | i used this | 
| 01:30.16 | vasc | section 5.6 | 
| 01:30.37 | vasc | and then i optimized it | 
| 01:30.48 | vasc | and it seems to have a bug... | 
| 01:30.50 | vasc | my code | 
| 01:30.53 | starseeker | ah | 
| 01:36.42 | vasc | bah | 
| 01:36.44 | vasc | revert time | 
| 01:38.26 | vasc | it had so many less branches :-( | 
| 01:41.12 | vasc | i think its because of how B is computed | 
| 01:41.14 | vasc | i'll try something else | 
| 01:41.54 | vasc | ah whatever. it ends up being the same... | 
| 01:41.55 | vasc | kind of | 
| 01:42.01 | Stragus | BRL-CAD's original C code was too branchy? | 
| 01:42.33 | Stragus | They made sure that code was pretty accurate even in pathological cases and such, you'll have to be careful if you use new code | 
| 01:43.05 | vasc | hm | 
| 01:46.05 | *** join/#brlcad kintel (~kintel@unaffiliated/kintel) | |
| 01:46.11 | vasc | geez | 
| 01:48.25 | vasc | damned insidious glitch | 
| 02:00.12 | vasc | duh | 
| 02:00.15 | vasc | it looks great | 
| 02:00.26 | vasc | so the problem is calling the quartic solver direct? | 
| 02:00.28 | vasc | pathetic | 
| 02:02.47 | vasc | just in case i won't replace the cubic solver | 
| 02:06.34 | vasc | ah now i see what was the problem | 
| 02:08.04 | vasc | its some quartic that is probably close to cubic | 
| 02:08.16 | vasc | or some division issues | 
| 02:25.23 | vasc | ah whatever | 
| 02:26.39 | vasc | in fact both look the same as the code in numerical recipes | 
| 02:26.49 | vasc | except they have a lot more tests | 
| 02:27.04 | vasc | algorithms | 
| 02:29.48 | *** join/#brlcad kintel (~kintel@unaffiliated/kintel) | |
| 03:42.24 | *** join/#brlcad kintel (~kintel@unaffiliated/kintel) | |
| 04:16.39 | *** join/#brlcad gurwinder (~chatzilla@117.212.51.123) | |
| 04:29.57 | *** join/#brlcad konrado (~konro@41.205.22.45) | |
| 04:50.17 | *** join/#brlcad bhollister (~brad@2601:647:cb01:9750:5c7a:866:4799:eae) | |
| 06:06.59 | *** join/#brlcad ries (~ries@D979C47E.cm-3-2d.dynamic.ziggo.nl) | |
| 07:34.53 | *** join/#brlcad ries (~ries@D979C47E.cm-3-2d.dynamic.ziggo.nl) | |
| 09:17.01 | *** join/#brlcad merzo (~merzo@92.60.189.225) | |
| 09:57.59 | *** join/#brlcad ries (~ries@D979C47E.cm-3-2d.dynamic.ziggo.nl) | |
| 10:33.43 | *** join/#brlcad merzo (~merzo@user-94-45-58-141.skif.com.ua) | |
| 10:49.45 | *** join/#brlcad Ch3ck_ (~Ch3ck@154.70.99.129) | |
| 11:34.36 | *** join/#brlcad ih8sum3r (~ih8sum3r@122.173.189.145) | |
| 12:08.43 | *** join/#brlcad Izakey (~Isaac@41.205.22.23) | |
| 12:10.51 | *** join/#brlcad Boquete (~piotr@acmb68.neoplus.adsl.tpnet.pl) | |
| 12:13.13 | *** join/#brlcad sofat (~androirc@101.208.131.132) | |
| 12:29.56 | *** part/#brlcad Izakey (~Isaac@41.205.22.23) | |
| 12:33.34 | *** join/#brlcad merzo (~merzo@user-94-45-58-141.skif.com.ua) | |
| 12:42.25 | *** join/#brlcad sofat_ (~androirc@202.164.45.212) | |
| 12:44.13 | *** join/#brlcad merzo (~merzo@92.60.189.225) | |
| 13:02.13 | *** join/#brlcad teepee-- (bc5c2134@gateway/web/freenode/ip.188.92.33.52) | |
| 13:22.04 | *** join/#brlcad vasc (~vasc@bl12-167-49.dsl.telepac.pt) | |
| 13:25.23 | *** join/#brlcad sofat (~androirc@101.209.194.150) | |
| 13:37.40 | *** join/#brlcad sofat (~androirc@101.209.194.150) | |
| 13:41.18 | *** join/#brlcad kintel (~kintel@unaffiliated/kintel) | |
| 13:47.20 | *** join/#brlcad Boquete_ (~piotr@dwd173.neoplus.adsl.tpnet.pl) | |
| 14:06.38 | *** join/#brlcad ries (~ries@D979C47E.cm-3-2d.dynamic.ziggo.nl) | |
| 14:22.10 | *** join/#brlcad ries (~ries@D979C47E.cm-3-2d.dynamic.ziggo.nl) | |
| 14:25.05 | *** join/#brlcad sofat (~androirc@101.209.194.150) | |
| 14:30.22 | *** join/#brlcad ries_nicked (~ries@D979C47E.cm-3-2d.dynamic.ziggo.nl) | |
| 14:33.10 | *** join/#brlcad sofat (~androirc@101.209.194.150) | |
| 14:34.54 | *** join/#brlcad sofat_ (~androirc@202.164.45.204) | |
| 14:46.31 | *** join/#brlcad ries (~ries@D979C47E.cm-3-2d.dynamic.ziggo.nl) | |
| 14:53.02 | *** join/#brlcad kintel (~kintel@unaffiliated/kintel) | |
| 14:58.26 | *** join/#brlcad sofat_ (~androirc@202.164.45.204) | |
| 15:03.06 | *** join/#brlcad ries (~ries@D979C47E.cm-3-2d.dynamic.ziggo.nl) | |
| 15:03.47 | *** join/#brlcad sofat (~androirc@49.138.136.177) | |
| 15:03.49 | *** join/#brlcad konrado (~konro@41.205.22.20) | |
| 15:12.30 | *** join/#brlcad sofat_ (~sofat@202.164.45.208) | |
| 15:33.41 | *** join/#brlcad Boquete (~piotr@dwd173.neoplus.adsl.tpnet.pl) | |
| 15:34.41 | *** join/#brlcad sofat (~androirc@49.138.136.177) | |
| 15:46.32 | maths22 | I just compiled BRL-CAD on the Raspberry Pi 2 | 
| 15:46.36 | maths22 | It works: http://brlcad.org/CDash/buildSummary.php?buildid=198 | 
| 15:47.03 | maths22 | Benchmarks are decent: http://brlcad.org/~maths22/bench/run-16638-benchmark.log | 
| 15:54.37 | *** join/#brlcad sofat_ (~sofat@202.164.45.208) | |
| 16:01.07 | *** join/#brlcad teepee (~teepee@unaffiliated/teepee) | |
| 16:09.38 | *** join/#brlcad sofat (~sofat@202.164.45.212) | |
| 16:14.24 | *** join/#brlcad dracarys983 (dracarys98@nat/iiit/x-nujuyalijwjubmio) | |
| 16:26.29 | ih8sum3r | ``Erik, brlcad : Can someone please make OGV VM up as I'm getting permission denied error every time, so that I can proceed further. | 
| 16:28.43 | *** join/#brlcad Boquete (~piotr@dwd173.neoplus.adsl.tpnet.pl) | |
| 17:12.34 | *** join/#brlcad sofat (~sofat@202.164.45.212) | |
| 17:25.33 | Notify | 03BRL-CAD:vasco_costa * 66073 (brlcad/trunk/src/librt/primitives/arb8/arb8_shot.cl brlcad/trunk/src/librt/primitives/bot/bot_shot.cl and 9 others): add ocl colors to regions. add multi-hit rendering option. | 
| 17:26.10 | Notify | 03BRL-CAD:vasco_costa * 66074 (brlcad/trunk/include/rt/defines.h brlcad/trunk/src/librt/primitives/bot/bot_shot.cl and 4 others): support doubles or floats on ocl upon compilation. | 
| 17:26.15 | Notify | 03BRL-CAD:brlcad * 66075 brlcad/trunk/src/libbu/parallel.c: need to think through this some more but keith noted projects with recursive parallels where a given child might not actually be done working, thus it should not PUT their id back marking it as available for subsequent use as it may not actually be terminating (consider a case calling recursive bu_parallels() in a loop) | 
| 17:27.06 | Notify | 03BRL-CAD:vasco_costa * 66076 (brlcad/trunk/src/librt/primitives/common.cl brlcad/trunk/src/librt/primitives/primitive_util.c brlcad/trunk/src/librt/primitives/rt.cl): fix ocl linking errors with amd ocl. | 
| 17:27.08 | Notify | 03BRL-CAD:vasco_costa * 66077 brlcad/trunk/src/librt/primitives/primitive_util.c: ocl program loading fixes. | 
| 17:27.19 | Notify | 03BRL-CAD:vasco_costa * 66078 (brlcad/trunk/src/librt/primitives/primitive_util.c brlcad/trunk/src/librt/primitives/rt.cl and 3 others): fix ocl color rendering. fix issue when rendering scene with nothing on screen. | 
| 17:27.28 | Notify | 03BRL-CAD:vasco_costa * 66079 (brlcad/trunk/src/librt/primitives/primitive_util.c brlcad/trunk/src/librt/primitives/rt.cl): fix whitespace. | 
| 17:27.30 | Notify | 03BRL-CAD:vasco_costa * 66080 brlcad/trunk/src/librt/primitives/primitive_util.c: revert improperly applied patch. | 
| 17:27.40 | Notify | 03BRL-CAD:vasco_costa * 66081 (brlcad/trunk/src/librt/primitives/bot/bot_shot.cl brlcad/trunk/src/librt/primitives/primitive_util.c brlcad/trunk/src/librt/primitives/rt.cl): ocl color fixes. | 
| 17:27.58 | Notify | 03BRL-CAD:vasco_costa * 66082 (brlcad/trunk/src/librt/cut.c brlcad/trunk/src/librt/prep.c and 6 others): improved ocl stats. | 
| 17:28.04 | Notify | 03BRL-CAD:vasco_costa * 66083 brlcad/trunk/src/librt/primitives/rt.cl: use pown since exp is int. | 
| 17:28.25 | Notify | 03BRL-CAD:brlcad * 66084 brlcad/trunk/src/other/openNURBS/opennurbs_array_defs.h: revert 65966 as casting merely makes the overflow occur silently, badness. | 
| 17:28.27 | Notify | 03BRL-CAD:brlcad * 66085 brlcad/trunk/src/other/openNURBS/opennurbs_array_defs.h: avoid signed overflow by subtracting ele_cnt from both sides of the expression. subtraction underflow is okay -- the lesser-than side of the expression goes negative and the expression remains consistent. | 
| 17:29.04 | Notify | 03BRL-CAD:vasco_costa * 66086 (brlcad/trunk/src/librt/primitives/primitive_util.c brlcad/trunk/src/librt/primitives/rt.cl): automagically set local workgroup size in ocl kernel launches. gets us like 2x speedup on GTX TITAN. | 
| 17:32.09 | Notify | 03BRL-CAD:vasco_costa * 66087 (brlcad/trunk/src/librt/primitives/ehy/ehy_shot.cl brlcad/trunk/src/librt/primitives/primitive_util.c and 3 others): use less memory to store solid ids and materials in ocl. eliminate some more branches and simplify logic in solver. | 
| 17:33.10 | Notify | 03BRL-CAD:vasco_costa * 66088 (brlcad/trunk/src/librt/primitives/common.cl brlcad/trunk/src/librt/primitives/solver.cl): eliminate branches from ocl cubic solver code. fix ocl quartic solver code. | 
| 17:33.15 | Notify | 03BRL-CAD:vasco_costa * 66089 (brlcad/trunk/src/librt/primitives/common.cl brlcad/trunk/src/librt/primitives/solver.cl): revert ocl cubic solver. | 
| 17:33.18 | Notify | 03BRL-CAD:vasco_costa * 66090 (brlcad/trunk/src/librt/primitives/tgc/tgc_shot.cl brlcad/trunk/src/librt/primitives/tor/tor_shot.cl): update ocl tor implementation to look more similar to tgc. | 
| 17:34.36 | Notify | 03BRL-CAD Wiki:85.245.48.64 * 9461 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:34.38 | Notify | 03BRL-CAD Wiki:85.245.48.64 * 9462 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:34.40 | Notify | 03BRL-CAD Wiki:Vasco.costa * 0 /wiki/File:Cl_golliath.png: | 
| 17:34.42 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9464 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:34.45 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9465 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:34.47 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9466 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 12 : 10 Aug-16 Aug */ | 
| 17:34.49 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9467 /wiki/User:Vasco.costa/GSoC15/logs: /* Development Status */ | 
| 17:34.52 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9468 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:34.53 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9469 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:34.55 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9470 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:35.01 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9471 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:35.01 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9472 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:35.01 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9473 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 12 : 10 Aug-16 Aug */ | 
| 17:35.03 | Notify | 03BRL-CAD Wiki:Gurwinder Singh * 9474 /wiki/User:Gurwinder_Singh/GSoc15/log_developmen: | 
| 17:35.05 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9475 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:35.07 | Notify | 03BRL-CAD Wiki:Saaj brlcad * 0 /wiki/User:Saaj_brlcad: | 
| 17:35.09 | Notify | 03BRL-CAD Wiki:Einsteinjunior * 0 /wiki/User:Einsteinjunior: | 
| 17:35.11 | Notify | 03BRL-CAD Wiki:FrankBirdsong * 0 /wiki/User:FrankBirdsong: | 
| 17:35.13 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9476 /wiki/User:Vasco.costa/GSoC15/logs: /* Development Status */ | 
| 17:35.15 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9477 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:35.17 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9478 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:35.19 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9479 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:35.21 | Notify | 03BRL-CAD Wiki:Vasco.costa * 9480 /wiki/User:Vasco.costa/GSoC15/logs: /* Week 13 : 17 Aug-23 Aug */ | 
| 17:35.23 | Notify | 03BRL-CAD Wiki:Gurwinder Singh * 9481 /wiki/User:Gurwinder_Singh/GSoc15/log_developmen: | 
| 17:35.25 | Notify | 03BRL-CAD Wiki:Liitmyalit * 0 /wiki/User:Liitmyali: | 
| 17:35.27 | Notify | 03BRL-CAD Wiki:Gurwinder Singh * 9482 /wiki/User:Gurwinder_Singh/GSoc15/log_developmen: | 
| 17:35.29 | Notify | 03BRL-CAD Wiki:Zeno . X . * 0 /wiki/User:Zeno_._X_.: | 
| 18:01.33 | *** join/#brlcad ries (~ries@D979C47E.cm-3-2d.dynamic.ziggo.nl) | |
| 18:03.58 | *** join/#brlcad sofat (~sofat@202.164.45.212) | |
| 18:06.04 | sofat | starseeker, I am facing this error in resource how I solve this ".txt | 
| 18:06.05 | sofat | <vasc> actually this is the syntax | 
| 18:06.05 | sofat | <sofat_> ok | 
| 18:06.05 | sofat | <vasc> iso-8859-15 is same thing as iso-8859-1 except it has the euro sign () in it | 
| 18:06.05 | sofat | <sofat_> hmm | 
| 18:06.05 | sofat | <vasc> you can use either and it should work | 
| 18:06.07 | sofat | <vasc> prolly | 
| 18:06.09 | sofat | <sofat_> how i tell these reasons to brlcad | 
| 18:06.11 | sofat | <vasc> beats me. i don't know what's his problem | 
| 18:06.13 | sofat | <vasc> can only guess | 
| 18:06.17 | sofat | <sofat_> ok | 
| 18:06.19 | sofat | * Disconnected (Connection reset by peer)." | 
| 18:06.48 | *** join/#brlcad sofat (~sofat@202.164.45.212) | |
| 18:07.06 | sofat | " CMake Error: Parse error in cache file /home/nouhrasofat/brlcad/CMakeCache.txt. Offending entry: We cannot execute java" | 
| 18:15.17 | vasc | ok, just wasted 6 hours of my time trying to put the aila & laine renderer in our code | 
| 18:15.26 | vasc | i.e. the traversal | 
| 18:15.28 | vasc | it's SLOWER | 
| 18:16.21 | vasc | how awfully gratifying that was | 
| 18:17.16 | vasc | so much for dynamic ray fetching | 
| 18:17.49 | vasc | just breaking it into small tiles does the trick | 
| 18:17.58 | vasc | and its TWO lines of code | 
| 18:17.59 | Stragus | Dynamic ray fetching? That sounds like a bad idea | 
| 18:18.00 | vasc | maybe THREE | 
| 18:18.12 | vasc | not all rays have same length right. so | 
| 18:18.29 | Stragus | There are always academics claiming about some fancy new idea like runtime ray sorting, dynamic whatever | 
| 18:18.32 | vasc | maybe this thread ended and you want it to pick something else before the whole workgroup finishes too | 
| 18:18.46 | Stragus | Yes, and it becomes totally incoherent | 
| 18:18.51 | Stragus | Therefore, bad idea | 
| 18:22.10 | vasc | exactly | 
| 18:22.25 | vasc | well i didn't reorder the rays in z-order first | 
| 18:22.42 | vasc | and it was almost as fast as our current code once i change some parameters | 
| 18:22.43 | vasc | almost | 
| 18:22.51 | vasc | but it needed PTX instructions for that | 
| 18:22.55 | Stragus | Don't believe what the papers say, and feel free to bounce ideas with me about raytracing | 
| 18:23.17 | vasc | well it was a ... highly celebrated paper | 
| 18:23.25 | Stragus | Your coherent rays should be much faster | 
| 18:23.36 | Stragus | Do you any kind of voting before intersecting primitives? | 
| 18:23.44 | vasc | i just split the screen into 8x8 tiles and blammo | 
| 18:23.51 | vasc | no | 
| 18:24.00 | Stragus | "At least N of all threads in warp wants to intersect, therefore we go in, otherwise wait" | 
| 18:24.03 | vasc | that other code did that | 
| 18:24.24 | vasc | i think i'll store the patch in the bug tracker just in case | 
| 18:31.03 | vasc | https://sourceforge.net/p/brlcad/patches/416/ | 
| 18:31.07 | vasc | in case you are interested | 
| 18:36.45 | vasc | i'm tired | 
| 18:36.58 | vasc | i want to make it even faster but other than the 8x8 subblocks i'm stumped | 
| 18:37.07 | vasc | i shrank some data structures | 
| 18:37.10 | vasc | that was about it | 
| 18:37.18 | Stragus | Ah optimization, the fun part | 
| 18:37.25 | Stragus | (No sarcasm, I love optimization) | 
| 18:38.07 | Stragus | Did you make sure all reads/stores are coherent, if rays are also coherent? | 
| 18:38.16 | Stragus | Warp voting before intersection would be a good idea | 
| 18:38.42 | vasc | right. that OTHER patch did that | 
| 18:38.44 | Stragus | Branch merging too | 
| 18:38.54 | vasc | uses PTX instructions | 
| 18:39.03 | Stragus | Yes well, without any dynamic fetch garbage | 
| 18:39.13 | vasc | the rays are primary rays right now and i'm using 8x8 bundles | 
| 18:39.14 | Stragus | I don't think they want any assembly in there... | 
| 18:39.18 | vasc | so i would say they are coherent | 
| 18:39.39 | Stragus | What do the memory write patterns look like? | 
| 18:39.56 | vasc | well we have a couple of read and write pattern issues | 
| 18:40.01 | Stragus | Does each thread N always write results to some array[N]? | 
| 18:40.11 | vasc | the bvh is in one piece of memory, the objects data in another | 
| 18:40.11 | Stragus | And not array[N*foo+something] | 
| 18:40.18 | vasc | and the image is not stored in z-order | 
| 18:40.38 | Stragus | Memory access patterns are critical for GPU optimization | 
| 18:41.01 | Stragus | And proper use of the shared memory, *NOT* global memory for any kind of temporary results or data | 
| 18:41.01 | vasc | the thing is i could use a regular clImage and it would do it for me | 
| 18:41.14 | vasc | but then we can't use that clImage data on the backend | 
| 18:41.38 | vasc | we would have to change format from RGBA8 to RGB8DEPTHBE64 | 
| 18:42.10 | vasc | unless we rewrite the whole backend | 
| 18:42.17 | vasc | with all its multiple render targets | 
| 18:42.33 | *** join/#brlcad bhollister (~brad@2601:647:cb01:9750:5c7a:866:4799:eae) | |
| 18:42.34 | vasc | like a dozen of them | 
| 18:43.44 | vasc | well the hit point lists are in global memory right now | 
| 18:43.59 | Stragus | There, that's a major bottleneck to fix | 
| 18:44.14 | Stragus | Far more critical than dynamic ray whatever | 
| 18:44.17 | vasc | i don't wanna change that until i figure out which algorithm i wanna use | 
| 18:44.22 | vasc | peeling or whatever | 
| 18:44.23 | Stragus | Fair point | 
| 18:44.43 | vasc | we need something that can do transparent rendering with multi-hits and csg too | 
| 18:44.56 | Stragus | Sure | 
| 18:45.01 | vasc | i read some paper that claimed you could compute the csg incrementally using two buffers | 
| 18:45.09 | vasc | one for the in points another for the out points | 
| 18:45.19 | vasc | but i don't remember the reference anymore :-| | 
| 18:46.04 | vasc | i think it was 10-20 years olds | 
| 18:46.38 | Stragus | Probably not useful for GPU hardware | 
| 18:47.17 | vasc | it sound like i could avoid the dual passes with that one | 
| 18:47.33 | vasc | i'm doing dual passes now | 
| 18:47.55 | vasc | one to count the required memory for the hit point lists | 
| 18:48.01 | vasc | and the other to actually store data in them | 
| 18:48.17 | vasc | well | 
| 18:48.24 | vasc | maybe i'll come up with something | 
| 18:48.29 | Stragus | I told you, giant static buffer of "bundles" of N hits, allocated through multiple atomics | 
| 18:48.38 | Stragus | Single pass, pretty efficient | 
| 18:48.47 | vasc | is it | 
| 18:48.59 | vasc | it kinda doesn't pass my smell test | 
| 18:49.06 | Stragus | You could even make the writes coherent by always allocating N hits for all rays of the warp | 
| 18:49.13 | vasc | something tells me i can do it incrementally with a couple of static buffers | 
| 18:49.16 | Stragus | You don't allocate every single hit, you allocate bundles | 
| 18:50.03 | Stragus | The other, better solution is buffering all hits in shared memory and resolving the segments right there | 
| 18:50.10 | vasc | e.g. the way i do the multi-hit transparency right | 
| 18:50.13 | vasc | i traverse in depth order | 
| 18:50.16 | vasc | and add colors up | 
| 18:50.29 | vasc | it accumulates the colors | 
| 18:51.14 | vasc | there's nothing preventing me doing the traversal in reverse depth order... except... | 
| 18:51.24 | Stragus | Reverse depth order? Why?... | 
| 18:51.34 | vasc | well then | 
| 18:51.37 | vasc | even then | 
| 18:51.42 | Stragus | Front-to-back is the only way that makes sense, especially if you want to be able to terminate rays early | 
| 18:51.52 | vasc | basically that color computation is essentially a huge scan operation | 
| 18:52.32 | vasc | which i am doing linearly right | 
| 18:52.40 | vasc | i know scan operations like that can be done much faster | 
| 18:52.57 | Stragus | In my raytracer's inlined callbacks, I accumulate colors in plain *registers*, then in the Final() inlined callback, I write the final color to global memory just once | 
| 18:53.18 | vasc | that's what i'm doing now | 
| 18:53.29 | Stragus | Okay good, I understood something else | 
| 18:53.30 | vasc | but it also means you're using a single thread to do that accumulation | 
| 18:53.42 | Stragus | Each thread accumulate its own ray, yes?... | 
| 18:53.46 | vasc | yes | 
| 18:54.20 | Stragus | I don't see where the scan operation comes in | 
| 18:54.36 | vasc | http://brlcad.org/w/images/7/7d/Cl_golliath.png | 
| 18:54.40 | vasc | multi-hit goliath | 
| 18:55.08 | vasc | just summing the color contributions along the ray points | 
| 18:55.15 | vasc | i think i'm doing something wrong there but... | 
| 18:55.27 | Stragus | Can't you do that just as hits are produced? | 
| 18:55.44 | vasc | no because its transparent | 
| 18:55.49 | Stragus | And?... | 
| 18:56.06 | vasc | it would have to be processed front to back | 
| 18:56.19 | Stragus | That's not the way rays are traced? | 
| 18:56.19 | vasc | or it would look bad | 
| 18:56.28 | vasc | rays are processed recursively | 
| 18:56.31 | vasc | i trace one ray | 
| 18:56.34 | vasc | hit a surface | 
| 18:56.37 | vasc | trace another ray | 
| 18:56.39 | vasc | and so on | 
| 18:56.43 | vasc | then i add the contributions | 
| 18:56.52 | vasc | it does the last piece first | 
| 18:56.54 | vasc | get it | 
| 18:57.18 | Stragus | That implies you have to buffer everything | 
| 18:57.26 | vasc | in here i'm cheating coz i'm not doing snell's law of anything | 
| 18:57.36 | vasc | i just shoot one ray and it always goes straight | 
| 18:57.38 | vasc | nyayaya | 
| 18:57.46 | Stragus | That's what raytracers do :p | 
| 18:57.56 | vasc | not physically based ones | 
| 18:57.57 | Stragus | If someone wants a ray that bends direction, he'll shoot a new ray | 
| 18:58.07 | vasc | exactly | 
| 18:58.22 | Stragus | Actually, my raytracer can handle a new direction vector from within the hit() callback, but let's not go there | 
| 18:58.24 | vasc | this one goes straight through the entire scene. thought things too | 
| 18:58.29 | Stragus | Right | 
| 18:58.40 | vasc | its just to make pretty pictures | 
| 18:58.46 | vasc | kind like fake translucency | 
| 18:59.01 | vasc | actually its translucency where there is no reflected part of the ray | 
| 18:59.04 | vasc | it goes all in | 
| 18:59.17 | vasc | i mean | 
| 18:59.38 | vasc | both angles on snell's law are the asme | 
| 18:59.41 | vasc | same | 
| 18:59.54 | Stragus | My multi-hits: http://www.rayforce.net/rfmultihits.png | 
| 19:00.02 | Stragus | I know what it is :p | 
| 19:00.06 | vasc | cute | 
| 19:00.31 | vasc | so do you do it back to front of what? | 
| 19:00.45 | vasc | i guess i need to read the depth peeling paper again | 
| 19:00.51 | Stragus | Front to back, hits are processed as they come, *nothing* is buffered, no memory is ever written until the end: the final pixel color | 
| 19:01.08 | Stragus | Depth peeling is terrible | 
| 19:01.17 | vasc | Depth peeling works by rendering the image multiple times.[1] The twist is that depth peeling uses two Z buffers, one that works conventionally, and one that is not modified, and sets the minimum distance at which a fragment can be drawn without being discarded. For each pass, the previous pass' conventional Z-buffer is used as the minimal Z-buffer, so each pass draws what was "behind" the previous pass. The resulting images can be combined to form | 
| 19:01.18 | vasc | <PROTECTED> | 
| 19:01.28 | Stragus | Bad, bad bad | 
| 19:01.49 | vasc | man but you can't do it front to back | 
| 19:01.51 | Stragus | Trace the rays *once* | 
| 19:01.56 | vasc | the transparency will look wrong | 
| 19:02.01 | Stragus | No! | 
| 19:02.18 | Stragus | First hit, accumulate color, reduce the ray's intensity for the following hits | 
| 19:02.26 | Stragus | Like... reduce ray intensity by 0.8 for each hit | 
| 19:02.36 | vasc | hm i see | 
| 19:03.06 | vasc | i guess i could do that | 
| 19:03.08 | Stragus | Doing it that way, you can also cut off rays when they are too "weak" | 
| 19:03.23 | Stragus | Which is very similar to bullets shooting through geometry, they have no energy left and you can cut them off | 
| 19:04.08 | Stragus | It is highly efficient, I'm talking about 500 million rays per second in that scene | 
| 19:04.16 | vasc | so i don't need two passes for multi-hit | 
| 19:04.17 | vasc | great | 
| 19:04.38 | Stragus | Absolutely no need for multiple passes, and depth peeling is absurd | 
| 19:04.48 | vasc | now the question is csg | 
| 19:05.19 | Stragus | Right, that is more complex. Temporary hits may have to be stored in shared memory to recompose the proper "segments", or whatever terminology is used | 
| 19:05.46 | vasc | i think they call them segments in BRL-CAD | 
| 19:05.56 | Stragus | Okay, I wasn't sure | 
| 19:05.56 | vasc | a segment has an 'in' and 'out' hit point | 
| 19:06.00 | Stragus | Right | 
| 19:06.07 | vasc | papers call those surfels or seomthing | 
| 19:06.16 | vasc | something | 
| 19:10.09 | vasc | http://i.imgur.com/YwIBlpt.png | 
| 19:11.44 | Stragus | You should be able to buffer and work on all that in shared memory | 
| 19:11.57 | Stragus | If it doesn't fit, it gets a little more complicated | 
| 19:14.06 | vasc | the problem is i don't know the size of the list | 
| 19:14.11 | vasc | its probably gonna be small but | 
| 19:14.16 | vasc | and i need that memory per thread | 
| 19:16.11 | Stragus | Right, it needs to be able to extend storage to global memory in the worst case | 
| 19:16.34 | Stragus | Which get messy... but the vast majority of cases will be very efficient | 
| 19:46.36 | vasc | hm | 
| 19:46.39 | vasc | on second thought | 
| 19:46.53 | vasc | it still won't work | 
| 19:47.04 | vasc | let's say i have the hit callback right | 
| 19:47.08 | vasc | it gets called on each hit | 
| 19:47.31 | vasc | unless you attenuate with distance... | 
| 19:47.35 | vasc | was that it? | 
| 19:56.44 | *** join/#brlcad ries (~ries@D979C47E.cm-3-2d.dynamic.ziggo.nl) | |
| 20:05.10 | vasc | any good absorbency functions? | 
| 20:05.21 | vasc | i'm trying dist, dist*dist, dist*dist+dist | 
| 20:10.23 | Stragus | That doesn't sound right | 
| 20:10.50 | Stragus | If you only want to register hits with surfaces, then reduce by 0.8 or so the ray's intensity every hit | 
| 20:11.45 | Stragus | If you want to compute absorption within a material, then it's some exp() funtion | 
| 20:19.01 | vasc | the hits won't be in order | 
| 20:20.47 | vasc | let's say you are processing hits on a cell. the hits on the cell may be out of order | 
| 20:20.52 | vasc | even bounding boxes can overlap | 
| 20:21.09 | vasc | so even the 2nd processed bounding box may end up having a closer hit | 
| 20:21.48 | *** join/#brlcad Izakey (~Izakey@41.205.22.46) | |
| 20:22.19 | Stragus | Ah yes, that's the issue with objet-based partitionning | 
| 20:22.31 | Stragus | Then you have to buffer hits in shared memory and reorder | 
| 20:23.04 | Stragus | When you know, during the traversal, that new hits won't appear before existing hits, then you can sort the buffered hits and process them right away | 
| 20:23.04 | vasc | the log() and pow() seem to work | 
| 20:23.29 | Stragus | Uh, okay... not sure why you would need that | 
| 20:23.47 | Stragus | Absorption through a transparent material is based on exp(), if that's what you are doing | 
| 20:24.13 | vasc | uh | 
| 20:24.15 | vasc | forget it | 
| 20:26.05 | vasc | the exp grows too fast | 
| 20:26.23 | vasc | adjusting | 
| 20:26.48 | Stragus | exp( -distance / opacity ); ? | 
| 20:27.03 | Stragus | has no idea what you are doing | 
| 20:29.06 | vasc | yeah i'm trying that now | 
| 20:31.02 | vasc | it looks ok but similar to 1.0/(distance*distance) right now | 
| 20:31.32 | Stragus | Well, that isn't physically correct | 
| 20:32.30 | Stragus | did some of that absorption stuff in radiation raytracing for fire simulation in computational fluid dynamics | 
| 20:36.46 | vasc | well even 1.0/dist looks ok | 
| 20:37.41 | vasc | we use that for atmospheric attenuation in ray tracing | 
| 20:38.00 | vasc | you just need a smooth function that falls off with distance | 
| 20:38.55 | Stragus | exp() is the correct one | 
| 20:39.02 | Stragus | Anything else is an approximation just to look okay | 
| 20:39.12 | vasc | i guess i'll use that then | 
| 20:39.44 | Stragus | Approximate CUDA exp() is pretty fast | 
| 20:39.51 | Stragus | Err, OpenCL exp(), same thing | 
| 20:40.16 | vasc | <PROTECTED> | 
| 20:40.16 | vasc | <PROTECTED> | 
| 20:40.16 | vasc | <PROTECTED> | 
| 20:40.16 | vasc | <PROTECTED> | 
| 20:40.19 | vasc | <PROTECTED> | 
| 20:41.45 | vasc | that can be done cummulatively | 
| 20:41.59 | vasc | ain't done now coz the callback doesn't have the data pointers to materials and stuff but can be done | 
| 20:42.07 | vasc | http://i.imgur.com/cu0xPXt.png | 
| 20:42.16 | vasc | vs my old one using ray-tracing method | 
| 20:42.34 | vasc | http://brlcad.org/w/images/7/7d/Cl_golliath.png | 
| 20:42.42 | vasc | i like old one better even if its two pass... | 
| 20:43.11 | Stragus | Always prefer the correct method, this is physics :p | 
| 20:43.31 | vasc | light makes rightr | 
| 20:43.50 | vasc | you can see more detail on yours though | 
| 20:46.15 | vasc | now the question is how to compute the opacity | 
| 20:46.17 | vasc | maybe user slider | 
| 20:47.58 | vasc | anyway once i integrate this into one pass function | 
| 20:48.10 | vasc | then it will work with one pass | 
| 20:48.27 | vasc | some more trashing though | 
| 20:48.53 | vasc | to load materials and crap | 
| 20:50.18 | vasc | kewl thanks | 
| 20:50.46 | vasc | another essential mode that doesn't need multiple passes | 
| 20:50.56 | Stragus | Good :) | 
| 20:53.57 | vasc | the distance should probably the converted into world box coordinates or something | 
| 20:54.01 | vasc | ah ewll | 
| 20:54.26 | vasc | its a matter of fudging | 
| 20:54.48 | vasc | the attenuation needs to take into account the model | 
| 20:54.49 | Stragus | Opacity per meter should be defined somewhere | 
| 20:54.57 | vasc | hm ok | 
| 20:55.40 | vasc | now the other question is should i only be doing this for the IN points | 
| 20:55.45 | vasc | and not the OUT points... | 
| 20:55.47 | vasc | eheh | 
| 20:55.55 | *** join/#brlcad ih8sum3r (~ih8sum3r@122.173.189.145) | |
| 20:57.04 | Stragus | Opacity is a function of distrance travelled between in and out? | 
| 20:57.18 | Stragus | distance* too | 
| 20:57.41 | vasc | ohhhh. ... that's messed up | 
| 20:57.45 | vasc | but not impossible actually | 
| 20:58.02 | Stragus | If you just want to show surfaces, then accumulate all hits, reduce ray intensity every hit | 
| 20:58.15 | vasc | like i said they aren't ordered | 
| 20:58.31 | Stragus | [...] accumulate all sorted hits [...] | 
| 21:00.30 | vasc | i'll think about it a bit | 
| 21:01.05 | vasc | so its exp(-hit_dist*1e-3)*length_segment? | 
| 21:06.07 | vasc | that doesn't look so good | 
| 21:14.13 | vasc | aw the first one is ok | 
| 22:01.06 | Stragus | vasc, it's exp( -SegmentLength * opacity ); | 
| 22:01.15 | Stragus | It's / opacity depending on your units | 
| 22:01.47 | Stragus | It's the energy absorption of the ray for some given distance through some opaque material | 
| 22:02.26 | Stragus | You still need to go front-to-back and reduce the ray's energy as it traverses material, each loss of energy gives a color depending on the material | 
| 22:03.48 | vasc | gah | 
| 22:04.54 | vasc | that bytes | 
| 22:05.00 | vasc | you can't do that without two passes | 
| 22:05.07 | vasc | you need an ordered list of hits | 
| 22:05.27 | vasc | bites | 
| 22:10.33 | vasc | even with the ordered list its a pain | 
| 22:11.05 | vasc | its like you get out a primitive into air | 
| 22:11.10 | vasc | and then into a primitive again | 
| 22:11.16 | vasc | and inside a primitive that's inside another | 
| 22:11.19 | vasc | and they cross | 
| 22:11.22 | vasc | and whatever | 
| 22:13.01 | vasc | man i found this guy's phd thesis | 
| 22:13.09 | vasc | he's went overboard on the topic | 
| 22:13.11 | vasc | i'll skim it | 
| 22:13.14 | vasc | csg | 
| 22:14.47 | Stragus | You buffer all hits in shared memory, as soon as you know any new hit will *not* occur before existing buffered hits, you process all these hits and flush the buffer | 
| 22:15.18 | Stragus | With the buffered hits, you can determine entry/exit points and build the segments | 
| 22:16.12 | *** join/#brlcad bhollister (~brad@2601:647:cb01:9750:7d54:b79d:72f2:3078) | |
| 22:17.11 | vasc | it's messed up | 
| 22:17.22 | vasc | coz i don't know if i'll overflow until i process a primitive | 
| 22:17.31 | vasc | and if i do it in the middle i'll have to backtrack | 
| 22:17.33 | vasc | and its a mess | 
| 22:17.36 | vasc | don't wanna do it | 
| 22:17.45 | vasc | i think there is a better option | 
| 22:17.58 | vasc | the buffer thing | 
| 22:18.22 | vasc | but i'm reading more | 
| 22:18.44 | Stragus | The hit buffering can technically overflow... but darn, shoot small packets of rays with a huge static chunk of global memory to allocate on-demand, the risk is very low | 
| 22:18.46 | vasc | Near real-time CSG rendering using tree normalization and geometric pruning | 
| 22:19.02 | Stragus | And if it *does* happen, you break the packet into smaller bundles of rays and try again | 
| 22:19.34 | Stragus | The good answers don't have to be in papers, you know :p | 
| 22:19.48 | vasc | "Near real-time CSG rendering using tree normalization and geometric pruning" | 
| 22:19.51 | Stragus | Though I certainly recognize you are from academia, eh | 
| 22:19.54 | vasc | dude | 
| 22:20.02 | vasc | i had the gut feeling it could be done | 
| 22:20.14 | vasc | with something other than storing the whole list somewhere | 
| 22:20.18 | vasc | in an incremental fashion | 
| 22:20.23 | vasc | so i searched and searched | 
| 22:20.30 | vasc | and found TWO papers that already do that | 
| 22:20.58 | vasc | it's the XXIst century. everyone is bound to have thought of a way to do it yet | 
| 22:21.02 | vasc | even if it SUCKS | 
| 22:21.13 | vasc | :-D | 
| 22:21.34 | Stragus | Sometimes. And not everyone bothers writing papers about it, and a lot of people needs to write papers, even if filled with garbage, to fill their quotas | 
| 22:21.55 | vasc | that too | 
| 22:22.08 | vasc | see i have to write mine | 
| 22:22.30 | vasc | i'm just concerned if the buffering approach is prone to errors or not | 
| 22:22.36 | vasc | such approaches usually are | 
| 22:22.52 | vasc | so i've been reading everything else | 
| 22:23.03 | vasc | including this reconfigurable hardware system some japanese made in the 1970d | 
| 22:23.08 | vasc | that bad | 
| 22:23.09 | Stragus | Errors like what? | 
| 22:23.23 | vasc | you know like z-shit | 
| 22:23.31 | vasc | things in wrong order | 
| 22:23.33 | vasc | crap like thart | 
| 22:23.49 | Stragus | If the hits don't fit in the memory allocated, you bail out, the CPU C code detects the error condition, it breaks the packet of rays into smaller independant bundles and try again | 
| 22:24.07 | vasc | man | 
| 22:24.13 | vasc | that's like calling a syscalls | 
| 22:24.15 | vasc | from the gpu | 
| 22:24.22 | vasc | it's what i want to avoid | 
| 22:24.23 | Stragus | The probability of this happening is **very** low | 
| 22:24.31 | vasc | famous last words | 
| 22:24.43 | Stragus | But it might still happen, so that's why you have code to handle it | 
| 22:24.45 | vasc | that reminds me of located | 
| 22:25.24 | vasc | man if i wasn't interested in understanding the actual problem | 
| 22:25.35 | vasc | instead of reading this phd thesis of this guy and all this crap | 
| 22:25.39 | Stragus | If it happens just once, you know that the heuristics used for hits/ray have to be revised in this particular scene, for future raytracing operations | 
| 22:25.44 | vasc | i would just get the rossignac paper and implement that | 
| 22:26.52 | vasc | from what i get the rossignac paper is that goldfeather paper with more pizzaz | 
| 22:27.12 | vasc | 20 years of hindsight | 
| 22:27.32 | vasc | i'll just continue reading about csg | 
| 22:27.38 | vasc | in this hundreds of pages this | 
| 22:27.40 | Stragus | I have no idea about these papers... I just think I know both raytracing and CUDA, and I feel like I very much see what the best solution is | 
| 22:27.40 | vasc | thesis | 
| 22:28.03 | vasc | i used to want to be an historian before i went into computer engineering | 
| 22:28.10 | vasc | so i dig this stuff | 
| 22:28.14 | Stragus | Eh, all right then | 
| 22:28.21 | vasc | seeing the path others have throdden and failed and so on | 
| 22:28.45 | Stragus | I don't like reading papers, it ruins the fun of figuring things out and, worst of all, it contaminates the thought process to figure out new solutions | 
| 22:33.04 | vasc | see that's the thing | 
| 22:33.18 | vasc | there's beauty not only in the discovery but in the travel as well | 
| 22:33.37 | vasc | it's like when i saw The Lord of the Rings in Movie form even though I already had read the books and knew the story | 
| 22:36.05 | Stragus | For some, the travel can be sitting in front of black sheets of paper for hours, eh | 
| 22:36.11 | Stragus | of blank* sheets | 
| 22:37.06 | Stragus | I quite enjoy that actually, sometimes the solution turns out better than the existing ones, sometimes it's already out there. But it was more fun either way | 
| 22:38.10 | vasc | i've done the opposite too | 
| 22:38.18 | vasc | start blank sheet and work on it for 2-3 months | 
| 22:38.27 | vasc | then i realize its all in a 15 year old paper | 
| 22:38.40 | vasc | i work on it another 2 months and its state of the art paper | 
| 22:39.01 | vasc | both approaches are ok | 
| 22:46.16 | vasc | that was some long 111 pages | 
| 22:46.18 | vasc | next | 
| 22:46.57 | Stragus | How many lines of it were interesting? :p | 
| 22:47.44 | vasc | about 5-6 pages | 
| 22:48.15 | vasc | it was good enough to make me realize the problem is more complicated than i thought it was | 
| 22:48.37 | vasc | i.e. how to map that CSG tree to the points | 
| 22:49.05 | vasc | and how to evaluate a tree like that efficiently | 
| 22:49.30 | vasc | it went into these bit coding schemes but i kinda didn't read it | 
| 22:57.26 | vasc | this 2011 paper sounds familiar . he's doing the same as me. counting the sizes of the lists in a first pass, doing a scan, and allocating the buffer to fill them next | 
| 22:57.28 | vasc | herp derp | 
| 22:58.02 | vasc | he even uses small list sorting. just like we do. herp derp | 
| 22:58.25 | vasc | except he uses shell sort i think we use intersection sort | 
| 22:58.30 | vasc | gotta try something else | 
| 22:58.46 | vasc | maybe bubblesort | 
| 23:02.31 | vasc | yeah the old bubblesort. gotta try that one | 
| 23:02.40 | vasc | nothing better to sort already sorted lists. its optimal | 
| 23:09.51 | vasc | that's was kind of fun seeing another guy doing the same | 
| 23:10.09 | vasc | of course he didn't bother mentioning the problems i actually have left to solve. fegh. | 
| 23:21.06 | Stragus | Papers often do that. They present a technique, and completely omit discussing the serious problems and issues of the technique | 
| 23:31.18 | vasc | ok | 
| 23:31.44 | vasc | so at least the old style buffer techniques have the issue that for convex primitives (think tgc) you need multiple passes | 
| 23:31.51 | vasc | the more convex the more passes | 
| 23:31.58 | vasc | i mean concave | 
| 23:32.43 | *** join/#brlcad merzo (~merzo@85-7-133-95.pool.ukrtel.net) | |
| 23:32.50 | vasc | e.g. for the torus it would require two passes | 
| 23:33.01 | vasc | that's what they mean by n-convex | 
| 23:33.22 | vasc | the number of in-out pairs a ray can pass most through a primitive | 
| 23:33.40 | vasc | so it's a least two passes | 
| 23:34.09 | vasc | we can compute the number of passes in runtime | 
| 23:34.21 | vasc | just check the number of hits per primitive we intersect | 
| 23:34.25 | vasc | and divide by two | 
| 23:34.51 | vasc | the max for all those primitives is the number of buffer passes | 
| 23:35.35 | vasc | using the goldfeather algorithm, | 
| 23:36.10 | vasc | i saw nothing about transparency too | 
| 23:36.15 | vasc | i think its done for opaque | 
| 23:36.19 | vasc | but its 1989 | 
| 23:37.10 | vasc | now this century | 
| 23:37.20 | vasc | btw | 
| 23:37.34 | vasc | it required two z-buffers and 3 bits buffers | 
| 23:37.47 | vasc | we can have all the buffers we wnt | 
| 23:38.04 | vasc | its not like we are limited to kludges to use the opengl buffer like those other guys | 
| 23:38.14 | vasc | from the late 1990s early 2000s | 
| 23:38.27 | vasc | so i'll ignore those for most part |