00:06.29 |
*** join/#brlcad kintel
(~kintel@unaffiliated/kintel) |
01:18.44 |
*** join/#brlcad infobot
(ibot@rikers.org) |
01:18.44 |
*** topic/#brlcad is BRL-CAD
and open source CAx discussion ! Also @ http://brlcad.zulipchat.com !
Logs @ http://infobot.rikers.org/%23brlcad/ |
01:59.32 |
DenisP |
Hello guys. I wanted to talk about GSOC
Appleseed integration project again. |
02:00.21 |
DenisP |
I have looked through GCI tasks as you adviced
and currently I am experimenting with appleseed plugin system. So
far, I have implemented two procedural objects, for sphere and
ellipse. Basically I just assigned intersection/occlusion callbacks
to BLR-CAD intersection functions (for sphere it's
rt_sph_shot(...), for ellipse it's rt_ell_shot(...)) and it works
fine. |
02:01.01 |
DenisP |
Here is the picture: boxes are rendered with
appleseed traversal routines, and sphere/ellipse with brl-cad
intersection functions. |
02:01.07 |
DenisP |
dropbox.com/s/13b0ch6fs4u6hay/sphere_ellipse.png?dl=0 |
02:02.16 |
DenisP |
This plugin system is great by the way. I have
been using Intel Embree in my renderer for some time already and
it's got almost the same API with callbacks for custom
geometry. |
02:03.40 |
DenisP |
As for mesh ray tracing, I am not sure yet how
to integrate kdtree bulding/traversal into the procedural object
and there's also an issue of effective parallelization and
resources allocation (for me, at this point brl-cad's memory
allocation system seems pretty much complicated). |
02:04.36 |
DenisP |
So, I am not sure yet if this project is
possible without rewriting appleseed's core (at least a little).
But I think it's better to start with plugin approach anyway even
if it may be a bit slower than with native rt_shootray
mechanism. |
02:04.45 |
DenisP |
What do you think about it? |
02:05.50 |
DenisP |
Oh, by the way, I have been thinking about
making some bugfixes and I liked this ticket:
sourceforge.net/p/brlcad/bugs/368/ . Do you know if anyone is
working on it right now? And also, is there a FAQ with all Archer
commands or something like this? |
02:12.12 |
*** join/#brlcad DenisP_
(d40d70a2@gateway/web/freenode/ip.212.13.112.162) |
02:49.45 |
*** join/#brlcad Radicarian
(~Radicaria@cpe-72-231-246-183.buffalo.res.rr.com) |
03:07.12 |
*** join/#brlcad kintel
(~kintel@unaffiliated/kintel) |
03:10.23 |
*** join/#brlcad merzo
(~merzo@179-11-133-95.pool.ukrtel.net) |
03:37.53 |
brlcad |
DenisP_: major props! |
03:47.59 |
brlcad |
that's certainly a way to get attention...
awesome demonstration of progress |
03:50.49 |
brlcad |
one major step during GSoC (or perhaps before
at the rate you're going) is to implement just one procedural
object type for "brl-cad" geometry, and call rt_shootray() for the
intersection function |
03:51.08 |
brlcad |
that should then get full rendering of any
brl-cad geometry, no matter the representation type |
03:52.21 |
brlcad |
performance isn't even on the table at this
point because the goal is high-end rendering features on brl-cad
geometry, and production-quality integration with BRL-CAD |
03:56.39 |
brlcad |
once basic intersection is working, next step
would probably be displaying some material properties, color at a
minimum |
03:57.55 |
brlcad |
at that point, things get a bit more tricky
but a bridge to be crossed later |
03:59.17 |
brlcad |
as for integrating kdtree building/traversal,
it's probably simpler than you realize -- you just need to call
rt_dirbuild() and rt_prep_parallel() prior to all the
rt_shootrays(), presumably during some procedural object
load |
04:00.39 |
brlcad |
you can rt_shootray() in parallel by
initializing brl-cad API resource structures -- many examples of
this: grep rt_init_resource src/*/*.c |
04:00.49 |
brlcad |
that's also called during prep |
04:01.01 |
brlcad |
(prior to rt_prep_parallel()) |
04:04.39 |
DenisP_ |
Wait, isn't rt_shootray() working for the
whole scene? |
04:06.11 |
brlcad |
what do you mean exactly? |
04:09.35 |
DenisP_ |
Let's say we have a simple program like
rtexample. First we load the scene and build the kd-tree. Then we
call rt_shootray() which goes through the whole kd-tree and returns
some data about the hit, right? |
04:10.15 |
brlcad |
s/kd-tree/spatial partitioning/, but
yes |
04:10.51 |
brlcad |
the type of partitioning in brl-cad depends on
the type of geometry being prep'd |
04:11.39 |
DenisP_ |
When we make procedural objects in appleseed
we override functions for bbox construction around the object and
intersection/occlusion. And when the appleseed casts a ray into the
scene, depending on the bounding box the ray hits, it calls the
correspoding intersection function. So, we kind of already know the
object the ray is going to hit. |
04:11.42 |
brlcad |
so you only load the scene and build the
spatial partitioning once, during some load or init
function |
04:12.21 |
brlcad |
except you don't know :) |
04:13.11 |
brlcad |
brl-cad geometry can be (and often is) super
complicated inside a given box, you don't know what's there until
you shoot the ray and get hits |
04:13.46 |
brlcad |
simple spheres and boxes are degenerate simple
cases that we don't even really think about because they're kind of
rare outside of testing |
04:14.48 |
DenisP_ |
Oh, okay, I get it. You want to load the whole
scene inside one Procedural object instead of procedural objects
for each kind of geometry. |
04:14.59 |
DenisP_ |
Yeah, that's probably will be even
simpler |
04:15.15 |
brlcad |
remember (or know) that there is intrinsic
support for boolean operations, which by definition means you don't
know where the hit is until after the boolean is processed which is
after intersections are known |
04:17.53 |
brlcad |
you might also be worrying about performance,
but rt_shootray() tracing is generally millions of rays per second
per cpu core, and you will need to support shooting in
parallel |
04:19.06 |
brlcad |
that material properties bridge will make
things a bit more complicated, no longer one procedural object, but
again that's a bridge to be crossed later |
04:20.07 |
brlcad |
that requires a bit more in-depth
understanding of how CAD geometry differs from content modeling
(e.g., region hierarchy vs triangle mesh nodes) |
04:22.48 |
brlcad |
oh also, you can get at bounding boxes after
calling rt_prep_parallel() for setting up the procedural bounding
box |
04:23.20 |
brlcad |
similar code to what you need in
src/libged/bb.c -> src/libged/get_obj_bounds.c |
04:23.29 |
brlcad |
bb command in mged/archer |
04:23.56 |
brlcad |
DenisP_: can you tell me a bit about your
background? |
04:26.52 |
DenisP_ |
Sure, one sec. |
04:39.29 |
DenisP_ |
I've got a bachelor degree in software
engineering from Higher School of Economics, Moscow, Russia.
Currently I am enrolled in master's program in computer science,
also there at HSE. I am doing my thesis at Moscow State
University's graphics lab. It's about Gradient-domain rendering.
Overall, I have been doing computer graphics for about 3 years.
First it was real-time rendering, physics engine and stuff, and
since my bachelor's t |
04:39.55 |
DenisP_ |
it's physically-based rendering. Regarding
open-source, well. For a few years, during summer internships at
ROSA lab, I have been contributing to ROSA Fresh linux distro. It's
not really computer graphics related, but I have developed a small
QT-based Bluetooth app for LXQT and have built a few dozens of
Python packages :) I also have been writing some small stuff for
the inhouse renderer at the graphics lab I do my thesis
at. |
05:23.59 |
brlcad |
DenisP_: thanks, excellent intro |
05:24.49 |
brlcad |
hadn't heard about gradient-domain rendering
(or at least not something I've retained if I have come across it
before) |
05:26.35 |
brlcad |
sounds like an excellent background for this
task, possibly a relevant extension into our performance rendering
goals too (converting BRL-CAD's ray pipeline to being a more memory
coherent and vectorizable) |
05:27.10 |
DenisP_ |
>hadn't heard |
05:27.11 |
brlcad |
interesting that you're at an econ school
studying graphics |
05:27.12 |
DenisP_ |
Well, currently it's not really
production-suitable. Though Gradient-domain Path Tracing / MLT
gives pretty good results. |
05:54.04 |
*** join/#brlcad kintel
(~kintel@unaffiliated/kintel) |
05:54.58 |
*** join/#brlcad kintel
(~kintel@unaffiliated/kintel) |
05:55.42 |
*** join/#brlcad kintel
(~kintel@unaffiliated/kintel) |
05:55.57 |
*** join/#brlcad witness
(uid10044@gateway/web/irccloud.com/x-rgmcgjjevyxnumdy) |
07:41.48 |
*** join/#brlcad yukonbob
(~bch@S01069050ca2cbf63.ok.shawcable.net) |
07:53.37 |
*** join/#brlcad merzo
(~merzo@239-0-132-95.pool.ukrtel.net) |
08:40.00 |
*** join/#brlcad yukonbob
(~bch@24.70.185.109) |
11:34.50 |
*** join/#brlcad teepee-
(bc5c2133@gateway/web/freenode/ip.188.92.33.51) |
12:53.58 |
*** join/#brlcad yorik
(~yorik@2804:431:f721:5f78:290:f5ff:fedc:3bb2) |
12:57.37 |
*** join/#brlcad merzo
(~merzo@185.39.197.205) |
14:07.15 |
*** join/#brlcad kintel
(~kintel@unaffiliated/kintel) |
15:06.33 |
*** join/#brlcad DenisP
(d40d70a2@gateway/web/freenode/ip.212.13.112.162) |
15:59.19 |
*** join/#brlcad sreyansh
(cb6ef205@gateway/web/freenode/ip.203.110.242.5) |
16:35.48 |
*** join/#brlcad yukonbob
(~bch@S01069050ca2cbf63.ok.shawcable.net) |
17:08.17 |
*** join/#brlcad yukonbob
(~bch@S01069050ca2cbf63.ok.shawcable.net) |
17:56.07 |
*** join/#brlcad gabbar1947
(uid205515@gateway/web/irccloud.com/x-hcnysufwkavsiydk) |
18:15.16 |
*** join/#brlcad yukonbob
(~bch@S01069050ca2cbf63.ok.shawcable.net) |
18:17.38 |
*** join/#brlcad kintel
(~kintel@unaffiliated/kintel) |
18:37.17 |
*** join/#brlcad yorik
(~yorik@2804:431:f720:76fa:290:f5ff:fedc:3bb2) |
19:01.54 |
*** join/#brlcad yukonbob
(~bch@S01069050ca2cbf63.ok.shawcable.net) |
19:25.35 |
*** join/#brlcad teepee
(~teepee@p578EC75F.dip0.t-ipconnect.de) |
19:31.52 |
*** join/#brlcad Guest53861
(~teepee@unaffiliated/teepee) |
19:34.21 |
*** join/#brlcad yukonbob
(~bch@S01069050ca2cbf63.ok.shawcable.net) |
20:27.18 |
*** join/#brlcad teepee
(~teepee@unaffiliated/teepee) |
20:29.07 |
*** join/#brlcad yukonbob
(~bch@S01069050ca2cbf63.ok.shawcable.net) |
20:42.29 |
DenisP |
Hi. I have been wondering if I can find
somewhere examples of BRL-CAD projects (.g files)? |
20:43.11 |
DenisP |
I think I have got a working implementation of
BRL-CAD procedural object, but I wanted to test it on complex
scenes. |
20:45.15 |
DenisP |
dropbox.com/s/gsyb99e8o062dqb/brlcadobject.png?dl=0 |
22:05.13 |
*** join/#brlcad DenisP
(d40d70a2@gateway/web/freenode/ip.212.13.112.162) |
23:45.29 |
*** join/#brlcad DaRock
(~Thunderbi@mail.unitedinsong.com.au) |
23:57.34 |
*** join/#brlcad DaRock1
(~Thunderbi@mail.unitedinsong.com.au) |