Lighting
*Este conteúdo é traduzido por IA (Beta) e pode conter erros. Para ver a página em inglês, clique aqui.
El servicio Iluminación controla la iluminación global en una experiencia. Incluye una gama de propiedades ajustables que puedes usar para cambiar cómo aparece y se interactúa la iluminación con otros objetos, como se describe en Propiedades de iluminación .
Iluminación también puede contener un objeto Atmosphere para rendizar efectos atmosféricos realistas, incluidos los efectos de partículas, niebla, reflejos y color. Vea Efectos atmosféricos para obtener más información.
Además, iluminación (junto con Workspace.CurrentCamera ) puede contener efectos de postprocesado como SunRaysEffect y 1> Class.BlurEffect ". Vea4> efectos de postprocesado4> para obtener más información.
Amostras de código
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
Resumo
Propriedades
La tonalidad de iluminación aplicada a las áreas que están ocultas del cielo, como las áreas interiores.
La intensidad de iluminación en el lugar.
Una representación numérica (en horas) del tiempo actual del día usado por Lighting .
El tono representado en la luz reflejada en las superficies opuestas a aquellas que se enfrentan al sol o la luna.
La tonalidad representada en el color que refleja la superficie al mostrar el sol o la luna.
Luz ambiental que se deriva del entorno, ambiente.
Luz especular que se deriva del entorno, ambiente.
El valor de la compensación de la exposición.
La profundidad desde la Workspace.CurrentCamera , en studs, en la que la niebla estará completamente opaca.
La profundidad desde la Workspace.CurrentCamera , en studs, en la que comienza a mostrarse la niebla.
La latitud geográfica, en grados, de la escena, que afecta el resultado de `Class.Lighting tiempo en la posición del sol y la luna.
Activa iluminación dinámica basada en el voxel para el juego.
El tinte de iluminación aplicado a las áreas exteriores.
Controla la calidad de las sombras.
Determina el sistema de iluminación para renderizar el mundo 3D. No es scriptable.
Una representación de cadena de 24 horas del tiempo actual del día usado por Lighting .
Métodos
Devuelve el número de minutos que han pasado después de medianoche para los fines de iluminación.
Devuelve un Datatype.Vector3 representando la dirección de la luna desde la posición 0, 0, 0.
Devuelve la fase actual de la luna.
Devuelve un Datatype.Vector3 representando la dirección del sol desde la posición 0, 0, 0.
Establece Lighting.TimeOfDay y Lighting.ClockTime en el número de minutos dado después de medianoche.
Eventos
Propriedades
Ambient
La tonalidad de iluminación aplicada a las áreas que están ocultas del cielo, como las áreas interiores.
Esta propiedad predeterminada 0, 0, 0 (negro).
Siempre que los canales rojos, verdes y azules de esta propiedad no excedan los canales correspondientes en Lighting.OutdoorAmbient el cambio de color se reserva para las áreas ocultas del sol/luna. El valor de Class.Lighting.OutdoorAmbient
Nota, cuando Lighting.GlobalShadows está deshabilitado, no hay distinción entre áreas ocultas y áreas que no lo son. En este caso Lighting.OutdoorAmbient se ignorará y se aplicará el tinte de la propiedad Ambient en todos lados.
Para obtener más propiedades que afectan el color de la iluminación, consulte Lighting.ColorShiftBottom y Lighting.ColorShiftTop .
Brightness
La intensidad de iluminación en el lugar.
Cambiar este valor cambiará el impacto de la fuente de luz (el sol o la luna) en la iluminación del mapa. Cuando se establece el brillo en 0, no habrá efecto debido a Lighting.ColorShift_Top o Lighting.ColorShift_Bottom como la fuente de luz no está teniendo ningún efecto. Nota, propiedad
Mientras esta propiedad no está fijada, el efecto está fijado entre 0 y 2. Significa establecer el brillo a 10 no será diferente a establecerlo en 2.
Nota, Lighting.Ambient y Lighting.OutdoorAmbient también se pueden usar para influir en la cantidad de luz que aparece en un lugar. Por ejemplo, estableciendo Lighting.OutdoorAmbient a 255, 255, 255 hará que el lugar apare
ClockTime
Una representación numérica (en horas) del tiempo actual del día usado por Lighting .
Nota, esta propiedad no coincide con el tiempo real del día y no cambiará durante el juego a menos que se haya cambiado por un script.
Para medir el tiempo con formato de Lighting utiliza Lighting.CurrentTime . Cambiar Lighting.CurrentTime o usar 1> Class.Lighting:SetMinutesAfterMidnight()1> también cambiará esta propiedad.
El tiempo de ClockTime requiere el tiempo para ser normalizado:
minutesAfterMidnight = 0while true dominutesAfterMidnight += 1local minutesNormalised = minutesAfterMidnight % (60 * 24)local hours = minutesNormalised / 60Lighting.ClockTime = hourstask.wait()end
Usar Lighting.TimeOfDay requiere que el tiempo sea normalizado y una forma de cuerda formatada:
minutesAfterMidnight = 0while true dominutesAfterMidnight += 1local minutesNormalised = minutesAfterMidnight % (60 * 24)local seconds = minutesNormalised * 60local 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..":"..secsLighting.TimeOfDay = timeStringtask.wait()end
Usar Lighting:SetMinutesAfterMidnight() no requiere ningún procesamiento adicional:
minutesAfterMidnight = 0while true dominutesAfterMidnight += 1Lighting:SetMinutesAfterMidnight(minutesAfterMidnight)task.wait()end
ColorShift_Bottom
El tono representado en la luz reflejada en las superficies opuestas a aquellas que se enfrentan al sol o la luna.
Las superficies de un BasePart influenciadas por ColorShift_Bottom dependen de la posición y orientación de la BasePart relativa al sol o la luna. Cuando el sol está directamente sobre el techo, un BasePart, el cambio de color solo se aplicará a la superficie inferior.
Este efecto se puede aumentar o reducir al alterar Lighting.Brightness .
ColorShift_Bottom afecta a las superficies opuestas para Lighting.ColorShift_Top
Nota, Lighting.ColorShift_Top y ColorShift_Bottom interactuarán con las propiedades Lighting.Ambient y Lighting.OutdoorAmbient si son mayores que 0, 0, 0. Además, la influencia de ColorShift_Bottom puede ser muy difícil de identificar
ColorShift_Top
La tonalidad representada en el color que refleja la superficie al mostrar el sol o la luna.
Las superficies de un BasePart influenciadas por ColorShift_Top dependen de la posición y orientación de la BasePart relativa al sol o la luna. Cuando el sol está directamente sobre el techo, un BasePart, el cambio de color solo se aplicará a la superficie superior.
Este efecto se puede aumentar o reducir al alterar Lighting.Brightness .
Mientras que ColorShift_Top afecta las superficies expuestas a la luz, Lighting.ColorShift_Bottom afecta las superficies protegidas de la luz.
Nota, ColorShift_Top y ColorShift_Bottom interactuarán con las propiedades Lighting.Ambient y Lighting.OutdoorAmbient si son mayores que 0, 0, 0.
EnvironmentDiffuseScale
Luz ambiental que se deriva del entorno, ambiente. El valor de esta propiedad se establece por defecto en 0.
Es similar a Lighting.Ambient y Lighting.OutdoorAmbient propiedad, pero es dinámica y puede cambiar según el cielo y el tiempo de día. Se recomienda cuando esta propiedad se incrementa, Ambient y OutdoorAmbient se reducen en consecuencia.
También hace que el cielo aparezca por la noche.
EnvironmentSpecularScale
Luz especular que se deriva del entorno, ambiente. El valor de esta propiedad se establece por defecto en 0.
Hará que los objetos lisos reflejen el entorno, ambiente. Especialmente importante para hacer que el metal sea más realista.
ExposureCompensation
Esta propiedad determina la cantidad de compensación de exposición que aplica un sesgo al nivel de exposición de la escena antes de la etapa de mapa de tono. Por defecto, 0.
- Un valor de +1 indica el doble de exposición y -1 significa la mitad de la exposición.
- Un valor de 0 no indica que se realice compensación de exposición.
- Rango: -5 a 5
Esta propiedad se replica y se puede configurar desde scripts o Studio .
local Lighting = game:GetService("Lighting")Lighting.ExposureCompensation = 5
Puedes usar esta propiedad para ajustar la cantidad de exposición antes de la etapa del mapa de tonos para mostrar más detalles en áreas más claras o oscuras. Esto es necesario a medida que avanzamos hacia un pipeline HDR.
Cuando Lighting.Technology está configurado como Legacy, esta propiedad no tiene efecto.
local Lighting = game:GetService("Lighting")-- ExposureCompensation no tiene efecto porque la tecnología de Lighting es LegacyLighting.Technology = Enum.Technology.LegacyLighting.ExposureCompensation = 5
FogColor
Las propiedades de niebla están ocultas cuando Lighting contiene un objeto Atmosphere .
Un valor Color3 que da la tonalidad de la niebla Lighting .
¿Cómo funciona el humo?
El efecto de niebla en Roblox se muestra en un avión perpendicular a la dirección Workspace.CurrentCamera . Se desvanecerá entre el propiedad Lighting.FogStart donde no es visible, hasta la propiedad Lighting.FogEnd donde es completamente opaca. El efecto de niebla es que mezcla el color con el color de Fog.
En distancias mayores a Lighting.FogEnd, el color se determinará en su totalidad por el Color de la niebla. Sin embargo, en las distancias entre Lighting.FogStart y Lighting.FogEnd, la cantidad de color que se mezcla depende de la posición.
Roblox's fog usa interpolación lineal entre Lighting.FogStart y Lighting.FogEnd . Esto significa que si Lighting.FogStart es 10 y 1> Class
local Lighting = game:GetService("Lighting")-- fog will fade between 25 and 200 studsLighting.FogStart = 25Lighting.FogEnd = 200
Nota, la niebla no oscurece la caja del cielo.
FogEnd
Las propiedades de niebla están ocultas cuando Lighting contiene un objeto Atmosphere .
La profundidad desde la Workspace.CurrentCamera , en studs, en la que la niebla estará completamente opaca.
¿Cómo funciona el humo?
La niebla en Roblox se muestra en un avión perpendicular a la dirección de mirada de Workspace.CurrentCamera . Se desvanecerá entre la propiedad Lighting.FogStart donde no es visible, hasta la propiedad FogEnd donde es completamente opaca. El efecto de la niebla es que mezcla el color con el Lighting.FogColor.
En distancias mayores que FogEnd, el color se determinará en su totalidad por el Lighting.FogColor . Sin embargo, en las distancias entre Lighting.FogStart y FogEnd, el grado en que se mezcla el color depende de la posición.
La niebla de Roblox usa la interpolación lineal entre Lighting.FogStart y FogEnd. Esto significa que si Lighting.FogStart es 10 y FogEnd es 20, a una distancia de 15 studs la niebla estará en un 50%. Eso significa que el color de un píxel en 1
local Lighting = game:GetService("Lighting")-- fog will fade between 25 and 200 studsLighting.FogStart = 25Lighting.FogEnd = 200
El color de la niebla se puede ajustar con Lighting.FogColor .
Nota, la niebla no oscurece la caja del cielo.
FogStart
Las propiedades de niebla están ocultas cuando Lighting contiene un objeto Atmosphere .
La profundidad desde la Workspace.CurrentCamera , en studs, en la que comienza a mostrarse la niebla.
¿Cómo funciona el humo?
El efecto de niebla en Roblox se muestra en un avión perpendicular a la dirección de la mirada. Se desvanece entre la propiedad FogStart donde no es visible, hasta la propiedad FogEnd donde es completamente opaca. El efecto de niebla es que mezcla el color con la propiedad Class.Lighting.FogColor .
En distancias mayores que Lighting.FogEnd , el color se determinará en su totalidad por el Lighting.FogColor . Sin embargo, en las distancias entre FogStart y Lighting.FogEnd el grado en que se mezcla el color depende de la posición.
La niebla de Roblox usa la interpolación lineal entre FogStart y Lighting.FogEnd . Esto significa que si FogStart es 10 y Lighting.FogEnd es 20, a una distancia de 15 studs la niebla estará en un 50%. Eso significa que el color de un píxel en 15 stud
local Lighting = game:GetService("Lighting")-- fog will fade between 25 and 200 studsLighting.FogStart = 25Lighting.FogEnd = 200
El color de la niebla se puede ajustar con Lighting.FogColor .
Nota, la niebla no oscurece la caja del cielo.
GeographicLatitude
La latitud geográfica, en grados, de la escena, que afecta el resultado de `Class.Lighting tiempo en la posición del sol y la luna.
Al calcular la posición del sol, también se tiene en cuenta la inclinación de la tierra.
Cambiar GeographicLatitude cambiará la posición del sol en cada Lighting.TimeOfDay . Los desarrolladores que buscan obtener la posición del sol o la luna deberían usar Lighting:GetSunDirection() o Lighting:GetMoonDirection() .
Amostras de código
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
Alterna iluminación dinámica basada en el voxel en el juego
¿Qué hace GlobalShadows?
Cuando se establece en verdadero, las sombras se renderizan en áreas protegidas dependiendo de la posición del sol y la luna. El color de iluminación aplicado a estas áreas se determina por la propiedad Lighting.Ambient. El color de iluminación en todas las otras áreas se determina por la propiedad Lighting.OutdoorAmbient.
Al desactivar, no se dibujan sombras y no se realiza ninguna distinción entre áreas interiores y exteriores. Como resultado, la propiedad Lighting.Ambient determina el tono de iluminación y Lighting.OutdoorAmbient no hará nada.
Las sombras se calculan utilizando un sistema de voxel, y cada voxel de iluminación es un 4x4x4 studs. Esto significa que los objetos deben ser más grandes que 4x4x4 studs para mostrar una sombra realista. Las sombras también se recalculan cuando BaseParts se mueven.
Nota, esta propiedad no está relacionada con las sombras de los personajes que se muestran sin importar lo que esté configurado en GlobalShadows.
Para obtener más información sobre iluminación dinámica de Roblox, por favor vea este blog post.
Alternar Sombras Globales
Los desarrolladores que alternan la configuración GlobalShadows notarán que desactivarlo hace que el lugar sea significativamente más oscuro. Esto se debe a que cuando GlobalShadows está desactivado Lighting.Ambient se usa para calcular el tono de iluminación en ambos espacios interiores y exteriores. Esta oscuridad se puede resolver estableciendo Class.Lighting.Amb
En la mayoría de los casos, se recomienda dejar GlobalShadows habilitado debido a la aspecto, lookvisual superior. Vea guía de propiedades de iluminación para obtener una comparación.
Intent
OutdoorAmbient
El tinte de iluminación aplicado a las áreas exteriores.
Esta propiedad predeterminada 127, 127, 127.
Siempre que los canales rojos, verdes y azules de Lighting.Ambient no excedan los canales correspondientes en esta propiedad, el tono de la iluminación en las áreas exteriores se determinará por
Nota, cuando Lighting.GlobalShadows está deshabilitado no hay distinción entre áreas ocultas del cielo y áreas que no lo son. En este caso OutdoorAmbient se ignorará y se aplicará el tinte de la propiedad Lighting.Ambient en todos lados.
Para más propiedades que afectan el color de la iluminación, consulte Lighting.ColorShift_Bottom y Lighting.ColorShift_Top .
Quality
ShadowSoftness
Controla la calidad de las sombras. El valor predeterminado de esta propiedad es 0.2.
Esta propiedad solo funciona cuando el modo Lighting.Technology está en ShadowMap o Future y el dispositivo es capaz de ShadowMap.
Technology
Determina el sistema de iluminación para renderizar el mundo 3D. No se puede scriptable y solo se puede modificar en Studio. Vea Enum.Technology para obtener las opciones disponibles y tecnología de iluminación para descripciones y efectos de luz detallados de cada opción.
TimeOfDay
Una representación de cadena de 24 horas del tiempo actual del día usado por Lighting .
Nota, esta propiedad no coincide con el tiempo real del día y no cambiará durante el juego a menos que se haya cambiado por un script.
Para una medida numérica de Lighting tiempo de uso Lighting.ClockTime . Cambiando Lighting.ClockTime o usando 1> Class.Lighting:SetMinutesAfterMidnight()1> también cambiará esta propiedad.
El uso de TimeOfDay requiere el tiempo para ser normalizado y una forma de cuerda formatada:
minutesAfterMidnight = 0while true dominutesAfterMidnight += 1local minutesNormalised = minutesAfterMidnight % (60 * 24)local seconds = minutesNormalised * 60local 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..":"..secsLighting.TimeOfDay = timeStringtask.wait()end
Usar Lighting.ClockTime requiere que el tiempo sea normalizado:
minutesAfterMidnight = 0while true dominutesAfterMidnight += 1local minutesNormalised = minutesAfterMidnight % (60 * 24)local hours = minutesNormalised / 60Lighting.ClockTime = hourstask.wait()end
Usar Lighting:SetMinutesAfterMidnight() no requiere ningún procesamiento adicional:
minutesAfterMidnight = 0while true dominutesAfterMidnight += 1Lighting:SetMinutesAfterMidnight(minutesAfterMidnight)task.wait()end
Métodos
GetMinutesAfterMidnight
Devuelve el número de minutos que han pasado después de medianoche para los fines de iluminación.
Este número será casi idéntico a Lighting.ClockTime multiplicado por 60.
Este número no siempre será igual al valor dado en Lighting:SetMinutesAfterMidnight() ya que regresa minutos después de medianoche en el día actual.
Para Lighting tiempo en formato de cadena, consulte Lighting.TimeOfDay .
Devolução
El número de minutos después de medianoche.
Amostras de código
local Lighting = game:GetService("Lighting")
Lighting.TimeOfDay = "14:00:00"
print(Lighting:GetMinutesAfterMidnight())
GetMoonDirection
Devuelve un Datatype.Vector3 representando la dirección de la luna desde la posición 0, 0, 0.
Nota, cuando la luna tenga 'establecer' y ya no esté visible, el Vector3 devuelto por esta función seguirá apuntando hacia la luna debajo del mapa.
Los desarrolladores que desean cambiar la posición de la luna deberían usar las propiedades Lighting.ClockTime o Lighting.GeographicLatitude.
Existe una variante de esta función para obtener la dirección del sol, Lighting:GetSunDirection() .
Devolução
Amostras de código
local Lighting = game:GetService("Lighting")
Lighting.TimeOfDay = "14:00:00"
print(Lighting:GetMoonDirection())
GetMoonPhase
Devuelve la fase actual de la luna. No hay forma de cambiar la fase de la luna, por lo que esto siempre devolverá 0.75.
Devolução
GetSunDirection
Devuelve un Datatype.Vector3 representando la dirección del sol desde la posición 0, 0, 0.
Nota, cuando el sol se haya puesto y ya no esté visible, el Vector3 devuelto por esta función seguirá apuntando hacia el sol debajo del mapa.
Los desarrolladores que desean cambiar la posición del sol deberían usar las propiedades Lighting.ClockTime o Lighting.GeographicLatitude.
Existe una variante de esta función para obtener la dirección de la luna, Lighting:GetMoonDirection() .
Devolução
Amostras de código
local Lighting = game:GetService("Lighting")
Lighting.TimeOfDay = "14:00:00"
Lighting.GeographicLatitude = 41.73
print(Lighting:GetSunDirection())
SetMinutesAfterMidnight
Establece Lighting.TimeOfDay y Lighting.ClockTime en el número de minutos dado después de medianoche.
¿Cómo puedo hacer un scriptde día / noche?
SetMinutesAfterMidnight permite un valor numérico para usar, por ejemplo en un ciclo día/noche Script , sin la necesidad de convertir en una cadena en el formato requerido por Lighting.TimeOfDay . También permite valores mayores que 24 horas para que coincidan con los tiempos del día siguiente. Ver los códigos de ejemplo a continuación para obtener un ejemplo.
Usar Lighting.TimeOfDay requiere que el tiempo sea normalizado y una forma de cuerda formatada:
minutesAfterMidnight = 0while true dominutesAfterMidnight += 1local minutesNormalised = minutesAfterMidnight % (60 * 24)local seconds = minutesNormalised * 60local 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 .. ":" .. secsLighting.TimeOfDay = timeStringtask.wait()end
Usar Lighting.ClockTime requiere que el tiempo sea normalizado:
minutesAfterMidnight = 0while true dominutesAfterMidnight += 1local minutesNormalised = minutesAfterMidnight % (60 * 24)local hours = minutesNormalised / 60Lighting.ClockTime = hourstask.wait()end
Usar Lighting:SetMinutesAfterMidnight() no requiere ningún procesamiento adicional:
minutesAfterMidnight = 0while true dominutesAfterMidnight += 1Lighting:SetMinutesAfterMidnight(minutesAfterMidnight)task.wait()end
Parâmetros
El número de minutos después de medianoche.
Devolução
Amostras de código
local Lighting = game:GetService("Lighting")
Lighting:SetMinutesAfterMidnight(840)
Eventos
LightingChanged
Este evento se activa cuando se cambia una propiedad de Lighting o se agrega o elimina un Sky de Lighting .
Aunque este evento se activa cuando la mayoría de las propiedades de Lighting cambian, los desarrolladores deberían estar al tanto de las pocas excepciones:
- Cambiar Lighting.GlobalShadows no disparará este evento
- Las propiedades de niebla, Lighting.FogColor , Lighting.FogStart y Lighting.FogEnd no dispararán este evento
En los casos en que este comportamiento no se desee, el evento Object.Changed o la función Object:GetPropertyChangedSignal() se pueden usar.
Parâmetros
Amostras de código
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)