Lighting

Pokaż przestarzałe

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Brak możliwości tworzenia
Usługa

Sterowanie Oświetleniem usługą kontroluje globalne oświetlenie w doświadczeniu. Obejmuje zasięg dostępnych zmiennych, które możesz użyć do zmiany tego, jak światło wygląda i interaguje z innymi obiektami, jak opisano w Właściwości oświetlenia.

Oświetlenie może również zawierać obiekt Atmosphere do renderowania realistycznych efektów atmosfery, w tym gęstość cząsteczek, mgłę, błyski i kolor. Zobacz Efekty atmosfery dla szczegółów.

Ponadto, Oświetlenie (wraz z Workspace.CurrentCamera ) może zawierać efekty post-Processing, takie jak SunRaysEffect i 2> Class.BlurEffect2>. Zobacz 5> Post-Processing Effects5> po więcej informacji.

Przykłady kodu

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

Podsumowanie

Właściwości

Metody

Zdarzenia

Właściwości

Ambient

Odczyt równoległy

Kolor oświetlenia zastosowany do obszarów, które są zamknięte od nieba, takich jak obszary wewnętrzne.

Właściwość ta domyślnie ma wartość 0, 0, 0 (czarny).

Dopóki czerwone, zielone i niebieskie kanały tego właściwości nie przekroczą odpowiednich kanałów w Lighting.OutdoorAmbient zmiana koloru zostanie zachowana dla obszarów zaciemnionych przez słoń

Uwaga, gdy Lighting.GlobalShadows jest wyłączony, nie ma różnicy pomiędzy obszarami zaciemnionymi i obszarami, które nie są. W tym przypadku Lighting.OutdoorAmbient zostanie ignorowany i kolor z właściwości Ambient zostanie stosowany wszędzie.

Dla więcej cech, które wpływają na kolor oświetlenia, zobacz Lighting.ColorShiftBottom i Lighting.ColorShiftTop.

Brightness

Odczyt równoległy

Intensywność oświetlenia w miejsce.

Zmienie tego wartości będzie wpływać na wpływ źródła światła (słońce lub księżyc) na oświetlenie mapy. Gdy jasność jest ustawiona na 0, nie będzie efektu ze względu na Lighting.ColorShift_Top lub Class.Lighting.ColorShift_Bottom</

Podczas gdy ta właściwość nie jest przytrzymywana, efekt jest przytrzymywany między 0 a 2. Oznacza to, że ustawienie Jasności na 10 nie będzie różnić się od ustawienia go na 2.

Uwaga, Lighting.Ambient i Lighting.OutdoorAmbient mogą być również używane do wpływania na to, jak jasny wygląda miejsce. Na przykład ustawienie Lighting.OutdoorAmbient na 255, 255, 2

ClockTime

Bez replikacji
Odczyt równoległy

Liczna reprezentacja czasu (w godzinach) używana przez Lighting .

Uwaga, ta właściwość nie odpowiada aktualnemu czasowi dnia i nie zmieni się podczas gry, chyba że została zmieniona przez skrypt.

Dla pomiaru Lighting czasu w formie 24-godzinnej użyj Lighting.CurrentTime . Zmienianie Lighting.CurrentTime lub używanie 1> Class.Lighting:SetMinutesAfterMidnight()1> zmieni również tę właściwość.

Używanie ClockTime wymaga czasu normalizacji:


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

Używanie Lighting.TimeOfDay wymaga czasu normalizacji i formatu strumieni:


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

Używanie Lighting:SetMinutesAfterMidnight() nie wymaga dodatkowego przetwarzania:


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

ColorShift_Bottom

Odczyt równoległy

Kolor przedstawiony w świetle odzwierciedlającym się na przeciwległych powierzchniach w stosunku do tych, które stoją w obliczu słońca lub księżyca.

