In this tutorial we will once again use yt directly in Blender, but in this example, we'll import some SPH code and plot some points in 3D instead of visualizing AMR surfaces.

Again, please make sure you are set up correctly first and you have read the first and second AstroBlend tutorials. You might also find the first SPH tutorial useful to look over as well.

If you want to be able to export surfaces as OBJs that save their emission information, make sure you have modified your Blender's obj importer and exporter as described in the "Getting Started" section.

Current Code Support

Below is a summary of the level of support for each type of hydrodynamical code:

AstroBlend support for codes is an ongoing process, please find your code below to see if its supported.

Code/Formatyt Surface SupportAstroBlend Surface SupportSPH Support
FLASHYYNA
EnzoYYNA
AthenaYYNA
ArtioNNA - just loadsNA
FitsNNA - just loadsNA
GDFNNA - just loadsNA
MOABNNA - partial loadingNA
SPH Text FilesNNYes (see here)
TipsyNNY

yt Installation or Modification

The folowing is just a rehash of how to set up yt and AstroBlend to use both of them together in Blender as discussed in the first yt tutorial, so feel free to skip this section if you've already gone through that tutorial.

The current version of yt supports compilation with python 3.4 in general (with more codes being included in AstroBlend as an ongoing process). To install or update your yt version to python 3.4, check out the following script here. Note: this will recompile your yt version in python 3.4, which you might not want to do, in which case make sure you change the DEST_SUFFIX parameter in this script. A few other parameters in the beginning of this script you should double check are (1) BLENDER_DIR which should point to your installed version of Blender (if not found the script will install Blender IF you are on a Mac, which is all that is supported at the moment), (2) ASTROBLEND_DIR should point at your forked or downloaded version of the AstroBlend library.

The basics of this script are that it (1) downloads yt and relevant packages, (2) converts yt in to python 3.4 and recompiles, (3) creates a file that Blender runs on startup which includes the relevant paths to the yt and AstroBlend directories, and (4) updates your bash file (.bash_profile on a Mac) to create a terminal runnable version of Blender which runs this library file on start up.

Before we move onto actually importing data in AstroBlend with yt, lets take a quick look at this library file.

import sys
vv = \
['', '/Users/jillnaiman/yt-x86_64/lib/python3.4/site-packages/distribute-0.6.32-py3.4.egg', '/Users/jillnaiman/yt-x86_64/lib/python3.4/site-packages/matplotlib-1.4.0-py3.4-macosx-10.9-x86_64.egg', '/Users/jillnaiman/yt-x86_64/lib/python3.4/site-packages/nose-1.3.4-py3.4.egg', '/Users/jillnaiman/yt-x86_64/lib/python3.4/site-packages/pyparsing-2.0.3-py3.4.egg', '/Users/jillnaiman/yt-x86_64/lib/python3.4/site-packages/python_dateutil-2.4.0-py3.4.egg', '/Users/jillnaiman/yt-x86_64/lib/python3.4/site-packages/six-1.9.0-py3.4.egg', '/Users/jillnaiman/yt-x86_64/lib/python3.4/site-packages/tornado-4.0.1-py3.4-macosx-10.9-x86_64.egg', '/Users/jillnaiman/yt-x86_64/lib/python3.4/site-packages/certifi-14.05.14-py3.4.egg', '/Users/jillnaiman/yt-x86_64/lib/python3.4/site-packages/h5py-2.3.1-py3.4-macosx-10.9-x86_64.egg', '/Users/jillnaiman/yt-x86_64/lib/python3.4/site-packages/Cython-0.20.2-py3.4-macosx-10.9-x86_64.egg', '/Users/jillnaiman/yt-x86_64/lib/python3.4/site-packages/yt-3.2dev-py3.4-macosx-10.9-x86_64.egg', '/Users/jillnaiman/yt-x86_64/lib/python3.4/site-packages', '/Users/jillnaiman/yt-x86_64/lib/python34.zip', '/Users/jillnaiman/yt-x86_64/lib/python3.4', '/Users/jillnaiman/yt-x86_64/lib/python3.4/plat-darwin', '/Users/jillnaiman/yt-x86_64/lib/python3.4/lib-dynload']
for i in range(0,len(vv)):
    if vv[i] not in sys.path:
        sys.path.append(vv[i])
