This tutorial demonstrates how to render a planet atmosphere, using HtoA. However, this method can be applied to the other Arnold plugins. The examples in this guide are created with ACES. If you want to use ACES, you will need to download OpenColorIO (OCIO) configuration package and create an OCIO variable in Houdini.env, in User preference. Example: OCIO = C:\OCIO\aces_1.0.3\config.ocio. Many thanks to Slava Sych for this tutorial.

The scene files can be found here.
Spherical Geometry 


  • First, start HoudiniFX and create a new scene.
  • Go to the SHOP context and create 3 Arnold Shader Networks.
  • Rename them as earth, clouds, and atmosphere.

Preparing the Geometry

  • Create a file node in the OBJ context, rename it to 'Planet' and open it. Inside it create a Box primitive. We will use a Box because we want to create a part of the planet in camera. We will show how to prepare the geometry for a complete spherical planet at the end of this example.
  • Connect the Box node to a Transform. Box->Transform.

Transform Node

  • Set Scale Y parameter to 0.5.
  • Set Uniform Scale to 5.
  • Connect the Transform to a Subdivide node. Transform->Subdivide


  • Set the Depth to 4.
  • Connect the Subdivide to a Blast node. Subdivide->Blast.


  • Selection in Group 0-1279 primitives.
  • Connect the Blast to a uvtexture node, and the uvtexture to the Subdivide. Blast->UVTexture->Subdivide.



  • Set Depth to 3.

Now we have the base shape for our planet.

  • Now, create three different branches from the last Subdivide node.
  • Create three null nodes, and rename them to atmo, earth, and cloud.



Earth Material

In the Material parameters set the path to the earth material in the shop context.

Spherical Geometry 






Set Depth to 4.


Set Uniform Scale 1.002.


Set Uniform Scale 1.003.

Preparing the Scene

  • Go to the OBJ context.
  • Now create a camera and set the following transformations:

Translate: -0.790778 1.13185 3.00743
Rotate: -1.66924 -13.6321 5.43062e-09



  • Go to View and set the Resolution to 1920x1080.
  • Create an Arnold Light and set the following transformations:

Translate: -0.0490026 0.686259 0.158599
Rotate: -150.418 16.6297 16.5069


  • Change the light_type to distant.
  • Set the Color to 1 1 0.811.
  • Change the exposure to 3.3.
  • Change the angle to 60. This will give the light a softer shadow.

Render Settings

  • Go to the out context.
  • Create an Arnold node and set the following parameters:


  • AA: 8-16.
  • SSS: 5.
  • volume_indirect: 3
  • Enable Autobump_for_SSS.

Ray Depth

  • volume: 1


  • Go back to the Planet sop in the OBJ context and select the null (earth_out). We will start shading this part of the geometry.
  • Go to the SHOP context and open the Arnold Shader Network (earth).
  • Create a standard_surface shader and connect it to the OUT_material surface.

Now create three Image nodes and call them diff, water_mask, and bump.
Load the textures using the $HIP variable.

  • diff: $HIP/tex/earth_diff_01.jpg
  • water_mask: $HIP/tex/earth_water_mask.png
  • bump: $HIP/tex/earth_bump.png


Connect the Image (diff) rgba to the input of the ColorCorrect and the ColorCorrect rgba to base_color in the Surface Shader.


  • Gamma: 0.8.
  • Hue Shift: -0.048.
  • Saturation: 0.7.


Image (water_mask) -> Range -> SurfaceShader.

  • Connect the Image (water_mask) rgba to Range input, and Range r to the Standard Surface specular.


  • Output Min: 0.2.
  • Output Max: 0.1.
  • Enable smoothstep.


Image (bump) -> bump2d -> standard_surface.
Connect Image (bump) rgba to bump2d bump_map, and the bump2d vector to the standard_surface.normal.


  • bump_height: 0.01.

Select the standand_surface and set the following parameter values:


  • base: 1.
  • diffuse_roughness: 0.3.


  • roughness: 0.45.
  • IOR: 1.2.


  • Go to the Render View, make sure you select the Arnold Rop, and start the render.

You will get something like this:





  • Set Translate Y to 0.003.

Cloud Material

