©Anton Podvalny

Table of Contents

In this chapter we'll cover another area light source in V-Ray - the sphere light. It represents spherical area light. The geometric detail is parametrized by number of segments.

Parameters


Along with the common light parameters, the LightSphere plugin has the following specific ones:

  • noDecay - If set to true, light intensity will not fall off with distance. By default the inverse square law applies.
  • radius - Radius of the generated sphere in scene units.
  • sphere_segments - Number of flat segments composing the sphere. Increase from the default 20, if you want a smoother shape


Example


# Compatibility with Python 2.7.
from __future__ import print_function

# The directory containing the vray shared object should be present in the PYTHONPATH environment variable.
# Try to import the vray module from VRAY_SDK/python, if it is not in PYTHONPATH
import sys, os
VRAY_SDK = os.environ.get('VRAY_SDK')
if VRAY_SDK:
    sys.path.append(os.path.join(VRAY_SDK, 'python'))
import vray

SCENE_PATH = os.path.join(os.environ.get('VRAY_SDK'), 'scenes')
# Change process working directory to SCENE_PATH in order to be able to load relative scene resources.
os.chdir(SCENE_PATH)

# The renderer is automatically closed after the `with` block.
with vray.VRayRenderer() as renderer:
    # Register a simple log callback. Always useful for debugging.
    def dumpMsg(renderer, message, level, instant):
        if level == vray.LOGLEVEL_ERROR:
            print("[ERROR]", message)
        elif level == vray.LOGLEVEL_WARNING:
            print("[Warning]", message)
        elif level == vray.LOGLEVEL_INFO:
            print("[info]", message)
        # Uncomment for testing, but you might want to ignore these in real code
        #else: print("[debug]", message)
    renderer.setOnLogMessage(dumpMsg)

    # Load scene from a file.
    renderer.load(os.path.join(SCENE_PATH, 'lighting.vrscene'))
    # Remove original light source from the scene.
    del renderer.plugins["VRayLightDomeShape1"]

    # LightSphere is a light source plugin that can be used to create lights in the shape of a sphere.
    # It is a good general-purpose V-Ray light for illuminating scenes to
    # simulate real-world point light sources such as lamp bulbs.
    # The sphere can be scaled to any size and emits light outward in all directions.
    # Note: LightOmni plugin with positive shadow radius could be used as
    # a more efficient alternative if looking directly at the light source is not relevant.
    light = renderer.classes.LightSphere()
    # Specify the light position, rotation and scale.
    light.transform = vray.Transform(
        vray.Matrix(
            vray.Vector(1, 0, 0),
            vray.Vector(0, 1, 0),
            vray.Vector(0, 0, 1)),
        vray.Vector(88.89071301469392, 122.8788080125288, 70.66566225009477))
    # Specify the color of the light in RGB float values and alpha(1.0f)
    light.color = vray.AColor(1, 0.7871177, 0.385)
    # Specify the light intensity based on the 'units' parameter.
    light.intensity = 600
    # Specify the radius of the sphere light.
    # If "units = 0/2/4" the intensity of the light emitted will be relative to the radius.
    # If "units = 1/3" the intensity of the light emitted will be independent of the radius.
    light.radius = 8
    # Specify shadow offset from the surface. Helps to prevent polygonal shadow artifacts on low-poly surfaces.
    light.shadowBias = 0.02
    # Specify that the bumped normal should be used to check if the light direction is below the surface.
    light.bumped_below_surface_check = True
    # Start rendering.
    renderer.startSync()
    # Wait for rendering to end.
    renderer.waitForRenderEnd()
#define VRAY_RUNTIME_LOAD_PRIMARY

#include "vraysdk.hpp"
#include "vrayplugins.hpp"
#include "utils.h"

using namespace VRay;
using namespace VRay::Plugins;
using namespace std;

const char *BASE_PATH = getenv("VRAY_SDK");
string SCENE_PATH = (BASE_PATH ? string(BASE_PATH) : string(".")) + PATH_DELIMITER + "scenes";

