written by Nathan 'jesterKing' Letwory
The RenderEnvironment represents environments in Rhino. To create an
environment that uses an HDRi texture we'll be creating the RenderTexture that
holds that HDRi image, and the RenderEnvironment to which we will assign that
texture.
We'll be creating the RenderEnvironment using
RenderContent.Create
that takes a GUID, in this case the RenderEnvironment GUID which is ba51ce00-ba51-ce00-ba51-ceba51ce0000, content chooser flags that we leave at NONE and a RhinoDoc instance that we get from scriptcontext.
To create the HDR render texture we'll be using
RenderContentType.NewContentFromTypeId
to which we will pass Rhino.Render.ContentUuids.HDRTextureType.
import scriptcontext as sc
import Rhino
import System
file_dialog = Rhino.UI.OpenFileDialog()
file_dialog.Filter = "EXR (*.exr)|*.exr"
if file_dialog.ShowDialog():
<<create HDR texture>>
<<create environment>>
<<assign HDR to environment>>
As mentioned earlier we'll be directly creating the texture through
RenderContentType, giving it the correct GUID.
render_texture = Rhino.Render.RenderContentType.NewContentFromTypeId(
Rhino.Render.ContentUuids.HDRTextureType
)
Once we have a new instance we set the filename parameter to a string that is
the path to an HDRi file. To set parameters we need to bracket the call to
SetParameter in a BeginChange and EndChange pair.
Additionally we'll also change the texture saturation to show how that can be
done. The parameter name is rdk-texture-adjust-saturation.
render_texture.BeginChange(Rhino.Render.RenderContent.ChangeContexts.Program)
render_texture.SetParameter("filename", file_dialog.FileName)
render_texture.SetParameter("rdk-texture-adjust-saturation", 0.0)
render_texture.EndChange()
render_environment = Rhino.Render.RenderContent.Create(
System.Guid('ba51ce00-ba51-ce00-ba51-ceba51ce0000'),
Rhino.Render.RenderContent.ShowContentChooserFlags.NONE,
sc.doc
)
Assigning the texture to the environment we do using SetChild to the child
with name texture.
render_environment.BeginChange(Rhino.Render.RenderContent.ChangeContexts.Program)
render_environment.SetChild(render_texture, "texture")
render_environment.EndChange()
The Python-only code for this literate program can be found here.