[yt-users] Stars on volume rendering
John Wise
jwise at astro.princeton.edu
Fri Jan 7 12:01:28 PST 2011
Hi Matt,
This all sounds great. I like the idea of associating stars with bricks to simplify the search.
I think it's the easiest and best approach now (maybe not at petascale) to have all star particles duplicated on each processor. I can't think of any simulation with more than a few million star particles, and that easily fits into memory. This is the same approach I've taken with the new star particles in Enzo. I thought it would be best to exploit the fact that the problem wasn't memory limited.
My 2c.
John
On 6 Jan 2011, at 18:30, Matthew Turk wrote:
> Hi John,
>
> (As a quick comment, one can export to Sunrise from yt, so that could
> also serve as a mechanism for rendering star particles.)
>
> I have been thinking about this a lot lately, and I think you're
> right: we need a proper mechanism for compositing star particles on
> the fly during the traversal of rays across a homogenized volume. I
> had planned on this being one of my first yt projects this year. The
> current process of volume rendering (for more detail see the method
> paper) is basically:
>
> 1) Homogenize volume, splitting fields up into uniquely-tiling bricks
> 2) Sort bricks
> 3) For every brick, for every ray:
> a) Calculate intersection
> b) Update all channels (typically 3) based on *local* emission and absorption
> c) Update ray position
> 4) Return image plane
>
> This is true for both the old, homogenized volume rendering technique
> and the new kD-tree technique. To fit star particles into this, we
> would regard them as exclusively sources of emission, with no impact
> on the local absorption. Nominally, this should be easy to do: for
> every cell, simply deposit the emission from a star. As you noted in
> your email, this results in very, very ugly results -- I tested it
> last summer with the hopes of coming up with something cool, but was
> unable to. Testing it today on an airplane showed it had bitrot a
> bit, so I haven't attached it. :)
>
> I think we would need to move to, rather than cell-based emission (so
> that the smallest emission point from a star is a single cell) to a
> method where emission from star particles is calculated per ray (i.e.,
> pixel). This would require an additional step:
>
> 1) Homogenize volume, splitting fields up into uniquely-tiling bricks
> 2) Sort bricks
> 3) For every brick, for every ray:
> a) Calculate intersection
> b) Calculate emission from stars local to the ray
> c) Update all channels (typically 3) based on *local* emission and absorption
> d) Update ray position
> 4) Return image plane
>
> This would enable both density-based emission *and* star emission.
> This could be both density isocontours, for instance, and individual
> stars. The visual language in that would probably be very confusing,
> but it would be possible, particularly for pure annotations.
>
> The issue here is that step 2b is probably very, very slow -- even
> using a (point-based) kD-tree it would likely add substantial run
> time, because there's no early termination mechanism. What I think we
> could do, however, is execute a pre-deposition phase. For the
> purposes of rendering, we can describe a star particle by only a few
> characteristics:
>
> Emission(Red, Green, Blue)
> Gaussian(Radius)
> Position(x,y,z)
>
> We should instead define an effective radius (ER), say at the 1%
> level, at which we won't worry anymore. We could then deposit delta
> functions of size ER for every star particle. This would give a cue
> to the ray caster, and we could modify:
>
> 1) Homogenize volume, splitting fields up into uniquely-tiling bricks
> 2) Sort bricks
> 3) For every brick, for every ray:
> a) Calculate intersection
> b) If local delta_field == True, execute ball query and calculate
> emission from stars local to the ray
> c) Update all channels (typically 3) based on *local* emission and absorption
> d) Update ray position
> 4) Return image plane
>
> For the first pass, we would probably want all our stars to have the
> same ER, which would then be the radius of our ball-query. For
> parallel rendering, we would still have to have all of the star
> particles loaded on every processor; I don't think this is a problem,
> since in the limit where the star particles are memory-limiting, you
> would likely not suffer from pre-deposition. This also solves the
> grid-boundary issues, as each processor would deposit all stars during
> its initial homogenization.
>
> What do you think? I think that the components external to the ray
> tracer could be assembled relatively easily, and then the ray tracer
> might take a bit of work. As a post-processing step we could even add
> lens flare, for that extra Star Trek look.
>
> -Matt
>
>
> On Thu, Jan 6, 2011 at 8:45 AM, John Wise <jwise at astro.princeton.edu> wrote:
>> I forgot to mention that another way to do this is making a derived field
>> that adds the stellar density to the gas density. However this doesn't look
>> good when particles are in coarse grids, when they should be point sources
>> in the image.
>>
>> def _RelativeDensityStars(field, data):
>> return (data["Density"] + data["star_density"])/dma
>> add_field("RelativeDensityStars", function=_RelativeDensityStars,
>> take_log = False)
>>
>> where dma is a scaling variable.
>>
>> I'm uploading my stand-alone script if you want to try to decipher it,
>> although I tried to comment it some.
>>
>> http://paste.enzotools.org/show/1475/
>>
>> Also I uploaded the colormap based on B-V colors that I ripped from
>> partiview to
>>
>> http://www.astro.princeton.edu/~jwise/temp/BminusV.h5
>>
>> John
>>
>> On 01/06/2011 11:14 AM, John Wise wrote:
>>>
>>> Hi Libby,
>>>
>>> I'm afraid that there isn't a good solution for rendering stars, at
>>> least to my knowledge!
>>>
>>> You can add them as pixels after you've determined the pixel numbers (as
>>> in Andrew's email) of the particles with the splat_points() routine in
>>> the image_writer module.
>>>
>>> I wrote my own stand-alone splatter to put Gaussian splats for
>>> particles, but I never incorporated it into yt. I meant to a few months
>>> back when I wrote it but never did! It will produce these types of splats
>>>
>>>
>>> http://www.astro.princeton.edu/~jwise/research/GalaxyBirth_files/combine.png
>>>
>>>
>>> I had to manually blend the gas volume rendering and star splats
>>> afterwards to produce that image.
>>>
>>> I hope I can make something that looks as good as partiview soon. This
>>> is the same dataset but with partiview.
>>>
>>>
>>> http://www.astro.princeton.edu/~jwise/research/GalaxyBirth_files/stars_only.png
>>>
>>>
>>> I'll see if I can make time (first I have to find the code!) to
>>> incorporate my splatter into yt.
>>>
>>> John
>>>
>>> On 01/06/2011 09:15 AM, Elizabeth Harper-Clark wrote:
>>>>
>>>> Hi all,
>>>>
>>>> Thanks for all your help over the last couple of days. One more question:
>>>> - Can I plot particles on a volume rendered image?
>>>> I have stars and I want to show where they are!
>>>>
>>>> Thanks,
>>>>
>>>> Libby
>>>>
>>>> --
>>>> Elizabeth Harper-Clark MA MSci
>>>> PhD Candidate, Canadian Institute for Theoretical Astrophysics, UofT
>>>> Sciences and Engineering Coordinator, Teaching Assistants' Training
>>>> Program, UofT
>>>>
>>>> www.astro.utoronto.ca/~h-clark <http://www.astro.utoronto.ca/%7Eh-clark>
>>>> h-clark at cita.utoronto.ca <mailto:h-clark at cita.utoronto.ca>
>>>> Astronomy office phone: +1-416-978-5759
>>>>
>>>>
>>>>
>>>> _______________________________________________
>>>> yt-users mailing list
>>>> yt-users at lists.spacepope.org
>>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>>
>>> _______________________________________________
>>> yt-users mailing list
>>> yt-users at lists.spacepope.org
>>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>
>> _______________________________________________
>> yt-users mailing list
>> yt-users at lists.spacepope.org
>> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
>>
> _______________________________________________
> yt-users mailing list
> yt-users at lists.spacepope.org
> http://lists.spacepope.org/listinfo.cgi/yt-users-spacepope.org
More information about the yt-users
mailing list