Version: Unity 6.0 (6000.0)
언어 : 한국어
조명 설정 에셋으로 라이트매핑 설정
방향성 모드로 광원 방향 저장

감쇠로 광원의 페이드 거리 변경

현실 세계에서 광원은 거리가 멀어질수록 희미해지고, 어두운 광원은 밝은 광원보다 도달 범위가 짧습니다. ‘감쇠’라는 용어는 빛이 얼마나 빠르게 약해지는지를 나타냅니다. Unity의 기본 감쇠 조명 동작과 함께 커스텀 감쇠 설정을 사용할 수도 있습니다.

프로그레시브 라이트매퍼는 스크립트를 통해 구현할 수 있는 커스텀 감쇠 프리셋을 제공합니다. 이 기능의 작동 방식을 시각적으로 나타낸 표 아래 이미지를 참조하고, 이 기능을 사용하는 방법에 대한 예시는 이미지 아래의 코드 샘플을 참조하십시오.

자세한 내용은 FalloffType을 참조하십시오.

각 커스텀 감쇠 프리셋의 시각적 효과 예시
각 커스텀 감쇠 프리셋의 시각적 효과 예시

예제

참고: 아래 코드 예시는 베이크된 조명이나 혼합 조명을 사용할 때만 프로그레시브 라이트매퍼에서 작동합니다. 실시간 광원에 코드 예시를 사용하려면 인라이튼 실시간 전역 조명을 사용하십시오.

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Experimental.GlobalIllumination;
using UnityEngine.SceneManagement;
[ExecuteInEditMode]
public class ExtractFalloff : MonoBehaviour
{
    public void OnEnable()
    {
        Lightmapping.RequestLightsDelegate testDel = (Light[] requests, Unity.Collections.NativeArray<LightDataGI> lightsOutput) =>
        {
            DirectionalLight dLight = new DirectionalLight();
            PointLight point = new PointLight();
            SpotLight spot = new SpotLight();
            RectangleLight rect = new RectangleLight();
            DiscLight disc = new DiscLight();
            Cookie cookie = new Cookie();
            LightDataGI ld = new LightDataGI();
            
            for (int i = 0; i < requests.Length; i++)
            {
                Light l = requests[i];
                switch (l.type)
                {
                    case UnityEngine.LightType.Directional: LightmapperUtils.Extract(l, ref dLight); LightmapperUtils.Extract(l, out cookie); ld.Init(ref dLight, ref cookie); break;
                    case UnityEngine.LightType.Point: LightmapperUtils.Extract(l, ref point); LightmapperUtils.Extract(l, out cookie); ld.Init(ref point, ref cookie); break;
                    case UnityEngine.LightType.Spot: LightmapperUtils.Extract(l, ref spot); LightmapperUtils.Extract(l, out cookie); ld.Init(ref spot, ref cookie); break;
                    case UnityEngine.LightType.Rectangle: LightmapperUtils.Extract(l, ref rect); LightmapperUtils.Extract(l, out cookie); ld.Init(ref rect, ref cookie); break;
                    case UnityEngine.LightType.Disc: LightmapperUtils.Extract(l, ref disc); LightmapperUtils.Extract(l, out cookie); ld.Init(ref disc, ref cookie); break;
                    default: ld.InitNoBake(l.GetInstanceID()); break;
                }
                ld.cookieID = l.cookie?.GetInstanceID() ?? 0;
                ld.falloff = FalloffType.InverseSquared;
                lightsOutput[i] = ld;
            }
        };
        Lightmapping.SetDelegate(testDel);
    }
    void OnDisable()
    {
        Lightmapping.ResetDelegate();
    }
}

참고: 커스텀 감쇠가 작동하려면 위 예시의 모든 코드가 필요합니다. 하지만 ld.falloff = FalloffType.InverseSquared; 줄의 InverseSquared를 변경하여 프리셋을 사용할 수 있습니다.


2018.1에 프로그레시브 라이트매퍼 추가됨 NewIn20181

2018–03–28

조명 설정 에셋으로 라이트매핑 설정
방향성 모드로 광원 방향 저장