vv2 = ['']
for i in range(0,len(sys.path)):
    if sys.path[i].find('python2') is -1:
        vv2.append(sys.path[i])
sys.path = vv2
sys.path.append('/Users/jillnaiman/astroblend-stable/science/')
First, this little bit of code adds all the new python 3.4 and yt libraries that we will be using in Blender, and then it takes out any references to python 2 libraries so that AstroBlend doesn't get confused. Finally, it points to your install of the AstroBlend libraries, in my case these are stored in a folder in my home directory calld "astroblend-stable". You can also update this file to add or exclude your own libraries - for example, I've got a few installs of yt and I wanted to make sure Blender didn't use any of the libraries in my yt install labeled "yt3" so I simply added the following lines onto my version of this script:
vv2 = ['']
for i in range(0,len(sys.path)):
    if sys.path[i].find('yt3') is -1:
        vv2.append(sys.path[i])
sys.path = vv2
Now you can run Blender from the terminal with the command "blender" which is aliased in your bash file with something like:
alias blender='/Applications/Blender/blender.app/Contents/MacOS/blender -P /Users/jillnaiman/yt-x86_64/yt_blender_import.py'

Get the yt Data

The next step is to actually have some data to work with. For this example, we will be using the "TipsyGalaxy" data found on the yt website (~10MB) here.

Generating SPH Visualizations with yt+AstroBlend

Loading in the SPH data directly from a simulation is very similar to loading it from a file with on difference - we need to specify what to color the SPH particles by as show in this snippet of code where we color them by temperature:

import science

filename = '/Users/jillnaiman/data/TipsyGalaxy/galaxy.00300'

color_field = ('Gas', 'Temperature') # color by temp
color_log = True # take log of temp for mapping colors
color_map = 'Rainbow'

# these two things play off eachother!
# larger halo size is needed when cam is far away
halo_size = 0.108 # need to play with this and cam distance
set_cam = (0,0,70)

scale = [(1.0, 1.0, 1.0)]

cam = science.Camera()
cam.location = set_cam
cam.clip_begin = 0.0001

lighting = science.Lighting('EMISSION')

myobject = science.Load(filename, scale=scale, halo_sizes = halo_size, 
                        color_field = color_field, color_map = color_map, 
                        color_log = color_log, n_ref=8)

This results in the following setup in your Blender window:

Note that there are a few things that are different than when we imported things from a pre-formatted text file. In our "object selector" panel you'll notice that there are about 250 particle types listed. This is because our color maps are made up of 256 colors, so each particle type is made up of all the particles within that temperature bin, excluding colors where there are no particles in that temperature bin. For now, that is just how things need to be input. In the future, I'm hoping to figure out a way to mesh all of the particle types into one object.

One fun thing we can do is turn on "Render View" in our 3D viewer like so:

This allows for a rendered view as you move around the space using your number pad as discussed in the first tutorial. If you don't have a number pad but want to use the number keys to move around check out how to do this in the Blender Preferences under "Numpad emulation".

For fun, here is a short little movie of how you can move around your SPH simulation and check out things while its being rendered in real time:

One thing you may note is how the particles look all "fuzzy" when you are up close to them. This is because the halo_sizes was set to give a good render when the camera was high above the galaxy. The halo size and camera distance is something you can play around with to find a good fit - too high and you just get a bunch of fuzzy lumps, but too small and nothing will show up on your rendered image.


yt+AstroBlend Surfaces

Previous Tutorial

Simple 3D Objects

Next Tutorial