int main() {
	// Change process working directory to SCENE_PATH in order to be able to load relative scene resources.
	changeCurrentDir(SCENE_PATH.c_str());
	// Load V-Ray SDK library.
	VRayInit init(NULL, true);
	// Create an instance of VRayRenderer with default options.
	// The renderer is automatically closed at the end of the current scope.
	VRayRenderer renderer;
	// It's recommended to always have a console log
	renderer.setOnLogMessage(logMessage);
	// Load scene from a file.
	renderer.load("lighting.vrscene");
	// Remove original light source from the scene.
	renderer.deletePlugin("VRayLightDomeShape1");
	// LightSphere is a light source plugin that can be used to create lights in the shape of a sphere.
	// It is a good general-purpose V-Ray light for illuminating scenes to
	// simulate real-world point light sources such as lamp bulbs.
	// The sphere can be scaled to any size and emits light outward in all directions.
	// Note: LightOmni plugin with positive shadow radius could be used as
	// a more efficient alternative if looking directly at the light source is not relevant.
	LightSphere light = renderer.newPlugin<LightSphere>();
	// Specify the light position, rotation and scale.
	light.set_transform(Transform(
		Matrix(
			Vector(1.0, 0.0, 0.0),
			Vector(0.0, 1.0, 0.0),
			Vector(0.0, 0.0, 1.0)),
		Vector(88.89071301469392, 122.8788080125288, 70.66566225009477)));
	// Specify the color of the light in RGB float values and alpha(1.0f)
	light.set_color(AColor(1, 0.7871177, 0.385));
	// Specify the light intensity based on the 'units' parameter.
	light.set_intensity(600);
	// Specify the radius of the sphere light.
	// If "units = 0/2/4" the intensity of the light emitted will be relative to the radius.
	// If "units = 1/3" the intensity of the light emitted will be independent of the radius.
	light.set_radius(8);
	// Specify shadow offset from the surface. Helps to prevent polygonal shadow artifacts on low-poly surfaces.
	light.set_shadowBias(0.02f);
	// Specify that the bumped normal should be used to check if the light direction is below the surface.
	light.set_bumped_below_surface_check(true);
	// Start rendering.
	renderer.startSync();
	// Wait for rendering to end.
	renderer.waitForRenderEnd();
	return 0;
}
using System;
using System.IO;
using VRay;
using VRay.Plugins;

namespace _09_sphere
{
    class Program
    {
        static void Main(string[] args)
        {
            string SCENE_PATH = Path.Combine(Environment.GetEnvironmentVariable("VRAY_SDK"), "scenes");
            // Change process working directory to SCENE_PATH in order to be able to load relative scene resources.
            Directory.SetCurrentDirectory(SCENE_PATH);
            // Create an instance of VRayRenderer with default options. The renderer is automatically closed after the `using` block.
			using (VRayRenderer renderer = new VRayRenderer())
            {
                // Add a listener for any type of log message.
                renderer.LogMessage += new EventHandler<MessageEventArgs>((source, e) =>
                {
                    // You can remove the if for testing, but you might want to ignore Debug in real code
                    if (e.LogLevel != LogLevelType.Debug)
                    {
                        Console.WriteLine(String.Format("[{0}] {1}", e.LogLevel.ToString(), e.Message));
                    }
                });
                // Load scene from a file.
                renderer.Load("lighting.vrscene");
                // Remove original light source from the scene.
                renderer.DeletePlugin("VRayLightDomeShape1");
                // LightSphere is a light source plugin that can be used to create lights in the shape of a sphere.
                // It is a good general-purpose V-Ray light for illuminating scenes to
                // simulate real-world point light sources such as lamp bulbs.
                // The sphere can be scaled to any size and emits light outward in all directions.
                // Note: LightOmni plugin with positive shadow radius could be used as
                // a more efficient alternative if looking directly at the light source is not relevant.
                LightSphere light = renderer.NewPlugin<LightSphere>();
                // Specify the light position, rotation and scale.
                light.Transform = new Transform(
                    new Matrix(
                        new Vector(1, 0, 0),
                        new Vector(0, 1, 0),
                        new Vector(0, 0, 1)),
                    new Vector(88.89071301469392, 122.8788080125288, 70.66566225009477));
                // Specify the color of the light in RGB float values and alpha = 1.
                light.Color = new AColor(1, 0.7871177, 0.385);
                // Specify the light intensity based on the 'units' parameter.
                light.Intensity = 600;
                // Specify the radius of the sphere light.
                // If "units = 0/2/4" the intensity of the light emitted will be relative to the radius.
                // If "units = 1/3" the intensity of the light emitted will be independent of the radius.
                light.Radius = 8;
                // Specify shadow offset from the surface. Helps to prevent polygonal shadow artifacts on low-poly surfaces.
                light.ShadowBias = 0.02F;
                // Specify that the bumped normal should be used to check if the light direction is below the surface.
                light.BumpedBelowSurfaceCheck = true;
                // Specify the number of parameter samples for motion blur.
                light.Nsamples = 1;
                // Start rendering.
                renderer.StartSync();
                // Wait for rendering to end.
                renderer.WaitForRenderEnd();
            }
        }
    }
}
var path = require('path');
var vray = require(path.join(process.env.VRAY_SDK, 'node', 'vray'));

