번짐이 있는 조명은 환경의 톤을 영향력에 미치는 강력한 힘입니다. 예를 들어, 일관된 밝기의 조명이 있는 집은 따뜻하고 환영스럽게 느낄 수 있지만, 동일한 홈복도에 번짐이 있으면 괴상하고 위
모든 3D 작품마찬가지로 특정 목표를 달성하는 몇 가지 방법이 있습니다. 이 가이드에서는 도구 및 메서드를 사용하여 몇 가지 기본 자산을 포함한 Studio에서만 사용할 수 있는 빛 애니메이션을 빠르게 만들 수 있습니다
다음 메서드를 사용하여 번짐 라이트를 만드는 경우 각 섹션을 따라 생성 방법을 배우세요.
- Datatype.NumberSequencer 는 램프의 밝기를 시간에 따라 영향을 미칩니다.
- 깜빡이는 루프 시간을 결정하는 지속 시간 특성입니다.A loop duration attribute to determine the amount of time each flickering loop must take.
- Class.Script 모델의 자식 MeshParts 에서 램프의 조명을 깜빡이게 하려면 작동하는 두 특성을 구성하는 모델 구성 구성합니다.
샘플 램프 가져오기
이 가이드는 고품질, 사용자 지정 가능한 은행 램프 모델의 다운로드 가능한 .rbxm 파일을 사용하여 번짐 조명 기술을 시연하는 데 사용됩니다. 이 모델을 사용하여 기본 원리를 이해한 다음 Studio 또는 다른 제3자 모델링 소프트웨어에서 생성하는 자신의 모
To import the BankersLamp.rbxm :
탐색기 창에서 오른쪽 클릭하여 작업 공간을 합니다. 컨텍스트 메뉴가 표시됩니다.
Select 파일에서 삽입… 파일 브라우저를 표시합니다.
선택 은행자 램프 .rbxm, 그리고 클릭 열기 버튼. 모델이 뷰포트에 표시됩니다.
밝기 숫자 시퀀스 생성
Datatype.NumberSequencer는 인스턴스의 수명 동안 0에서 1까지의 숫자 값 시리즈를 나타내는 데이터 형식입니다. 이 형식의 데이터 형식은 플래킹 라이트를 생성하는 데 유용하며, 램프 라이트의 밝기를 인스턴스의 수명 동안 변경
Datatype.NumberSequencer의 X축은 시간을 나타내며, Y축은 상대적인 밝기를 나타냅니다. 그리기 시작점과 끝점의 각 정사각형은 키포인트 로 표
램프에는 기본적으로 밝기가 없지만, NumberSequence 의 밝기 특성을 생성하고, 밝기 속성을 NumberSequence 입력설정한 다음 조명이 나타나는 주기에 대해 키포인트를 다양하게 추가하여 실험하십시오.
밝기를 생성하려면 NumberSequence :
램프 모델에 새로운 숫자 시퀀스 특성을 추가합니다.
In the 탐색기 window, select the lamp model.
속성 창에서 특성 섹션으로 이동하고 특성 추가 버튼을 클릭하십시오. 속성 추가 대화 상자가 표시됩니다.
In the 특성 추가 대화 상자 대화 상자에서,
이름 필드에 명명 곡선을 입력합니다.
클릭하십시오 Type 드롭다운 메뉴, then select NumberSequencer .
클릭하십시오 저장하기 버튼. 새로운 특성은 속성 창의 속성 섹션에 표시됩니다.
새로운 BrightnessCurve 속성을 선택한 다음 … 버튼을 클릭하십시오. 숫자 시퀀스가 표시됩니다.
다음 중 하나를 수행하십시오.
- 어떤 시점의 밝기를 변경하려면 키 포인트를 클릭하고 위로 또는 아래로 드래그하거나 값 필드에 값을 입력하십시오.
- 새 키포인트를 삽입하려면 그래프의 任意 지점을 클릭하십시오.
- 키포인트를 삭제하려면 키포인트를 선택한 다음 삭제 버튼을 클릭하십시오.
- 밝기를 위한 랜덤 범위를 추가하려면 키 포인트를 클릭하고 환경 라인을 올리거나 내리십시오. 그때 라이트는 핑크 환경 사이에서 랜덤으로 밝기를 생성합니다.
예를 들어, 다음 그래프는 첫 번째 번짐에 대해 빛이 완전히 깜빡이면 50% 빛이 두 번째 번짐에 대해 두 배 75% 빛이 세 번째 번짐에 대해 세 배입니다.
루프 지속 시간 생성
이제 램프 조명의 밝기가 평균 수명에 걸쳐 변경되는 방법을 결정하기 위해 NumberSequence를 가지고 있지만, 깜빡이는 루프 길이를 결정해야 합니다. 즉, 이 루프 길이는 기본적으로 NumberSequence가 반복하는 횟수를 제어합니다.
루프 지속 시간을 만들려면:
새로운 루프 지속 시간 특성을 램프 모델에 추가합니다.
In the 탐색기 window, select the lamp model.
속성 창에서 특성 섹션으로 이동하고 특성 추가 버튼을 클릭하십시오. 속성 추가 대화 상자가 표시됩니다.
In the 특성 추가 대화 상자 대화 상자에서,
이름 필드에 LoopDuration를 입력합니다.
클릭하십시오 Type 드롭다운 메뉴, then select Number .
클릭하십시오 저장하기 버튼. 새로운 특성은 속성 창의 속성 섹션에 표시됩니다.
새로운 LoopDuration 특성을 1 로 설정합니다. 이렇게 하면 NumberSequence가 1초 후에 반복됩니다.
라이트 빛 끊김 스크립트
이제 경량 램프의 밝기를 제어하는 모든 요소를 갖췄으니, 이제 시작 단계에 도달했습니다. Script 를 만들어 모든 것을 함께 작동하도록 하고 빛을 번쩍이게 합니다.
라이트 번짐을 스크립트하려면:
- In the 탐색기 창에서 램프 모델을 마우스로 이동하고 ⊕ 버튼을 클릭하십시오. 컨텍스트 메뉴가 표시됩니다.
- 메뉴에서 스크립트 를 삽입합니다.
- 새로운 스크립트에서 팔로잉입력합니다.
local RunService = game:GetService("RunService")
-- 모델에 설정된 특성 값을 가져옵니다.
local brightnessCurve = script.Parent:GetAttribute("BrightnessCurve")
local loopDuration = script.Parent:GetAttribute("LoopDuration")
-- 변경될 모델 인스턴스에 대한 참조를 저장합니다.
local light = script.Parent.lamp_hood.SpotLight
local bulb = script.Parent.lightbulb
local beam = script.Parent.lamp_hood.Beam
-- 변경될 원래 속성 값을 저장합니다.
local origLightBrightness = light.Brightness
local origBeamBrightness = beam.Brightness
local origBulbColor = bulb.Color
-- 특정 시간(nsTime)에 NumberSequoes(ns)의 값을 가져옵니다.
function evaluateNumberSequence(ns: NumberSequence, nsTime: number)
-- 0이나 1인 경우 첫 번째 또는 마지막 키포인트의 값을 반환합니다.
if nsTime == 0 then
return ns.Keypoints[1].Value
end
if nsTime == 1 then
return ns.Keypoints[#ns.Keypoints].Value
end
-- 그렇지 않으면 각 순차적 쌍의 키포인트를 통과합니다.
for i = 1, #ns.Keypoints - 1 do
-- 현재 및 다음 키포인트를 가져옵니다.
local currKp = ns.Keypoints[i]
local nextKp = ns.Keypoints[i + 1]
-- nsTime이 키포인트 시간 사이에 있으면,
if nsTime >= currKp.Time and nsTime < nextKp.Time then
-- 키포인트 시간 사이에서 nsTime가 어디에 있는지 계산하고 알파를 호출합니다.
local alpha = (nsTime - currKp.Time) / (nextKp.Time - currKp.Time)
-- 알파를 사용하여 시간을 다시 설정하는 값을 반환합니다.
return currKp.Value + (nextKp.Value - currKp.Value) * alpha
end
end
end
RunService.Heartbeat:Connect(function()
-- 0에서 1 사이의 시간을 해결합니다.
local t = time() / loopDuration
local numberSequenceTime = t - math.floor(t)
-- 이 때문에 현재 NumberSequencer의 값을 가져옵니다.
local brightnessValue = evaluateNumberSequence(brightnessCurve, numberSequenceTime)
-- 이 값에 따라 밝기 및 색상 속성을 조정합니다.
light.Brightness = origLightBrightness * brightnessValue
beam.Brightness = origBeamBrightness * brightnessValue
bulb.Color = Color3.new(
origBulbColor.r * brightnessValue,
origBulbColor.g * brightnessValue,
origBulbColor.b * brightnessValue
)
end)
경험을 플레이테스트할 때 Heartbeat 함수는 다음 프레임을 실행합니다.
- 현재 시간에 대한 numberSequenceTime 기반의 brightnessCurve 솔루션.
- 이렇게 하면 0과 1 사이의 시간이 됩니다, 즉, 숫자 시퀀스의 시작 및 끝입니다.
- 솔루션은 값( brightnessValue )의 brightnessCurve``Datatype.NumberSequence 시간에 대해 1> numberSequencerTime1> 입니다.
- evaluateNumberSequence() 는 모든 NumberSequence의 시간에 대해 관련된 값을 계산합니다.
- 이 값은 시간이 지남에 따라 속성에 적용할 상대적인 밝기 값으로 사용됩니다.
- 램프의 속성을 변경하려면 brightnessValue 를 빛의 밝기, 빔의 밝기 및 전구의 색으로 나눕니다.
이 속성의 변경은 시간이 지남에 따라 아래의 번짐 효과로 이어집니다.