Powierzchnie Class.BasePart wpływające na ColorShift_Bottom zależą od pozycji i orientacji Class.BasePart w odniesieniu do pozycji i orientacji słońca lub księżyca. Gdy słońce jest bezpośrednio nad głową Class.BasePart, zmiana koloru będzie dotyczyć tylko do powierzchni dolnej.

Ten efekt można zwiększyć lub zmniejszyć, zmieniając Lighting.Brightness .

ColorShift_Bottom wpływa na przeciwne powierzchnie, aby Lighting.ColorShift_Top

Uwaga, Lighting.ColorShift_Top i ColorShift_Bottom będą interagować z właściwościami Lighting.Ambient i Lighting.OutdoorAmbient, jeśli są większe niż 0, 0, 0. Ponadto wpływ ColorShift

ColorShift_Top

Odczyt równoległy

Kolor przedstawiony w świetle odzwierciedlającym się z powierzchni ze strony słońca lub księżyca.

Powierzchnie Class.BasePart są uzależnione od pozycji i orientacji Class.BasePart w odniesieniu do pozycji i orientacji księżyca. Gdy słońce jest bezpośrednio nad nim, zmiana koloru będzie dotyczyć tylko górnej powierzchni.

Ten efekt można zwiększyć lub zmniejszyć, zmieniając Lighting.Brightness .

Podczas gdy ColorShift_Top wpływa na powierzchnie ekspozycji na światło, Lighting.ColorShift_Bottom wpływa na powierzchnie chronione przed światłem.

Uwaga, ColorShift_Top i ColorShift_Bottom będą interagować z właściwościami Lighting.Ambient i Lighting.OutdoorAmbient, jeśli są większe niż 0, 0, 0.

EnvironmentDiffuseScale

Odczyt równoległy

Światło środowiskowe, które jest wynikiem środowiska. Wartość tej właściwości domyślnie wynosi 0.

Jest podobny do Lighting.Ambient i Lighting.OutdoorAmbient właściwości, ale jest dynamiczny i może się zmieniać w zależności od nieba i czasu dnia. Zaleca się, gdy właściwość ta jest zwiększana, Ambient i OutdoorAmbient są zmniejszane odpowiednio.

Ponadto sprawia, że skrzynka nieba pojawia się w nocy.

EnvironmentSpecularScale

Odczyt równoległy

Odbijające światło pochodzące z środowisko. Wartość tej właściwości domyślnie wynosi 0.

Będzie to sprawić, że gładkie obiekty odzwierciedlają środowisko. szczególnie ważne, aby uczynić metal bardziej realistycznym.

ExposureCompensation

Odczyt równoległy

To właściwość określa ilość odszkodowania za ekspozycję, która stosuje się do poziomu ekspozycji sceny przed krokiem mapy dźwiękowej. Domyślnie ustawione na 0.

  • Wartość +1 wskazuje dwa razy więcej ekspozycji, a wartość -1 oznacza połowę ekspozycji.
  • Wartość 0 wskazuje, że nie zostanie wykonana kompensacja za ekspozycję.
  • Zakres: -5 do 5

Ta właściwość jest replikowana i można ją ustawić z Studio lub skryptów.


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

Możesz użyć tego właściwości, aby dostosować ilość ekspozycji przed krokiem mapy tonowej, aby pokazać więcej szczegółów w jaśniejszych lub ciemniejszych obszarach. Jest to niezbędne, gdy przeschodzimy do HDR pipeline.

Gdy Lighting.Technology ustawiony na Legacy, ta właściwość nie ma żadnego efektu.


local Lighting = game:GetService("Lighting")
-- Kompensacja ekspozycji nie ma wpływu, ponieważ technologia Lighting jest dziedzictwem
Lighting.Technology = Enum.Technology.Legacy
Lighting.ExposureCompensation = 5

FogColor

Odczyt równoległy

Właściwości mgły są ukryte, gdy Lighting zawiera obiekt Atmosphere.

Wartość Color3 dającą kolor Lighting mgły.

Jak działa mgła?

