XGRIDSDocumentación
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • Serie Lixel PortalCam

    • PortalCam P1

      • Descripción del producto
      • Operaciones básicas
      • Uso de la LCC Scan App
      • Mantenimiento y cuidado
      • FAQ
  • Serie Lixel K

    • Lixel K1

      • Descripción del producto
      • Operaciones básicas
      • Activación y conexión del dispositivo
      • Flujo de escaneo
      • Obtener nube de puntos con coordenadas absolutas
      • Fusión de mapas
      • Recomendaciones de planificación de rutas para escenas típicas
      • Precauciones
      • FAQ
    • Lixel K2

      • Descripción del producto
      • Operaciones básicas
      • Activación y conexión
      • Flujo de escaneo
      • Obtener nube de puntos con coordenadas absolutas
      • Fusión de mapas
      • Recomendaciones de planificación de rutas para escenas típicas
      • Precauciones
      • FAQ
  • Serie Lixel L

    • Lixel L2 Pro

      • Descripción del producto
      • Operaciones básicas
      • Activación y conexión del dispositivo
      • Flujo de escaneo
      • Obtener nube de puntos con coordenadas absolutas
      • Punto de medición
      • Apéndice
      • FAQ
    • Lixel L3

      • Descripción del producto
      • Operaciones básicas
      • Activación y conexión del dispositivo
      • Flujo de escaneo
      • Obtener nube de puntos con coordenadas absolutas
      • Apéndice
  • Accesorios

    • Stick Light

      • Guía de instalación
      • Operaciones básicas
      • Preguntas frecuentes
  • Lixel Studio

    • Versión y derechos de autor
    • Instalación y activación
    • Interfaz del software
    • Operaciones de archivo
    • Procesamiento de proyectos
    • Herramientas
    • Dibujo 2D
    • Aplicaciones
    • Ajustes
    • Conexión de dispositivo
    • Preguntas Frecuentes
  • Lixel CyberColor

    • LCC Studio

      • Primeros pasos
      • Versión y actualizaciones
      • Descarga e instalación
      • Descripción general de la interfaz y navegación
      • Antes de la reconstrucción
      • Reconstrucción de modelos
      • Reconstrucción de modelo único
      • Fusión de mapas
      • Fusión aire-tierra
      • Reconstrucción aérea
      • Mis modelos
      • Otras funciones
      • Ajustes y cuenta
      • Converter
      • Reconstrucción por vídeo
      • Preguntas frecuentes
    • LCC Scene Editor

      • Versión y actualizaciones
      • Cuenta e inicio de sesión
      • Descripción general del producto y página de inicio
      • Interfaz del editor
      • Modos de navegación
      • Archivo
      • Configuración
      • Editar
      • Ventana
      • Barra de herramientas global
      • Activos y propiedades
      • Barra de herramientas izquierda
      • Puntos de vista
      • Portal
      • Skybox
      • Anotaciones
      • Medición
      • Flythrough
      • Informe de escena
      • 3D Layout
      • Minimapa
      • Modo Vista previa (Viewer)
      • Ayuda
      • Preguntas frecuentes (FAQ)
      • Punto de inicio
    • LCC Model Editor

      • Versión y actualizaciones
      • Guía del usuario
      • Visión general e interfaz
      • Operaciones de archivo
      • Selectores
      • Edición de modelos
      • Medición
      • Corrección de color
      • Gestión de activos
      • Configuración y ayuda
      • Preguntas frecuentes
    • Capture Guide

      • Descripción general
      • Descripción general de los dispositivos de captura
      • Principios generales de captura
      • Captura de escenas interiores
      • Captura de escenas exteriores
      • Captura a gran escala (Map Fusion)
      • Captura con aerial-ground map fusion
      • Captura de objetos
      • Captura de personas
      • Captura para reconstrucción a partir de vídeo
      • HD Enhancement
      • Puntos de control (Lixel P1)
      • Preguntas frecuentes y resolución de problemas
    • Buenas Prácticas

      • Fusión de varios modelos 3DGS de gran tamaño
    • Historial de versiones
  • Plugins y SDK

    • Unreal

      • Introducción
      • Inicio rápido - Windows
      • Inicio rápido - Linux
      • Inicio rápido - Quest3
      • Ediciones y licencias
      • Renderizado
      • Rasterización Tiled (experimental)
      • Ajustes visuales
      • Normales e iluminación
      • Edición de escenas
      • Parámetros de rendimiento
      • Guía de rendimiento
      • Integración con plugins de terceros y del motor
      • Proxy Mesh
      • Animación de carga
      • Colisión
      • Compatibilidad con Navigation System
      • Compatibilidad con Single Layer Water
      • Localización
      • Preguntas frecuentes
      • Resolución de problemas
      • Logs y diagnóstico
      • Contacto
      • Buenas prácticas

        • Reiluminar 3DGS con una malla de LixelStudio
      • Referencia de API

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • Actors SOG / SPZ / PLY
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enumeraciones
        • Structs
      • Registro de cambios

        • v3.4.0
        • v3.3.1
        • v3.0.0
        • v2.2.1
        • v1.0.0
        • v0.9.0
        • v0.8.0
        • v0.7.1
        • v0.6.1
        • v0.5.2
        • v0.4.1
        • v0.4.0
        • v0.3.0
        • v0.0.5
        • v0.0.4
        • v0.0.3
        • v0.0.2
        • v0.0.1
    • Unity

      • Introducción al SDK de Unity
      • Funciones técnicas
      • Requisitos del entorno de desarrollo
      • Guía de inicio rápido para PC
      • Guía de optimización de ajustes del proyecto
      • Guía de desarrollo para Pico 4 Ultra
      • Guía de streaming desde PC para Pico 4 Ultra
      • Guía de desarrollo para Quest 3
      • Guía de streaming desde PC para Quest 3
      • Guía de desarrollo con OpenXR
      • Guía de Business Streaming para Pico 4 Ultra
      • Glosario
      • Preguntas frecuentes
      • Contáctanos
      • Guía de desarrollo de funciones

        • Guía de desarrollo de renderizado mixto de varias escenas
        • Guía de desarrollo de recepción de sombras
        • Guía de desarrollo de iluminación en tiempo real
        • Guía de desarrollo de renderizado multicámara
        • Guía de desarrollo de renderizado de imágenes de alta resolución
        • Guía de desarrollo de compatibilidad de formatos de datos LCC y LCC2
        • Guía de desarrollo del efecto de carga
        • Guía de desarrollo de cambio de modo de renderizado Mip
        • Guía de desarrollo de ajuste a bordes y esquinas
        • Guía de desarrollo de decal proyectado
        • Guía de desarrollo de decal proyectado de vídeo
        • Guía de desarrollo de resaltado
        • Guía de desarrollo de recorte en tiempo real
        • Guía de desarrollo de ajuste de color
        • Guía de desarrollo para obtener los datos de malla de la escena
        • Guía de desarrollo del modo Editor
        • Guía de configuración de parámetros de rendimiento de renderizado
        • Guía de desarrollo de co-empaquetado de aplicación y datos
        • Guía de desarrollo del sistema de colisiones
        • Guía de problemas de permisos de desarrollo en macOS
        • Guía de desarrollo de compilación y empaquetado para dispositivos iOS
      • Referencia de API

        • LCCManager
        • Renderer
        • Tipos de datos
      • Registro de cambios

        • v2.3.0
        • v2.2.10
        • v2.2.0
        • v2.1.19
        • v2.0.14
    • Web

      • Introducción
      • Guía de optimización del rendimiento de renderizado
      • Configuración de gráficos
      • Preguntas frecuentes
      • Referencia de API

        • LCCRender::clearIndexDB
        • LCCRender::dispose
        • LCCRender::load
        • LCCRender::setCamera
        • LCCRender::unload
        • LCCRender::update
        • LCCObject::checkRenderNextFrame
        • LCCObject::clearRenderNextFrame
        • LCCObject::ecef2Prj
        • LCCObject::getBounds
        • LCCObject::getEnvInstancedMesh
        • LCCObject::getInstancedMesh
        • LCCObject::getLodInfos
        • LCCObject::getOriginPosition
        • LCCObject::getProjectionCoordinateSystemInfos
        • LCCObject::hasCollision
        • LCCObject::hasEnvironment
        • LCCObject::hasShcoef
        • LCCObject::intersectsCapsule
        • LCCObject::intersectsRayExt
        • LCCObject::intersectsRayFromOriginExt
        • LCCObject::intersectsSphere
        • LCCObject::lowerToBottom
        • LCCObject::prj2Ecef
        • LCCObject::raiseToTop
        • LCCObject::raycast
        • LCCObject::raycastFromOrigin
        • LCCObject::setAlpha
        • LCCObject::setClipBox
        • LCCObject::setClipPlane
        • LCCObject::setEndLod
        • LCCObject::setLodAutoLevelUp
        • LCCObject::setMaxDistance
        • LCCObject::setMaxNodeSplats
        • LCCObject::setMaxSplats
        • LCCObject::setOriginPosition
        • LCCObject::setPointsColor
        • LCCObject::setRenderState
        • LCCObject::setRotation
        • LCCObject::setScale
        • LCCObject::setSemantic
        • LCCObject::setSemanticColor
        • LCCObject::setSmooth
        • LCCObject::setStartLod
        • LCCObject::setTranslation
        • LCCObject::setVisible
        • LCCObject::togglePointsDisplayMode
        • LCCObject::useEnvironment
        • LCCObject::useShcoef
      • Registro de cambios

        • v0.6.3
        • v0.6.2
        • v0.6.1
        • v0.6.0
        • v0.5.5
        • v0.5.4
        • v0.5.3
        • v0.5.2
        • v0.5.1
        • v0.5.0
        • v0.4.1
        • v0.4.0
        • v0.3.1
        • v0.3.0
        • v0.2.0

