LCCManager: menedżer główny
Główny menedżer LCC Unity SDK, odpowiedzialny za zarządzanie wszystkimi instancjami Renderer, kamerami, globalnym stanem renderowania, a także operacjami edycji (przycinanie / podświetlanie / korekcja tonów), rzutowaniem dekala, przyciąganiem i zapytaniami interakcji (raycast / kolizja). W całej scenie powinna istnieć tylko jedna instancja LCCManager.
| Przestrzeń nazw | LCCCore |
| Klasa bazowa | MonoBehaviour |
LCCManager nie ma publicznych właściwości; cała funkcjonalność jest dostępna przez metody. Metody są pogrupowane według celu:
- Inicjalizacja i konfiguracja
- Sterowanie renderowaniem w czasie działania
- Oświetlenie i cienie
- Zarządzanie kamerami
- Przycinanie / Podświetlanie / Korekcja tonów
- Rzutowanie dekala
- Przyciąganie
- Raycasting i zapytania kolizji
- Efekty wizualne
- Zapytania o instancje
Inicjalizacja i konfiguracja
Poniższe metody służą do ukończenia wstępnej konfiguracji platformy, trybu renderowania, pojemności itd. przed załadowaniem danych. Większość metod musi być wywołana przed dowolnym Renderer.Load().
SetPlatformType
public void SetPlatformType(PlatformType _type)
Ustawia docelową platformę środowiska uruchomieniowego SDK, co wpływa na wewnętrzną strategię renderowania i alokację zasobów.
| Parametr | Typ | Opis |
|---|---|---|
_type | PlatformType | Platforma docelowa; zobacz PlatformType |
Uwagi:
- Musi być wykonane przed dowolnym wywołaniem
GetRender().
Przykład:
lccManager.SetPlatformType(PlatformType.PC);
SwitchRenderPass
public void SwitchRenderPass(ActiveRenderMode _mode)
Ustawia globalny tryb architektury renderowania. MultiRender używa współdzielonego bufora GPU i może renderować do 255 Rendererów jednocześnie; SingleRender pozwala SDK automatycznie wybrać ścieżkę renderowania na podstawie rozmiaru danych.
| Parametr | Typ | Opis |
|---|---|---|
_mode | ActiveRenderMode | Tryb renderowania; zobacz ActiveRenderMode |
Uwagi:
- Musi być wywołane przed dowolnym
Renderer.Load(). - Działa tylko na platformach PC / Mac; platformy mobilne / VR automatycznie przyjmują strategię adaptacyjną, a wywołanie tej metody jest odrzucane.
- Tryb
MultiRendernie obsługuje źródeł danych HTTP; dla danych HTTP użyjSingleRender. - Gdy dowolny Renderer ukończy
Load(), tryb jest zablokowany i nie można go ponownie przełączyć.
Przykład:
lccManager.SwitchRenderPass(ActiveRenderMode.MultiRender);
GetRender (Przeciążenie 1: powiąż Transform)
// Wartość zwracana: Renderer, null przy niepowodzeniu
public Renderer GetRender(Transform _transform)
Tworzy nową instancję renderowania i wiąże ją z określonym Transform. Po utworzeniu należy wywołać Renderer.Load(), aby załadować dane.
| Parametr | Typ | Opis |
|---|---|---|
_transform | Transform | Transform, do którego dołączona jest instancja renderowania |
Uwagi:
- Najpierw należy wywołać
SetPlatformType()iSetMainCamera(). - W trybie
MultiRenderobsługiwanych jest do 255 Rendererów.
Przykład:
var go = new GameObject("LCCScene");
var renderer = lccManager.GetRender(go.transform);
renderer.Load(filePath, null, () => Debug.Log("Załadowane"));
GetRender (Przeciążenie 2: utwórz GameObject automatycznie)
// Wartość zwracana: Renderer, null przy niepowodzeniu
public Renderer GetRender(out GameObject gameObject)
Automatycznie tworzy GameObject o nazwie LCCRenderer i wiąże instancję renderowania z jego Transform.
| Parametr | Typ | Opis |
|---|---|---|
gameObject | out GameObject | Zwraca automatycznie utworzony GameObject, null przy niepowodzeniu |
Przykład:
var renderer = lccManager.GetRender(out GameObject go);
renderer.Load(filePath, null, () => Debug.Log("Załadowane"));
SetMaxBufferSplat
public void SetMaxBufferSplat(int _count)
Ustawia maksymalną pojemność bufora GPU (liczbę Splatów). Alokowany raz i nie może być zmieniany dynamicznie.
| Parametr | Typ | Opis |
|---|---|---|
_count | int | Maksymalna liczba Splatów, jednostka: dziesięć tysięcy (wartość × 10000 = rzeczywista liczba) |
Uwagi:
- Musi być wywołane przed dowolnym
Renderer.Load()i najpierw należy wywołaćSetPlatformType(). - Większa pojemność oznacza wyższe zużycie pamięci wideo; ustaw ją w razie potrzeby.
- Limity platform: PC / Mac / PCVR 45 milionów, Android / iOS 6 milionów, VR (Pico / Quest / PicoSwan / AVP / OpenXR) 2 miliony.
- Domyślnie: PC / Mac 30 milionów, Android / iOS 3 miliony, VR 1 milion.
Przykład:
lccManager.SetMaxBufferSplat(3000); // 30 milionów punktów
SetFullRenderSplat
public void SetFullRenderSplat(int _count)
Ustawia górny próg pełnego renderowania na PC / Mac. Gdy rozmiar danych jest poniżej tej wartości, używana jest ścieżka pełnego renderowania; w przeciwnym razie używana jest ścieżka renderowania fragmentami.
| Parametr | Typ | Opis |
|---|---|---|
_count | int | Górny limit pełnego renderowania, jednostka: dziesięć tysięcy, zakres [100, 4500] |
Uwagi:
- Obsługiwane tylko na platformach PC / Mac / PCVR.
- Musi być wywołane przed dowolnym
Renderer.Load()i najpierw należy wywołaćSetPlatformType().
Przykład:
lccManager.SetFullRenderSplat(2500); // 25 milionów punktów
SetMaxRenderSplats
public void SetMaxRenderSplats(int _count)
Ustawia maksymalną liczbę Splatów renderowanych na klatkę w czasie działania. Można wywołać dynamicznie po Load().
| Parametr | Typ | Opis |
|---|---|---|
_count | int | Maksymalna liczba Splatów renderowanych w czasie działania, jednostka: dziesięć tysięcy |
Uwagi:
- Można dostosowywać dynamicznie w czasie działania.
- Nie może przekraczać pojemności ustawionej przez
SetMaxBufferSplat(); po przekroczeniu jest automatycznie przycinane. - Brak efektu w trybie pełnego renderowania.
Przykład:
lccManager.SetMaxRenderSplats(2500); // 25 milionów punktów
GetLoadRatio
// Wartość zwracana: float, [0,1] bieżący postęp ładowania danych
public float GetLoadRatio()
Zapytuje postęp ładowania bieżących danych sceny.
Uwagi:
- Zawsze zwraca
1.0w trybie pełnego renderowania. - W trybie renderowania fragmentami zwraca stosunek załadowanych węzłów w bieżącym widoku; wartość zmienia się w czasie rzeczywistym wraz z ruchem kamery i nie jest monotonicznie rosnącym ogólnym postępem.
Przykład:
float ratio = lccManager.GetLoadRatio();
progressBar.value = ratio;
SetSelectionMode
public void SetSelectionMode(SelectionMode mode)
Ustawia strategię wyboru węzłów.
| Parametr | Typ | Opis |
|---|---|---|
mode | SelectionMode | Strategia wyboru; zobacz SelectionMode |
Uwagi:
Auto(domyślnie): decydowane automatycznie na podstawie ogólnego prostokąta ograniczającego sceny; gdy maksymalny wymiar sceny przekracza około 380 metrów, automatycznie uaktualnia się doLarge.Normal: odpowiednie dla małych i średnich scen.Large: odpowiednie dla bardzo dużych scen (ponad 1000 metrów).- Działa natychmiast po przełączeniu.
Przykład:
lccManager.SetSelectionMode(SelectionMode.Auto);
Sterowanie renderowaniem w czasie działania
Poniższe metody można wywoływać dynamicznie w czasie działania, aby dostosować precyzję renderowania, efekty wyświetlania i przełączniki renderowania.
SetDetailLevel
public void SetDetailLevel(float sse)
Ustawia poziom precyzji renderowania. Większa wartość oznacza drobniejsze renderowanie i wyższe zużycie wydajności.
| Parametr | Typ | Opis |
|---|---|---|
sse | float | Poziom precyzji, zakres [1, 100], automatycznie przycinany po przekroczeniu |
Uwagi:
- Używa mapowania logarytmicznego: zmiany są wrażliwe w zakresie niskich wartości i płynne w zakresie wysokich wartości.
- Można dostosowywać dynamicznie w czasie działania.
- Działa tylko w trybie wyboru
Normal.
Przykład:
lccManager.SetDetailLevel(50f); // Średnia precyzja
SetStartLod
public void SetStartLod(int lod)
Ustawia punkt początkowy rozwijania LOD (indeksowany od 0). 0 jest najdrobniejszy, a większa liczba oznacza grubszy poziom.
| Parametr | Typ | Opis |
|---|---|---|
lod | int | Początkowy poziom LOD, zakres [0, 10], automatycznie przycinany po przekroczeniu |
Uwagi:
- Rzeczywisty efektywny górny limit jest ograniczony całkowitą liczbą poziomów danych.
Przykład:
lccManager.SetStartLod(0);
SetAutoFov
public void SetAutoFov(bool _auto)
Ustawia, czy automatycznie zarządzać FOV renderowania. Gdy włączone (domyślnie), SDK blokuje bazową ogniskową pikselową przy pierwszej klatce, a następnie co klatkę odwraca pionowy FOV z bieżącej wysokości widoku i zapisuje go z powrotem do Camera.fieldOfView; gdy wyłączone, fieldOfView jest kontrolowane zewnętrznie (SetFOV() lub bezpośrednia zmiana kamery).
| Parametr | Typ | Opis |
|---|---|---|
_auto | bool | Czy używać automatycznego FOV |
Uwagi:
- Domyślnie włączone.
- Gdy włączone, stale przepisuje
Camera.fieldOfViewgłównej kamery, więc wywołanieSetFOV()jest ignorowane. - Gdy wyłączone, należy ręcznie wywołać
SetFOV()w celu ustawienia parametrów.
Przykład:
lccManager.SetAutoFov(true);
SetFOV
public void SetFOV(int _width, int _height, float _verticalFov, float _aspect)
Ręcznie ustawia pionowy FOV (w stopniach). Bezpośrednio przepisuje Camera.fieldOfView głównej kamery, tak aby FOV w Inspektorze odpowiadało FOV faktycznie używanemu do renderowania. _width / _height / _aspect to parametry podpisu starszego typu; rzeczywista projekcja używa własnego widoku głównej kamery (użyj SetRecordMode() dla wyjścia pozaekranowego o innym rozmiarze / FOV).
| Parametr | Typ | Opis |
|---|---|---|
_width | int | Szerokość w pikselach |
_height | int | Wysokość w pikselach |
_verticalFov | float | Pionowy FOV (stopnie) |
_aspect | float | Współczynnik proporcji |
Uwagi:
- Najpierw należy wywołać
SetAutoFov(false), w przeciwnym razie per-klatkowa inwersja auto-FOV nadpisuje wartość ręczną. - Pionowy FOV jest przycinany do
[1, 179]stopni. - Wywołanie na platformach VR / PCVR, podczas nagrywania lub przy kamerze ortograficznej jest odrzucane (ostrzega i zwraca).
Przykład:
lccManager.SetFOV(1920, 1080, 60f, 1.778f);
SetRenderEnable
public void SetRenderEnable(Renderer _renderer, bool _isEnable)
Steruje przełącznikiem renderowania określonego Renderera w czasie działania. Gdy wyłączony, nie uczestniczy w przechodzeniu i rysowaniu.
| Parametr | Typ | Opis |
|---|---|---|
_renderer | Renderer | Docelowa instancja renderowania |
_isEnable | bool | Czy włączyć renderowanie |
Przykład:
lccManager.SetRenderEnable(renderer, false); // Ukryj
SetEnvironment
public void SetEnvironment(Renderer _renderer, bool _isRender)
Steruje renderowaniem danych środowiskowych określonego Renderera. Dane środowiskowe to niskoprecyzyjna chmura punktów tła używana do wypełniania odległych widoków.
| Parametr | Typ | Opis |
|---|---|---|
_renderer | Renderer | Docelowa instancja renderowania |
_isRender | bool | Czy renderować dane środowiskowe |
Uwagi:
- Dane muszą zawierać węzły środowiskowe.
Przykład:
lccManager.SetEnvironment(renderer, true);
SetZDepth
public void SetZDepth(bool zwrite)
Przełącza zapis głębi Z i odpowiednio dostosowuje kolejkę renderowania.
| Parametr | Typ | Opis |
|---|---|---|
zwrite | bool | Czy włączyć zapis głębi Z |
Przykład:
lccManager.SetZDepth(true);
SetAlpha
public void SetAlpha(float alpha)
Ustawia globalną nieprzezroczystość.
| Parametr | Typ | Opis |
|---|---|---|
alpha | float | Globalna nieprzezroczystość, zakres [0, 1], automatycznie przycinana po przekroczeniu |
Przykład:
lccManager.SetAlpha(0.8f);
SetLightIntensity
public void SetLightIntensity(float intensity)
Ustawia globalne natężenie światła.
| Parametr | Typ | Opis |
|---|---|---|
intensity | float | Natężenie światła, zakres [0, 1], automatycznie przycinane po przekroczeniu |
Przykład:
lccManager.SetLightIntensity(0.7f);
SetLowPassFilter
public void SetLowPassFilter(float _filter)
Ustawia siłę globalnego filtra dolnoprzepustowego, używanego do tłumienia aliasingu / szumu wysokoczęstotliwościowego.
| Parametr | Typ | Opis |
|---|---|---|
_filter | float | Siła filtra dolnoprzepustowego, zakres [0, 1], automatycznie przycinana po przekroczeniu |
Przykład:
lccManager.SetLowPassFilter(0.3f);
SetLockFPS
public void SetLockFPS(bool _isLock)
Przełącza blokowanie liczby klatek (statyczne / dynamiczne przełączanie liczby klatek).
| Parametr | Typ | Opis |
|---|---|---|
_isLock | bool | Czy zablokować liczbę klatek |
Przykład:
lccManager.SetLockFPS(true);
SetRenderLayer
public void SetRenderLayer(int _layer)
Ustawia warstwę Unity używaną przez renderowanie LCC, do kontroli widoczności CullingMask kamery.
| Parametr | Typ | Opis |
|---|---|---|
_layer | int | Warstwa renderowania Unity, zakres [0, 31] |
Uwagi:
- Można dostosowywać dynamicznie w czasie działania.
Przykład:
lccManager.SetRenderLayer(8); // Użyj warstwy 8
SetForceRefresh
public void SetForceRefresh()
Wymusza odświeżenie renderowania. Czyści wewnętrzną pamięć podręczną informacji o kamerze, aby frustum, LOD i inne parametry zostały ponownie obliczone w następnej klatce. Odpowiednie dla przypadków, w których zewnętrznie zmienione parametry kamery muszą zadziałać natychmiast.
Przykład:
lccManager.SetForceRefresh();
SetMipMode
public void SetMipMode(MipMode _mipMode)
Przełącza tryb renderowania Mip. Tryb Mip używa próbkowania mipmap (domyślnie), a tryb Non_Mip wyłącza mipmapę.
| Parametr | Typ | Opis |
|---|---|---|
_mipMode | MipMode | Tryb docelowy; zobacz MipMode |
Uwagi:
- Zwraca natychmiast, jeśli bieżący tryb jest taki sam jak przekazany.
- Działa natychmiast po przełączeniu.
Przykład:
lccManager.SetMipMode(MipMode.Non_Mip);
SetGraphicsAPI
public void SetGraphicsAPI(GraphicsDeviceType type)
Ustawia typ API graficznego. HDR jest włączone w trybie DX11.
| Parametr | Typ | Opis |
|---|---|---|
type | GraphicsDeviceType | Typ API graficznego (wbudowany typ wyliczeniowy Unity) |
Przykład:
lccManager.SetGraphicsAPI(GraphicsDeviceType.Direct3D11);
SetDebugMode
public void SetDebugMode(bool debug)
Przełącza tryb debugowania.
| Parametr | Typ | Opis |
|---|---|---|
debug | bool | Czy włączyć tryb debugowania |
Uwagi:
- Obsługiwane tylko na platformach PC / Mac.
Przykład:
lccManager.SetDebugMode(true);
SetEditorMode
public void SetEditorMode(bool _isEditor)
Przełącza tryb edytora.
| Parametr | Typ | Opis |
|---|---|---|
_isEditor | bool | Czy włączyć tryb edytora |
Uwagi:
- Obsługiwane tylko na platformach PC / Mac.
Przykład:
lccManager.SetEditorMode(true);
SetAECMode
public void SetAECMode(bool _aec)
Przełącza tryb AEC (Architecture / Engineering / Construction).
| Parametr | Typ | Opis |
|---|---|---|
_aec | bool | Czy włączyć tryb AEC |
Uwagi:
- Obsługiwane tylko na platformach PC / Mac.
Przykład:
lccManager.SetAECMode(true);
SetSemantic
// Wartość zwracana: bool, false=nieprawidłowy parametr
public bool SetSemantic(bool enable, Vector4[] color = null)
Przełącza tryb renderowania semantycznego. Po włączeniu można przekazać tablicę kolorów definiującą kolor wyświetlania każdej kategorii semantycznej.
| Parametr | Typ | Opis |
|---|---|---|
enable | bool | Czy włączyć renderowanie semantyczne |
color | Vector4[] | Tablica kolorów semantycznych, długość musi wynosić 100, w przeciwnym razie zwracane jest false; przekaż null, aby użyć kolorów domyślnych |
Przykład:
Vector4[] colors = new Vector4[100];
colors[0] = new Vector4(1, 0, 0, 1); // Kategoria 0 = czerwony
lccManager.SetSemantic(true, colors);
SwitchRenderMode
public void SwitchRenderMode(RenderMode mode, Texture2D tex = null)
Przełącza między renderowaniem chmury punktów a renderowaniem 3DGS. W trybie chmury punktów można dostarczyć teksturę rampy kolorów wysokości.
| Parametr | Typ | Opis |
|---|---|---|
mode | RenderMode | Tryb renderowania; zobacz RenderMode |
tex | Texture2D | Tekstura rampy kolorów wysokości (opcjonalna) |
Uwagi:
- Obsługiwane tylko na platformach PC / Mac.
Przykład:
lccManager.SwitchRenderMode(RenderMode.PointCloud, elevationTex);
SetRecordMode
public void SetRecordMode(bool isRecord, Vector2 renderSize, float verticalFov)
Ustawia tryb nagrywania. W trybie nagrywania używana jest stała rozdzielczość i FOV, odpowiednie do nagrywania wideo HD.
| Parametr | Typ | Opis |
|---|---|---|
isRecord | bool | Czy używać trybu nagrywania |
renderSize | Vector2 | Rozdzielczość nagrywania |
verticalFov | float | Pionowy FOV (stopnie) |
Uwagi:
- Obsługiwane tylko na platformach PC / Mac.
- W trybie nagrywania ogniskowa kamery jest stała i nie zmienia się wraz z komponentem Camera.
- Po nagrywaniu wywołaj
SetRecordMode(false, ...), aby przywrócić.
Przykład:
lccManager.SetRecordMode(true, new Vector2(3840, 2160), 60f);
SetVRPerformance
public void SetVRPerformance(bool _enabled)
Ustawia tryb sortowania wysokowydajnego VR. true używa sortowania radix GPU (GpuSorter), a false przełącza z powrotem na CPU / BitonicSorter.
| Parametr | Typ | Opis |
|---|---|---|
_enabled | bool | Czy włączyć wysokowydajne sortowanie GPU |
Uwagi:
- Dotyczy tylko ścieżki sortowania gogli VR (Pico / Quest / PicoSwan / OpenXR); domyślnie włączone.
- Gdy nie ma urządzenia obliczeniowego (takiego jak Mali), nadrzędny element sortowania automatycznie przełącza z powrotem na CPU, niezależnie od tego przełącznika.
Przykład:
lccManager.SetVRPerformance(true);
Oświetlenie i cienie
Poniższe metody sterują odbieraniem cieni i niestandardowymi światłami punktowymi na powierzchniach 3DGS. Metody związane z cieniami muszą być wywołane po zakończeniu ładowania sceny LCC.
SetShadowReceive
public void SetShadowReceive(bool enable)
Przełącza odbieranie cieni przez chmurę punktów. Po włączeniu cienie z obiektów siatki w scenie mogą być rzucane na powierzchnie chmury punktów 3DGS.
| Parametr | Typ | Opis |
|---|---|---|
enable | bool | Czy odbierać cienie |
Uwagi:
- Domyślnie wyłączone.
- Wymaga obiektów siatki rzucających cienie i Światła kierunkowego w scenie.
Przykład:
lccManager.SetShadowReceive(true);
SetShadowColor
public void SetShadowColor(Color color)
Ustawia kolor obszaru cienia.
| Parametr | Typ | Opis |
|---|---|---|
color | Color | Kolor cienia (RGBA) |
Uwagi:
- Domyślnie
(0.3, 0.3, 0.3, 1). - Najpierw należy włączyć
SetShadowReceive(true).
Przykład:
lccManager.SetShadowColor(new Color(0.3f, 0.3f, 0.3f, 1f));
SetShadowStrength
public void SetShadowStrength(float strength)
Ustawia siłę cienia. 0 to brak cienia, 1 to najsilniejszy cień.
| Parametr | Typ | Opis |
|---|---|---|
strength | float | Siła cienia, zakres [0, 1], automatycznie przycinana po przekroczeniu |
Uwagi:
- Domyślnie
1.0. - Najpierw należy włączyć
SetShadowReceive(true).
Przykład:
lccManager.SetShadowStrength(0.8f);
SetLights
// Wartość zwracana: int, 0=sukces, -1=przekroczono limit maksymalnej liczby
public int SetLights(List<PointLightData> lights)
Ustawia niestandardową listę świateł punktowych. Przekazanie null lub pustej listy wyłącza niestandardowe oświetlenie.
| Parametr | Typ | Opis |
|---|---|---|
lights | List<PointLightData> | Lista świateł punktowych; zobacz PointLightData |
Uwagi:
PointLightData.lightType:0to światło punktowe (direction / spotAngle ignorowane),1to reflektor (direction / spotAngle wymagane).- Przekazanie
nulllub pustej listy wyłącza niestandardowe oświetlenie.
Przykład:
using Unity.Mathematics; // float3
var lights = new List<PointLightData>();
lights.Add(new PointLightData {
position = new float3(0, 5, 0),
lightType = 0, // 0=światło punktowe, 1=reflektor
color = new float3(1, 1, 1),
intensity = 2f,
range = 10f
});
lccManager.SetLights(lights);
Zarządzanie kamerami
SetMainCamera
public void SetMainCamera(Camera _cam)
Ustawia główną kamerę renderującą. LCC używa tej kamery do odrzucania frustum, wyboru LOD, sortowania i innych operacji.
| Parametr | Typ | Opis |
|---|---|---|
_cam | Camera | Główna kamera renderująca; przekaż null, aby wyczyścić |
Uwagi:
- Musi być ustawiona przed
Renderer.Load(). - Obsługiwane tylko na platformach PC / Mac.
Przykład:
lccManager.SetMainCamera(Camera.main);
AddCamera
public void AddCamera(Camera _cam)
Dodaje kamerę pomocniczą. Kamera pomocnicza uczestniczy w renderowaniu, ale nie wpływa na wybór LOD.
| Parametr | Typ | Opis |
|---|---|---|
_cam | Camera | Kamera pomocnicza |
Uwagi:
- Obsługiwane tylko na platformach PC / Mac.
- Kamera główna nie może być dodana jako kamera pomocnicza.
Przykład:
lccManager.AddCamera(secondCamera);
RemoveCamera
public void RemoveCamera(Camera _cam)
Usuwa dodaną kamerę pomocniczą.
| Parametr | Typ | Opis |
|---|---|---|
_cam | Camera | Kamera pomocnicza do usunięcia |
Uwagi:
- Obsługiwane tylko na platformach PC / Mac.
Przykład:
lccManager.RemoveCamera(secondCamera);
Przycinanie / Podświetlanie / Korekcja tonów
Przycinanie, podświetlanie i korekcja tonów to trzy rodzaje operacji edycji, z których wszystkie obsługują definiowanie dotkniętego regionu przez teksturę 2D, geometrię 3D lub mieszankę obu. Zobacz Data2D, Data3D, DataMix i ToneMix.
SetClip (przycinanie płaszczyzną)
// Wartość zwracana: int, 0=sukces
public int SetClip(Vector3 planePoint, Vector3 planeNormal, bool inside = true)
Przycina chmurę punktów nieskończoną płaszczyzną, zachowując punkty po stronie normalnej lub przeciwnej.
| Parametr | Typ | Opis |
|---|---|---|
planePoint | Vector3 | Punkt na płaszczyźnie |
planeNormal | Vector3 | Normalna płaszczyzny |
inside | bool | true zachowuje stronę normalną |
Uwagi:
- Wzajemnie wykluczające się z innymi trybami przycinania.
Przykład:
lccManager.SetClip(Vector3.zero, Vector3.up, true); // Zachowaj nad podłożem
SetClip (przycinanie teksturą 2D)
// Wartość zwracana: int, 0=sukces, 1=pusta lista, 2=przekroczono maksymalną liczbę
public int SetClip(List<Data2D> _2Ds)
Przycina chmurę punktów za pomocą rzutowanej tekstury maski 2D.
| Parametr | Typ | Opis |
|---|---|---|
_2Ds | List<Data2D> | Lista zaznaczeń teksturą 2D |
Przykład:
var clips = new List<Data2D>();
clips.Add(new Data2D {
texture = maskTex,
mv = modelViewMatrix,
mvp = mvpMatrix,
mode = SelectMode.normal
});
lccManager.SetClip(clips);
SetClip (przycinanie geometrią 3D)
// Wartość zwracana: int, 0=sukces, 1=pusta lista, 2=przekroczono maksymalną liczbę, 3=zero prawidłowej geometrii
public int SetClip(List<Data3D> _3Ds)
Przycina chmurę punktów geometrią 3D, obsługując operacje boolowskie do łączenia wielu geometrii.
| Parametr | Typ | Opis |
|---|---|---|
_3Ds | List<Data3D> | Lista geometrii 3D |
Uwagi:
- Wymagana jest co najmniej jedna geometria z
operation == normal.
Przykład:
var clips = new List<Data3D>();
clips.Add(new Data3D {
type = ShapeType.box,
invMat = boxInverseMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetClip(clips);
SetClip (przycinanie w trybie mieszanym)
// Wartość zwracana: int, 0=sukces, 1=pusta lista, 2=przekroczono maksymalną liczbę
public int SetClip(List<DataMix> mix)
Definiuje region przycinania mieszanką tekstur 2D i geometrii 3D. Każdy wpis określa swój typ przez editType.
| Parametr | Typ | Opis |
|---|---|---|
mix | List<DataMix> | Mieszana lista zaznaczeń (2D + 3D) |
Przykład:
var mix = new List<DataMix>();
mix.Add(new DataMix {
editType = EditType.Edit3D,
type = ShapeType.box,
invMat = matrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetClip(mix);
QuitClipMode
public void QuitClipMode()
Wychodzi z trybu przycinania i przywraca pełne wyświetlanie chmury punktów.
Przykład:
lccManager.QuitClipMode();
SetHighlight (podświetlanie teksturą 2D)
// Wartość zwracana: int, 0=sukces, 1=pusta lista, 2=przekroczono maksymalną liczbę
public int SetHighlight(List<Data2D> _2Ds)
Podświetla chmurę punktów za pomocą rzutowanej tekstury maski 2D; chmura punktów poza podświetlonym regionem jest przyciemniana.
| Parametr | Typ | Opis |
|---|---|---|
_2Ds | List<Data2D> | Lista zaznaczeń teksturą 2D |
Uwagi:
- Wzajemnie wykluczające się z podświetlaniem 3D i podświetlaniem mieszanym.
Przykład:
var highlights = new List<Data2D>();
highlights.Add(new Data2D {
texture = maskTex,
mv = modelViewMatrix,
mvp = mvpMatrix,
mode = SelectMode.normal
});
lccManager.SetHighlight(highlights);
SetHighlight (podświetlanie geometrią 3D)
// Wartość zwracana: int, 0=sukces, 1=pusta lista, 2=przekroczono maksymalną liczbę, 3=zero prawidłowej geometrii
public int SetHighlight(List<Data3D> _3Ds)
Definiuje podświetlony region geometrią 3D, obsługując operacje boolowskie do łączenia.
| Parametr | Typ | Opis |
|---|---|---|
_3Ds | List<Data3D> | Lista geometrii 3D |
Uwagi:
- Wymagana jest co najmniej jedna geometria z
operation == normal.
Przykład:
var highlights = new List<Data3D>();
highlights.Add(new Data3D {
type = ShapeType.box,
invMat = boxInverseMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetHighlight(highlights);
SetHighlight (podświetlanie w trybie mieszanym)
// Wartość zwracana: int, 0=sukces, 1=pusta lista, 2=przekroczono maksymalną liczbę
public int SetHighlight(List<DataMix> mix)
Definiuje podświetlony region mieszanką tekstur 2D i geometrii 3D.
| Parametr | Typ | Opis |
|---|---|---|
mix | List<DataMix> | Mieszana lista zaznaczeń |
Przykład:
var mix = new List<DataMix>();
mix.Add(new DataMix {
editType = EditType.Edit3D,
type = ShapeType.box,
invMat = matrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetHighlight(mix);
QuitHighlightMode
public void QuitHighlightMode()
Wychodzi z trybu podświetlania i przywraca normalne wyświetlanie chmury punktów.
Przykład:
lccManager.QuitHighlightMode();
SetTone
// Wartość zwracana: int, 0=sukces, 1=pusta lista, 2=przekroczono maksymalną liczbę
public int SetTone(List<ToneMix> mix)
Stosuje korekcję tonów do zaznaczonego regionu, obsługując jasność, nasycenie, kontrast i filtry LUT. Region tonów można zdefiniować teksturą 2D lub geometrią 3D.
| Parametr | Typ | Opis |
|---|---|---|
mix | List<ToneMix> | Lista mieszanki tonów |
Uwagi:
brightness/saturation/contrastdomyślnie1.0.lutidto indeks filtra LUT;0oznacza nieużywany.
Przykład:
var tones = new List<ToneMix>();
tones.Add(new ToneMix {
editType = EditType.Edit3D,
type = ShapeType.box,
invMat = boxMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal,
brightness = 1.2f,
saturation = 1.0f,
contrast = 1.1f,
lutid = 0
});
lccManager.SetTone(tones);
QuitToneMode
public void QuitToneMode()
Wychodzi z trybu tonów i przywraca oryginalny kolor chmury punktów.
Przykład:
lccManager.QuitToneMode();
Rzutowanie dekala
Rzutowanie dekala rzutuje teksturę na powierzchnie 3DGS wzdłuż kierunku projektora. Dekal to stały w świecie stan globalny, spójny dla wszystkich kamer. Typowy przepływ to: włącz dekal → ustaw teksturę → ustaw pozę projektora. Poniższe metody są obsługiwane tylko na platformach PC / Mac.
SetDecalEnabled
public void SetDecalEnabled(bool enable)
Przełącza rzutowanie dekala. Należy osobno wywołać SetDecalTexture() i SetDecalProjection(), aby ustawić zawartość i pozę projektora.
| Parametr | Typ | Opis |
|---|---|---|
enable | bool | Czy włączyć rzutowanie dekala |
Uwagi:
- Wyłączenie nie czyści buforowanej tekstury / parametrów.
Przykład:
lccManager.SetDecalEnabled(true);
lccManager.SetDecalTexture(decalTex);
lccManager.SetDecalProjection(projectorPos, projectorRot, 60f, 1.778f, 0.1f, 20f);
SetDecalTexture
public void SetDecalTexture(Texture2D tex)
Ustawia teksturę dekala. RGB to kolor, a A to własna maska dekala, która jest mnożona z globalną nieprzezroczystością i zanikaniem krawędzi.
| Parametr | Typ | Opis |
|---|---|---|
tex | Texture2D | Tekstura dekala; przekazanie null czyści odniesienie |
Przykład:
lccManager.SetDecalTexture(logoTex);
SetDecalProjection
public void SetDecalProjection(Vector3 pos, Quaternion rot, float fov, float aspect, float near, float far)
Ustawia pozę i parametry perspektywy projektora dekala. Projektor rzutuje wzdłuż swojego kierunku do przodu (+Z), a punkty wewnątrz frustum są pokrywane przez dekal.
| Parametr | Typ | Opis |
|---|---|---|
pos | Vector3 | Pozycja projektora w świecie |
rot | Quaternion | Orientacja projektora |
fov | float | Pionowy FOV (stopnie), przycinany do [1, 179] |
aspect | float | Współczynnik proporcji, minimum 1e-4 |
near | float | Bliska płaszczyzna przycinania, minimum 1e-3 |
far | float | Daleka płaszczyzna przycinania, minimum near + 1e-3 |
Przykład:
lccManager.SetDecalProjection(new Vector3(0, 10, 0), Quaternion.Euler(90, 0, 0), 60f, 1.778f, 0.1f, 20f);
SetDecalOpacity
public void SetDecalOpacity(float opacity)
Ustawia ogólną nieprzezroczystość dekala.
| Parametr | Typ | Opis |
|---|---|---|
opacity | float | Ogólna nieprzezroczystość dekala, zakres [0, 1], automatycznie przycinana po przekroczeniu |
Przykład:
lccManager.SetDecalOpacity(0.8f);
SetDecalEdgeFade
public void SetDecalEdgeFade(float edgeFade)
Ustawia szerokość zanikania krawędzi dekala. 0 to twarda krawędź, a większa wartość sprawia, że przejście krawędzi jest miększe.
| Parametr | Typ | Opis |
|---|---|---|
edgeFade | float | Szerokość zanikania krawędzi (współczynnik w przestrzeni UV), zakres [0, 0.5), automatycznie przycinana po przekroczeniu |
Przykład:
lccManager.SetDecalEdgeFade(0.1f);
SetDecalOcclusion
public void SetDecalOcclusion(bool enable)
Przełącza odcinanie okluzji dekala (oparte na mapie głębi projektora). Po włączeniu zasłonięte powierzchnie nie są pokrywane przez dekal.
| Parametr | Typ | Opis |
|---|---|---|
enable | bool | Czy włączyć odcinanie okluzji dekala |
Uwagi:
- Tylko platforma PC / Mac i tylko potok URP.
- Przed włączeniem powinno być wywołane
SetDecalProjection(), aby ustawić projektor. - Zależy od parametrów jakości skonfigurowanych przez
SetDecalOcclusionSettings().
Przykład:
lccManager.SetDecalOcclusion(true);
SetDecalOcclusionSettings
public void SetDecalOcclusionSettings(DecalOcclusionSettings settings)
Ustawia wszystkie parametry jakości odcinania okluzji dekala naraz. Zobacz DecalOcclusionSettings.
| Parametr | Typ | Opis |
|---|---|---|
settings | DecalOcclusionSettings | Parametry jakości odcinania okluzji |
Uwagi:
- Można dostosowywać w dowolnym momencie; parametry działają natychmiast.
Przykład:
lccManager.SetDecalOcclusionSettings(DecalOcclusionSettings.Default);
lccManager.SetDecalOcclusionSettings(new DecalOcclusionSettings {
opacityCutoff = 0.1f,
depthBias = 0.05f,
footprintMaxPx = 2,
resolution = 1024
});
Przyciąganie
Funkcja przyciągania automatycznie wyszukuje pobliskie krawędzie / narożniki do wyrównania podczas raycastingu i jest powszechnie używana do precyzyjnej interakcji, takiej jak pomiary i adnotacje. Poniższe metody są obsługiwane tylko na platformach PC / Mac.
SetSnapEnabled
public void SetSnapEnabled(bool enable)
Przełącza funkcję przyciągania. Po włączeniu RaycastWithSnap() automatycznie wyszukuje pobliskie krawędzie / narożniki do przyciągnięcia.
| Parametr | Typ | Opis |
|---|---|---|
enable | bool | Czy włączyć przyciąganie |
Uwagi:
- Domyślnie wyłączone.
- Brak efektu na mobilnych / VR i wyświetlane jest ostrzeżenie.
Przykład:
lccManager.SetSnapEnabled(true);
SetSnapRadius
public void SetSnapRadius(float pixels)
Ustawia promień wyszukiwania przyciągania. Wyszukuje najbliższą krawędź / narożnik w tym zakresie pikseli.
| Parametr | Typ | Opis |
|---|---|---|
pixels | float | Promień wyszukiwania przyciągania (piksele) |
Uwagi:
- Domyślnie 20 pikseli.
- Większa wartość oznacza szerszy zakres wyszukiwania, ale może przyciągać do niezamierzonych celów.
Przykład:
lccManager.SetSnapRadius(30f);
SetEdgeThreshold
public void SetEdgeThreshold(float threshold)
Ustawia próg wykrywania krawędzi. Mniejsza wartość wykrywa więcej krawędzi.
| Parametr | Typ | Opis |
|---|---|---|
threshold | float | Próg wykrywania krawędzi, zalecany zakres [0.1, 0.8] |
Uwagi:
- Domyślnie
0.3. - Zbyt mała wartość daje dużą ilość zaszumionych krawędzi.
Przykład:
lccManager.SetEdgeThreshold(0.2f);
SetSnapPreviewEnabled
public void SetSnapPreviewEnabled(bool enable)
Przełącza funkcję podglądu przyciągania. Po włączeniu wskaźnik najbliższego celu przyciągania jest wyświetlany w czasie rzeczywistym podczas ruchu myszy.
| Parametr | Typ | Opis |
|---|---|---|
enable | bool | Czy włączyć podgląd przyciągania |
Uwagi:
- Najpierw należy wywołać
SetSnapEnabled(true). - Podgląd stale zużywa zasoby GPU (wykrywanie co klatkę).
Przykład:
lccManager.SetSnapPreviewEnabled(true);
UpdateSnapPreview
public void UpdateSnapPreview(Vector2 mousePos, Camera cam)
Aktualizuje stan podglądu przyciągania. Wywoływane podczas ruchu myszy, aby zaktualizować pozycję wskaźnika podglądu.
| Parametr | Typ | Opis |
|---|---|---|
mousePos | Vector2 | Bieżące współrzędne ekranowe myszy |
cam | Camera | Kamera |
Uwagi:
- Najpierw należy wywołać
SetSnapPreviewEnabled(true). - Zaleca się wywoływanie w sposób ciągły w
Update.
Przykład:
void Update()
{
lccManager.UpdateSnapPreview(Input.mousePosition, Camera.main);
}
GetSnapPreviewState
// Wartość zwracana: SnapPreviewState
public SnapPreviewState GetSnapPreviewState()
Pobiera bieżący stan podglądu przyciągania, w tym informację o tym, czy istnieje cel przyciągania, typ celu, pozycję ekranową celu i odległość w pikselach do myszy. Zobacz SnapPreviewState.
Uwagi:
- Najpierw należy wywołać
SetSnapPreviewEnabled(true)iUpdateSnapPreview(). - Zwraca
default(SnapPreviewState), gdy nie ma celu. screenPosjest we współrzędnych ekranu, a nie współrzędnych świata; użyjRaycastWithSnap(), aby uzyskaćHitResult.hitPosdla współrzędnych świata.
Przykład:
var state = lccManager.GetSnapPreviewState();
if (state.hasTarget)
{
// state.snapType: Narożnik / Krawędź
// state.screenPos: współrzędne ekranowe celu przyciągania
// state.distanceToMouse: odległość w pikselach
}
Raycasting i zapytania kolizji
Raycasting służy do wybierania punktów na powierzchniach 3DGS, a zapytania kolizji do fizycznej interakcji między postaciami / obiektami a chmurą punktów. Wynik trafienia jest zwracany przez HitResult.
Uwaga:
Pole współrzędnych świata punktu trafienia w
HitResultnazywa sięhitPos(nieposition).
Raycast (współrzędne ekranu)
// Wartość zwracana: bool, true=trafienie
public bool Raycast(Vector3 mousePos, out HitResult _finalResult)
Wystrzeliwuje promień ze współrzędnych ekranu, aby wykryć trafienia chmury punktów. Promień jest generowany przy użyciu głównej kamery ustawionej przez SetMainCamera().
| Parametr | Typ | Opis |
|---|---|---|
mousePos | Vector3 | Współrzędne ekranu |
_finalResult | out HitResult | Wynik trafienia |
Uwagi:
- Najpierw należy wywołać
SetMainCamera(), aby ustawić główną kamerę. - Zwraca punkt trafienia najbliższy kamerze.
- Na precyzję wpływa
SetRaycastDelta(), a maksymalna odległość jest kontrolowana przezSetMaxRaycastDistance().
Przykład:
if (lccManager.Raycast(Input.mousePosition, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
Raycast (Ray)
// Wartość zwracana: bool, true=trafienie
public bool Raycast(Ray _ray, out HitResult _finalResult)
Wykonuje raycasting własnym Ray, iterując po wszystkich aktywnych Rendererach i zwracając najbliższe trafienie.
| Parametr | Typ | Opis |
|---|---|---|
_ray | Ray | Promień |
_finalResult | out HitResult | Wynik trafienia |
Przykład:
Ray ray = new Ray(origin, direction);
if (lccManager.Raycast(ray, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
RaycastMesh (współrzędne ekranu)
// Wartość zwracana: bool, true=trafienie
public bool RaycastMesh(Vector3 mousePos, out HitResult _finalResult, float _distance = 70.0f)
Wystrzeliwuje promień ze współrzędnych ekranu, aby wykryć trafienia w siatce kolizji chmury punktów. Używa danych Collidera do wykrywania, co jest szybsze niż Raycast(), ale mniej precyzyjne.
| Parametr | Typ | Opis |
|---|---|---|
mousePos | Vector3 | Współrzędne ekranu |
_finalResult | out HitResult | Wynik trafienia |
_distance | float | Maksymalna odległość wykrywania, domyślnie 70.0 |
Uwagi:
- Dane muszą zawierać węzły Collidera, a najpierw należy wywołać
Renderer.SetColliderEnable(true).
Przykład:
if (lccManager.RaycastMesh(Input.mousePosition, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
RaycastMesh (Ray + Bounds)
// Wartość zwracana: bool, true=trafienie
public bool RaycastMesh(Ray ray, out HitResult result, out Bounds hitBounds, float maxDist = 70.0f)
Wykonuje wykrywanie siatki kolizji własnym Ray, zwracając również prostokąt ograniczający trafionego węzła.
| Parametr | Typ | Opis |
|---|---|---|
ray | Ray | Promień |
result | out HitResult | Wynik trafienia |
hitBounds | out Bounds | Prostokąt ograniczający trafionego węzła |
maxDist | float | Maksymalna odległość wykrywania, domyślnie 70.0 |
Uwagi:
- Dane muszą zawierać węzły Collidera.
Przykład:
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (lccManager.RaycastMesh(ray, out HitResult hit, out Bounds bounds))
{
Debug.Log(bounds.center);
}
RaycastWithSnap
// Wartość zwracana: bool, true=trafienie
public bool RaycastWithSnap(Vector2 screenPos, Camera cam, out HitResult result)
Raycasting z przyciąganiem. Najpierw wykonuje normalny raycast, a następnie wyszukuje krawędzie / narożniki w pobliżu punktu trafienia do przyciągnięcia.
| Parametr | Typ | Opis |
|---|---|---|
screenPos | Vector2 | Współrzędne ekranu |
cam | Camera | Kamera |
result | out HitResult | Wynik trafienia (w tym informacje o przyciąganiu) |
Uwagi:
- Najpierw należy wywołać
SetSnapEnabled(true). - Tylko platformy PC / Mac; niedostępne na mobilnych / VR.
- Priorytet przyciągania: Narożnik > Krawędź > Brak.
HitResult.snapTypeto typ przyciągania,HitResult.hitPosto współrzędna świata po przyciągnięciu, aHitResult.originalHitPosto pierwotny punkt trafienia przed przyciągnięciem.
Przykład:
if (lccManager.RaycastWithSnap(mousePos, cam, out HitResult hit))
{
// hit.snapType: Narożnik / Krawędź / Brak
// hit.hitPos: współrzędna świata po przyciągnięciu
// hit.originalHitPos: pierwotny punkt trafienia przed przyciągnięciem
}
SetRaycastDelta
public void SetRaycastDelta(float delta)
Ustawia parametr precyzji raycastingu. Mniejsza wartość oznacza wyższą precyzję, ale wyższe zużycie wydajności.
| Parametr | Typ | Opis |
|---|---|---|
delta | float | Precyzja raycastingu, zakres [0.1, 10.0], automatycznie przycinana po przekroczeniu |
Uwagi:
- Domyślnie
0.1. - Wpływa na precyzję wykrywania wszystkich metod
Raycast().
Przykład:
lccManager.SetRaycastDelta(0.5f);
SetMaxRaycastDistance
public void SetMaxRaycastDistance(float _distance)
Ustawia maksymalną odległość wykrywania metod Raycast().
| Parametr | Typ | Opis |
|---|---|---|
_distance | float | Maksymalna odległość raycastu, zakres [10, 10000], automatycznie przycinana po przekroczeniu |
Uwagi:
- Wpływa na przeciążenia
Raycast(Vector3)/Raycast(Ray); nie wpływa naRaycastMesh()(które ma własny parametr odległości).
Przykład:
lccManager.SetMaxRaycastDistance(500f);
IntersectsSphere
// Wartość zwracana: bool, true=przecięcie
public bool IntersectsSphere(Sphere sphere)
// Wartość zwracana: bool, true=przecięcie
public bool IntersectsSphere(Sphere sphere, out Vector3 delta)
Wykrywa, czy sfera przecina kolider chmury punktów. Drugie przeciążenie dodatkowo zwraca wektor penetracji, który można wykorzystać do fizycznego wypchnięcia.
| Parametr | Typ | Opis |
|---|---|---|
sphere | Sphere | Sfera |
delta | out Vector3 | Wektor penetracji (kierunek i odległość wypchnięcia) |
Uwagi:
- Dane muszą zawierać węzły Collidera, a najpierw należy wywołać
Renderer.SetColliderEnable(true). - Iteruje po wszystkich aktywnych Rendererach.
Przykład:
var sphere = new Sphere(transform.position, 0.5f);
if (lccManager.IntersectsSphere(sphere, out Vector3 delta))
{
transform.position += delta;
}
IntersectsCapsule
// Wartość zwracana: bool, true=przecięcie
public bool IntersectsCapsule(Capsule capsule)
// Wartość zwracana: bool, true=przecięcie
public bool IntersectsCapsule(Capsule capsule, out Vector3 delta)
Wykrywa, czy kapsuła przecina kolider chmury punktów, powszechnie używane do wykrywania kolizji kontrolera postaci. Drugie przeciążenie zwraca wektor penetracji.
| Parametr | Typ | Opis |
|---|---|---|
capsule | Capsule | Kapsuła |
delta | out Vector3 | Wektor penetracji |
Uwagi:
- Dane muszą zawierać węzły Collidera, a najpierw należy wywołać
Renderer.SetColliderEnable(true).
Przykład:
var capsule = new Capsule(footPos, headPos, 0.3f);
if (lccManager.IntersectsCapsule(capsule, out Vector3 delta))
{
characterController.Move(delta);
}
Efekty wizualne
TriggerVFX
public void TriggerVFX(Vector3 vfxOriginW, int vfxid = 0)
Wywołuje efekt wizualny w określonej współrzędnej świata, rozprzestrzeniający się na zewnątrz z tej współrzędnej.
| Parametr | Typ | Opis |
|---|---|---|
vfxOriginW | Vector3 | Współrzędna świata będąca początkiem efektu |
vfxid | int | ID efektu, domyślnie 0 |
Uwagi:
- Musi być wywołane po zakończeniu ładowania sceny LCC.
Przykład:
lccManager.TriggerVFX(hitPoint, 0);
Zapytania o instancje
GetAllRenderers
// Wartość zwracana: List<Renderer>, kopia wszystkich zarejestrowanych instancji Renderer
public List<Renderer> GetAllRenderers()
Pobiera listę wszystkich aktualnie zarejestrowanych instancji Renderer (zwraca kopię).
Przykład:
var renderers = lccManager.GetAllRenderers();
foreach (var r in renderers) { /* ... */ }