Fog in Roblox jest wyświetlany na planie perpendicular do kierunku Workspace.CurrentCamera. Zniknie między Lighting.FogStart właściwością, gdzie nie jest widoczny, do Lighting.FogEnd właściwością, gdzie jest całkowicie niewidoczny. Efekt mgły jest, że miksuje kolor z kolorem

W odległościach większych niż Lighting.FogEnd , kolor zostanie ustalony w całości przez FogColor. Jakość koloru zależy jednak od pozycji.

Roblox's fog używa liniowej interpolacji między Lighting.FogStart i Lighting.FogEnd. Oznacza to, że jeśli Lighting.FogStart jest 10


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

Uwaga, mgła nie zasłania nieba.

FogEnd

Odczyt równoległy

Właściwości mgły są ukryte, gdy Lighting zawiera obiekt Atmosphere.

Głębokość z Workspace.CurrentCamera , w studs, przy której mgła będzie całkowicie niewidoczna.

Jak działa mgła?

Mgnienie w Roblox jest wyświetlane na planie perpendicular do kierunku patrzenia Workspace.CurrentCamera . Zniknie między Lighting.FogStart właściwością, gdzie nie jest widoczne, do właściwości FogEnd, gdzie jest całkowicie nieskazitelnym. Efekt mgnienia jest miksowanie koloru z

W odległościach większych niż FogEnd kolor zostanie ustalony w całości przez Lighting.FogColor. Jako jednak odległości między Lighting.FogStart i FogEnd stopień, w jaki sposób kolor jest mieszany, zależy od pozycji.

Mgła Roblox'a używa liniowej interpolacji pomiędzy Lighting.FogStart i FogEnd. Oznacza to, że jeśli Lighting.FogStart jest 10 i FogEnd jest 20, na dystansie 15 studs mgła będzie na 50%. To znaczy, że kolor pik


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

Kolor mgły można dostosować używając Lighting.FogColor .

Uwaga, mgła nie zasłania nieba.

FogStart

Odczyt równoległy

Właściwości mgły są ukryte, gdy Lighting zawiera obiekt Atmosphere.

Głębokość z Workspace.CurrentCamera , w studs, w których zaczyna się pokazywać, prezentowaćmgła.

Jak działa mgła?

Mgnienie w Roblox jest wyświetlane na planie perpendicular do kierunku spojrzenia Workspace.CurrentCamera . Zniknie między właściwością FogStart , gdzie nie jest widoczny, do właściwości Lighting.FogEnd , gdzie jest całkowicie nieskazitelnym. Efekt mgnienia jest mieszanie koloru z

W odległościach większych niż Lighting.FogEnd , kolor zostanie ustalony w całości przez Lighting.FogColor . Ale w odległościach pomiędzy FogStart i Lighting.FogEnd stopień, w jaki kolor jest mieszany, zależy od pozycji.

Mgła Roblox używa liniowej interpolacji między FogStart a Lighting.FogEnd . Oznacza to, że jeśli FogStart jest 10 i Lighting.FogEnd jest 20, na dystansie 15 studs mgła będzie w 50%. To znaczy, że kolor piksela w d


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

Kolor mgły można dostosować używając Lighting.FogColor .

Uwaga, mgła nie zasłania nieba.

GeographicLatitude

Odczyt równoległy