Guía de desarrollo de ajuste de color

El LCC Unity SDK admite operaciones de edición como el resaltado, el recorte y el ajuste de color en escenas 3DGS. Esta guía presenta las operaciones de ajuste de color: seleccionar un área mediante texturas proyectadas 2D, geometría 3D o una mezcla de ambas, y ajustar el brillo, la saturación y el contraste del área seleccionada, con compatibilidad para la selección normal y la selección invertida.

Nota:

La función de ajuste de color actual es solo un efecto de visualización en tiempo de ejecución; no modifica el archivo de datos original de ninguna manera y no admite guardar ni exportar el resultado de la edición. Si necesitas ajustar el color, recortar y guardar datos, usa la herramienta de software XGRIDS LCC Editor.

Si no quieres modificar los datos, también puedes registrar las operaciones y reproducirlas (ejecutar los ajustes) después de que los datos terminen de cargarse la próxima vez.

Requisitos previos

Ajustar el color de una escena a través del SDK requiere las siguientes condiciones:

  1. Entrar en el estado de edición antes de cargar los datos. El SDK está en el estado de navegación (View) por defecto, que proporciona el mejor rendimiento y se recomienda para la navegación normal. Para realizar operaciones de edición como el ajuste de color, cambia al estado de edición mediante SetEditorMode(true) antes de llamar a Load. Este método solo surte efecto si se llama antes de cargar todos los datos.
  2. Realizar la operación de ajuste de color después de que los datos terminen de cargarse. La interfaz de ajuste de color debe llamarse después de que los datos de la escena se hayan cargado por completo.

