Lighting

Afficher les obsolètes

*Ce contenu est traduit en utilisant l'IA (Beta) et peut contenir des erreurs. Pour consulter cette page en anglais, clique ici.

Création impossible
Service

Le service Éclairage contrôle le contrôle global du lumage dans une expérience. Il inclut une gamme de propriétés ajustables que vous pouvez utiliser pour modifier la façon dont le lumage apparaît et interagit avec d'autres objets, comme décrit dans propriétés d'éclairage.

L'éclairage peut également contenir un Atmosphere objet pour rendre des effets atmosphériques réalistes, y compris la densité des particules, la lumière floue, le reflet et la couleur. Voir effets atmosphériques pour plus de détails.

En outre, l'éclairage (ainsi que Workspace.CurrentCamera ) peuvent contenir des effets post-traitement tels que SunRaysEffect et 1> Class.BlurEffect1>. Voir 4> les effets post-traitement4> pour plus d'informations.

Échantillons de code

Day/Night Cycle

local Lighting = game:GetService("Lighting")
local TIME_SPEED = 60 -- 1 min = 1 hour
local START_TIME = 9 -- 9am
local minutesAfterMidnight = START_TIME * 60
local waitTime = 60 / TIME_SPEED
while true do
minutesAfterMidnight = minutesAfterMidnight + 1
Lighting:SetMinutesAfterMidnight(minutesAfterMidnight)
task.wait(waitTime)
end

Résumé

Propriétés

Méthodes

Évènements

Propriétés

Ambient

Lecture parallèle

L'éclairage de teinture appliqué aux zones qui sont occlées du ciel, telles que les zones intérieures.

Cette propriété par défaut à 0, 0, 0 (noir).

Tant que les canaux rouges, verts et bleus de cette propriété ne dépassent pas les canaux correspondants dans Lighting.OutdoorAmbient la change en couleur sera réservée aux zones ombrées par le soleil/lune. La valeur de Class.Lighting.OutdoorAmb

Remarquez que, lorsque Lighting.GlobalShadows est désactivé, il n'y a pas de distinction entre les zones occluses et les zones qui ne le sont pas. Dans ce cas, Lighting.OutdoorAmbient sera ignoré et la couleur de la propriété Ambient sera appliquée partout.

Pour plus de propriétés qui influencent la couleur de l'éclairage, voir Lighting.ColorShiftBottom et Lighting.ColorShiftTop.

Brightness

Lecture parallèle

L'intensité de l'éclairage dans l'emplacement.

Changer cette valeur affectera l'impact de la source lumineuse (soleil ou lune) sur l'éclairage de la carte. Lorsque la luminosité est réglée sur 0, il n'y aura aucun effet en raison de Lighting.ColorShift_Top ou Lighting.ColorShift_Bottom comme la source lumineuse n'a pas d'effet

Bien que cette propriété ne soit pas bloquée, l'effet est bloqué entre 0 et 2. Ce qui signifie que le paramètre de luminosité est défini à 10 ne sera pas différent de le définir à 2.

Notez, Lighting.Ambient et Lighting.OutdoorAmbient peuvent également être utilisés pour influencer la façon dont un lieu apparaît. Par exemple, en réglant Lighting.OutdoorAmbient sur 255, 255, 255, le lieu apparaîtra plus brillant

ClockTime

Non répliqué
Lecture parallèle

Une représentation numérique (en heures) du temps actuel de la journée utilisée par Lighting .

Remarquez que cette propriété ne correspond pas à l'heure réelle du jour et ne changera pas pendant le jeu à moins qu'elle n'ait été modifiée par un script.

Pour une mesure de Lighting de temps au format d'une chaîne de 24 heures, utilisez Lighting.CurrentTime. Changer Lighting.CurrentTime ou utiliser 1> Class.Lighting:SetMinutesAfterMidnight()1> changera également cette propriété.

L'utilisation de ClockTime nécessite le temps pour être normalisé :


minutesAfterMidnight = 0
while true do
minutesAfterMidnight += 1
local minutesNormalised = minutesAfterMidnight % (60 * 24)
local hours = minutesNormalised / 60
Lighting.ClockTime = hours
task.wait()
end

