XGRIDSДокументация
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • 简体中文
  • English
  • 繁體中文
  • 日本語
  • Deutsch
  • Español
  • Italiano
  • Français
  • Русский
  • Polski
  • Nederlands
  • Lixel CyberColor

    • Руководство пользователя LCC Studio

      • Начало работы
      • Версия и обновления
      • Загрузка и установка
      • Обзор интерфейса и навигация
      • Перед реконструкцией
      • Реконструкция модели
      • Реконструкция одиночной модели
      • Объединение карт
      • Воздушно-наземное объединение
      • Воздушная реконструкция
      • Мои модели
      • Другие функции
      • Настройки и учётная запись
      • Конвертер
      • Реконструкция по видео
      • Часто задаваемые вопросы
    • LCC Scene Editor

      • Версия и обновления
      • Учётная запись и вход
      • Обзор продукта и главная страница
      • Интерфейс редактора
      • Режимы навигации по сцене
      • Файл
      • Настройки
      • Операции редактирования
      • Окно
      • Глобальная панель инструментов
      • Ресурсы и свойства
      • Левая панель инструментов
      • Точки обзора
      • Портал
      • Skybox
      • Аннотации
      • Измерение
      • Flythrough
      • Отчёт по сцене
      • 3D Layout
      • Мини-карта
      • Preview Mode (Viewer)
      • Справка
      • Часто задаваемые вопросы
      • Точка появления
    • LCC Model Editor

      • Версия и обновления
      • Руководство пользователя
      • Обзор и интерфейс
      • Операции с файлами
      • Инструменты выбора
      • Редактирование моделей
      • Измерение
      • Цветокоррекция
      • Управление ресурсами
      • Настройки и справка
      • Часто задаваемые вопросы
    • Рекомендации по применению

      • Объединение нескольких крупных моделей 3DGS
  • Plugin & SDK

    • Unreal

      • Введение
      • Быстрый старт — Windows
      • Быстрый старт — Linux
      • Быстрый старт — Quest3
      • Редакции и лицензирование
      • Рендеринг
      • Растеризация Tiled (экспериментально)
      • Визуальные настройки
      • Нормали и освещение
      • Редактирование сцены
      • Параметры производительности
      • Руководство по оптимизации производительности
      • Интеграция со сторонними и движковыми плагинами
      • Прокси-меш
      • Анимация загрузки
      • Коллизии
      • Поддержка системы навигации
      • Поддержка однослойной воды
      • Локализация
      • Частые вопросы
      • Устранение неполадок
      • Журналы и диагностика
      • Свяжитесь с нами
      • Рекомендуемые практики

        • Переосвещение 3DGS с помощью меша LixelStudio
      • Справочник API

        • ALCCActorBase
        • ULCCComponentBase
        • ULCCComponent
        • ULCC2Component
        • Actor SOG / SPZ / PLY
        • ALCC2ProxyMesh
        • ALCCClippingVolume
        • ALCCSectionPlane
        • ALCCLoadVolume
        • ULCCUtilLibrary
        • Enums
        • Structs
      • Журнал изменений

        • 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

      • Введение в Unity SDK
      • Технические возможности
      • Требования к среде разработки
      • Руководство по быстрому старту для PC
      • Руководство по оптимизации настроек проекта
      • Руководство по разработке для Pico 4 Ultra
      • Руководство по стримингу Pico 4 Ultra с PC
      • Руководство по разработке для Quest 3
      • Руководство по стримингу Quest 3 с PC
      • Руководство по разработке OpenXR
      • Руководство по бизнес-стримингу Pico 4 Ultra
      • Глоссарий
      • FAQ
      • Свяжитесь с нами
      • Руководство по разработке функций

        • Руководство по разработке смешанного рендеринга нескольких сцен
        • Руководство по разработке приёма теней
        • Руководство по разработке освещения в реальном времени
        • Руководство по разработке многокамерного рендеринга
        • Руководство по разработке рендеринга изображений высокого разрешения
        • Руководство по разработке совместимости форматов данных LCC и LCC2
        • Руководство по разработке эффекта загрузки
        • Руководство по разработке переключения режима рендеринга Mip
        • Руководство по разработке привязки к рёбрам и углам
        • Руководство по разработке проецируемых декалей
        • Руководство по разработке видеопроецируемой декали
        • Руководство по разработке подсветки
        • Руководство по разработке обрезки в реальном времени
        • Руководство по разработке коррекции цвета
        • Руководство по разработке получения данных Mesh сцены
        • Руководство по разработке в режиме редактора
        • Руководство по настройке параметров производительности рендеринга
        • Руководство по разработке совместной упаковки приложения и данных
        • Руководство по разработке системы коллизий
        • Руководство по проблемам с разрешениями при разработке на macOS
        • Руководство по разработке компиляции и упаковки для устройств iOS
      • Справочник по API

        • LCCManager
        • Renderer
        • Типы данных
      • Журнал изменений

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