Geograficzna długość geograficzna, w stopniach, sceny, wpływająca na wynik `Class.Lighting czas na pozycji słońca i księżyca.

Podczas obliczania pozycji słońca kontosię również kąt nachylenia ziemi.

Zmiana geograficznej długości promieniowania będzie zmieniać pozycję słońca co Lighting.TimeOfDay . Rozwój programistów, którzy szukają uzyskania pozycji słońca lub księżyca, powinien użyć Lighting:GetSunDirection() lub Lighting:GetMoonDirection() .

Przykłady kodu

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

Odczyt równoległy

Włącza dynamiczne oświetlenie oparte na woxlu w gra

Co robi GlobalShadows?

Gdy ustawiony na prawdę, cienie są renderowane w obszarach chronionych w zależności od pozycji słońca i księżyca. Kolor oświetlenia zastosowany do tych obszarów jest określany przez właściwość Lighting.Ambient. Kolor oświetlenia w wszystkich innych obszarach jest określony przez właściwość Lighting.OutdoorAmbient.

Gdy jest wyłączone, cienie nie są rysowane i nie ma żadnej różnicy między obszarami wewnętrznymi i zewnętrznymi. W wynikwłaściwość Lighting.Ambient określa kolor oświetlenia i Lighting.OutdoorAmbient zadziała się nieudzielnie.

Cienie są obliczane przy użyciu systemu woxel, a każdy oświetlający woxel jest 4x4x4 studs. Oznacza to, że obiekty muszą być większe niż 4x4x4 studs, aby wyświetlić realistyczną cienie. Cienie są również recalculowane, gdy BaseParts są przesuwane.

Uwaga, ta właściwość nie jest powiązana z cieniami postaci, które są wyświetlane bez względu na to, co ustawiono globalnym cieniem.

Dla więcej informacji o dynamicznej oświetleniu Roblox, zobacz ten post na blogu.

Przełącz globalne cienie

Rozwój programistów zmieniających ustawienie GlobalShadows zauważy, że jego wyłączenie sprawia, że miejsce jest znacznie ciemniejsze. To dlatego, że gdy GlobalShadows jest wyłączony Lighting.Ambient jest używany do obliczania koloru oświetlenia w obu pomieszczeniach wewnętrznych i ze

W większości przypadków zaleca się pozostawić GlobalShadows włączone z powodu lepszego wyglądu wizualnego. Zobacz przewodnik Lighting Properties dla porównania.

Brak możliwości dodawania do skryptu
Odczyt równoległy

OutdoorAmbient

Odczyt równoległy

Kolor oświetlenia stosowany do obszarów zewnętrznych.

Właściwość ta domyślnie ma 127, 127, 127.

Dopóki czerwone, zielone i niebieskie kanały Lighting.Ambient nie przekroczą odpowiednich kanałów w tej właściwości, kolor oświetlenia na

Uwaga, gdy Lighting.GlobalShadows jest wyłączony, nie ma różnicy między obszarami zaciemnionymi z nieba a obszarami, które nie są. W tym przypadku OutdoorAmbient zostanie ignorowany i kolor z właściwości Lighting.Ambient zostanie stosowany wszędzie.

Dla więcej cech, które wpływają na kolor oświetlenia, zobacz Lighting.ColorShift_Bottom i Lighting.ColorShift_Top.

Brak możliwości dodawania do skryptu
Odczyt równoległy

ShadowSoftness

Odczyt równoległy

Kontroluje, jak rozmyte są cienie. Wartość tej właściwości domyślnie wynosi 0,2.

Ta właściwość działa tylko wtedy, gdy tryb Lighting.Technology jest ShadowMap lub Future i urządzenie jest w stanie ShadowMap.

Technology

Odczyt równoległy
Zabezpieczenia skryptów Roblox

Określa system oświetlenia do renderowania świata 3D. Nie możliwe do skryptowania i zmieniania w Studio. Zobacz Enum.Technology dla dostępnych opcji i technologię oświetlenia dla szczegółowych opisów i efektów wizualnych każdej opcji.

TimeOfDay

Odczyt równoległy

Reprezentacja 24-godzinnego przelicznika czasu używany przez Lighting .

Uwaga, ta właściwość nie odpowiada aktualnemu czasowi dnia i nie zmieni się podczas gry, chyba że została zmieniona przez skrypt.

Dla liczby mierzalnej Lighting czas użycia Lighting.ClockTime . Zmienie Lighting.ClockTime lub użycie 1> Class.Lighting:SetMinutesAfterMidnight()1> zmieni również tę właściwość.

Używanie TimeOfDay wymaga czasu do normalizacji i formatu strumieni:


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

Używanie Lighting.ClockTime wymaga czasu na normalizację:


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

Używanie Lighting:SetMinutesAfterMidnight() nie wymaga dodatkowego przetwarzania:


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

Metody

GetMinutesAfterMidnight

Zapis równoległy

Zwraca liczbę minut, które minęły po północy w celach oświetlenia.

Ta liczba będzie prawie identyczna z Lighting.ClockTime mnożona przez 60.

Ta liczba nie będzie zawsze równa wartości podanej w Lighting:SetMinutesAfterMidnight() ponieważ powoduje powrót minut po północy w obecnym dniu.

Dla Lighting czasu zapisany jako ciąg znaków, zobacz Lighting.TimeOfDay .


Zwroty

Liczba minut po północy.

Przykłady kodu

Lighting:GetMinutesAfterMidnight

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

GetMoonDirection

Zapis równoległy

Zwraca Vector3 reprezentujące kierunek księżyca z pozycji 0, 0, 0.

Uwaga, gdy księżyc ma "ustawiać" i nie jest już widoczny, zwracany przez tę funkcję Vector3 nadal będzie wskazywał na księżyc poniżej mapy.

Rozwój programistów służących do zmiany położenia księżyca powinien używać właściwości Lighting.ClockTime lub Lighting.GeographicLatitude.

Istnieje wariant tej funkcji służący do uzyskania kierunku słońca, Lighting:GetSunDirection() .


Zwroty

Vector3 reprezentujący kierunek księżyca z pozycji 0, 0, 0.

Przykłady kodu

Lighting:GetMoonDirection

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

GetMoonPhase

Zwraca bieżącą fazę księżyca. Nie ma sposób na zmianę fazy księżyca, więc zawsze zwraca 0,75.


Zwroty

GetSunDirection

Zapis równoległy

Zwraca Vector3 reprezentujące kierunek słońca z pozycji 0, 0, 0.

Uwaga, gdy słońce zachodzi i nie jest już widoczne, Vector3 zwrócony przez tę funkcję nadal będzie wskazywał na słońce poniżej mapy.

Rozwój programistów służących do zmiany położenia słońca powinien używać właściwości Lighting.ClockTime lub Lighting.GeographicLatitude.

Istnieje wariant tej funkcji służący do uzyskania kierunku księżyca, Lighting:GetMoonDirection() .


Zwroty

Vector3 reprezentujący kierunek słońca z pozycji 0, 0, 0.

Przykłady kodu

Lighting:GetSunDirection

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

SetMinutesAfterMidnight

void

Ustawia Lighting.TimeOfDay i Lighting.ClockTime na podany liczby minut po północy.

Jak mogę stworzyć dzienny/nocny skrypt?

SetMinutesAfterMidnight umożliwia użycie liczbowego wartości, na przykład w cyklu dzień/noc Script , bez potrzeby konwersji do struny w formacie wymaganym przez Lighting.TimeOfDay . Może również pozwolić większe niż 24 godziny są odpowiadające do czasów w następnym dniu. Zobacz

Używanie Lighting.TimeOfDay wymaga czasu normalizacji i formatu strumieni:


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

Używanie Lighting.ClockTime wymaga czasu na normalizację:


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

Używanie Lighting:SetMinutesAfterMidnight() nie wymaga dodatkowego przetwarzania:


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

Parametry

minutes: number

Liczba minut po północy.


Zwroty

void

Przykłady kodu

Setting Lighting Time

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

Zdarzenia

LightingChanged

Ten wąż pojawia się, gdy właściwość Lighting jest zmieniana lub dodana lub usunięta właściwość Sky lub usunięta z Lighting.

Chociaż ten wążdź się uruchamia, gdy większość właściwości Lighting jest zmieniana, należy pamiętać o kilku wyjątkach:

W przypadkach, gdy nie pożądane jest to zachowanie, można użyć wydarzenia Object.Changed lub funkcji Object:GetPropertyChangedSignal().

Parametry

skyChanged: bool

Przykłady kodu

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)