In the Material parameter set the path to the cloud material in the shop context.

  • Go back to the Planet sop and select the null (cloud_out).
  • Go back to the SHOP context and open the Arnold Shader Network (clouds).
  • Create a standand_surface shader and connect shader to the OUT_material surface node.

  • Create an Image shader and load the cloud texture.



  • Connect the Image rgba to Bump2d bump_map, and the bump2d vector to the standand_surface.normal.


  • bump_height: 0.1

facing_ratio -> range

Create a facing_ratio and range node. Connect the facing_ratio.float to the range.input.

Facing Ratio

  • bias: 0.91.
  • gain: 0.466.
  • Enable linear.


  • input_min: 0.205.
  • input_max: 0.344.
  • Enable smoothstep.


Range -> layer_rgba
Image -> layer_rgba

  • Create a layer_rgba. Connect an image.rgba to layer_rgba input1, range.rgb to layer_rgba input2.


  • Set the layer_2 operation to multiply.

layer_rgba -> range -> standard_surface

layer_rgba -> standard_surface

  • Connect layer_rgba.rgba to the range.input and the range.rgb to the standard_surface.emission.


  • input_min: 0.1.
  • output_max: 0.43.
  • Connect layer_rgba.rgba to Standard Surface opacity.
  • Select the standard_surface and set the following parameters:


  • base: 1.


  • roughness: 0.7.
  • IOR: 1.2.


  • Type: randomwalk2.
  • subsurface: 1.
  • radius: 1 0.6955 0.391.


  • Now if we start rendering, we will get something like this.




Transform (pos)

  • Set Translate Y to -0.001.


  • Set Distance to 0.02.


  • Set name edge_grp in Group Name. 
  • Group Type change to Edges.
  • Turn on Keep by Normals and set Direction Y to -1 and Z to 0. 
  • Spread Angle set to 68 for procedural edge selection.

Transform (border_flatten)

  • Select in the Group parameter edge_grp
  • Set Translate Y to 0.610.


When working with a volume we will need some solid geometry without any holes.

  • Change Fill Mode to Quadrilateral Grid.
  • Turn off Deform Patch.

Atmosphere Material

  • Set the path to the atmosphere shader in the shop context.
  • Create a merge and merge the branches into one. Connect the merge to a null and call it OUT.
  • Go back to the Planet sop and select the last null in the node graph (OUT).


  • Go to the SHOP context and open Arnold Shader Network (atmosphere).
  • Create a standard_surface shader. Connect shader to OUT_material surface.
  • When creating the atmosphere, we could use a surface shader and not a volume. This will give us more artistic control. We can use transmittance depth since it is also volume and it works with volume ray depth. This will give us more flexible settings, faster rendering, and less noise than if we used surface conversion to volume VDB, without many voxels and volume artifacts. However, you must remember that this technique is suitable when you look at the atmosphere, if your camera passes through it, you will have to use volume VDB. So let’s get started.


  • Create a facing_ratio and a range shader. Connect the facing_ratio.float to the range.input and the range.rgb to standard_surface.transmission_depth.

Facing Ratio

  • bias: 0.646.
  • gain: 0.267.
  • Enable linear.



  • output_min: 0.2.

facing_ratio -> range -> color_correct -> standard_surface

  • facing_ratio.float to range.input, range_rgb to color_correct.input, color_correct.rgba to standard_surface.opacity.

Facing Ratio

  • bias: 0.948.
  • gain: 0.202.
  • Enable linear.


  • output_max: 6.
  • Enable smoothstep.
  • bias: 0.173.
  • gain: 0.7.


  • gamma: 0.9.

standard_surface shading network

Select the standard_surface and set the following parameters:

  • specular: 0.
  • roughness: 0.
  • IOR: 1.
  • transmission: 1.
  • scatter: 0.358878 0.497024 1.07771.
  • scatter_anisotropy: 0.7.


Now we can render the final planet atmosphere.


To reduce the emission intensity of the clouds on the dark side of the planet or to get a mask for the texture of the dark side of the planet we could use the utility shader with the shade_mode set to lambert. Multiply the shader to the emission texture.



  • No labels
Privacy settings / Do not sell my personal information / Privacy/Cookies