Руководство по разработке приёма теней

LCC Unity SDK поддерживает динамическое отбрасывание теней от объектов Mesh на поверхности 3DGS для лучших эффектов освещения. Ниже описаны полные шаги по реализации динамических теней.

Шаг 1: Создайте сцену и GameObject

Создайте совершенно новую сцену в Unity. Unity по умолчанию создаёт Main Camera и Directional Light.

Настройте Main Camera

Выберите Main Camera в окне Hierarchy и задайте его свойства в окне Inspector, как показано ниже.

Настройка свойств Main Camera

Настройка свойств Main Camera

Создайте LCCManager

Щёлкните правой кнопкой мыши в пустой области окна Hierarchy, выберите Create Empty во всплывающем меню, чтобы создать пустой GameObject, назовите его LCCManager, нормализуйте его Transform и добавьте к нему скрипт LCCManager через Add Component.

Создание GameObject LCCManager и добавление скрипта LCCManager

Создание GameObject LCCManager и добавление скрипта LCCManager

Создайте LCCRenderer

Щёлкните правой кнопкой мыши в пустой области окна Hierarchy, выберите Create Empty, чтобы создать пустой GameObject, назовите его LCCRenderer и задайте его Transform значения Rotation.x = -90 и Scale.x = -1.

Создание LCCRenderer и настройка его Transform

Создание LCCRenderer и настройка его Transform (Rotation.x = -90, Scale.x = -1)

Примечание:

Настройки Transform GameObject LCCRenderer (Rotation.x = -90, Scale.x = -1) выравнивают его с системой координат данных LCC. Подробнее о выравнивании системы координат см. в разделе «Система координат данных LCC» документа Введение в Unity SDK.

Включите тени Directional Light

Выберите GameObject Directional Light в окне Hierarchy и убедитесь, что в окне Inspector тени включены.

Убедитесь, что на Directional Light включены тени

Убедитесь, что на Directional Light включены тени

Шаг 2: Добавьте Render Feature

  1. В строке меню Unity выберите File → Project Settings, выберите Graphics слева и подтвердите текущий Default Render Pipeline Asset. В этом примере используется URP (Universal Render Pipeline Asset).
Подтверждение Default Render Pipeline Asset в настройках Graphics

Подтверждение Default Render Pipeline Asset в настройках Graphics

  1. Щёлкните по этому Asset, найдите соответствующий файл ассета в окне Project и найдите связанный с ним Renderer (URP_Renderer.asset в этом примере).

  2. Выберите этот файл ассета Renderer, нажмите Add Renderer Feature в окне Inspector и добавьте Splat Shadow Mask Feature.

Добавление Splat Shadow Mask Feature в URP Renderer

Добавление Splat Shadow Mask Feature в URP Renderer

Шаг 3: Напишите скрипт для включения приёма теней

Создайте новый скрипт C# с именем LCCShadow.cs со следующим кодом:

using LCCCore;
using UnityEngine;

public class LCCShadow : MonoBehaviour
{
    public LCCManager m_manager;
    public string m_FilePath;
    private LCCCore.Renderer m_renderer;

    void Start()
    {
        m_manager.SetPlatformType(PlatformType.PC);
        m_manager.SwitchRenderPass(ActiveRenderMode.SingleRender);

        Debug.Log("Запущено ");
        m_renderer = m_manager.GetRender(this.transform);
        m_renderer.Load(m_FilePath, onProgress, onComplete);
    }

    private void onProgress(float _progress)
    {
        Debug.Log($"[LCCRenderer] прогресс загрузки файла: {_progress:P1}");
    }

