Lightmap jahitan jahitan
Penerangan Global Realtime menggunakan Enlighten

Custom fall-off

Di dunia nyata, cahaya memudar jarak jauh, dan lampu redup memiliki kisaran yang lebih rendah dari lampu terang. Istilah “fall-off” mengacu pada tingkat di mana cahaya memudar. Sepanjang perilaku pencahayaan jatuh default Unity, Anda juga dapat menggunakan pengaturan jatuh kustom.

Progresif LightmapperAlat dalam Unity yang bakes lightmap sesuai dengan pengaturan lampu dan geometri di tempat kejadian Anda. More info
Lihat di Glossary
menyediakan preset jatuh kustom, yang dapat Andaimplementasikan melalui script. Lihat gambar di bawah tabel untuk representasi visual tentang bagaimana pekerjaan ini, dan sampel kode di bawah gambar misalnya cara menggunakan fungsi ini.

Property Function
InverseSquared Menerapkan model drop-off jarak terbalik. Ini berarti intensitas cahaya menurun secara terbalik ke kotak jarak lokasi ke sumber cahaya. Untuk informasi lebih lanjut, lihat Wikipedia: Hukum Inverse-square. Pilihan ini adalah yang paling akurat secara fisik.
InverseSquaredNoRangeAttenuation Menerapkan model drop-off jarak terbalik tanpa atenuasi kisaran halus. Ini bekerja dengan cara yang sama seperti InverseSquared, tetapi sistem pencahayaan tidak memperhitungkan atenuasi untuk berbagai parameter lampu tusukan (yaitu, lampu titik dan lampu sorot).
Legacy Menerapkan model fall-off quadratic. Model ini mendasarkan atenuasi cahaya pada kisaran sumber cahaya. Kekurangan intensitas sebagai cahaya semakin jauh dari sumber, tetapi ada penurunan yang sangat tajam dan tidak alami dalam atenuasi, dan efek visual tidak realistis.
Linear Menerapkan model jatuh-off linier. Dalam model ini, atenuasi sangat proporsional dengan jarak dari cahaya, dan ketekunan jatuh pada tingkat tetap dari sumbernya.
An example of the visual effect of each custom fall-off preset
Contoh efek visual dari setiap preset jatuh kustom

Note: Contoh kode di bawah ini hanya bekerja dengan Lightmapper Progresif ketika Anda menggunakan lampu Baked atau Campuran. Untuk menggunakan contoh kode dengan realtime lightsKomponen ringan yang properti mode ditetapkan ke Realtime. Unity menghitung dan memperbarui pencahayaan Lampu Realtime setiap bingkai pada runtime. Tidak ada Lampu Realtime yang sudah ditentukan. More info
Lihat di Glossary
, gunakan Mencerminkan Penerangan Global Realtime.

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.Area: 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();
    }
}

Note: Semua kode dalam contoh di atas diperlukan untuk jatuh kustom untuk bekerja; Namun, Anda dapat mengubah InverseSquared dalam garis ld.falloff = FalloffType.InverseSquared; untuk menggunakan setiap preset dijelaskan di atas.


Progresif Lightmapper ditambahkan dalam Oktober 2018

2018–03–28 Sitemap

Lightmap jahitan jahitan
Penerangan Global Realtime menggunakan Enlighten