On Mon, May 15, 2017 at 2:12 PM, Matěj Týč <matej.tyc@gmail.com> wrote:
Hello guys,

we're not all guys :)
 
our research group would like to visualize volume data, where the
transfer function is bivariate (see
http://lists.spacepope.org/pipermail/yt-users-spacepope.org/2017-April/008552.html
). We have been struggling with this task, so I would like you to help
me understand some of the basic concepts I have come across and that I
find confusing.

1. I think that I somehow understand the concept of transfer functions
with multiple fields, but I have difficulties of creating a volume
source with multiple fields. I have somehow examined the source code,
and it seems to me that only the first field is used (judging by
https://github.com/yt-project/yt/blob/master/yt/visualization/volume_rendering/render_source.py#L516
).

The class you linked to here is for rendering unstructured mesh data. Is that what you're trying to do? If so then the advice for how to proceed is very different than if you are rendering gridded data.

You are right that each source only renders a single field. If you want to render more than one field you will need to create multiple sources.
 
If I am wrong and it is meaningful and possible to construct a source
with multiple fields, could you please provide an example?

Here's an example:

https://github.com/yt-project/yt/blob/master/doc/source/cookbook/render_two_fields.py

That said, this is simply compositing two separate volume renderings together. A bivariate transfer function is a bit more complex than this.
 

2. I have no doubts that transfer functions work, but I was unable to
find out how are they involved in the integration process. What I came
across were the integration routines and they have mentioned that the
transfer function is not used:
https://github.com/yt-project/yt/blob/master/yt/utilities/lib/ray_integrators.pyx#L235
. This is really interesting, how is it in reality?

I believe the low-level routine you want to look at in is yt/utlities/lib/image_samplers.pyx, in particular the VolumeRenderSampler. The PlaneVoxelIntegration class you linked to here is experimental code that is not used elsewhere in yt.
 

3. You have mentioned the PlanckTransferFunction as a good example of
multivariate transfer function.
However, doing a Google search, hoping that we will find a code snippet
featuring a non-trivial example did not yield any results. Would you be
so kind and provide one?

There is no easy example I'm aware of. Making it easier to do the sorts of bivariate volume renderings you're trying to do is a longstanding issue. I'm not aware of anyone successfully using the machinery in yt for doing volume renderings with transfer functions that depend on multiple fields since John Wise added the code for the PlanckTransferFunction several years ago. That code was not added with any documentation or tests so unfortunately it may have bitrot since it was added. Also, in the meantime the volume rendering machinery in yt has undergone substantial reworking so it's possible that things are just simply broken right now. 

We would welcome contributions that make it easier to do the sorts of volume renderings you are trying to do. I'm sorry that it's not straightforward to do that right now.
 

Best regards,
Matej

https://github.com/matejak

_______________________________________________
yt-users mailing list
yt-users@lists.spacepope.org
http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org