    private void onComplete()
    {
        Debug.Log($"[LCCRenderer] файл загружен");
        m_manager.SetShadowReceive(true);
        //m_manager.SetShadowColor(new Color(0, 0, 0, 1.0f));
        //m_manager.SetShadowStrength(0.5f);
    }
}

Примечание:

Приём теней должен включаться после завершения загрузки LCC-сцены, поэтому SetShadowReceive(true) вызывается в обратном вызове onComplete.

Шаг 4: Прикрепите скрипт и задайте путь к данным

  1. Прикрепите скрипт LCCShadow.cs к GameObject LCCRenderer в окне Hierarchy.
  2. В окне Inspector перетащите GameObject LCCManager на свойство Manager скрипта.
  3. Заполните путь к файлу LCC в свойстве File Path скрипта.

Шаг 5: Создайте объект Mesh, отбрасывающий тень

  1. Создайте объект Cube в сцене и убедитесь, что Cast Shadows = On.
  2. Переместите Cube в подходящее положение, чтобы можно было наблюдать тень, которую он отбрасывает на поверхность 3DGS.

Шаг 6: Запустите

Нажмите кнопку Play в окне Game и перемещайте Cube в реальном времени, чтобы наблюдать динамическую тень, которую он отбрасывает.

Cube, отбрасывающий динамическую тень на поверхность 3DGS после запуска

Cube, отбрасывающий динамическую тень на поверхность 3DGS после запуска

FAQ: Отключите режим совместимости

Если окно Console Unity сообщает об ошибках и тень не появляется, отключите режим совместимости: откройте панель настроек через Edit → Project Settings → Graphics, выберите вкладку URP и не отмечайте флажок после Render Graph → Compatibility Mode (Render Graph Disabled).

Не отмечайте режим совместимости Render Graph

Не отмечайте режим совместимости Render Graph (Render Graph Disabled)

Ключевые шаги

Ключевые шаги для отбрасывания теней от объектов Mesh на поверхности 3DGS:

  1. Убедитесь, что в сцене есть Directional Light с включёнными тенями.
  2. Убедитесь, что в сцене есть объект Mesh, отбрасывающий тени, с Cast Shadows = On.
  3. Убедитесь, что Splat Shadow Mask Feature добавлен в URP Renderer.
  4. Убедитесь, что приём теней включён в коде после завершения загрузки LCC-сцены (SetShadowReceive(true)).

API, связанные с тенями

LCC Unity SDK предоставляет следующие три API, связанных с тенями, через LCCManager. Все они должны вызываться после завершения загрузки LCC-сцены (то есть в обратном вызове onComplete), а SetShadowColor() / SetShadowStrength() вступают в силу только после включения SetShadowReceive(true).

SetShadowReceive

// Возвращаемое значение: void
public void SetShadowReceive(bool enable)

Переключает приём теней облаком точек. При включении тени от объектов Mesh в сцене могут отбрасываться на поверхность облака точек 3DGS.

ПараметрТипОписание
enableboolПринимать ли тени

Пример использования:

m_manager.SetShadowReceive(true);

Примечания:

  • Отключено по умолчанию.
  • Требуется объект Mesh, отбрасывающий тень, и Directional Light в сцене.
  • При включении активируется ключевое слово шейдера _SPLAT_SHADOW_ON.

SetShadowColor

// Возвращаемое значение: void
public void SetShadowColor(Color color)

Задаёт цвет области тени.

ПараметрТипОписание
colorColorЦвет тени (RGBA)

Пример использования:

m_manager.SetShadowColor(new Color(0.3f, 0.3f, 0.3f, 1f));

Примечания:

  • Значение по умолчанию — (0.3, 0.3, 0.3, 1).
  • Требует предварительного включения SetShadowReceive(true).

SetShadowStrength

// Возвращаемое значение: void
public void SetShadowStrength(float strength)

Задаёт силу тени. 0 означает отсутствие тени, а 1 — самую сильную тень.

ПараметрТипОписание
strengthfloatСила тени, в диапазоне [0, 1]

Пример использования:

m_manager.SetShadowStrength(0.8f);

Примечания:

  • Значение по умолчанию — 1.0.
  • Диапазон [0, 1]; значения вне диапазона ограничиваются автоматически.
  • Требует предварительного включения SetShadowReceive(true).