Difference between revisions of "PRIM POINT LIGHT"

From Second Life Wiki
Jump to navigation Jump to search
m (<lsl> tag to <source>)
(Update page to add definition between sRGB colour and Linear colour.)
 
(6 intermediate revisions by the same user not shown)
Line 6: Line 6:
}}</onlyinclude>{{#if:
}}</onlyinclude>{{#if:
{{LSL_Function/boolean|boolean}}
{{LSL_Function/boolean|boolean}}
{{LSL_Function/color|color}}
{{LSL_Function/linear_color|linear_color}}
}}{{LSL Constant
}}{{LSL Constant
|inject-2={{LSL PrimitiveParam Categorize|Prim}}
|inject-2={{LSL PrimitiveParam Categorize|Prim}}
Line 17: Line 17:
|toc=llSetPrimitiveParams
|toc=llSetPrimitiveParams
|i1_type=integer|i1_subtype=boolean|i1_name=boolean
|i1_type=integer|i1_subtype=boolean|i1_name=boolean
|i2_type=vector|i2_name=color
|i2_type=vector|i2_name=linear_color
|i3_type=float|i3_name=intensity
|i3_type=float|i3_name=intensity
|i4_type=float|i4_name=radius
|i4_type=float|i4_name=radius
Line 26: Line 26:
|toc=llGetPrimitiveParams
|toc=llGetPrimitiveParams
|r1_type=integer|r1_subtype=boolean|r1_name=boolean
|r1_type=integer|r1_subtype=boolean|r1_name=boolean
|r2_type=vector|r2_name=color
|r2_type=vector|r2_name=linear_color
|r3_type=float|r3_name=intensity
|r3_type=float|r3_name=intensity
|r4_type=float|r4_name=radius
|r4_type=float|r4_name=radius
Line 35: Line 35:
** Viewers that '''do''' have advanced lighting enabled can render as many lights as their graphics card allows; it is not hard-limited by the viewer.
** Viewers that '''do''' have advanced lighting enabled can render as many lights as their graphics card allows; it is not hard-limited by the viewer.
* Lights with a high intensity have a wash-out effect when overlapping. Keep this in mind when using multiple lights. '''''Never''' create an abundance of lights to get around the 6 light maximum in basic lighting'', as viewers with advanced lighting will be washed out and may suffer from client lag.
* Lights with a high intensity have a wash-out effect when overlapping. Keep this in mind when using multiple lights. '''''Never''' create an abundance of lights to get around the 6 light maximum in basic lighting'', as viewers with advanced lighting will be washed out and may suffer from client lag.
* There are no LSL functions that allow you to set projector values (texture, FOV, focus, and ambiance).
* Unlike most color in LSL, which expects a gamma-encoded value (sRGB), this expects a non-gamma-encoded value (linear RGB). This means that the value you set as the light color is not the same value you'd pass to make the source (e.g. filament ) glow the same color. You may wish to implement an [[llsRGB2Linear|sRGB Electro-Optical Transfer Function (EOTF)]] to bypass this.
|examples=
|examples=
<source lang="lsl2">
Set the prim's color and the color of the light it emits to the same color:-
<syntaxhighlight lang="lsl2">
integer switch;
 
vector gLampCol = <255,190,121>; //Light colour in regular (0-255) sRGB space. This will be converted to LSL later.
 
default
{
    state_entry()
    {
        gLampCol /= 255; //Convert to LSL colour.
    }
 
    touch_start(integer total_number)
    {
        switch = !switch; //toggle the switch
        llSetLinkPrimitiveParamsFast(LINK_THIS,[
            PRIM_POINT_LIGHT,switch,llsRGB2Linear(gLampCol),1,20,0, //Convert colour to linear RGB as PRIM_POINT_LIGHT requires, using llsRGB2Linear
            PRIM_COLOR,ALL_SIDES,gLampCol,1,
            PRIM_GLOW,ALL_SIDES,switch,
            PRIM_FULLBRIGHT,ALL_SIDES,switch]);
    }
}
</syntaxhighlight>
 
Basic light script:-
<syntaxhighlight lang="lsl2">
integer isLightTurnedOn;
integer isLightTurnedOn;


Line 63: Line 89:
     }
     }
}
}
</source>
</syntaxhighlight>


A compact version of the above:-
A compact version of the above:-
<source lang="lsl2">
<syntaxhighlight lang="lsl2">
integer switch;
integer switch;
default
default
Line 77: Line 103:
     }
     }
}
}
</source>
</syntaxhighlight>
|constants
|constants
|functions=
|functions=
Line 85: Line 111:
{{LSL DefineRow||[[llGetPrimitiveParams]]|}}
{{LSL DefineRow||[[llGetPrimitiveParams]]|}}
{{LSL DefineRow||[[llGetLinkPrimitiveParams]]|}}
{{LSL DefineRow||[[llGetLinkPrimitiveParams]]|}}
{{LSL DefineRow||[[llsRGB2Linear]]|}}
|events
|events
|location
|location