Paso 1: Configurar la escena

Prepara los GameObjects necesarios para el ajuste de color en la escena:

  • Main Camera: la cámara de la escena; el ajuste de color 2D usa sus matrices de vista y proyección.
  • LCCManager: un GameObject vacío con un Transform normalizado, con el script LCCManager añadido.
  • LCCRenderer: un GameObject vacío con el Transform establecido como Rotation.x = -90, Scale.x = -1 (alineado con el sistema de coordenadas de los datos LCC), usado para adjuntar el script Tone escrito más adelante.
  • Geometría de selección 3D (opcional): objetos auxiliares para el ajuste de color 3D. El ejemplo prepara un Cube (Box1); moverlo y escalarlo controla la posición y el tamaño de la selección de ajuste de color 3D.

Nota:

Para los ajustes relacionados con los GameObjects de la cámara de renderizado, LCCManager y LCCRenderer, consulta las secciones relevantes de Guía de inicio rápido para PC y Guía de optimización de ajustes del proyecto.

Paso 2: Comprender la estructura de datos

El ajuste de color usa la estructura de datos ToneMix, que puede describir tanto una selección por textura 2D como una selección por geometría 3D al mismo tiempo, y lleva los parámetros de ajuste de color. Los enums y structs usados son los siguientes.

public enum SelectMode    { normal, invert, clip }  // selección normal, inversión, recorte en tiempo real
public enum OperationMode { normal, erase }         // selección normal, borrar selección
public enum ShapeType     { box, sphere }           // selección 3D Box, selección 3D Sphere
public enum EditType      { Edit2D, Edit3D }        // edición 2D, edición 3D