L'utilisation de Lighting.TimeOfDay nécessite le temps pour être normalisé et une forme de chaîne formatée :


minutesAfterMidnight = 0
while true do
minutesAfterMidnight += 1
local minutesNormalised = minutesAfterMidnight % (60 * 24)
local seconds = minutesNormalised * 60
local hours = string.format("%02.f", seconds//3600)
local mins = string.format("%02.f", math.floor(seconds/60 - (hours*60)))
local secs = string.format("%02.f", math.floor(seconds - hours*3600 - mins *60))
local timeString = hours..":"..mins..":"..secs
Lighting.TimeOfDay = timeString
task.wait()
end

L'utilisation de Lighting:SetMinutesAfterMidnight() n'exige pas de traitement supplémentaire :


minutesAfterMidnight = 0
while true do
minutesAfterMidnight += 1
Lighting:SetMinutesAfterMidnight(minutesAfterMidnight)
task.wait()
end

ColorShift_Bottom

Lecture parallèle

La teinte représentée dans la lumière reflète les autres surfaces à celles qui sont face au soleil ou à la lune.

Les surfaces d'un BasePart influencées par ColorShift_Bottom dépendent de la position et de l'orientation de la BasePart par rapport à la position du soleil ou de la lune. Où le soleil est directement au-dessus d'un BasePart, le changement de couleur ne s'appliquera qu'à la surface inférieure.

Cet effet peut être augmenté ou réduit en modifiant Lighting.Brightness.

ColorShift_Bottom influence les mêmes Lighting.ColorShift_Top

Note, Lighting.ColorShift_Top et ColorShift_Bottom interagiront avec les propriétés Lighting.Ambient et Lighting.OutdoorAmbient si elles sont plus grandes que 0, 0, 0. De plus, l'influence de ColorShift_Bottom peut être très difficile

ColorShift_Top

Lecture parallèle

La teinte représentée par la lumière reflétée des surfaces qui face au soleil ou à la lune.

Les surfaces d'un BasePart influencées par ColorShift_Top dépendent de la position et de l'orientation de la BasePart par rapport à la position du soleil ou de la lune. Où le soleil est directement au-dessus d'un BasePart, le changement de couleur ne s'appliquera que sur la surface supérieure.

Cet effet peut être augmenté ou réduit en modifiant Lighting.Brightness.

Alors que ColorShift_Top influence les surfaces exposées à la lumière, Lighting.ColorShift_Bottom influence les surfaces protégées de la lumière.

Remarquez que ColorShift_Top et ColorShift_Bottom interagiront avec les propriétés Lighting.Ambient et Lighting.OutdoorAmbient si elles sont plus grandes que 0, 0, 0.

EnvironmentDiffuseScale

Lecture parallèle

Lumière ambiante qui dérive de l'environnement. La valeur de cette propriété par défaut est 0.

Il est similaire à Lighting.Ambient et Lighting.OutdoorAmbient propriété mais il est dynamique et peut changer en fonction du ciel et de l'heure de la journée. Il est recommandé lorsque cette propriété est augmentée, Ambient et OutdoorAmbient sont respectivement réduits.

Il fait également apparaître le skybox la nuit.

EnvironmentSpecularScale

Lecture parallèle

Lumière spectrale issue de l'environnement. La valeur de cette propriété par défaut est 0.

Il fera en sorte que les objets lisibles reflètent l'environnement. Particulièrement important pour rendre le métal plus réaliste.

ExposureCompensation

Lecture parallèle

Cette propriété détermine la quantité de compensation d'exposition qui s'applique au niveau d'exposition de la scène avant la étape de la carte tonale. Par défaut, 0.

  • Une valeur de +1 indique deux fois plus d'exposition et -1 signifie la moitié de l'exposition.
  • Une valeur de 0 indique que aucune compensation d'exposition ne sera effectuée.
  • Plage : -5 à 5

Cette propriété est répliquée et peut être définie à partir de scripts ou Studio.


local Lighting = game:GetService("Lighting")
Lighting.ExposureCompensation = 5

Vous pouvez utiliser cette propriété pour ajuster la quantité d'exposition avant la étape de la carte tonale pour montrer plus de détails dans des zones plus claires ou plus sombres. Cela est nécessaire à mesure que nous passons à une pipeline HDR.

Lorsque Lighting.Technology est réglé sur Legacy, cette propriété n'a aucun effet.


local Lighting = game:GetService("Lighting")
-- ExposureCompensation n'a aucun effet car la technologie de Lighting est héritage
Lighting.Technology = Enum.Technology.Legacy
Lighting.ExposureCompensation = 5

FogColor

Lecture parallèle

Les propriétés de brouillard sont cachées lorsque Lighting contient un objet Atmosphere.

Une valeur Color3 donnant la teinte de Lighting brouillard.

Comment le brouillard fonctionne-t-il ?

Le brouillard dans Roblox est affiché dans un avion perpendiculaire à la direction Workspace.CurrentCamera. Il fait pénétrer entre la propriété Lighting.FogStart où il n'est pas visible, et la propriété Lighting.FogEnd où il est complètement opaque. L'effet du brouillard est qu'il mélange la couleur

À des distances plus grandes que Lighting.FogEnd, la couleur sera déterminée entièrement par la couleur de brouillard. Cependant, à des distances entre Lighting.FogStart et Lighting.FogEnd, le degré dans lequel la couleur est mélangée dépend de la position.

Roblox utilise l'interpolation linéaire entre Lighting.FogStart et Lighting.FogEnd. Cela signifie que si Lighting.FogStart est 10 et que 1> Class


local Lighting = game:GetService("Lighting")
-- fog will fade between 25 and 200 studs
Lighting.FogStart = 25
Lighting.FogEnd = 200

Remarquez que le brouillard ne masque pas la boîte de ciel.

FogEnd

Lecture parallèle

Les propriétés de brouillard sont cachées lorsque Lighting contient un objet Atmosphere.

La profondeur à partir de la Workspace.CurrentCamera, en studs, à laquelle le brouillard sera complètement opaque.

Comment le brouillard fonctionne-t-il ?

Le brouillard dans Roblox est affiché dans un avion perpendiculaire à la direction de la vue. Il fait pudel entre le Workspace.CurrentCamera propriété où il n'est pas visible, à la propriété FogEnd où il est complètement opaque. L'effet du brouillard est qu'il mélange la couleur avec la propriété Lighting.FogStart .

À des distances plus grandes que FogEnd, la couleur sera déterminée entièrement par le Lighting.FogColor. Cependant, à des distances entre Lighting.FogStart et FogEnd, le degré dans lequel la couleur est mélangée dépend de la position.

Le brouillard de Roblox utilise l'interpolation linéaire entre Lighting.FogStart et FogEnd. Cela signifie que si Lighting.FogStart est 10 et FogEnd est 20, à une distance de 15 studs le brouillard sera à 50%. Cela signifie que la couleur d'un pixel à


local Lighting = game:GetService("Lighting")
-- fog will fade between 25 and 200 studs
Lighting.FogStart = 25
Lighting.FogEnd = 200

La couleur du brouillard peut être ajustée en utilisant Lighting.FogColor.

Remarquez que le brouillard ne masque pas la boîte de ciel.

FogStart

Lecture parallèle

Les propriétés de brouillard sont cachées lorsque Lighting contient un objet Atmosphere.

La profondeur à partir de la Workspace.CurrentCamera, en studs, à laquelle le brouillard commence à se afficher.

Comment le brouillard fonctionne-t-il ?

Le brouillard dans Roblox est affiché dans un avion perpendiculaire à la direction de la vue. Il fait pénétrer entre la propriété FogStart où il n'est pas visible, à la propriété FogEnd où il est complètement opaque. L'effet du brouillard est qu'il mélange la couleur avec la propriété Class.Lighting.FogColor.

À des distances plus grandes que Lighting.FogEnd, la couleur sera déterminée entièrement par le Lighting.FogColor. Cependant, à des distances entre FogStart et Lighting.FogEnd, le degré dans lequel la couleur est mélangée dépend de la position.

Le brouillard de Roblox utilise l'interpolation linéaire entre FogStart et Lighting.FogEnd. Cela signifie que si FogStart est 10 et Lighting.FogEnd est 20, à une distance de 15 studs le brouillard sera à 50%. Cela signifie que la couleur d'un pixel à 15 stud


local Lighting = game:GetService("Lighting")
-- fog will fade between 25 and 200 studs
Lighting.FogStart = 25
Lighting.FogEnd = 200

La couleur du brouillard peut être ajustée en utilisant Lighting.FogColor.

Remarquez que le brouillard ne masque pas la boîte de ciel.

GeographicLatitude

Lecture parallèle

La latitude géographique, en degrés, de la scène, affectant le résultat de `Class.Lighting time on the position of the sun and moon.

Lors du calcul de la position du soleil, la pente de la terre est également prise en compte.

Changer GeographicLatitude changera la position du soleil à chaque Lighting.TimeOfDay. Les développeurs qui cherchent à obtenir la position du soleil ou de la lune devraient utiliser Lighting:GetSunDirection() ou Lighting:GetMoonDirection().

Échantillons de code

Sun direction

local Lighting = game:GetService("Lighting")
local UNIT_Z = Vector3.new(0, 0, 1)
local EARTH_TILT = math.rad(23.5) -- The Earth's tilt in radians.
local HALF_SOLAR_YEAR = 182.6282 -- Half the length of an average solar year
local function getSunDirection()
local gameTime = Lighting:GetMinutesAfterMidnight()
local geoLatitude = Lighting.GeographicLatitude
local dayTime = gameTime / 1440
local sourceAngle = 2 * math.pi * dayTime
local sunPosition = Vector3.new(math.sin(sourceAngle), -math.cos(sourceAngle), 0)
local latRad = math.rad(geoLatitude)
local sunOffset = -EARTH_TILT * math.cos(math.pi * (dayTime - HALF_SOLAR_YEAR) / HALF_SOLAR_YEAR) - latRad
local sunRotation = CFrame.fromAxisAngle(UNIT_Z:Cross(sunPosition), sunOffset)
local sunDirection = sunRotation * sunPosition
return sunDirection
end
print(getSunDirection())

GlobalShadows

Lecture parallèle

Bascule l'éclairage dynamique basé sur les voxels dans le jeu

Qu'est-ce que GlobalShadows fait ?

Lorsqu'il est réglé sur vrai, les ombres sont rendues dans les zones ombrées en fonction de la position du soleil et de la lune. L'ombre de lumière appliqué à ces zones est déterminé par la propriété Lighting.Ambient. L'ombre de lumière dans toutes les autres zones est déterminé par la propriété Lighting.OutdoorAmbient.

Lorsqu'il est désactivé, les ombres ne sont pas dessinées et aucune distinction n'est faite entre les zones intérieures et extérieures. Par resultats, la propriété Lighting.Ambient détermine la teinte d'éclairage et Lighting.OutdoorAmbient ne fera rien.

Les ombres sont calculées à l'aide d'un système de voxels, et chaque voxel d'éclairage est 4x4x4 studs. Cela signifie que les objets doivent être plus grands que 4x4x4 studs pour afficher une ombre réaliste. Les ombres sont également recalculées lorsque BaseParts se déplacent.

Remarquez que cette propriété n'est pas liée aux ombres des personnages qui sont affichés indépendamment de ce que GlobalShadows est réglé.

Pour plus d'informations sur l'éclairage dynamique de Roblox, veuillez voir ce poste de blog.

Activer les ombres globales

Les développeurs qui basculent le paramètre GlobalShadows remarqueront que le désactivant le rendra beaucoup plus sombre. C'est parce que lorsque GlobalShadows est désactivé, Class.Lighting.Ambient est utilisé pour calculer la teinte d'éclairage dans les espaces intérieurs et extérieurs. Cette sombreur peut être résolue en réglant Class.Lighting.Ambient sur une vale

Dans la plupart des cas, il est recommandé aux développeurs de laisser GlobalShadows activé en raison de l'apparence visuelle supérieure. Voir guide Lighting Properties pour un comparaison.

Non scriptable
Lecture parallèle

OutdoorAmbient

Lecture parallèle

L'éclairage utilisé pour les zones extérieures.

Cette propriété par défaut à 127, 127, 127.

Dans la mesure où les canaux rouges, verts et bleus de Lighting.Ambient ne dépassent pas les canaux correspondants dans cette propriété, la teinte de l'éclairage dans les zones extérieures sera détermin

Remarquez, lorsque Lighting.GlobalShadows est désactivé, il n'y a pas de distinction entre les zones occlées du ciel et les zones qui ne le sont pas. Dans ce cas, OutdoorAmbient sera ignoré et la couleur de la propriété Lighting.Ambient sera appliquée partout.

Pour plus de propriétés qui influencent la couleur de l'éclairage, voir Lighting.ColorShift_Bottom et Lighting.ColorShift_Top.

Non scriptable
Lecture parallèle

ShadowSoftness

Lecture parallèle

Contrôle la qualité des ombres. La valeur par défaut de cette propriété est 0,2.

Cette propriété ne fonctionne que lorsque le mode Lighting.Technology est ShadowMap ou Future et que le périphérique est capable de ShadowMap.

Technology

Lecture parallèle
Sécurité des scripts Roblox

Détermine le système d'éclairage pour rendre le monde 3D. Non scriptable et seulement modifiable dans Studio. Voir Enum.Technology pour les options disponibles et Technologie d'éclairage pour les détails et les effets visuels de chaque option.

TimeOfDay

Lecture parallèle

Une représentation de chaîne de 24 heures de l'heure actuelle de la journée utilisée par Lighting.

Remarquez que cette propriété ne correspond pas à l'heure réelle du jour et ne changera pas pendant le jeu à moins qu'elle n'ait été modifiée par un script.

Pour une mesure numérique de Lighting utilisation du temps Lighting.ClockTime . Changer Lighting.ClockTime ou utiliser 1> Class.Lighting:SetMinutesAfterMidnight()1> changera également cette propriété.

L'utilisation de TimeOfDay nécessite le temps pour être normalisé et une forme de chaîne formatée :


minutesAfterMidnight = 0
while true do
minutesAfterMidnight += 1
local minutesNormalised = minutesAfterMidnight % (60 * 24)
local seconds = minutesNormalised * 60
local hours = string.format("%02.f", seconds//3600)
local mins = string.format("%02.f", math.floor(seconds/60 - (hours*60)))
local secs = string.format("%02.f", math.floor(seconds - hours*3600 - mins *60))
local timeString = hours..":"..mins..":"..secs
Lighting.TimeOfDay = timeString
task.wait()
end

L'utilisation de Lighting.ClockTime nécessite le temps de normalisation :


minutesAfterMidnight = 0
while true do
minutesAfterMidnight += 1
local minutesNormalised = minutesAfterMidnight % (60 * 24)
local hours = minutesNormalised / 60
Lighting.ClockTime = hours
task.wait()
end

L'utilisation de Lighting:SetMinutesAfterMidnight() n'exige pas de traitement supplémentaire :


minutesAfterMidnight = 0
while true do
minutesAfterMidnight += 1
Lighting:SetMinutesAfterMidnight(minutesAfterMidnight)
task.wait()
end

Méthodes

GetMinutesAfterMidnight

Écrire en parallèle

Renvoie le nombre de minutes qui sont passées après minuit aux fins de l'éclairage.

Ce nombre sera presque identique à Lighting.ClockTime multiplié par 60.

Ce nombre ne sera pas toujours équalé à la valeur donnée dans Lighting:SetMinutesAfterMidnight() car il renvoie des minutes après minuit le jour actuel.

Pour Lighting la forme du temps en chaîne, voir Lighting.TimeOfDay.


Retours

Le nombre de minutes après minuit.

Échantillons de code

Lighting:GetMinutesAfterMidnight

local Lighting = game:GetService("Lighting")
Lighting.TimeOfDay = "14:00:00"
print(Lighting:GetMinutesAfterMidnight())

GetMoonDirection

Écrire en parallèle

Retourne un Vector3 représentant la direction de la lune à partir de la position 0, 0, 0.

Remarquez que, lorsque la lune aura configureret qu'elle ne sera plus visible, le Vector3 renvoyé par cette fonction continuera à pointer vers la lune sous la carte.

Les développeurs qui souhaitent modifier le positionnement de la lune devraient utiliser les propriétés Lighting.ClockTime ou Lighting.GeographicLatitude.

Une variante de cette fonction existe pour obtenir la direction du soleil, Lighting:GetSunDirection() .


Retours

Vector3 représentant la direction de la lune à partir de la position 0, 0, 0.

Échantillons de code

Lighting:GetMoonDirection

local Lighting = game:GetService("Lighting")
Lighting.TimeOfDay = "14:00:00"
print(Lighting:GetMoonDirection())

GetMoonPhase

Retourne la phase actuelle de la lune. Il n'y a aucun moyen de modifier la phase de la lune, donc cela va toujours renvoyer 0,75.


Retours

GetSunDirection

Écrire en parallèle

Retourne un Vector3 représentant la direction du soleil à partir de la position 0, 0, 0.

Remarquez, lorsque le soleil s'est couché et n'est plus visible, le Vector3 renvoyé par cette fonction continuera à pointer vers le soleil en dessous de la carte.

Les développeurs qui souhaitent modifier le positionnement du soleil devraient utiliser les propriétés Lighting.ClockTime ou Lighting.GeographicLatitude.

Une variante de cette fonction existe pour obtenir la direction de la lune, Lighting:GetMoonDirection() .


Retours

Vector3 représentant la direction du soleil à partir de la position 0, 0, 0.

Échantillons de code

Lighting:GetSunDirection

local Lighting = game:GetService("Lighting")
Lighting.TimeOfDay = "14:00:00"
Lighting.GeographicLatitude = 41.73
print(Lighting:GetSunDirection())

SetMinutesAfterMidnight

void

Définit Lighting.TimeOfDay et Lighting.ClockTime sur le nombre de minutes donné après minuit.

Comment puis-je faire un script jour/nuit ?

SetMinutesAfterMidnight permet d'utiliser une valeur numérique, par exemple dans un cycle jour/nuit Script, sans le besoin de convertir en une chaîne dans le format requis par Lighting.TimeOfDay. Il permet également les valeurs supérieures à 24 heures à être données qui correspondent aux heures du lendemain. Voir les exemples de code ci-dessous pour un exemple.

L'utilisation de Lighting.TimeOfDay nécessite le temps pour être normalisé et une forme de chaîne formatée :


minutesAfterMidnight = 0
while true do
minutesAfterMidnight += 1
local minutesNormalised = minutesAfterMidnight % (60 * 24)
local seconds = minutesNormalised * 60
local hours = string.format("%02.f", seconds // 3600)
local mins = string.format("%02.f", math.floor(seconds / 60 - (hours * 60)))
local secs = string.format("%02.f", math.floor(seconds - hours * 3600 - mins * 60))
local timeString = hours .. ":" .. mins .. ":" .. secs
Lighting.TimeOfDay = timeString
task.wait()
end

L'utilisation de Lighting.ClockTime nécessite le temps de normalisation :


minutesAfterMidnight = 0
while true do
minutesAfterMidnight += 1
local minutesNormalised = minutesAfterMidnight % (60 * 24)
local hours = minutesNormalised / 60
Lighting.ClockTime = hours
task.wait()
end

L'utilisation de Lighting:SetMinutesAfterMidnight() n'exige pas de traitement supplémentaire :


minutesAfterMidnight = 0
while true do
minutesAfterMidnight += 1
Lighting:SetMinutesAfterMidnight(minutesAfterMidnight)
task.wait()
end

Paramètres

minutes: number

Le nombre de minutes après minuit.


Retours

void

Échantillons de code

Setting Lighting Time

local Lighting = game:GetService("Lighting")
Lighting:SetMinutesAfterMidnight(840)

Évènements

LightingChanged

Cet événement se déclenche lorsqu'une propriété Lighting est modifiée ou qu'un Sky est ajouté ou supprimé de Lighting.

Bien que cet événement se déclenche lorsque la plupart des propriétés de Lighting sont modifiées, les développeurs doivent être au courant des quelques exceptions :

Dans les cas où ce comportement n'est pas souhaité, l'événement Object.Changed ou la fonction Object:GetPropertyChangedSignal() peuvent être utilisés.

Paramètres

skyChanged: bool

Échantillons de code

Lighting.LightingChanged

local Lighting = game:GetService("Lighting")
local function onLightingChanged(skyboxChanged)
if skyboxChanged then
print("Skybox has changed")
else
print("The skybox did not change.")
end
end
Lighting.LightingChanged:Connect(onLightingChanged)