Latest revision as of 07:47, 30 June 2022

Description

Constant: integer PRIM_POINT_LIGHT = 23;

The integer constant PRIM_POINT_LIGHT has the value 23

PRIM_POINT_LIGHT is used to configure the point light configuration of the prim

llSetPrimitiveParams

[ PRIM_POINT_LIGHT, integer boolean, vector linear_color, float intensity, float radius, float falloff ]
• integer boolean TRUE enables, FALSE disables
• vector linear_color linear color in RGB <R, G, B> (<0.0, 0.0, 0.0> = black, <1.0, 1.0, 1.0> = white)
• float intensity ranges from 0.0 to 1.0
• float radius ranges from 0.1 to 20.0
• float falloff ranges from 0.01 to 2.0

When used with llSetPrimitiveParams & llSetLinkPrimitiveParams & llSetLinkPrimitiveParamsFast

llGetPrimitiveParams

llGetPrimitiveParams([ PRIM_POINT_LIGHT ]);

Returns the list [ integer boolean, vector linear_color, float intensity, float radius, float falloff ]

• integer boolean TRUE enables, FALSE disables
• vector linear_color linear color in RGB <R, G, B> (<0.0, 0.0, 0.0> = black, <1.0, 1.0, 1.0> = white)
• float intensity ranges from 0.0 to 1.0
• float radius ranges from 0.1 to 20.0
• float falloff ranges from 0.01 to 2.0

Caveats

  • Viewers that do not have advanced lighting enabled can only render 6 lights at a time and projectors will be rendered as omnidirectional light sources. (OpenGL limitations allow for 8 light sources, SL appears to reserve one each for the Sun and Moon.)
    • Viewers that do have advanced lighting enabled can render as many lights as their graphics card allows; it is not hard-limited by the viewer.
  • Lights with a high intensity have a wash-out effect when overlapping. Keep this in mind when using multiple lights. Never create an abundance of lights to get around the 6 light maximum in basic lighting, as viewers with advanced lighting will be washed out and may suffer from client lag.
  • Unlike most color in LSL, which expects a gamma-encoded value (sRGB), this expects a non-gamma-encoded value (linear RGB). This means that the value you set as the light color is not the same value you'd pass to make the source (e.g. filament ) glow the same color. You may wish to implement an sRGB Electro-Optical Transfer Function (EOTF) to bypass this.
All Issues ~ Search JIRA for related Bugs

Examples

Set the prim's color and the color of the light it emits to the same color:-

integer switch;

vector gLampCol = <255,190,121>; //Light colour in regular (0-255) sRGB space. This will be converted to LSL later.

default
{
    state_entry()
    {
        gLampCol /= 255; //Convert to LSL colour.
    }

    touch_start(integer total_number)
    {
        switch = !switch; //toggle the switch
        llSetLinkPrimitiveParamsFast(LINK_THIS,[
            PRIM_POINT_LIGHT,switch,llsRGB2Linear(gLampCol),1,20,0, //Convert colour to linear RGB as PRIM_POINT_LIGHT requires, using llsRGB2Linear
            PRIM_COLOR,ALL_SIDES,gLampCol,1,
            PRIM_GLOW,ALL_SIDES,switch,
            PRIM_FULLBRIGHT,ALL_SIDES,switch]);
    }
}

Basic light script:-

integer isLightTurnedOn;

default
{
    touch_start(integer total_number)
    {
//      toggle isLightTurnedOn between TRUE and FALSE
        isLightTurnedOn = !isLightTurnedOn;

        if (isLightTurnedOn)
        {
            llSetPrimitiveParams([
                PRIM_FULLBRIGHT, ALL_SIDES, FALSE,
                PRIM_POINT_LIGHT, FALSE, ZERO_VECTOR, 1.0, 10.0, 0.6]);
        }
        else
        {
            vector COLOR_ORANGE  = <1.000, 0.522, 0.106>;

            llSetPrimitiveParams([
                PRIM_FULLBRIGHT, ALL_SIDES, TRUE,
                PRIM_POINT_LIGHT, TRUE, COLOR_ORANGE, 1.0, 10.0, 0.6]);
        }
    }
}

A compact version of the above:-

integer switch;
default
{
    touch_start(integer total_number)
    {
        llSetPrimitiveParams(
        [       PRIM_FULLBRIGHT, ALL_SIDES, switch = !switch,
                PRIM_POINT_LIGHT, switch, <1, 0.5, 0.1> *  switch, 1, 10, 0.6 ] );      
    }
}

Deep Notes

Search JIRA for related Issues

Signature

integer PRIM_POINT_LIGHT = 23;