// Selección de ajuste de color
public struct ToneMix
{
    public EditType editType;       // tipo de edición (obligatorio; determina si se usan los campos 2D o 3D)
    public Texture2D texture;       // textura de máscara 2D (usada por Edit2D)
    public Matrix4x4 mv;            // matriz de vista de la cámara (usada por Edit2D)
    public Matrix4x4 mvp;           // matriz de vista-proyección de la cámara (usada por Edit2D)
    public ShapeType type;          // tipo de geometría (usado por Edit3D)
    public Matrix4x4 invMat;        // matriz inversa de la geometría (usada por Edit3D)
    public OperationMode operation; // tipo de operación (usado por Edit3D)
    public SelectMode mode;         // modo de selección (obligatorio)

    public float brightness;        // brillo, rango [0, 3], por defecto 1.0
    public float saturation;        // saturación, rango [0, 3], por defecto 1.0
    public float contrast;          // contraste, rango [0, 3], por defecto 1.0
    public int lutid;               // índice de la tabla LUT (reservado), 0 significa no usado
}

Hay tres puntos a tener en cuenta sobre la lista de ajuste de color:

  1. La lista está ordenada. Ya sea 2D o 3D, las entradas de la lista surten efecto en orden; asegúrate de que el orden de adición coincide con tu expectativa.
  2. Invertir debe llevar datos de ajuste de color. Esta es la diferencia más crítica entre el ajuste de color y el resaltado/recorte — la inversión del resaltado/recorte es un comando puro y no necesita asociarse con datos; pero la entrada de inversión del ajuste de color, además de mode = SelectMode.invert, también debe establecer brightness, saturation y contrast, para especificar el efecto de ajuste de color del área fuera de la selección.
  3. El número máximo de entradas en una sola lista es 255. Superarlo devuelve un código de error.

Paso 3: Comprender las API de ajuste de color

Todas las interfaces relacionadas con el ajuste de color las proporciona LCCManager, incluido un método SetTone y un método de salida.

SetTone

// Valor de retorno: int
// 0: éxito
// 1: la lista es null o tiene 0 elementos
// 2: los elementos de la lista superan el máximo de 255
public int SetTone(List<ToneMix> _Mix)

Realiza el ajuste de color en el área seleccionada, admitiendo ajustes de brillo, saturación y contraste. Las entradas de textura 2D y las entradas de geometría 3D pueden mezclarse en la misma lista.

QuitToneMode

// Valor de retorno: void
public void QuitToneMode()

Sale del modo de ajuste de color y restaura los colores originales de la escena.

Consejo:

Al cambiar los parámetros de ajuste de color o limpiar el ajuste de color actual, llama primero a QuitToneMode() y luego establece el nuevo ajuste de color.

Paso 4: Especificación de la textura de máscara 2D

El ajuste de color 2D describe la selección mediante una textura de máscara, admitiendo varios métodos de selección como cuadriláteros, triángulos, pinceles y lazos — simplemente marca los píxeles correspondientes en la textura con el valor seleccionado. Al usar operaciones 2D, la cámara debe estar bloqueada y la textura marcada desde un punto de vista fijo. La textura y los valores de píxel tienen las siguientes convenciones:

  • La textura está fijada en 1024 × 1024, R8 de un solo canal, sin Mipmap, con filtrado por puntos (FilterMode.Point) y muestreo limitado (TextureWrapMode.Clamp).
  • Convenciones de valor de píxel:
Valor de píxelSignificado
128Por defecto (no seleccionado)
240Seleccionado
180Deseleccionar (borrar el área ya seleccionada)
0Recorte

En un escenario de ajuste de color, normalmente solo se usan los dos valores 128 (por defecto) y 240 (seleccionado).

Paso 5: Escribir el script

Crea un nuevo script C# llamado Tone.cs. Primero completa el esqueleto básico: en Start, entra en el estado de edición y carga los datos; después de que la carga finalice, establece el indicador de carga para que los métodos de ajuste de color posteriores lo comprueben.