var SCENE_PATH = path.join(process.env.VRAY_SDK, 'scenes');
// Change process working directory to SCENE_PATH in order to be able to load relative scene resources.
process.chdir(SCENE_PATH);

// Create an instance of VRayRenderer with default options.
var renderer = vray.VRayRenderer();
// It's recommended to always have a console log callback
renderer.on("logMessage", function(message, level, instant) {
	if (level == vray.LOGLEVEL_ERROR)
		console.log("[ERROR] ", message);
	else if (level == vray.LOGLEVEL_WARNING)
		console.log("[Warning] ", message);
	else if (level == vray.LOGLEVEL_INFO)
		console.log("[info] ", message);
	// Uncomment for testing, but you might want to ignore these in real code
	//else console.log("[debug] ", message);
});
// Load scene from a file asynchronously.
renderer.load("lighting.vrscene", function(err) {
    if (err) throw err;
    // Remove original light source from the scene.
    delete renderer.plugins["VRayLightDomeShape1"];
    // LightSphere is a light source plugin that can be used to create lights in the shape of a sphere.
    // It is a good general-purpose V-Ray light for illuminating scenes to
    // simulate real-world point light sources such as lamp bulbs.
    // The sphere can be scaled to any size and emits light outward in all directions.
    // Note: LightOmni plugin with positive shadow radius could be used as
    // a more efficient alternative if looking directly at the light source is not relevant.
    var light = renderer.classes.LightSphere();
    // Specify the light position, rotation and scale.
    light.transform = vray.Transform(
        vray.Matrix(
            vray.Vector(1, 0, 0),
            vray.Vector(0, 1, 0),
            vray.Vector(0, 0, 1)),
        vray.Vector(88.89071301469392, 122.8788080125288, 70.66566225009477));
    // Specify the color of the light in RGB float values and alpha(1.0f)
    light.color = vray.AColor(1, 0.7871177, 0.385);
    // Specify the light intensity based on the 'units' parameter.
    light.intensity = 600;
    // Specify the radius of the sphere light.
    // If "units = 0/2/4" the intensity of the light emitted will be relative to the radius.
    // If "units = 1/3" the intensity of the light emitted will be independent of the radius.
    light.radius = 8;
    // Specify shadow offset from the surface. Helps to prevent polygonal shadow artifacts on low-poly surfaces.
    light.shadowBias = 0.02;
    // Specify that the bumped normal should be used to check if the light direction is below the surface.
    light.bumped_below_surface_check = true;
    // Start rendering.
    renderer.start(function(err) {
        if (err) throw err;
        // Wait for rendering to end.
        renderer.waitForRenderEnd(function() {
            renderer.close();
        });
    });
});

Result



The scene used for this render is called "Lighting_Sphere.vrscene" and can be found in the scene bundle (comments to the different parameters available inside).

  • No labels