LCCManager : Gestionnaire principal
Le gestionnaire principal du LCC Unity SDK, responsable de la gestion de toutes les instances Renderer, des caméras, de l'état de rendu global, ainsi que des opérations d'édition (découpe / surlignage / tons), de la projection de décalque, de l'accrochage et des requêtes d'interaction (raycast / collision). Il ne doit y avoir qu'une seule instance LCCManager dans toute la scène.
| Espace de noms | LCCCore |
| Classe de base | MonoBehaviour |
LCCManager n'a pas de propriétés publiques ; toutes les fonctionnalités sont accessibles via des méthodes. Les méthodes sont regroupées par objectif :
- Initialisation et configuration
- Contrôle du rendu à l'exécution
- Éclairage et ombres
- Gestion des caméras
- Découpe / Surlignage / Tons
- Projection de décalque
- Accrochage
- Requêtes de raycasting et de collision
- Effets visuels
- Requêtes d'instances
Initialisation et configuration
Les méthodes suivantes sont utilisées pour terminer la pré-configuration de la plateforme, du mode de rendu, de la capacité, etc. avant de charger les données. La plupart des méthodes doivent être appelées avant tout Renderer.Load().
SetPlatformType
public void SetPlatformType(PlatformType _type)
Définit la plateforme d'exécution cible du SDK, ce qui affecte la stratégie de rendu interne et l'allocation des ressources.
| Paramètre | Type | Description |
|---|---|---|
_type | PlatformType | Plateforme cible ; voir PlatformType |
Remarques :
- Doit être exécutée avant tout appel
GetRender().
Exemple :
lccManager.SetPlatformType(PlatformType.PC);
SwitchRenderPass
public void SwitchRenderPass(ActiveRenderMode _mode)
Définit le mode d'architecture de rendu global. MultiRender utilise un buffer GPU partagé et peut rendre jusqu'à 255 Renderers simultanément ; SingleRender laisse le SDK sélectionner automatiquement le chemin de rendu en fonction de la taille des données.
| Paramètre | Type | Description |
|---|---|---|
_mode | ActiveRenderMode | Mode de rendu ; voir ActiveRenderMode |
Remarques :
- Doit être appelée avant tout
Renderer.Load(). - Uniquement efficace sur les plateformes PC / Mac ; les plateformes mobiles / VR adoptent automatiquement une stratégie adaptative, et l'appel de cette méthode est rejeté.
- Le mode
MultiRenderne prend pas en charge les sources de données HTTP ; utilisezSingleRenderpour les données HTTP. - Une fois qu'un Renderer a terminé
Load(), le mode est verrouillé et ne peut plus être basculé.
Exemple :
lccManager.SwitchRenderPass(ActiveRenderMode.MultiRender);
GetRender (Surcharge 1 : lier le Transform)
// Valeur de retour : Renderer, null en cas d'échec
public Renderer GetRender(Transform _transform)
Crée une nouvelle instance de rendu et la lie au Transform spécifié. Après la création, Renderer.Load() doit être appelé pour charger les données.
| Paramètre | Type | Description |
|---|---|---|
_transform | Transform | Le Transform auquel l'instance de rendu est attachée |
Remarques :
SetPlatformType()etSetMainCamera()doivent être appelés en premier.- Jusqu'à 255 Renderers sont pris en charge en mode
MultiRender.
Exemple :
var go = new GameObject("LCCScene");
var renderer = lccManager.GetRender(go.transform);
renderer.Load(filePath, null, () => Debug.Log("Chargé"));
GetRender (Surcharge 2 : créer le GameObject automatiquement)
// Valeur de retour : Renderer, null en cas d'échec
public Renderer GetRender(out GameObject gameObject)
Crée automatiquement un GameObject nommé LCCRenderer et lie l'instance de rendu à son Transform.
| Paramètre | Type | Description |
|---|---|---|
gameObject | out GameObject | Sort le GameObject créé automatiquement, null en cas d'échec |
Exemple :
var renderer = lccManager.GetRender(out GameObject go);
renderer.Load(filePath, null, () => Debug.Log("Chargé"));
SetMaxBufferSplat
public void SetMaxBufferSplat(int _count)
Définit la capacité maximale du buffer GPU (nombre de Splats). Alloué une fois et ne peut pas être modifié dynamiquement.
| Paramètre | Type | Description |
|---|---|---|
_count | int | Nombre maximal de Splats, unité : dix mille (valeur × 10000 = nombre réel) |
Remarques :
- Doit être appelée avant tout
Renderer.Load(), etSetPlatformType()doit être appelée en premier. - Une capacité plus grande signifie une utilisation de mémoire vidéo plus élevée ; définissez-la selon les besoins.
- Limites de plateforme : PC / Mac / PCVR 45 millions, Android / iOS 6 millions, VR (Pico / Quest / PicoSwan / AVP / OpenXR) 2 millions.
- Valeurs par défaut : PC / Mac 30 millions, Android / iOS 3 millions, VR 1 million.
Exemple :
lccManager.SetMaxBufferSplat(3000); // 30 millions de points
SetFullRenderSplat
public void SetFullRenderSplat(int _count)
Définit le seuil supérieur du rendu complet PC / Mac. Lorsque la taille des données est inférieure à cette valeur, le chemin de rendu complet est utilisé ; sinon le chemin de rendu par blocs est utilisé.
| Paramètre | Type | Description |
|---|---|---|
_count | int | Limite supérieure du rendu complet, unité : dix mille, plage [100, 4500] |
Remarques :
- Pris en charge uniquement sur les plateformes PC / Mac / PCVR.
- Doit être appelée avant tout
Renderer.Load(), etSetPlatformType()doit être appelée en premier.
Exemple :
lccManager.SetFullRenderSplat(2500); // 25 millions de points
SetMaxRenderSplats
public void SetMaxRenderSplats(int _count)
Définit le nombre maximal de Splats rendus par image à l'exécution. Peut être appelée dynamiquement après Load().
| Paramètre | Type | Description |
|---|---|---|
_count | int | Nombre maximal de Splats rendus à l'exécution, unité : dix mille |
Remarques :
- Peut être ajustée dynamiquement à l'exécution.
- Ne peut pas dépasser la capacité définie par
SetMaxBufferSplat(); elle est automatiquement bornée en cas de dépassement. - Aucun effet en mode de rendu complet.
Exemple :
lccManager.SetMaxRenderSplats(2500); // 25 millions de points
GetLoadRatio
// Valeur de retour : float, [0,1] progression de chargement des données actuelle
public float GetLoadRatio()
Interroge la progression de chargement des données de la scène actuelle.
Remarques :
- Retourne toujours
1.0en mode de rendu complet. - En mode de rendu par blocs, retourne le ratio de nœuds chargés sous la vue actuelle ; la valeur change en temps réel avec le mouvement de la caméra et n'est pas une progression globale monotone croissante.
Exemple :
float ratio = lccManager.GetLoadRatio();
progressBar.value = ratio;
SetSelectionMode
public void SetSelectionMode(SelectionMode mode)
Définit la stratégie de sélection des nœuds.
| Paramètre | Type | Description |
|---|---|---|
mode | SelectionMode | Stratégie de sélection ; voir SelectionMode |
Remarques :
Auto(défaut) : décidé automatiquement en fonction de la boîte englobante globale de la scène ; lorsque la dimension maximale de la scène dépasse environ 380 mètres, elle passe automatiquement àLarge.Normal: convient aux petites et moyennes scènes.Large: convient aux très grandes scènes (plus de 1000 mètres).- Prend effet immédiatement lors du basculement.
Exemple :
lccManager.SetSelectionMode(SelectionMode.Auto);
Contrôle du rendu à l'exécution
Les méthodes suivantes peuvent être appelées dynamiquement à l'exécution pour ajuster la précision de rendu, les effets d'affichage et les bascules de rendu.
SetDetailLevel
public void SetDetailLevel(float sse)
Définit le niveau de précision de rendu. Une valeur plus grande signifie un rendu plus fin et une consommation de performance plus élevée.
| Paramètre | Type | Description |
|---|---|---|
sse | float | Niveau de précision, plage [1, 100], automatiquement borné en cas de dépassement |
Remarques :
- Utilise une correspondance logarithmique : les changements sont sensibles dans la plage de valeurs basses et fluides dans la plage de valeurs hautes.
- Peut être ajusté dynamiquement à l'exécution.
- Ne prend effet qu'en mode de sélection
Normal.
Exemple :
lccManager.SetDetailLevel(50f); // Précision moyenne
SetStartLod
public void SetStartLod(int lod)
Définit le point de départ de l'expansion LOD (basé sur 0). 0 est le plus fin, et un nombre plus grand signifie un niveau plus grossier.
| Paramètre | Type | Description |
|---|---|---|
lod | int | Niveau LOD de départ, plage [0, 10], automatiquement borné en cas de dépassement |
Remarques :
- La limite supérieure effective réelle est contrainte par le nombre total de niveaux de données.
Exemple :
lccManager.SetStartLod(0);
SetAutoFov
public void SetAutoFov(bool _auto)
Définit s'il faut gérer automatiquement le FOV de rendu. Lorsqu'il est activé (défaut), le SDK verrouille une base de distance focale en pixels à la première image, puis inverse le FOV vertical depuis la hauteur de viewport actuelle à chaque image et l'écrit dans Camera.fieldOfView ; lorsqu'il est désactivé, fieldOfView est contrôlé en externe (SetFOV() ou modification directe de la caméra).
| Paramètre | Type | Description |
|---|---|---|
_auto | bool | S'il faut utiliser le FOV automatique |
Remarques :
- Activé par défaut.
- Lorsqu'il est activé, il réécrit continuellement le
Camera.fieldOfViewde la caméra principale, donc l'appel deSetFOV()est ignoré. - Lorsqu'il est désactivé,
SetFOV()doit être appelé manuellement pour définir les paramètres.
Exemple :
lccManager.SetAutoFov(true);
SetFOV
public void SetFOV(int _width, int _height, float _verticalFov, float _aspect)
Définit manuellement le FOV vertical (en degrés). Réécrit directement le Camera.fieldOfView de la caméra principale afin que le FOV dans l'Inspecteur corresponde au FOV réellement utilisé pour le rendu. _width / _height / _aspect sont des paramètres de signature hérités ; la projection réelle utilise le propre viewport de la caméra principale (utilisez SetRecordMode() pour une sortie hors écran avec une taille / un FOV différents).
| Paramètre | Type | Description |
|---|---|---|
_width | int | Largeur en pixels |
_height | int | Hauteur en pixels |
_verticalFov | float | FOV vertical (degrés) |
_aspect | float | Ratio d'aspect |
Remarques :
SetAutoFov(false)doit être appelé en premier, sinon l'inversion auto du FOV par image écrase la valeur manuelle.- Le FOV vertical est borné à
[1, 179]degrés. - L'appeler sur les plateformes VR / PCVR, pendant l'enregistrement, ou sous une caméra orthographique est rejeté (avertit et retourne).
Exemple :
lccManager.SetFOV(1920, 1080, 60f, 1.778f);
SetRenderEnable
public void SetRenderEnable(Renderer _renderer, bool _isEnable)
Contrôle la bascule de rendu du Renderer spécifié à l'exécution. Lorsqu'il est désactivé, il ne participe pas au parcours ni au dessin.
| Paramètre | Type | Description |
|---|---|---|
_renderer | Renderer | Instance de rendu cible |
_isEnable | bool | S'il faut activer le rendu |
Exemple :
lccManager.SetRenderEnable(renderer, false); // Masquer
SetEnvironment
public void SetEnvironment(Renderer _renderer, bool _isRender)
Contrôle le rendu des données d'environnement du Renderer spécifié. Les données d'environnement sont un nuage de points d'arrière-plan à faible précision utilisé pour remplir les vues lointaines.
| Paramètre | Type | Description |
|---|---|---|
_renderer | Renderer | Instance de rendu cible |
_isRender | bool | S'il faut rendre les données d'environnement |
Remarques :
- Les données doivent contenir des nœuds d'environnement.
Exemple :
lccManager.SetEnvironment(renderer, true);
SetZDepth
public void SetZDepth(bool zwrite)
Active/désactive l'écriture de profondeur Z et ajuste la file de rendu en conséquence.
| Paramètre | Type | Description |
|---|---|---|
zwrite | bool | S'il faut activer l'écriture de profondeur Z |
Exemple :
lccManager.SetZDepth(true);
SetAlpha
public void SetAlpha(float alpha)
Définit l'opacité globale.
| Paramètre | Type | Description |
|---|---|---|
alpha | float | Opacité globale, plage [0, 1], automatiquement bornée en cas de dépassement |
Exemple :
lccManager.SetAlpha(0.8f);
SetLightIntensity
public void SetLightIntensity(float intensity)
Définit l'intensité lumineuse globale.
| Paramètre | Type | Description |
|---|---|---|
intensity | float | Intensité lumineuse, plage [0, 1], automatiquement bornée en cas de dépassement |
Exemple :
lccManager.SetLightIntensity(0.7f);
SetLowPassFilter
public void SetLowPassFilter(float _filter)
Définit la force du filtre passe-bas global, utilisé pour supprimer l'aliasing / le bruit haute fréquence.
| Paramètre | Type | Description |
|---|---|---|
_filter | float | Force du filtre passe-bas, plage [0, 1], automatiquement bornée en cas de dépassement |
Exemple :
lccManager.SetLowPassFilter(0.3f);
SetLockFPS
public void SetLockFPS(bool _isLock)
Active/désactive le verrouillage de la fréquence d'images (bascule statique / dynamique de la fréquence d'images).
| Paramètre | Type | Description |
|---|---|---|
_isLock | bool | S'il faut verrouiller la fréquence d'images |
Exemple :
lccManager.SetLockFPS(true);
SetRenderLayer
public void SetRenderLayer(int _layer)
Définit la couche Unity utilisée par le rendu LCC, pour le contrôle de visibilité par CullingMask de la caméra.
| Paramètre | Type | Description |
|---|---|---|
_layer | int | Couche de rendu Unity, plage [0, 31] |
Remarques :
- Peut être ajustée dynamiquement à l'exécution.
Exemple :
lccManager.SetRenderLayer(8); // Utiliser la couche 8
SetForceRefresh
public void SetForceRefresh()
Force une actualisation du rendu. Efface le cache d'informations de caméra interne afin que le frustum, le LOD et les autres paramètres soient recalculés à l'image suivante. Convient aux cas où des paramètres de caméra modifiés en externe doivent prendre effet immédiatement.
Exemple :
lccManager.SetForceRefresh();
SetMipMode
public void SetMipMode(MipMode _mipMode)
Bascule le mode de rendu Mip. Le mode Mip utilise l'échantillonnage mipmap (défaut), et le mode Non_Mip désactive le mipmap.
| Paramètre | Type | Description |
|---|---|---|
_mipMode | MipMode | Mode cible ; voir MipMode |
Remarques :
- Retourne immédiatement si le mode actuel est le même que le mode transmis.
- Prend effet immédiatement lors du basculement.
Exemple :
lccManager.SetMipMode(MipMode.Non_Mip);
SetGraphicsAPI
public void SetGraphicsAPI(GraphicsDeviceType type)
Définit le type d'API graphique. Le HDR est activé en mode DX11.
| Paramètre | Type | Description |
|---|---|---|
type | GraphicsDeviceType | Type d'API graphique (enum intégré Unity) |
Exemple :
lccManager.SetGraphicsAPI(GraphicsDeviceType.Direct3D11);
SetDebugMode
public void SetDebugMode(bool debug)
Active/désactive le mode débogage.
| Paramètre | Type | Description |
|---|---|---|
debug | bool | S'il faut activer le mode débogage |
Remarques :
- Pris en charge uniquement sur les plateformes PC / Mac.
Exemple :
lccManager.SetDebugMode(true);
SetEditorMode
public void SetEditorMode(bool _isEditor)
Active/désactive le mode éditeur.
| Paramètre | Type | Description |
|---|---|---|
_isEditor | bool | S'il faut activer le mode éditeur |
Remarques :
- Pris en charge uniquement sur les plateformes PC / Mac.
Exemple :
lccManager.SetEditorMode(true);
SetAECMode
public void SetAECMode(bool _aec)
Active/désactive le mode AEC (Architecture / Engineering / Construction).
| Paramètre | Type | Description |
|---|---|---|
_aec | bool | S'il faut activer le mode AEC |
Remarques :
- Pris en charge uniquement sur les plateformes PC / Mac.
Exemple :
lccManager.SetAECMode(true);
SetSemantic
// Valeur de retour : bool, false=paramètre invalide
public bool SetSemantic(bool enable, Vector4[] color = null)
Active/désactive le mode de rendu sémantique. Lorsqu'il est activé, un tableau de couleurs peut être transmis pour définir la couleur d'affichage de chaque catégorie sémantique.
| Paramètre | Type | Description |
|---|---|---|
enable | bool | S'il faut activer le rendu sémantique |
color | Vector4[] | Tableau de couleurs sémantiques, la longueur doit être 100, sinon false est retourné ; passez null pour utiliser les couleurs par défaut |
Exemple :
Vector4[] colors = new Vector4[100];
colors[0] = new Vector4(1, 0, 0, 1); // Catégorie 0 = rouge
lccManager.SetSemantic(true, colors);
SwitchRenderMode
public void SwitchRenderMode(RenderMode mode, Texture2D tex = null)
Bascule entre le rendu du nuage de points et le rendu 3DGS. Une texture de rampe de couleur d'élévation peut être fournie en mode nuage de points.
| Paramètre | Type | Description |
|---|---|---|
mode | RenderMode | Mode de rendu ; voir RenderMode |
tex | Texture2D | Texture de rampe de couleur d'élévation (optionnelle) |
Remarques :
- Pris en charge uniquement sur les plateformes PC / Mac.
Exemple :
lccManager.SwitchRenderMode(RenderMode.PointCloud, elevationTex);
SetRecordMode
public void SetRecordMode(bool isRecord, Vector2 renderSize, float verticalFov)
Définit le mode d'enregistrement. En mode d'enregistrement, une résolution et un FOV fixes sont utilisés pour le rendu, adaptés à l'enregistrement vidéo HD.
| Paramètre | Type | Description |
|---|---|---|
isRecord | bool | S'il faut utiliser le mode d'enregistrement |
renderSize | Vector2 | Résolution d'enregistrement |
verticalFov | float | FOV vertical (degrés) |
Remarques :
- Pris en charge uniquement sur les plateformes PC / Mac.
- En mode d'enregistrement, la distance focale de la caméra est fixe et ne change pas avec le composant Camera.
- Après l'enregistrement, appelez
SetRecordMode(false, ...)pour restaurer.
Exemple :
lccManager.SetRecordMode(true, new Vector2(3840, 2160), 60f);
SetVRPerformance
public void SetVRPerformance(bool _enabled)
Définit le mode de tri haute performance VR. true utilise le tri radix GPU (GpuSorter), et false retombe sur CPU / BitonicSorter.
| Paramètre | Type | Description |
|---|---|---|
_enabled | bool | S'il faut activer le tri GPU haute performance |
Remarques :
- N'affecte que le chemin de tri des casques VR (Pico / Quest / PicoSwan / OpenXR) ; activé par défaut.
- Lorsqu'il n'y a pas de périphérique de calcul (comme Mali), le tri en amont retombe automatiquement sur CPU, non affecté par cette bascule.
Exemple :
lccManager.SetVRPerformance(true);
Éclairage et ombres
Les méthodes suivantes contrôlent la réception des ombres et les éclairages ponctuels personnalisés sur les surfaces 3DGS. Les méthodes liées aux ombres doivent être appelées après la fin du chargement de la scène LCC.
SetShadowReceive
public void SetShadowReceive(bool enable)
Active/désactive la réception des ombres du nuage de points. Lorsqu'elle est activée, les ombres des objets Mesh de la scène peuvent être projetées sur les surfaces du nuage de points 3DGS.
| Paramètre | Type | Description |
|---|---|---|
enable | bool | S'il faut recevoir les ombres |
Remarques :
- Désactivé par défaut.
- Nécessite des objets Mesh qui projettent des ombres et une Lumière directionnelle dans la scène.
Exemple :
lccManager.SetShadowReceive(true);
SetShadowColor
public void SetShadowColor(Color color)
Définit la couleur de la zone d'ombre.
| Paramètre | Type | Description |
|---|---|---|
color | Color | Couleur de l'ombre (RGBA) |
Remarques :
- Défaut
(0.3, 0.3, 0.3, 1). SetShadowReceive(true)doit être activé en premier.
Exemple :
lccManager.SetShadowColor(new Color(0.3f, 0.3f, 0.3f, 1f));
SetShadowStrength
public void SetShadowStrength(float strength)
Définit la force de l'ombre. 0 est aucune ombre, 1 est l'ombre la plus forte.
| Paramètre | Type | Description |
|---|---|---|
strength | float | Force de l'ombre, plage [0, 1], automatiquement bornée en cas de dépassement |
Remarques :
- Défaut
1.0. SetShadowReceive(true)doit être activé en premier.
Exemple :
lccManager.SetShadowStrength(0.8f);
SetLights
// Valeur de retour : int, 0=succès, -1=limite maximale de nombre dépassée
public int SetLights(List<PointLightData> lights)
Définit la liste d'éclairages ponctuels personnalisés. Passer null ou une liste vide désactive l'éclairage personnalisé.
| Paramètre | Type | Description |
|---|---|---|
lights | List<PointLightData> | Liste d'éclairages ponctuels ; voir PointLightData |
Remarques :
PointLightData.lightType:0est un éclairage ponctuel (direction / spotAngle ignorés),1est un spot (direction / spotAngle requis).- Passer
nullou une liste vide désactive l'éclairage personnalisé.
Exemple :
using Unity.Mathematics; // float3
var lights = new List<PointLightData>();
lights.Add(new PointLightData {
position = new float3(0, 5, 0),
lightType = 0, // 0=éclairage ponctuel, 1=spot
color = new float3(1, 1, 1),
intensity = 2f,
range = 10f
});
lccManager.SetLights(lights);
Gestion des caméras
SetMainCamera
public void SetMainCamera(Camera _cam)
Définit la caméra de rendu principale. LCC utilise cette caméra pour le frustum culling, la sélection LOD, le tri et d'autres opérations.
| Paramètre | Type | Description |
|---|---|---|
_cam | Camera | Caméra de rendu principale ; passez null pour effacer |
Remarques :
- Doit être définie avant
Renderer.Load(). - Pris en charge uniquement sur les plateformes PC / Mac.
Exemple :
lccManager.SetMainCamera(Camera.main);
AddCamera
public void AddCamera(Camera _cam)
Ajoute une caméra secondaire. La caméra secondaire participe au rendu mais n'affecte pas la sélection LOD.
| Paramètre | Type | Description |
|---|---|---|
_cam | Camera | Caméra secondaire |
Remarques :
- Pris en charge uniquement sur les plateformes PC / Mac.
- La caméra principale ne peut pas être ajoutée comme caméra secondaire.
Exemple :
lccManager.AddCamera(secondCamera);
RemoveCamera
public void RemoveCamera(Camera _cam)
Supprime une caméra secondaire ajoutée.
| Paramètre | Type | Description |
|---|---|---|
_cam | Camera | La caméra secondaire à supprimer |
Remarques :
- Pris en charge uniquement sur les plateformes PC / Mac.
Exemple :
lccManager.RemoveCamera(secondCamera);
Découpe / Surlignage / Tons
La découpe, le surlignage et les tons sont trois types d'opérations d'édition, qui prennent toutes en charge la définition de la région affectée via une texture 2D, une géométrie 3D ou un mélange des deux. Voir Data2D, Data3D, DataMix et ToneMix.
SetClip (découpe par plan)
// Valeur de retour : int, 0=succès
public int SetClip(Vector3 planePoint, Vector3 planeNormal, bool inside = true)
Découpe le nuage de points avec un plan infini, en conservant les points du côté de la normale ou du côté opposé.
| Paramètre | Type | Description |
|---|---|---|
planePoint | Vector3 | Un point sur le plan |
planeNormal | Vector3 | Normale du plan |
inside | bool | true conserve le côté de la normale |
Remarques :
- Mutuellement exclusive avec les autres modes de découpe.
Exemple :
lccManager.SetClip(Vector3.zero, Vector3.up, true); // Conserver au-dessus du sol
SetClip (découpe par texture 2D)
// Valeur de retour : int, 0=succès, 1=liste vide, 2=nombre maximal dépassé
public int SetClip(List<Data2D> _2Ds)
Découpe le nuage de points à l'aide d'un masque de texture projetée 2D.
| Paramètre | Type | Description |
|---|---|---|
_2Ds | List<Data2D> | Liste de sélection par texture 2D |
Exemple :
var clips = new List<Data2D>();
clips.Add(new Data2D {
texture = maskTex,
mv = modelViewMatrix,
mvp = mvpMatrix,
mode = SelectMode.normal
});
lccManager.SetClip(clips);
SetClip (découpe par géométrie 3D)
// Valeur de retour : int, 0=succès, 1=liste vide, 2=nombre maximal dépassé, 3=zéro géométrie valide
public int SetClip(List<Data3D> _3Ds)
Découpe le nuage de points avec une géométrie 3D, prenant en charge les opérations booléennes pour combiner plusieurs géométries.
| Paramètre | Type | Description |
|---|---|---|
_3Ds | List<Data3D> | Liste de géométrie 3D |
Remarques :
- Au moins une géométrie avec
operation == normalest requise.
Exemple :
var clips = new List<Data3D>();
clips.Add(new Data3D {
type = ShapeType.box,
invMat = boxInverseMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetClip(clips);
SetClip (découpe en mode mixte)
// Valeur de retour : int, 0=succès, 1=liste vide, 2=nombre maximal dépassé
public int SetClip(List<DataMix> mix)
Définit la région de découpe avec un mélange de textures 2D et de géométries 3D. Chaque entrée spécifie son type via editType.
| Paramètre | Type | Description |
|---|---|---|
mix | List<DataMix> | Liste de sélection mixte (2D + 3D) |
Exemple :
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()
Sort du mode de découpe et restaure l'affichage complet du nuage de points.
Exemple :
lccManager.QuitClipMode();
SetHighlight (surlignage par texture 2D)
// Valeur de retour : int, 0=succès, 1=liste vide, 2=nombre maximal dépassé
public int SetHighlight(List<Data2D> _2Ds)
Surligne le nuage de points à l'aide d'un masque de texture projetée 2D ; le nuage de points en dehors de la région surlignée est assombri.
| Paramètre | Type | Description |
|---|---|---|
_2Ds | List<Data2D> | Liste de sélection par texture 2D |
Remarques :
- Mutuellement exclusif avec le surlignage 3D et le surlignage mixte.
Exemple :
var highlights = new List<Data2D>();
highlights.Add(new Data2D {
texture = maskTex,
mv = modelViewMatrix,
mvp = mvpMatrix,
mode = SelectMode.normal
});
lccManager.SetHighlight(highlights);
SetHighlight (surlignage par géométrie 3D)
// Valeur de retour : int, 0=succès, 1=liste vide, 2=nombre maximal dépassé, 3=zéro géométrie valide
public int SetHighlight(List<Data3D> _3Ds)
Définit la région surlignée avec une géométrie 3D, prenant en charge les opérations booléennes pour combiner.
| Paramètre | Type | Description |
|---|---|---|
_3Ds | List<Data3D> | Liste de géométrie 3D |
Remarques :
- Au moins une géométrie avec
operation == normalest requise.
Exemple :
var highlights = new List<Data3D>();
highlights.Add(new Data3D {
type = ShapeType.box,
invMat = boxInverseMatrix,
operation = OperationMode.normal,
mode = SelectMode.normal
});
lccManager.SetHighlight(highlights);
SetHighlight (surlignage en mode mixte)
// Valeur de retour : int, 0=succès, 1=liste vide, 2=nombre maximal dépassé
public int SetHighlight(List<DataMix> mix)
Définit la région surlignée avec un mélange de textures 2D et de géométries 3D.
| Paramètre | Type | Description |
|---|---|---|
mix | List<DataMix> | Liste de sélection mixte |
Exemple :
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()
Sort du mode de surlignage et restaure l'affichage normal du nuage de points.
Exemple :
lccManager.QuitHighlightMode();
SetTone
// Valeur de retour : int, 0=succès, 1=liste vide, 2=nombre maximal dépassé
public int SetTone(List<ToneMix> mix)
Applique un ajustement de tons à la région sélectionnée, prenant en charge la luminosité, la saturation, le contraste et les filtres LUT. La région de tons peut être définie par une texture 2D ou une géométrie 3D.
| Paramètre | Type | Description |
|---|---|---|
mix | List<ToneMix> | Liste de mélange de tons |
Remarques :
brightness/saturation/contrastont pour défaut1.0.lutidest l'index du filtre LUT ;0signifie non utilisé.
Exemple :
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()
Sort du mode de tons et restaure la couleur d'origine du nuage de points.
Exemple :
lccManager.QuitToneMode();
Projection de décalque
La projection de décalque projette une texture sur les surfaces 3DGS le long de la direction du projecteur. Le décalque est un état global fixé dans le monde, cohérent pour toutes les caméras. Le flux de travail typique est : activer le décalque → définir la texture → définir la pose du projecteur. Les méthodes suivantes sont prises en charge uniquement sur les plateformes PC / Mac.
SetDecalEnabled
public void SetDecalEnabled(bool enable)
Active/désactive la projection de décalque. SetDecalTexture() et SetDecalProjection() doivent être appelées séparément pour définir le contenu et la pose du projecteur.
| Paramètre | Type | Description |
|---|---|---|
enable | bool | S'il faut activer la projection de décalque |
Remarques :
- La désactivation n'efface pas la texture / les paramètres mis en cache.
Exemple :
lccManager.SetDecalEnabled(true);
lccManager.SetDecalTexture(decalTex);
lccManager.SetDecalProjection(projectorPos, projectorRot, 60f, 1.778f, 0.1f, 20f);
SetDecalTexture
public void SetDecalTexture(Texture2D tex)
Définit la texture du décalque. RGB est la couleur, et A est le masque propre du décalque, qui est multiplié avec l'opacité globale et le fondu de bord.
| Paramètre | Type | Description |
|---|---|---|
tex | Texture2D | Texture du décalque ; passer null efface la référence |
Exemple :
lccManager.SetDecalTexture(logoTex);
SetDecalProjection
public void SetDecalProjection(Vector3 pos, Quaternion rot, float fov, float aspect, float near, float far)
Définit la pose et les paramètres de perspective du projecteur de décalque. Le projecteur projette le long de sa direction avant (+Z), et les points à l'intérieur du frustum sont recouverts par le décalque.
| Paramètre | Type | Description |
|---|---|---|
pos | Vector3 | Position mondiale du projecteur |
rot | Quaternion | Orientation du projecteur |
fov | float | FOV vertical (degrés), borné à [1, 179] |
aspect | float | Ratio d'aspect, minimum 1e-4 |
near | float | Plan de découpe proche, minimum 1e-3 |
far | float | Plan de découpe lointain, minimum near + 1e-3 |
Exemple :
lccManager.SetDecalProjection(new Vector3(0, 10, 0), Quaternion.Euler(90, 0, 0), 60f, 1.778f, 0.1f, 20f);
SetDecalOpacity
public void SetDecalOpacity(float opacity)
Définit l'opacité globale du décalque.
| Paramètre | Type | Description |
|---|---|---|
opacity | float | Opacité globale du décalque, plage [0, 1], automatiquement bornée en cas de dépassement |
Exemple :
lccManager.SetDecalOpacity(0.8f);
SetDecalEdgeFade
public void SetDecalEdgeFade(float edgeFade)
Définit la largeur du fondu de bord du décalque. 0 est un bord dur, et une valeur plus grande rend la transition de bord plus douce.
| Paramètre | Type | Description |
|---|---|---|
edgeFade | float | Largeur du fondu de bord (ratio en espace UV), plage [0, 0.5), automatiquement bornée en cas de dépassement |
Exemple :
lccManager.SetDecalEdgeFade(0.1f);
SetDecalOcclusion
public void SetDecalOcclusion(bool enable)
Active/désactive l'occlusion culling du décalque (basée sur la carte de profondeur du projecteur). Lorsqu'elle est activée, les surfaces occluses ne sont pas recouvertes par le décalque.
| Paramètre | Type | Description |
|---|---|---|
enable | bool | S'il faut activer l'occlusion culling du décalque |
Remarques :
- Plateforme PC / Mac uniquement, et pipeline URP uniquement.
SetDecalProjection()doit avoir été appelée pour définir le projecteur avant l'activation.- Dépend des paramètres de qualité configurés par
SetDecalOcclusionSettings().
Exemple :
lccManager.SetDecalOcclusion(true);
SetDecalOcclusionSettings
public void SetDecalOcclusionSettings(DecalOcclusionSettings settings)
Définit tous les paramètres de qualité de l'occlusion culling du décalque en une seule fois. Voir DecalOcclusionSettings.
| Paramètre | Type | Description |
|---|---|---|
settings | DecalOcclusionSettings | Paramètres de qualité de l'occlusion culling |
Remarques :
- Peut être ajusté à tout moment ; les paramètres prennent effet immédiatement.
Exemple :
lccManager.SetDecalOcclusionSettings(DecalOcclusionSettings.Default);
lccManager.SetDecalOcclusionSettings(new DecalOcclusionSettings {
opacityCutoff = 0.1f,
depthBias = 0.05f,
footprintMaxPx = 2,
resolution = 1024
});
Accrochage
La fonctionnalité d'accrochage recherche automatiquement les arêtes / coins proches pour s'aligner pendant le raycasting, et est couramment utilisée pour des interactions précises telles que la mesure et l'annotation. Les méthodes suivantes sont prises en charge uniquement sur les plateformes PC / Mac.
SetSnapEnabled
public void SetSnapEnabled(bool enable)
Active/désactive la fonctionnalité d'accrochage. Lorsqu'elle est activée, RaycastWithSnap() recherche automatiquement les arêtes / coins proches auxquels s'accrocher.
| Paramètre | Type | Description |
|---|---|---|
enable | bool | S'il faut activer l'accrochage |
Remarques :
- Désactivé par défaut.
- Aucun effet sur mobile / VR, et un avertissement est affiché.
Exemple :
lccManager.SetSnapEnabled(true);
SetSnapRadius
public void SetSnapRadius(float pixels)
Définit le rayon de recherche d'accrochage. Recherche l'arête / le coin le plus proche dans cette plage de pixels.
| Paramètre | Type | Description |
|---|---|---|
pixels | float | Rayon de recherche d'accrochage (pixels) |
Remarques :
- Défaut 20 pixels.
- Une valeur plus grande signifie une plage de recherche plus large, mais peut s'accrocher à des cibles non voulues.
Exemple :
lccManager.SetSnapRadius(30f);
SetEdgeThreshold
public void SetEdgeThreshold(float threshold)
Définit le seuil de détection d'arêtes. Une valeur plus petite détecte plus d'arêtes.
| Paramètre | Type | Description |
|---|---|---|
threshold | float | Seuil de détection d'arêtes, plage recommandée [0.1, 0.8] |
Remarques :
- Défaut
0.3. - Une valeur trop petite produit une grande quantité d'arêtes bruyantes.
Exemple :
lccManager.SetEdgeThreshold(0.2f);
SetSnapPreviewEnabled
public void SetSnapPreviewEnabled(bool enable)
Active/désactive la fonctionnalité d'aperçu d'accrochage. Lorsqu'elle est activée, l'indicateur de la cible d'accrochage la plus proche est affiché en temps réel lorsque la souris se déplace.
| Paramètre | Type | Description |
|---|---|---|
enable | bool | S'il faut activer l'aperçu d'accrochage |
Remarques :
SetSnapEnabled(true)doit être appelé en premier.- L'aperçu consomme continuellement des ressources GPU (détection à chaque image).
Exemple :
lccManager.SetSnapPreviewEnabled(true);
UpdateSnapPreview
public void UpdateSnapPreview(Vector2 mousePos, Camera cam)
Met à jour l'état de l'aperçu d'accrochage. Appelée lorsque la souris se déplace pour mettre à jour la position de l'indicateur d'aperçu.
| Paramètre | Type | Description |
|---|---|---|
mousePos | Vector2 | Coordonnées écran actuelles de la souris |
cam | Camera | Caméra |
Remarques :
SetSnapPreviewEnabled(true)doit être appelé en premier.- Recommandé d'appeler continuellement dans
Update.
Exemple :
void Update()
{
lccManager.UpdateSnapPreview(Input.mousePosition, Camera.main);
}
GetSnapPreviewState
// Valeur de retour : SnapPreviewState
public SnapPreviewState GetSnapPreviewState()
Obtient l'état actuel de l'aperçu d'accrochage, y compris s'il existe une cible d'accrochage, le type de cible, la position écran de la cible et la distance en pixels par rapport à la souris. Voir SnapPreviewState.
Remarques :
SetSnapPreviewEnabled(true)etUpdateSnapPreview()doivent être appelés en premier.- Retourne
default(SnapPreviewState)lorsqu'il n'y a pas de cible. screenPosest en coordonnées écran, pas en coordonnées mondiales ; utilisezRaycastWithSnap()pour obtenirHitResult.hitPospour les coordonnées mondiales.
Exemple :
var state = lccManager.GetSnapPreviewState();
if (state.hasTarget)
{
// state.snapType : Corner / Edge
// state.screenPos : coordonnées écran de la cible d'accrochage
// state.distanceToMouse : distance en pixels
}
Requêtes de raycasting et de collision
Le raycasting est utilisé pour sélectionner des points sur les surfaces 3DGS, et les requêtes de collision sont utilisées pour l'interaction physique entre les personnages / objets et le nuage de points. Le résultat d'impact est retourné via HitResult.
Remarque :
Le champ de coordonnée mondiale du point d'impact de
HitResultest nomméhitPos(pasposition).
Raycast (coordonnées écran)
// Valeur de retour : bool, true=impact
public bool Raycast(Vector3 mousePos, out HitResult _finalResult)
Émet un rayon depuis des coordonnées écran pour détecter les impacts sur le nuage de points. Le rayon est généré en utilisant la caméra principale définie par SetMainCamera().
| Paramètre | Type | Description |
|---|---|---|
mousePos | Vector3 | Coordonnées écran |
_finalResult | out HitResult | Résultat de l'impact |
Remarques :
SetMainCamera()doit être appelé en premier pour définir la caméra principale.- Retourne le point d'impact le plus proche de la caméra.
- La précision est affectée par
SetRaycastDelta(), et la distance maximale est contrôlée parSetMaxRaycastDistance().
Exemple :
if (lccManager.Raycast(Input.mousePosition, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
Raycast (Ray)
// Valeur de retour : bool, true=impact
public bool Raycast(Ray _ray, out HitResult _finalResult)
Effectue le raycasting avec un Ray personnalisé, itérant sur tous les Renderers actifs et retournant l'impact le plus proche.
| Paramètre | Type | Description |
|---|---|---|
_ray | Ray | Ray |
_finalResult | out HitResult | Résultat de l'impact |
Exemple :
Ray ray = new Ray(origin, direction);
if (lccManager.Raycast(ray, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
RaycastMesh (coordonnées écran)
// Valeur de retour : bool, true=impact
public bool RaycastMesh(Vector3 mousePos, out HitResult _finalResult, float _distance = 70.0f)
Émet un rayon depuis des coordonnées écran pour détecter les impacts contre le mesh de collision du nuage de points. Utilise les données Collider pour la détection, ce qui est plus rapide que Raycast() mais moins précis.
| Paramètre | Type | Description |
|---|---|---|
mousePos | Vector3 | Coordonnées écran |
_finalResult | out HitResult | Résultat de l'impact |
_distance | float | Distance de détection maximale, défaut 70.0 |
Remarques :
- Les données doivent contenir des nœuds Collider, et
Renderer.SetColliderEnable(true)doit être appelé en premier.
Exemple :
if (lccManager.RaycastMesh(Input.mousePosition, out HitResult hit))
{
Debug.Log(hit.hitPos);
}
RaycastMesh (Ray + Bounds)
// Valeur de retour : bool, true=impact
public bool RaycastMesh(Ray ray, out HitResult result, out Bounds hitBounds, float maxDist = 70.0f)
Effectue la détection du mesh de collision avec un Ray personnalisé, retournant également la boîte englobante du nœud impacté.
| Paramètre | Type | Description |
|---|---|---|
ray | Ray | Ray |
result | out HitResult | Résultat de l'impact |
hitBounds | out Bounds | Boîte englobante du nœud impacté |
maxDist | float | Distance de détection maximale, défaut 70.0 |
Remarques :
- Les données doivent contenir des nœuds Collider.
Exemple :
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
if (lccManager.RaycastMesh(ray, out HitResult hit, out Bounds bounds))
{
Debug.Log(bounds.center);
}
RaycastWithSnap
// Valeur de retour : bool, true=impact
public bool RaycastWithSnap(Vector2 screenPos, Camera cam, out HitResult result)
Raycasting avec accrochage. Effectue d'abord un raycast normal, puis recherche les arêtes / coins proches du point d'impact pour s'y accrocher.
| Paramètre | Type | Description |
|---|---|---|
screenPos | Vector2 | Coordonnées écran |
cam | Camera | Caméra |
result | out HitResult | Résultat de l'impact (incluant les informations d'accrochage) |
Remarques :
SetSnapEnabled(true)doit être appelé en premier.- Plateformes PC / Mac uniquement ; non disponible sur mobile / VR.
- Priorité d'accrochage : Corner > Edge > None.
HitResult.snapTypeest le type d'accrochage,HitResult.hitPosest la coordonnée mondiale après accrochage, etHitResult.originalHitPosest le point d'impact d'origine avant accrochage.
Exemple :
if (lccManager.RaycastWithSnap(mousePos, cam, out HitResult hit))
{
// hit.snapType : Corner / Edge / None
// hit.hitPos : coordonnée mondiale après accrochage
// hit.originalHitPos : point d'impact d'origine avant accrochage
}
SetRaycastDelta
public void SetRaycastDelta(float delta)
Définit le paramètre de précision du raycasting. Une valeur plus petite signifie une précision plus élevée mais une consommation de performance plus élevée.
| Paramètre | Type | Description |
|---|---|---|
delta | float | Précision du raycasting, plage [0.1, 10.0], automatiquement bornée en cas de dépassement |
Remarques :
- Défaut
0.1. - Affecte la précision de détection de toutes les méthodes
Raycast().
Exemple :
lccManager.SetRaycastDelta(0.5f);
SetMaxRaycastDistance
public void SetMaxRaycastDistance(float _distance)
Définit la distance de détection maximale des méthodes Raycast().
| Paramètre | Type | Description |
|---|---|---|
_distance | float | Distance maximale de raycast, plage [10, 10000], automatiquement bornée en cas de dépassement |
Remarques :
- Affecte les surcharges
Raycast(Vector3)/Raycast(Ray); n'affecte pasRaycastMesh()(qui a son propre paramètre de distance).
Exemple :
lccManager.SetMaxRaycastDistance(500f);
IntersectsSphere
// Valeur de retour : bool, true=intersection
public bool IntersectsSphere(Sphere sphere)
// Valeur de retour : bool, true=intersection
public bool IntersectsSphere(Sphere sphere, out Vector3 delta)
Détecte si une sphère intersecte le collider du nuage de points. La deuxième surcharge retourne en plus le vecteur de pénétration, qui peut être utilisé pour la poussée physique.
| Paramètre | Type | Description |
|---|---|---|
sphere | Sphere | Sphère |
delta | out Vector3 | Vecteur de pénétration (direction et distance de poussée) |
Remarques :
- Les données doivent contenir des nœuds Collider, et
Renderer.SetColliderEnable(true)doit être appelé en premier. - Itère sur tous les Renderers actifs.
Exemple :
var sphere = new Sphere(transform.position, 0.5f);
if (lccManager.IntersectsSphere(sphere, out Vector3 delta))
{
transform.position += delta;
}
IntersectsCapsule
// Valeur de retour : bool, true=intersection
public bool IntersectsCapsule(Capsule capsule)
// Valeur de retour : bool, true=intersection
public bool IntersectsCapsule(Capsule capsule, out Vector3 delta)
Détecte si une capsule intersecte le collider du nuage de points, couramment utilisé pour la détection de collision des contrôleurs de personnage. La deuxième surcharge retourne le vecteur de pénétration.
| Paramètre | Type | Description |
|---|---|---|
capsule | Capsule | Capsule |
delta | out Vector3 | Vecteur de pénétration |
Remarques :
- Les données doivent contenir des nœuds Collider, et
Renderer.SetColliderEnable(true)doit être appelé en premier.
Exemple :
var capsule = new Capsule(footPos, headPos, 0.3f);
if (lccManager.IntersectsCapsule(capsule, out Vector3 delta))
{
characterController.Move(delta);
}
Effets visuels
TriggerVFX
public void TriggerVFX(Vector3 vfxOriginW, int vfxid = 0)
Déclenche un effet visuel à la coordonnée mondiale spécifiée, se propageant vers l'extérieur depuis cette coordonnée.
| Paramètre | Type | Description |
|---|---|---|
vfxOriginW | Vector3 | Origine en coordonnées mondiales de l'effet |
vfxid | int | ID de l'effet, défaut 0 |
Remarques :
- Doit être appelé après la fin du chargement de la scène LCC.
Exemple :
lccManager.TriggerVFX(hitPoint, 0);
Requêtes d'instances
GetAllRenderers
// Valeur de retour : List<Renderer>, une copie de toutes les instances Renderer enregistrées
public List<Renderer> GetAllRenderers()
Obtient la liste de toutes les instances Renderer actuellement enregistrées (retourne une copie).
Exemple :
var renderers = lccManager.GetAllRenderers();
foreach (var r in renderers) { /* ... */ }