Renderer : Instance de rendu
Une instance de rendu LCC, responsable du chargement des données et du contrôle du rendu d'une seule scène 3DGS. Elle est créée via LCCManager.GetRender() et ne peut pas être instanciée directement.
| Espace de noms | LCCCore |
Propriétés
| Propriété | Type | Accès | Description |
|---|---|---|---|
Transform | Transform | Lecture seule | Le composant Transform auquel l'instance de rendu est attachée |
IsEnable | bool | Lecture seule | Si l'instance de rendu est active ; défaut true |
IsRenderAll | bool | Lecture seule | Si les données LOD0 complètes sont rendues (vs. mode streaming / parcours LOD) ; défaut false |
Méthodes
Les méthodes sont regroupées par objectif :
Chargement des données et cycle de vie
Load
public void Load(string _filePath, Action<float> _onProgress, Action _onComplete, Action<string> _onError = null)
Charge un fichier de données 3DGS. Prend en charge .lcc2 (fichier local ou HTTP distant) et les formats natifs .ply / .sog / .spz / .splat / .ksplat (fichiers locaux uniquement).
| Paramètre | Type | Description |
|---|---|---|
_filePath | string | Chemin du fichier de données (chemin local ou URL HTTP) |
_onProgress | Action<float> | Callback de progression de chargement, peut être null |
_onComplete | Action | Callback de fin de chargement, peut être null |
_onError | Action<string> | Callback d'échec de chargement (optionnel), avec la description de l'erreur comme paramètre |
Remarques :
- Le callback
_onCompletese déclenche après que les données sont réellement arrivées sur le GPU. - Les opérations telles que la réception des ombres et le déclenchement d'effets doivent être appelées à l'intérieur du callback
_onComplete. - Les formats natifs utilisent toujours le chemin de chargement complet SingleRender (pas de découpage LOD) ; la progression est signalée via
_onProgresset les échecs via_onError. - Le mode
MultiRendern'autorise pas les sources de données HTTP ni les formats natifs. - HTTP ne prend en charge que
.lcc2; les formats natifs sont des chemins locaux uniquement et en mode SingleRender uniquement. SetPlatformType()/SwitchRenderPass()/SetMainCamera()et les autres prérequis doivent être terminés en premier.- Vous devez appeler
Unload()ouDispose()avant de rappelerLoad(); appelerLoad()pendant qu'un chargement est en cours est rejeté et déclenche_onError.
Exemple :
renderer.Load("D:/data/scene.lcc2",
p => Debug.Log($"Chargement {p:P0}"),
() => {
Debug.Log("Chargement terminé");
lccManager.SetShadowReceive(true);
});
Unload
public void Unload()
Libère les données actuellement chargées et revient à l'état « créé mais non chargé », en conservant l'enregistrement du manager de l'instance. La même instance Renderer peut être réutilisée en répétant le cycle Load → Unload → Load.
Remarques :
- Différence avec
Dispose(): l'enregistrement du manager n'est pas supprimé et l'instance peut être réutilisée. - Après
Unload(),IsEnableestfalse; rappelerLoad()réinitialise tout l'état des données. - Ne s'exécute que lorsque les données ont fini de charger ; retourne immédiatement lorsque rien n'est chargé ou déjà
Dispose()d.
Exemple :
renderer.Unload();
renderer.Load(newFilePath, null, () => Debug.Log("Rechargé"));
Dispose
public void Dispose()
Détruit l'instance de rendu et libère toutes les ressources GPU et la mémoire. L'instance ne peut plus être utilisée après la destruction, et toutes les méthodes publiques deviennent automatiquement inefficaces.
Remarques :
- Notifie automatiquement le LCCManager de supprimer la référence après l'appel.
Exemple :
renderer.Dispose();
renderer = null;
Contrôle à l'exécution et requêtes
SetEnable
public void SetEnable(bool _enable)
Définit l'état d'activation de l'instance de rendu. Lorsqu'elle est désactivée, elle ne participe pas au rendu ni à la sélection LOD.
| Paramètre | Type | Description |
|---|---|---|
_enable | bool | S'il faut activer |
Remarques :
- Ne libère pas les ressources et peut être réactivée à tout moment.
Exemple :
renderer.SetEnable(false); // Masquer
renderer.SetEnable(true); // Afficher
SetAlpha
public void SetAlpha(float alpha)
Définit l'opacité indépendante du Renderer actuel. Contrairement à l'alpha global au niveau du processus de LCCManager.SetAlpha(), cette API n'affecte que le Renderer actuel. Alpha final = couverture splat × alpha global LCCManager × alpha de ce Renderer.
| Paramètre | Type | Description |
|---|---|---|
alpha | float | Opacité indépendante du Renderer actuel, plage [0, 1], automatiquement bornée en cas de dépassement |
Remarques :
- Ne prend effet que sur le chemin MultiRender / RenderCore (PC / Mac) ; sur ce chemin, chaque splat porte un renderID, et le shader indexe le tableau d'alpha par Renderer par renderID.
- Le chemin FullRender / Mobile n'a pas de renderID, donc cette API y est sans effet (la valeur est mise en cache et automatiquement appliquée lors du passage ultérieur au chemin RenderCore).
Exemple :
renderer.SetAlpha(0.5f);
SetRenderAll
public void SetRenderAll(bool _renderAll)
Définit s'il faut utiliser le mode de rendu complet (rendre entièrement les données LOD0). Il prend effet au prochain appel Load() et n'affecte pas le jeu de données actuellement chargé.
| Paramètre | Type | Description |
|---|---|---|
_renderAll | bool | S'il faut rendre entièrement |
Remarques :
- Pris en charge uniquement sur les plateformes PC / Mac ; aucun effet sur mobile / VR.
- Interrogez l'état actuel avec la propriété
IsRenderAll.
Exemple :
renderer.SetRenderAll(true);
renderer.Load(filePath, null, () => Debug.Log("Chargement complet"));
SetColliderEnable
// Valeur de retour : bool, true=défini avec succès, false=les données n'ont pas de collider ou l'instance est inactive
public bool SetColliderEnable(bool _enable)
Active/désactive la fonctionnalité de collider. Une fois activée, IntersectsSphere() / IntersectsCapsule() et RaycastMesh() deviennent disponibles.
| Paramètre | Type | Description |
|---|---|---|
_enable | bool | S'il faut activer le collider |
Remarques :
- Les données doivent contenir un nœud Collider, sinon
falseest retourné. - Le Renderer doit être actif.
Exemple :
bool ok = renderer.SetColliderEnable(true);
if (!ok) Debug.LogWarning("Les données ne contiennent pas de collider");
SetEnvironment
public void SetEnvironment(bool _env)
Active/désactive le rendu des données d'environnement. 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 |
|---|---|---|
_env | bool | S'il faut rendre les données d'environnement |
Remarques :
- Les données doivent contenir des nœuds d'environnement.
- Les données d'environnement sont indépendantes du système LOD des données principales.
Exemple :
renderer.SetEnvironment(true);
GetBounds
public void GetBounds(out Vector3 max, out Vector3 min)
Obtient la boîte englobante alignée sur les axes (coordonnées mondiales) des données rendues.
| Paramètre | Type | Description |
|---|---|---|
max | out Vector3 | Point maximal de la boîte englobante (coordonnées mondiales) |
min | out Vector3 | Point minimal de la boîte englobante (coordonnées mondiales) |
Remarques :
- Retourne
Vector3.zerolorsque les données ne sont pas entièrement chargées. - Peut être utilisé pour le positionnement de la caméra et le calcul de l'angle de vue.
Exemple :
renderer.GetBounds(out Vector3 max, out Vector3 min);
Vector3 center = (max + min) / 2f;
Vector3 size = max - min;
GetSourceType
// Valeur de retour : SourceType
public SourceType GetSourceType()
Obtient le type de source des données chargées ; voir SourceType.
Remarques :
- Retourne
SourceType.Nonelorsque les données ne sont pas chargées.
GetDataType
// Valeur de retour : DataType
public DataType GetDataType()
Obtient le type de format des données chargées ; voir DataType.
Remarques :
- Retourne
DataType.Nonelorsque les données ne sont pas chargées.
GetMeta (depuis le chemin du fichier)
// Valeur de retour : bool, true=lecture réussie
public bool GetMeta(string _filePath, out SplatMeta _metaData)
Lit les métadonnées des données 3DGS depuis le chemin de fichier spécifié sans charger entièrement les données.
| Paramètre | Type | Description |
|---|---|---|
_filePath | string | Chemin du fichier de données |
_metaData | out SplatMeta | Métadonnées de sortie |
Remarques :
- Prend en charge les chemins locaux et les URL HTTP.
- Ne lit que les métadonnées d'en-tête du fichier et ne charge pas les données du nuage de points.
- Retourne
falselorsque le chemin est vide ou que le fichier n'existe pas.
Exemple :
if (renderer.GetMeta(filePath, out SplatMeta meta))
{
Debug.Log(meta.source);
Debug.Log(meta.dataType);
}
GetMeta (depuis les données chargées)
// Valeur de retour : bool, true=lecture réussie
public bool GetMeta(out SplatMeta _metaData)
Obtient les métadonnées des données actuellement chargées. Si les données n'ont pas fini de charger, il essaie de lire depuis le chemin du fichier.
| Paramètre | Type | Description |
|---|---|---|
_metaData | out SplatMeta | Métadonnées de sortie |
Exemple :
if (renderer.GetMeta(out SplatMeta meta))
{
Debug.Log(meta.source);
}
GetMeshBlockInfos
// Valeur de retour : List<LCCMeshBlockInfo>, métadonnées des blocs Mesh de collision ; null lorsqu'il n'y a pas de Mesh ou indisponible
public List<LCCMeshBlockInfo> GetMeshBlockInfos()
Retourne les métadonnées de tous les blocs Mesh de collision (id, boîte englobante mondiale / locale, nombre de sommets, nombre de faces). Sans E/S, sans analyse — ne lit que les métadonnées déjà en mémoire. Voir LCCMeshBlockInfo.
Remarques :
- Plateforme PC / Mac + source de données locale uniquement ; doit être appelée sur le thread principal.
- Utilisation typique : utilisez-la d'abord pour obtenir la boîte englobante mondiale de chaque bloc, choisissez les ids nécessaires, puis appelez
GetMeshes(ids)pour lire uniquement ces blocs. - Les formats natifs (PLY / SOG / SPZ / splat / ksplat) n'ont pas de Mesh et retournent
null(normal, pas de journal).
Exemple :
var infos = renderer.GetMeshBlockInfos();
foreach (var info in infos)
{
Debug.Log($"{info.id}: verts={info.vertexCount}, faces={info.faceCount}");
}
GetMeshes
// Valeur de retour : List<LCCMeshBlock>, toutes les données géométriques des Mesh de collision ; null lorsqu'indisponible
public List<LCCMeshBlock> GetMeshes()
Retourne de manière synchrone les données géométriques de tous les blocs Mesh de collision (sommets + indices de triangles, en coordonnées locales). C'est une opération lourde (lecture disque synchrone + analyse + allocation), appelez-la donc une fois et mettez-la vous-même en cache — ne l'appelez jamais à chaque image. Voir LCCMeshBlock.
Remarques :
- Plateforme PC / Mac + source de données locale uniquement ; doit être appelée sur le thread principal.
- Pour les grandes scènes, utilisez
GetMeshBlockInfos()pour choisir les ids +GetMeshes(ids)afin d'éviter d'allouer une énorme quantité de mémoire managée en une fois. - Un seul bloc peut avoir plus de 65535 sommets, donc
mesh.indexFormat = IndexFormat.UInt32doit être défini avant de construire le Mesh.
Exemple :
var meshes = renderer.GetMeshes();
foreach (var block in meshes)
{
// block.vertices / block.triangles sont dans le système de coordonnées local de l'objet
}
GetMeshes (par id)
// Valeur de retour : List<LCCMeshBlock>, données géométriques des Mesh de collision des ids spécifiés ; null lorsqu'il n'y a pas d'impact
public List<LCCMeshBlock> GetMeshes(IEnumerable<string> _ids)
Retourne de manière synchrone les données géométriques des blocs Mesh de collision (en coordonnées locales) des ids spécifiés. Les ids sont fournis par GetMeshBlockInfos().
| Paramètre | Type | Description |
|---|---|---|
_ids | IEnumerable<string> | L'ensemble des ids de blocs cibles (fourni par GetMeshBlockInfos()) |
Remarques :
- Les ids inconnus sont ignorés avec un avertissement ; les ids dupliqués sont dédupliqués (pas de lectures disque répétées) ; l'ordre de retour est l'ordre de parcours des ids (après déduplication).
- Retourne
nullavec un avertissement lorsque l'entrée estnull, vide ou sans impact. - Les autres contraintes sont identiques à
GetMeshes().
Exemple :
var ids = new List<string> { "block-0", "block-3" };
var meshes = renderer.GetMeshes(ids);