In this chapter we'll cover slightly more complex light source in V-Ray - the dome light. It represents a light emitting dome encompassing the scene at infinity. It's usually used for HDR image based lighting (IBL) with a spherical texture file.
Parameters Along with the common ones for the lights, the LightDome plugin has some specific parameters:
dome_spherical - Set to true to extend the dome to a full sphere. By default it is only a half-dome centered at the scene zenith. SettingsUnitsInfo::scene_upDir needs to be properly set. dome_tex - A texture plugin to use. Note that this usually requires spherical mapping. use_dome_tex - You also have to set this to true to use the dome_tex. tex_resolution - The texture is actually resampled at this resolution. The default is 512, so even if you have a high resolution image, it may look pixelated if you don't increase this. This will consume more memory. dome_targetRadius - Defines a sphere around the light icon where photons are being shot when photon-mapped caustics or the global photon map are used. dome_emitRadius - Defines a sphere around the light icon from which photons are being shot towards the target radius area. tex_adaptive - The adaptivity of the sampling to the texture brightness (0.0 - no adaptivity; 1.0 - full adaptivity). dome_rayDistance - Allows you to specify the maximum distance to which shadow rays are going to be traced. dome_rayDistanceMode - Specifies the method of determining the maximum distance to which shadow rays are going to be traced. Could be 0: None, 1: From GI Settings (the Ray Dist value is determined by the ray distance parameter in the GI settings) and 2: Explicit (the ray distance value is determined by the dome_rayDistance parameter). affect_alpha - When this option is enabled, the virtual sphere on which the dome texture is mapped is going to be visible as a solid object in the alpha. For the full list of parameters, please refer to the LightDome plugin description in API Reference Guides .
Example Here we'll show how to add a LightDome to a scene.
Python <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line"># Compatibility with Python 2.7.</span><span data-v-c2b1f83f="" class="line">from __future__ import print_function</span><span data-v-c2b1f83f="" class="line"></span><span data-v-c2b1f83f="" class="line"># The directory containing the vray shared object should be present in the PYTHONPATH environment variable.</span><span data-v-c2b1f83f="" class="line"># Try to import the vray module from VRAY_SDK/python, if it is not in PYTHONPATH</span><span data-v-c2b1f83f="" class="line">import sys, os</span><span data-v-c2b1f83f="" class="line">VRAY_SDK = os.environ.get('VRAY_SDK')</span><span data-v-c2b1f83f="" class="line">if VRAY_SDK:</span><span data-v-c2b1f83f="" class="line"> sys.path.append(os.path.join(VRAY_SDK, 'python'))</span><span data-v-c2b1f83f="" class="line">import vray</span><span data-v-c2b1f83f="" class="line"></span><span data-v-c2b1f83f="" class="line">SCENE_PATH = os.path.join(os.environ.get('VRAY_SDK'), 'scenes')</span><span data-v-c2b1f83f="" class="line"># Change process working directory to SCENE_PATH in order to be able to load relative scene resources.</span><span data-v-c2b1f83f="" class="line">os.chdir(SCENE_PATH)</span><span data-v-c2b1f83f="" class="line"></span><span data-v-c2b1f83f="" class="line"># The renderer is automatically closed after the `with` block.</span><span data-v-c2b1f83f="" class="line">with vray.VRayRenderer() as renderer:</span><span data-v-c2b1f83f="" class="line"> # Register a simple log callback. Always useful for debugging.</span><span data-v-c2b1f83f="" class="line"> def dumpMsg(renderer, message, level, instant):</span><span data-v-c2b1f83f="" class="line"> if level == vray.LOGLEVEL_ERROR:</span><span data-v-c2b1f83f="" class="line"> print("[ERROR]", message)</span><span data-v-c2b1f83f="" class="line"> elif level == vray.LOGLEVEL_WARNING:</span><span data-v-c2b1f83f="" class="line"> print("[Warning]", message)</span><span data-v-c2b1f83f="" class="line"> elif level == vray.LOGLEVEL_INFO:</span><span data-v-c2b1f83f="" class="line"> print("[info]", message)</span><span data-v-c2b1f83f="" class="line"> # Uncomment for testing, but you might want to ignore these in real code</span><span data-v-c2b1f83f="" class="line"> #else: print("[debug]", message)</span><span data-v-c2b1f83f="" class="line"> renderer.setOnLogMessage(dumpMsg)</span><span data-v-c2b1f83f="" class="line"> # Load scene from a file.</span><span data-v-c2b1f83f="" class="line"> renderer.load(os.path.join(SCENE_PATH, 'lighting.vrscene'))</span><span data-v-c2b1f83f="" class="line"> # Remove original light source from the scene.</span><span data-v-c2b1f83f="" class="line"> del renderer.plugins["VRayLightDomeShape1"]</span><span data-v-c2b1f83f="" class="line"></span><span data-v-c2b1f83f="" class="line"> # The UVWGenEnvironment allows spherical, cube, etc. textures to be</span><span data-v-c2b1f83f="" class="line"> # mapped on the environment color slot or dome lights.</span><span data-v-c2b1f83f="" class="line"> uvwgen = renderer.classes.UVWGenEnvironment()</span><span data-v-c2b1f83f="" class="line"> # Specify the type and shape of the texture.</span><span data-v-c2b1f83f="" class="line"> # Possible values are:</span><span data-v-c2b1f83f="" class="line"> # angular</span><span data-v-c2b1f83f="" class="line"> # cubic</span><span data-v-c2b1f83f="" class="line"> # mirror_ball</span><span data-v-c2b1f83f="" class="line"> # spherical - default</span><span data-v-c2b1f83f="" class="line"> # screen</span><span data-v-c2b1f83f="" class="line"> # max_spherical</span><span data-v-c2b1f83f="" class="line"> # spherical_vray</span><span data-v-c2b1f83f="" class="line"> # max_cylindrical</span><span data-v-c2b1f83f="" class="line"> # max_shrink_wrap</span><span data-v-c2b1f83f="" class="line"> uvwgen.mapping_type = 'spherical'</span><span data-v-c2b1f83f="" class="line"> # Specify transformation of the input directions.</span><span data-v-c2b1f83f="" class="line"> uvwgen.uvw_matrix = vray.Matrix(</span><span data-v-c2b1f83f="" class="line"> vray.Vector(1, 0, 0),</span><span data-v-c2b1f83f="" class="line"> vray.Vector(0, 0, 1),</span><span data-v-c2b1f83f="" class="line"> vray.Vector(0, -1, 0))</span><span data-v-c2b1f83f="" class="line"> uvwgen.ground_on = 1</span><span data-v-c2b1f83f="" class="line"> bitmap = renderer.classes.BitmapBuffer()</span><span data-v-c2b1f83f="" class="line"> # unlike JPG files, HDR files are linear</span><span data-v-c2b1f83f="" class="line"> bitmap.transfer_function = 0</span><span data-v-c2b1f83f="" class="line"> bitmap.file = os.path.join(SCENE_PATH, 'assets', 'Sea_D.hdr')</span><span data-v-c2b1f83f="" class="line"> texture = renderer.classes.TexBitmap()</span><span data-v-c2b1f83f="" class="line"> # Specify UVW generator for the texture.</span><span data-v-c2b1f83f="" class="line"> texture.uvwgen = uvwgen</span><span data-v-c2b1f83f="" class="line"> # Specify the bitmap that the texture will be using.</span><span data-v-c2b1f83f="" class="line"> texture.bitmap = bitmap</span><span data-v-c2b1f83f="" class="line"> # LightDome is a light source plugin that can be used to create lights that</span><span data-v-c2b1f83f="" class="line"> # shine inward at the scene as if from a spherical or hemispherical light source outside the scene extents.</span><span data-v-c2b1f83f="" class="line"> # This light is frequently used for image-based lighting using panoramic HDR images used as environments.</span><span data-v-c2b1f83f="" class="line"> light = renderer.classes.LightDome()</span><span data-v-c2b1f83f="" class="line"> # Specify the light position, rotation and scale.</span><span data-v-c2b1f83f="" class="line"> light.transform = vray.Transform(</span><span data-v-c2b1f83f="" class="line"> vray.Matrix(</span><span data-v-c2b1f83f="" class="line"> vray.Vector(0, 0, 1),</span><span data-v-c2b1f83f="" class="line"> vray.Vector(1, 0, 0),</span><span data-v-c2b1f83f="" class="line"> vray.Vector(0, 1, 0)),</span><span data-v-c2b1f83f="" class="line"> vray.Vector(0, 0, 0))</span><span data-v-c2b1f83f="" class="line"> # Switches between a hemispherical or (full) spherical shape of the light.</span><span data-v-c2b1f83f="" class="line"> # Possible values are:</span><span data-v-c2b1f83f="" class="line"> # True (Sphere)</span><span data-v-c2b1f83f="" class="line"> # False (Hemisphere)</span><span data-v-c2b1f83f="" class="line"> light.dome_spherical = True</span><span data-v-c2b1f83f="" class="line"> # Specify the light intensity based on the 'units' parameter.</span><span data-v-c2b1f83f="" class="line"> light.intensity = 4</span><span data-v-c2b1f83f="" class="line"> # Specify the light texture.</span><span data-v-c2b1f83f="" class="line"> light.dome_tex = texture</span><span data-v-c2b1f83f="" class="line"> # Enable the use of a light texture.</span><span data-v-c2b1f83f="" class="line"> # If "use_dome_tex = False" the 'color' of the light will be used instead.</span><span data-v-c2b1f83f="" class="line"> light.use_dome_tex = True</span><span data-v-c2b1f83f="" class="line"> # Specify shadow offset from the surface. Helps to prevent polygonal shadow artifacts on low-poly surfaces.</span><span data-v-c2b1f83f="" class="line"> light.shadowBias = 0.02</span><span data-v-c2b1f83f="" class="line"> # Specify that the bumped normal should be used to check if the light direction is below the surface.</span><span data-v-c2b1f83f="" class="line"> light.bumped_below_surface_check = True</span><span data-v-c2b1f83f="" class="line"> # Start rendering.</span><span data-v-c2b1f83f="" class="line"> renderer.startSync()</span><span data-v-c2b1f83f="" class="line"> # Wait for rendering to end.</span><span data-v-c2b1f83f="" class="line"> renderer.waitForRenderEnd()</span></code>
C++ <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">#define VRAY_RUNTIME_LOAD_PRIMARY</span><span data-v-c2b1f83f="" class="line"></span><span data-v-c2b1f83f="" class="line">#include "vraysdk.hpp"</span><span data-v-c2b1f83f="" class="line">#include "vrayplugins.hpp"</span><span data-v-c2b1f83f="" class="line">#include "utils.h"</span><span data-v-c2b1f83f="" class="line"></span><span data-v-c2b1f83f="" class="line">using namespace VRay;</span><span data-v-c2b1f83f="" class="line">using namespace VRay::Plugins;</span><span data-v-c2b1f83f="" class="line">using namespace std;</span><span data-v-c2b1f83f="" class="line"></span><span data-v-c2b1f83f="" class="line">const char *BASE_PATH = getenv("VRAY_SDK");</span><span data-v-c2b1f83f="" class="line">string SCENE_PATH = (BASE_PATH ? string(BASE_PATH) : string(".")) + PATH_DELIMITER + "scenes";</span><span data-v-c2b1f83f="" class="line"></span><span data-v-c2b1f83f="" class="line">int main() {</span><span data-v-c2b1f83f="" class="line"> // Change process working directory to SCENE_PATH in order to be able to load relative scene resources.</span><span data-v-c2b1f83f="" class="line"> changeCurrentDir(SCENE_PATH.c_str());</span><span data-v-c2b1f83f="" class="line"> // Load V-Ray SDK library.</span><span data-v-c2b1f83f="" class="line"> VRayInit init(NULL, true);</span><span data-v-c2b1f83f="" class="line"> // Create an instance of VRayRenderer with default options. The renderer is automatically closed at the end of the current scope.</span><span data-v-c2b1f83f="" class="line"> VRayRenderer renderer;</span><span data-v-c2b1f83f="" class="line"> // It's recommended to always have a console log</span><span data-v-c2b1f83f="" class="line"> renderer.setOnLogMessage(logMessage);</span><span data-v-c2b1f83f="" class="line"> // Load scene from a file.</span><span data-v-c2b1f83f="" class="line"> renderer.load("lighting.vrscene");</span><span data-v-c2b1f83f="" class="line"> // Remove original light source from the scene.</span><span data-v-c2b1f83f="" class="line"> renderer.deletePlugin("VRayLightDomeShape1");</span><span data-v-c2b1f83f="" class="line"> // The UVWGenEnvironment allows spherical, cube, etc.textures to be mapped on the environment color slot or dome lights.</span><span data-v-c2b1f83f="" class="line"> UVWGenEnvironment uvwgen = renderer.newPlugin<UVWGenEnvironment>();</span><span data-v-c2b1f83f="" class="line"> // Specify the type and shape of the texture.</span><span data-v-c2b1f83f="" class="line"> // Possible values are:</span><span data-v-c2b1f83f="" class="line"> // angular</span><span data-v-c2b1f83f="" class="line"> // cubic</span><span data-v-c2b1f83f="" class="line"> // mirror_ball</span><span data-v-c2b1f83f="" class="line"> // spherical - default</span><span data-v-c2b1f83f="" class="line"> // screen</span><span data-v-c2b1f83f="" class="line"> // max_spherical</span><span data-v-c2b1f83f="" class="line"> // spherical_vray</span><span data-v-c2b1f83f="" class="line"> // max_cylindrical</span><span data-v-c2b1f83f="" class="line"> // max_shrink_wrap</span><span data-v-c2b1f83f="" class="line"> uvwgen.set_mapping_type("spherical");</span><span data-v-c2b1f83f="" class="line"> // Specify transformation of the input directions.</span><span data-v-c2b1f83f="" class="line"> uvwgen.set_uvw_matrix(</span><span data-v-c2b1f83f="" class="line"> Matrix(</span><span data-v-c2b1f83f="" class="line"> Vector(1.0, 0.0, 0.0),</span><span data-v-c2b1f83f="" class="line"> Vector(0.0, 0.0, 1.0),</span><span data-v-c2b1f83f="" class="line"> Vector(0.0, -1.0, 0.0)));</span><span data-v-c2b1f83f="" class="line"> uvwgen.set_ground_on(1);</span><span data-v-c2b1f83f="" class="line"> BitmapBuffer bitmap = renderer.newPlugin<BitmapBuffer>();</span><span data-v-c2b1f83f="" class="line"> // unlike JPG files, HDR files are linear</span><span data-v-c2b1f83f="" class="line"> bitmap.set_transfer_function(0);</span><span data-v-c2b1f83f="" class="line"> bitmap.set_file("assets/Sea_D.hdr");</span><span data-v-c2b1f83f="" class="line"> TexBitmap texture = renderer.newPlugin<TexBitmap>();</span><span data-v-c2b1f83f="" class="line"> // Specify UVW generator for the texture.</span><span data-v-c2b1f83f="" class="line"> texture.set_uvwgen(uvwgen);</span><span data-v-c2b1f83f="" class="line"> // Specify the bitmap that the texture will be using.</span><span data-v-c2b1f83f="" class="line"> texture.set_bitmap(bitmap);</span><span data-v-c2b1f83f="" class="line"> // LightDome is a light source plugin that can be used to create lights that</span><span data-v-c2b1f83f="" class="line"> // shine inward at the scene as if from a spherical or hemispherical light source outside the scene extents.</span><span data-v-c2b1f83f="" class="line"> // This light is frequently used for image-based lighting using panoramic HDR images used as environments.</span><span data-v-c2b1f83f="" class="line"> LightDome light = renderer.newPlugin<LightDome>();</span><span data-v-c2b1f83f="" class="line"> // Specify the light position, rotation and scale.</span><span data-v-c2b1f83f="" class="line"> light.set_transform(Transform(</span><span data-v-c2b1f83f="" class="line"> Matrix(</span><span data-v-c2b1f83f="" class="line"> Vector(0.0, 0.0, 1.0),</span><span data-v-c2b1f83f="" class="line"> Vector(1.0, 0.0, 0.0),</span><span data-v-c2b1f83f="" class="line"> Vector(0.0, 1.0, 0.0)),</span><span data-v-c2b1f83f="" class="line"> Vector(0.0, 0.0, 0.0)));</span><span data-v-c2b1f83f="" class="line"> // Switches between a hemispherical or (full) spherical shape of the light.</span><span data-v-c2b1f83f="" class="line"> // Possible values are:</span><span data-v-c2b1f83f="" class="line"> // true (Sphere)</span><span data-v-c2b1f83f="" class="line"> // false (Hemisphere) - default</span><span data-v-c2b1f83f="" class="line"> light.set_dome_spherical(true);</span><span data-v-c2b1f83f="" class="line"> // Specify the light intensity based on the 'units' parameter.</span><span data-v-c2b1f83f="" class="line"> light.set_intensity(4);</span><span data-v-c2b1f83f="" class="line"> // Specify the light texture.</span><span data-v-c2b1f83f="" class="line"> light.set_dome_tex(texture);</span><span data-v-c2b1f83f="" class="line"> // Enable the use of a light texture.</span><span data-v-c2b1f83f="" class="line"> // If "use_dome_tex = false" the 'color' of the light will be used instead.</span><span data-v-c2b1f83f="" class="line"> light.set_use_dome_tex(true);</span><span data-v-c2b1f83f="" class="line"> // Specify shadow offset from the surface. Helps to prevent polygonal shadow artifacts on low-poly surfaces.</span><span data-v-c2b1f83f="" class="line"> light.set_shadowBias(0.02f);</span><span data-v-c2b1f83f="" class="line"> // Specify that the bumped normal should be used to check if the light direction is below the surface.</span><span data-v-c2b1f83f="" class="line"> light.set_bumped_below_surface_check(true);</span><span data-v-c2b1f83f="" class="line"> // Start rendering.</span><span data-v-c2b1f83f="" class="line"> renderer.startSync();</span><span data-v-c2b1f83f="" class="line"> // Wait for rendering to end.</span><span data-v-c2b1f83f="" class="line"> renderer.waitForRenderEnd();</span><span data-v-c2b1f83f="" class="line"> return 0;</span><span data-v-c2b1f83f="" class="line">}</span></code>
C#.NET <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">using System;</span><span data-v-c2b1f83f="" class="line">using System.IO;</span><span data-v-c2b1f83f="" class="line">using VRay;</span><span data-v-c2b1f83f="" class="line">using VRay.Plugins;</span><span data-v-c2b1f83f="" class="line"></span><span data-v-c2b1f83f="" class="line">namespace _04_dome</span><span data-v-c2b1f83f="" class="line">{</span><span data-v-c2b1f83f="" class="line"> class Program</span><span data-v-c2b1f83f="" class="line"> {</span><span data-v-c2b1f83f="" class="line"> static void Main(string[] args)</span><span data-v-c2b1f83f="" class="line"> {</span><span data-v-c2b1f83f="" class="line"> string SCENE_PATH = Path.Combine(Environment.GetEnvironmentVariable("VRAY_SDK"), "scenes");</span><span data-v-c2b1f83f="" class="line"> // Change process working directory to SCENE_PATH in order to be able to load relative scene resources.</span><span data-v-c2b1f83f="" class="line"> Directory.SetCurrentDirectory(SCENE_PATH);</span><span data-v-c2b1f83f="" class="line"></span><span data-v-c2b1f83f="" class="line"> // Create an instance of VRayRenderer with default options. The renderer is automatically closed after the `using` block.</span><span data-v-c2b1f83f="" class="line"> using (VRayRenderer renderer = new VRayRenderer())</span><span data-v-c2b1f83f="" class="line"> {</span><span data-v-c2b1f83f="" class="line"> // Add a listener for any type of log message.</span><span data-v-c2b1f83f="" class="line"> renderer.LogMessage += new EventHandler<MessageEventArgs>((source, e) =></span><span data-v-c2b1f83f="" class="line"> {</span><span data-v-c2b1f83f="" class="line"> // You can remove the if for testing, but you might want to ignore Debug in real code</span><span data-v-c2b1f83f="" class="line"> if (e.LogLevel != LogLevelType.Debug)</span><span data-v-c2b1f83f="" class="line"> {</span><span data-v-c2b1f83f="" class="line"> Console.WriteLine(String.Format("[{0}] {1}", e.LogLevel.ToString(), e.Message));</span><span data-v-c2b1f83f="" class="line"> }</span><span data-v-c2b1f83f="" class="line"> });</span><span data-v-c2b1f83f="" class="line"> // Load scene from a file.</span><span data-v-c2b1f83f="" class="line"> renderer.Load("lighting.vrscene");</span><span data-v-c2b1f83f="" class="line"> // Remove original light source from the scene.</span><span data-v-c2b1f83f="" class="line"> renderer.DeletePlugin("VRayLightDomeShape1");</span><span data-v-c2b1f83f="" class="line"> // The UVWGenEnvironment allows spherical, cube, etc. textures to be mapped on the environment color slot or dome lights.</span><span data-v-c2b1f83f="" class="line"> UVWGenEnvironment uvwgen = renderer.NewPlugin<UVWGenEnvironment>();</span><span data-v-c2b1f83f="" class="line"> // Specify the type and shape of the texture.</span><span data-v-c2b1f83f="" class="line"> // Possible values are:</span><span data-v-c2b1f83f="" class="line"> // angular</span><span data-v-c2b1f83f="" class="line"> // cubic</span><span data-v-c2b1f83f="" class="line"> // mirror_ball</span><span data-v-c2b1f83f="" class="line"> // spherical - default</span><span data-v-c2b1f83f="" class="line"> // screen</span><span data-v-c2b1f83f="" class="line"> // max_spherical</span><span data-v-c2b1f83f="" class="line"> // spherical_vray</span><span data-v-c2b1f83f="" class="line"> // max_cylindrical</span><span data-v-c2b1f83f="" class="line"> // max_shrink_wrap</span><span data-v-c2b1f83f="" class="line"> uvwgen.MappingType = "spherical";</span><span data-v-c2b1f83f="" class="line"> // Specify transformation of the input directions.</span><span data-v-c2b1f83f="" class="line"> uvwgen.UvwMatrix = new Matrix(</span><span data-v-c2b1f83f="" class="line"> new Vector(1, 0, 0),</span><span data-v-c2b1f83f="" class="line"> new Vector(0, 0, 1),</span><span data-v-c2b1f83f="" class="line"> new Vector(0, -1, 0));</span><span data-v-c2b1f83f="" class="line"> uvwgen.GroundOn = 1;</span><span data-v-c2b1f83f="" class="line"> BitmapBuffer bitmap = renderer.NewPlugin<BitmapBuffer>();</span><span data-v-c2b1f83f="" class="line"> // unlike JPG files, HDR files are linear</span><span data-v-c2b1f83f="" class="line"> bitmap.TransferFunction = 0;</span><span data-v-c2b1f83f="" class="line"> bitmap.File = Path.Combine("assets", "Sea_D.hdr");</span><span data-v-c2b1f83f="" class="line"> TexBitmap texture = renderer.NewPlugin<TexBitmap>();</span><span data-v-c2b1f83f="" class="line"> // Specify UVW generator for the texture.</span><span data-v-c2b1f83f="" class="line"> texture.Uvwgen = uvwgen;</span><span data-v-c2b1f83f="" class="line"> // Specify the bitmap that the texture will be using.</span><span data-v-c2b1f83f="" class="line"> texture.Bitmap = bitmap;</span><span data-v-c2b1f83f="" class="line"> // LightDome is a light source plugin that can be used to create lights that</span><span data-v-c2b1f83f="" class="line"> // shine inward at the scene as if from a spherical or hemispherical light source outside the scene extents.</span><span data-v-c2b1f83f="" class="line"> // This light is frequently used for image-based lighting using panoramic HDR images used as environments.</span><span data-v-c2b1f83f="" class="line"> LightDome light = renderer.NewPlugin<LightDome>();</span><span data-v-c2b1f83f="" class="line"> // Specify the light position, rotation and scale.</span><span data-v-c2b1f83f="" class="line"> light.Transform = new Transform(</span><span data-v-c2b1f83f="" class="line"> new Matrix(</span><span data-v-c2b1f83f="" class="line"> new Vector(0, 0, 1),</span><span data-v-c2b1f83f="" class="line"> new Vector(1, 0, 0),</span><span data-v-c2b1f83f="" class="line"> new Vector(0, 1, 0)),</span><span data-v-c2b1f83f="" class="line"> new Vector(0, 0, 0));</span><span data-v-c2b1f83f="" class="line"> // Switches between a hemispherical or (full) spherical shape of the light.</span><span data-v-c2b1f83f="" class="line"> // Possible values are:</span><span data-v-c2b1f83f="" class="line"> // true (Sphere)</span><span data-v-c2b1f83f="" class="line"> // false (Hemisphere)</span><span data-v-c2b1f83f="" class="line"> light.DomeSpherical = true;</span><span data-v-c2b1f83f="" class="line"> // Specify the light intensity based on the 'units' parameter.</span><span data-v-c2b1f83f="" class="line"> light.Intensity = 4;</span><span data-v-c2b1f83f="" class="line"> // Specify the light texture.</span><span data-v-c2b1f83f="" class="line"> light.DomeTex = texture;</span><span data-v-c2b1f83f="" class="line"> // Enable the use of a light texture.</span><span data-v-c2b1f83f="" class="line"> // If "use_dome_tex = False" the 'color' of the light will be used instead.</span><span data-v-c2b1f83f="" class="line"> light.UseDomeTex = true;</span><span data-v-c2b1f83f="" class="line"> // Specify shadow offset from the surface. Helps to prevent polygonal shadow artifacts on low-poly surfaces.</span><span data-v-c2b1f83f="" class="line"> light.ShadowBias = 0.02F;</span><span data-v-c2b1f83f="" class="line"> // Specify that the bumped normal should be used to check if the light direction is below the surface.</span><span data-v-c2b1f83f="" class="line"> light.BumpedBelowSurfaceCheck = true;</span><span data-v-c2b1f83f="" class="line"> // Specify the number of parameter samples for motion blur.</span><span data-v-c2b1f83f="" class="line"> light.Nsamples = 1;</span><span data-v-c2b1f83f="" class="line"> // Start rendering.</span><span data-v-c2b1f83f="" class="line"> renderer.StartSync();</span><span data-v-c2b1f83f="" class="line"> // Wait for rendering to end.</span><span data-v-c2b1f83f="" class="line"> renderer.WaitForRenderEnd();</span><span data-v-c2b1f83f="" class="line"> }</span><span data-v-c2b1f83f="" class="line"> }</span><span data-v-c2b1f83f="" class="line"> }</span><span data-v-c2b1f83f="" class="line">}</span></code>
Node.js <code data-v-c2b1f83f=""><span data-v-c2b1f83f="" class="line">var path = require('path');</span><span data-v-c2b1f83f="" class="line">var vray = require(path.join(process.env.VRAY_SDK, 'node', 'vray'));</span><span data-v-c2b1f83f="" class="line"></span><span data-v-c2b1f83f="" class="line">var SCENE_PATH = path.join(process.env.VRAY_SDK, 'scenes');</span><span data-v-c2b1f83f="" class="line">// Change process working directory to SCENE_PATH in order to be able to load relative scene resources.</span><span data-v-c2b1f83f="" class="line">process.chdir(SCENE_PATH);</span><span data-v-c2b1f83f="" class="line"></span><span data-v-c2b1f83f="" class="line">// Create an instance of VRayRenderer with default options.</span><span data-v-c2b1f83f="" class="line">var renderer = vray.VRayRenderer();</span><span data-v-c2b1f83f="" class="line">// It's recommended to always have a console log callback</span><span data-v-c2b1f83f="" class="line">renderer.on("logMessage", function(message, level, instant) {</span><span data-v-c2b1f83f="" class="line"> if (level == vray.LOGLEVEL_ERROR)</span><span data-v-c2b1f83f="" class="line"> console.log("[ERROR] ", message);</span><span data-v-c2b1f83f="" class="line"> else if (level == vray.LOGLEVEL_WARNING)</span><span data-v-c2b1f83f="" class="line"> console.log("[Warning] ", message);</span><span data-v-c2b1f83f="" class="line"> else if (level == vray.LOGLEVEL_INFO)</span><span data-v-c2b1f83f="" class="line"> console.log("[info] ", message);</span><span data-v-c2b1f83f="" class="line"> // Uncomment for testing, but you might want to ignore these in real code</span><span data-v-c2b1f83f="" class="line"> //else console.log("[debug] ", message);</span><span data-v-c2b1f83f="" class="line">});</span><span data-v-c2b1f83f="" class="line">// Load scene from a file asynchronously.</span><span data-v-c2b1f83f="" class="line">renderer.load("lighting.vrscene", function(err) {</span><span data-v-c2b1f83f="" class="line"> if (err) throw err;</span><span data-v-c2b1f83f="" class="line"> // Remove original light source from the scene.</span><span data-v-c2b1f83f="" class="line"> delete renderer.plugins["VRayLightDomeShape1"];</span><span data-v-c2b1f83f="" class="line"> // The UVWGenEnvironment allows spherical, cube, etc. textures to be mapped on the environment color slot or dome lights.</span><span data-v-c2b1f83f="" class="line"> var uvwgen = renderer.classes.UVWGenEnvironment();</span><span data-v-c2b1f83f="" class="line"> // Specify transformation of the input directions.</span><span data-v-c2b1f83f="" class="line"> uvwgen.uvw_matrix = vray.Matrix(</span><span data-v-c2b1f83f="" class="line"> vray.Vector(1, 0, 0),</span><span data-v-c2b1f83f="" class="line"> vray.Vector(0, 0, 1),</span><span data-v-c2b1f83f="" class="line"> vray.Vector(0, -1, 0));</span><span data-v-c2b1f83f="" class="line"> uvwgen.ground_on = 1;</span><span data-v-c2b1f83f="" class="line"> // Specify the type and shape of the texture.</span><span data-v-c2b1f83f="" class="line"> // Possible values are:</span><span data-v-c2b1f83f="" class="line"> // angular</span><span data-v-c2b1f83f="" class="line"> // cubic</span><span data-v-c2b1f83f="" class="line"> // mirror_ball</span><span data-v-c2b1f83f="" class="line"> // spherical - default</span><span data-v-c2b1f83f="" class="line"> // screen</span><span data-v-c2b1f83f="" class="line"> // max_spherical</span><span data-v-c2b1f83f="" class="line"> // spherical_vray</span><span data-v-c2b1f83f="" class="line"> // max_cylindrical</span><span data-v-c2b1f83f="" class="line"> // max_shrink_wrap</span><span data-v-c2b1f83f="" class="line"> uvwgen.mapping_type = "spherical";</span><span data-v-c2b1f83f="" class="line"> var bitmap = renderer.classes.BitmapBuffer();</span><span data-v-c2b1f83f="" class="line"> // unlike JPG files, HDR files are linear</span><span data-v-c2b1f83f="" class="line"> bitmap.transfer_function = 0;</span><span data-v-c2b1f83f="" class="line"> bitmap.file = path.join(SCENE_PATH, "assets", "Sea_D.hdr");</span><span data-v-c2b1f83f="" class="line"> var texture = renderer.classes.TexBitmap();</span><span data-v-c2b1f83f="" class="line"> // Specify UVW generator for the texture.</span><span data-v-c2b1f83f="" class="line"> texture.uvwgen = uvwgen;</span><span data-v-c2b1f83f="" class="line"> // Specify the bitmap that the texture will be using.</span><span data-v-c2b1f83f="" class="line"> texture.bitmap = bitmap;</span><span data-v-c2b1f83f="" class="line"> // LightDome is a light source plugin that can be used to create lights that</span><span data-v-c2b1f83f="" class="line"> // shine inward at the scene as if from a spherical or hemispherical light source outside the scene extents.</span><span data-v-c2b1f83f="" class="line"> // This light is frequently used for image-based lighting using panoramic HDR images used as environments.</span><span data-v-c2b1f83f="" class="line"> var light = renderer.classes.LightDome();</span><span data-v-c2b1f83f="" class="line"> // Specify the light position, rotation and scale.</span><span data-v-c2b1f83f="" class="line"> light.transform = vray.Transform(</span><span data-v-c2b1f83f="" class="line"> vray.Matrix(</span><span data-v-c2b1f83f="" class="line"> vray.Vector(0, 0, 1),</span><span data-v-c2b1f83f="" class="line"> vray.Vector(1, 0, 0),</span><span data-v-c2b1f83f="" class="line"> vray.Vector(0, 1, 0)),</span><span data-v-c2b1f83f="" class="line"> vray.Vector(0, 0, 0));</span><span data-v-c2b1f83f="" class="line"> // Switches between a hemispherical or (full) spherical shape of the light.</span><span data-v-c2b1f83f="" class="line"> // Possible values are:</span><span data-v-c2b1f83f="" class="line"> // true (Sphere)</span><span data-v-c2b1f83f="" class="line"> // false (Hemisphere)</span><span data-v-c2b1f83f="" class="line"> light.dome_spherical = true;</span><span data-v-c2b1f83f="" class="line"> // Specify the light intensity based on the 'units' parameter.</span><span data-v-c2b1f83f="" class="line"> light.intensity = 4;</span><span data-v-c2b1f83f="" class="line"> // Specify the light texture.</span><span data-v-c2b1f83f="" class="line"> light.dome_tex = texture;</span><span data-v-c2b1f83f="" class="line"> // Enable the use of a light texture.</span><span data-v-c2b1f83f="" class="line"> // If "use_dome_tex = false" the 'color' of the light will be used instead.</span><span data-v-c2b1f83f="" class="line"> light.use_dome_tex = true;</span><span data-v-c2b1f83f="" class="line"> // Specify shadow offset from the surface. Helps to prevent polygonal shadow artifacts on low-poly surfaces.</span><span data-v-c2b1f83f="" class="line"> light.shadowBias = 0.02;</span><span data-v-c2b1f83f="" class="line"> // Specify that the bumped normal should be used to check if the light direction is below the surface.</span><span data-v-c2b1f83f="" class="line"> light.bumped_below_surface_check = true;</span><span data-v-c2b1f83f="" class="line"> // Start rendering.</span><span data-v-c2b1f83f="" class="line"> renderer.start(function(err) {</span><span data-v-c2b1f83f="" class="line"> if (err) throw err;</span><span data-v-c2b1f83f="" class="line"> // Wait for rendering to end.</span><span data-v-c2b1f83f="" class="line"> renderer.waitForRenderEnd(function() {</span><span data-v-c2b1f83f="" class="line"> renderer.close();</span><span data-v-c2b1f83f="" class="line"> });</span><span data-v-c2b1f83f="" class="line"> });</span><span data-v-c2b1f83f="" class="line">});</span></code>
Result The scene used for this render is called "Lighting_Dome.vrscene" and can be found in the scene bundle (comments on the different parameters available inside).
To test this locally, you'll need to change the absolute path to the dome texture (located in the included scene: "vrscenes/light_dome.vrscene").