using LCCCore;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class Tone : MonoBehaviour
{
    public LCCManager m_manager;
    public string m_FilePath;
    public GameObject m_Box1;
    public Slider m_brightness;
    public Slider m_saturation;
    public Slider m_contrast;

    private LCCCore.Renderer m_renderer;
    private Camera m_camera;
    private bool m_isLoaded = false;

    void Start()
    {
        m_camera = Camera.main;
        m_manager.SetPlatformType(PlatformType.PC);

        // Entra en el modo de edición; debe llamarse antes de Load
        m_manager.SetEditorMode(true);

        m_renderer = m_manager.GetRender(this.transform);
        if (m_renderer == null)
            Debug.LogError("Error en GetRender, comprueba que el manager esté configurado correctamente y que la ruta del archivo sea válida.");

        m_renderer.Load(m_FilePath, onLoadProgress, onLoadCallback);
    }

    private void onLoadProgress(float value)
    {
        Debug.Log($"progreso de carga: {value}");
    }

    private void onLoadCallback()
    {
        Debug.Log("datos cargados !!!");
        m_isLoaded = true;
    }

    // Métodos de ajuste de color a continuación
}

Nota:

SetEditorMode(true) debe llamarse antes de Load para surtir efecto; y SetTone debe llamarse después de que los datos terminen de cargarse (después de que se dispare la devolución de llamada onLoadCallback). Los tres sliders m_brightness, m_saturation y m_contrast se usan para ajustar dinámicamente los parámetros de ajuste de color en tiempo de ejecución y pueden usarse según sea necesario.

Paso 6: Adjuntar el script y establecer propiedades

  1. Adjunta el script Tone.cs al GameObject LCCRenderer.
  2. En la ventana Inspector, arrastra el GameObject LCCManager a la propiedad Manager del script.
  3. Rellena la ruta del archivo LCC en la propiedad File Path.
  4. Arrastra Box1 de la escena a la propiedad Box1 del script, y arrastra los tres sliders a las propiedades Brightness, Saturation y Contrast respectivamente, para el ajuste de color 3D y el ajuste de parámetros en tiempo de ejecución.
Establecer las propiedades del script Tone en el Inspector

Establecer las propiedades del script Tone en el Inspector

Paso 7: Ejemplos de operación de ajuste de color

Añade los métodos siguientes a la clase Tone y llama al método correspondiente después de ejecutar y después de que los datos terminen de cargarse.

Ajuste de color normal

Construye una textura de máscara R8, marca los píxeles a ajustar el color como 240 y el resto como 128, luego construye ToneMix con las matrices de la cámara, establece brightness, saturation y contrast, y añádelo a la lista.

public void onTone()
{
    // El tamaño de la textura está fijado en 1024*1024; mantén las demás propiedades igual que el ejemplo
    Texture2D _texture = new Texture2D(1024, 1024, TextureFormat.R8, false);
    _texture.filterMode = FilterMode.Point;
    _texture.wrapMode = TextureWrapMode.Clamp;

    int _count = 1024 * 1024;
    int _half = _count / 2;
    byte[] _values = new byte[_count];
    for (int i = 0; i < _count; i++)
    {
        if (i < _half)
            _values[i] = 128;    // 128 significa por defecto, 240 significa seleccionado, 0 significa recorte
        else
            _values[i] = 240;
    }
    _texture.SetPixelData(_values, 0);

    List<ToneMix> _tMixs = new List<ToneMix>();
    ToneMix _tmix01 = new ToneMix();
    _tmix01.editType = EditType.Edit2D;
    _tmix01.mv = m_camera.worldToCameraMatrix * this.transform.localToWorldMatrix;
    _tmix01.texture = _texture;
    _tmix01.mode = SelectMode.normal;
    _tmix01.mvp = GL.GetGPUProjectionMatrix(m_camera.projectionMatrix, true) * m_camera.worldToCameraMatrix * this.transform.localToWorldMatrix;
    _tmix01.brightness = 2.0f;
    _tmix01.saturation = 2.0f;
    _tmix01.contrast = 0.4f;
    _tMixs.Add(_tmix01);

    m_manager.SetTone(_tMixs);
}

Explicación del código: se construye una textura de máscara que selecciona la mitad superior de la pantalla (el origen de la pantalla es la esquina inferior izquierda), y se aplica un ajuste de color de brillo 2.0, saturación 2.0 y contraste 0.4 al área seleccionada. El efecto del ejemplo es el siguiente.

En el uso real, puedes usar varias herramientas de selección como rectángulos, triángulos, pinceles y lazos para seleccionar las posiciones correspondientes en la máscara, y también pasar dinámicamente los valores de brightness, saturation y contrast mediante sliders.

Efecto de ajuste de color normal

Efecto de ajuste de color normal

Ajuste de color con inversión

La inversión del ajuste de color difiere del resaltado y el recorte: la entrada de inversión, además de establecer mode = SelectMode.invert, debe llevar datos de ajuste de color (brightness, saturation, contrast) para especificar el efecto de ajuste de color del área fuera de la selección. Sobre la base del ajuste de color normal anterior, simplemente añade una entrada de inversión.

public void onToneInvert()
{
    // El tamaño de la textura está fijado en 1024*1024; mantén las demás propiedades igual que el ejemplo
    Texture2D _texture = new Texture2D(1024, 1024, TextureFormat.R8, false);
    _texture.filterMode = FilterMode.Point;
    _texture.wrapMode = TextureWrapMode.Clamp;

    int _count = 1024 * 1024;
    int _half = _count / 2;
    byte[] _values = new byte[_count];
    for (int i = 0; i < _count; i++)
    {
        if (i < _half)
            _values[i] = 128;    // 128 significa por defecto, 240 significa seleccionado, 0 significa recorte
        else
            _values[i] = 240;
    }
    _texture.SetPixelData(_values, 0);

    List<ToneMix> _tMixs = new List<ToneMix>();

    // Ajuste de color de selección normal
    ToneMix _tmix01 = new ToneMix();
    _tmix01.editType = EditType.Edit2D;
    _tmix01.mv = m_camera.worldToCameraMatrix * this.transform.localToWorldMatrix;
    _tmix01.texture = _texture;
    _tmix01.mode = SelectMode.normal;
    _tmix01.mvp = GL.GetGPUProjectionMatrix(m_camera.projectionMatrix, true) * m_camera.worldToCameraMatrix * this.transform.localToWorldMatrix;
    _tmix01.brightness = 2.0f;
    _tmix01.saturation = 2.0f;
    _tmix01.contrast = 0.4f;
    _tMixs.Add(_tmix01);

    // Invertir: debe llevar datos de ajuste de color (brillo/saturación/contraste), no es un comando puro
    ToneMix _tmix02 = new ToneMix();
    _tmix02.editType = EditType.Edit2D;
    _tmix02.mode = SelectMode.invert;
    _tmix02.brightness = 0.5f;
    _tmix02.saturation = 0.5f;
    _tmix02.contrast = 2.0f;
    _tMixs.Add(_tmix02);

    m_manager.SetTone(_tMixs);
}

Explicación del código: se añade una entrada de inversión sobre el ajuste de color normal, aplicando un ajuste de color de brillo 0.5, saturación 0.5 y contraste 2.0 al área fuera de la selección. De esta manera, se pueden aplicar diferentes parámetros de ajuste de color dentro y fuera de la selección. El efecto del ejemplo es el siguiente.

Efecto de ajuste de color con inversión

Efecto de ajuste de color con inversión

Nota:

La inversión del resaltado y el recorte es un comando puro: añadir una entrada con mode = SelectMode.invert es suficiente, sin requerir otros datos. Pero la entrada de inversión del ajuste de color debe establecer también brightness, saturation y contrast; de lo contrario, el área invertida usa los valores por defecto (1.0) y no logra el efecto esperado.

Paso 8: Salir del ajuste de color

Llama a QuitToneMode() para limpiar el ajuste de color actual y restaurar los colores originales de la escena.

public void onToneClear()
{
    m_manager.QuitToneMode();
}

Pasos clave

Los pasos clave para ajustar el color de una escena 3DGS:

  1. Llama a SetEditorMode(true) antes de cargar los datos para entrar en el estado de edición.
  2. Llama a SetTone después de que los datos terminen de cargarse (después de que se dispare la devolución de llamada onLoadCallback, o se active mediante un botón/evento).
  3. Controla el efecto de ajuste de color mediante brightness, saturation y contrast de ToneMix (rango [0, 3], por defecto 1.0), y asegúrate de que el orden de adición de la lista de ajuste de color coincide con tu expectativa.
  4. La textura de máscara 2D está fijada en 1024 × 1024, R8 de un solo canal; rellena los valores de píxel según la convención (128 por defecto, 240 seleccionado).
  5. La inversión del ajuste de color (SelectMode.invert) debe llevar datos de brightness, saturation y contrast — esta es la diferencia clave con la inversión del resaltado/recorte.
  6. Al limpiar o cambiar el ajuste de color, llama primero a QuitToneMode().