Руководство по разработке рендеринга изображений высокого разрешения
LCC Unity SDK поддерживает рендеринг изображений высокого разрешения, то есть рендеринг изображений сцены, превышающих разрешение дисплея. Например, когда разрешение дисплея составляет 1920×1080, LCC Unity SDK всё равно может рендерить и создавать изображения с разрешением 3840×2160 (4K), 2560×1440 (2K), 1920×1080 (1080p), 1280×720 (720P) и другими. После рендеринга изображений различных разрешений их можно использовать для создания изображений высокой чёткости и видео высокой чёткости. Ниже на примере рендеринга изображения 4K и сохранения его в JPG описаны полные шаги по реализации рендеринга изображений высокого разрешения.
Шаг 1: Создайте сцену и GameObject
Создайте совершенно новую сцену в Unity. Unity по умолчанию создаёт Main Camera и Directional Light.
Настройте Main Camera
Выберите Main Camera в окне Hierarchy и задайте его свойства в окне Inspector, как показано ниже.

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

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

Создание LCCRenderer и настройка его Transform (Rotation.x = -90, Scale.x = -1)
Примечание:
Настройки Transform GameObject LCCRenderer (Rotation.x = -90, Scale.x = -1) выравнивают его с системой координат данных LCC. Подробнее о выравнивании системы координат см. в разделе «Система координат данных LCC» документа Введение в Unity SDK.
Шаг 2: Напишите скрипт рендеринга высокого разрешения
Создайте новый скрипт C# с именем HDRecord.cs со следующим кодом:
using System.IO;
using System.Collections;
using LCCCore;
using UnityEngine;
public class HDRecord : MonoBehaviour
{
public LCCManager m_manager;
public string m_FilePath;
public Camera m_camera;
private LCCCore.Renderer m_renderer;
private const int HD_WIDTH = 3840;
private const int HD_HEIGHT = 2160;
private const string OUTPUT_DIR = @"G:\output";
void Start()
{
m_manager.SetPlatformType(PlatformType.PC);
m_manager.SwitchRenderPass(ActiveRenderMode.SingleRender);
if (m_camera == null)
m_camera = Camera.main;
m_manager.SetMainCamera(m_camera);
Debug.Log("[HDRecord] Запущено, загрузка данных...");
m_renderer = m_manager.GetRender(this.transform);
m_renderer.Load(m_FilePath, onProgress, onComplete);
}
private void onProgress(float _progress)
{
Debug.Log($"[HDRecord] Прогресс загрузки: {_progress:P1}");
}
private void onComplete()
{
Debug.Log("[HDRecord] Загрузка завершена, включение режима записи 4K...");
float verticalFov = m_camera.fieldOfView;
m_manager.SetRecordMode(true, new Vector2(HD_WIDTH, HD_HEIGHT), verticalFov);
StartCoroutine(CaptureFrame());
}
private IEnumerator CaptureFrame()
{
// Ждём некоторое время, чтобы убедиться, что камера завершила рендеринг сцены в разрешении 4K
yield return new WaitForSeconds(10);
RenderTexture tempRT = RenderTexture.GetTemporary(HD_WIDTH, HD_HEIGHT, 24);
RenderTexture preTarget = m_camera.targetTexture;
Rect preRect = m_camera.rect;
m_camera.targetTexture = tempRT;
m_camera.rect = new Rect(0, 0, 1, 1);
yield return new WaitForEndOfFrame();
yield return new WaitForEndOfFrame();
yield return new WaitForEndOfFrame();
RenderTexture.active = tempRT;
Texture2D tex = new Texture2D(HD_WIDTH, HD_HEIGHT, TextureFormat.RGB24, false);
tex.ReadPixels(new Rect(0, 0, HD_WIDTH, HD_HEIGHT), 0, 0);
tex.Apply();
RenderTexture.active = null;
m_camera.rect = preRect;
m_camera.targetTexture = preTarget;
RenderTexture.ReleaseTemporary(tempRT);
byte[] jpgData = tex.EncodeToJPG(95);
Destroy(tex);
if (!Directory.Exists(OUTPUT_DIR))
Directory.CreateDirectory(OUTPUT_DIR);
string timestamp = System.DateTime.Now.ToString("yyyyMMdd_HHmmss");
string filePath = Path.Combine(OUTPUT_DIR, $"HD4K_{timestamp}.jpg");
File.WriteAllBytes(filePath, jpgData);
Debug.Log($"[HDRecord] Изображение 4K сохранено: {filePath} ({jpgData.Length / 1024}КБ)");
m_manager.SetRecordMode(false, new Vector2(Screen.width, Screen.height), m_camera.fieldOfView);
Debug.Log("[HDRecord] Режим записи отключён, восстановлен обычный рендеринг.");
}
}
Примечание:
- Режим записи должен включаться после завершения загрузки LCC-сцены, поэтому
SetRecordMode(true, ...)вызывается в обратном вызовеonComplete.- После входа в режим записи SDK рендерит с фиксированным разрешением и вертикальным FOV. Рекомендуется подождать несколько кадров/секунд перед захватом кадра, чтобы убедиться, что сцена завершила рендеринг в целевом разрешении.
- После захвата вызовите
SetRecordMode(false, ...), чтобы восстановить обычный рендеринг.- Имя файла скрипта должно совпадать с именем класса (
HDRecord.csсоответствуетclass HDRecord), иначе его нельзя прикрепить к GameObject.HD_WIDTHиHD_HEIGHTв примере определяют выходное разрешение и могут быть изменены на 2K (2560×1440), 1080p (1920×1080), 720P (1280×720) и так далее по мере необходимости;OUTPUT_DIR— это выходной каталог — измените его на путь, куда у вас есть права на запись.
Шаг 3: Прикрепите скрипт и настройте свойства
- Прикрепите скрипт
HDRecord.csк GameObject LCCManager в окне Hierarchy. - В окне Inspector перетащите GameObject LCCManager на свойство Manager скрипта.
- Заполните путь к файлу LCC в свойстве File Path скрипта.
- Остальные свойства (например, Camera) можно настроить свободно; если оставить пустым, скрипт автоматически использует
Camera.main.

Прикрепление скрипта HDRecord и настройка его свойств в Inspector
Шаг 4: Запустите
Нажмите кнопку Play в окне Game. После завершения загрузки данных скрипт входит в режим записи 4K, захватывает один кадр и сохраняет его в виде изображения JPG в выходной каталог.
В этом примере изображение рендерится в 4K и затем сохраняется непосредственно как изображение JPG. Если вы хотите сохранить его как видео высокой чёткости, можно закодировать непрерывно захватываемые изображения высокого разрешения в видео высокой чёткости с помощью кодирования видео.
Ключевые шаги
Ключевые шаги для реализации рендеринга изображений высокого разрешения:
- Задайте основную камеру рендеринга через
SetMainCameraи загрузите данные LCC с помощьюRenderer.Load(). - После завершения загрузки сцены (в обратном вызове
onComplete) войдите в режим записи черезSetRecordMode(true, renderSize, verticalFov)и укажите целевое разрешение и вертикальный FOV. - Отрендерьте камеру в целевом разрешении через
RenderTexture, считайте пиксели обратно с помощьюTexture2D.ReadPixelsи закодируйте их в изображение для сохранения. - После захвата восстановите обычный рендеринг через
SetRecordMode(false, ...).
Примечания о рендеринге изображений высокого разрешения
- Поддерживается только на PC/Mac.
SetRecordModeдействует только на платформах PC/Mac. - Фокусное расстояние камеры фиксировано в режиме записи. После входа в режим записи SDK рендерит с переданным фиксированным разрешением и вертикальным FOV и больше не меняется вместе с компонентом Camera.
- Своевременно восстанавливайте обычный рендеринг. После завершения захвата или записи вызовите
SetRecordMode(false, ...), чтобы восстановить обычное разрешение; иначе последующий рендеринг будет продолжать использовать разрешение записи. - Следите за накладными расходами на видеопамять и память. Чем выше разрешение, тем больше видеопамяти/памяти занимают
RenderTextureиTexture2D. Рендеринг высокого разрешения рекомендуется на высокопроизводительных компьютерных устройствах.
API, связанный с записью
LCC Unity SDK предоставляет API режима записи через LCCManager. Он должен вызываться после завершения загрузки LCC-сцены (то есть в обратном вызове onComplete).
SetRecordMode
// Возвращаемое значение: void
public void SetRecordMode(bool isRecord, Vector2 renderSize, float verticalFov)
Задаёт режим записи. В режиме записи рендеринг использует фиксированное разрешение и FOV, что подходит для записи изображений и видео высокой чёткости.
| Параметр | Тип | Описание |
|---|---|---|
isRecord | bool | Входить ли в режим записи |
renderSize | Vector2 | Разрешение записи (ширина × высота), например (3840, 2160) |
verticalFov | float | Вертикальный FOV (поле зрения) |
Пример использования:
// Вход в режим записи 4K
m_manager.SetRecordMode(true, new Vector2(3840, 2160), 60f);
// Завершение записи и восстановление обычного рендеринга
m_manager.SetRecordMode(false, new Vector2(Screen.width, Screen.height), m_camera.fieldOfView);
Примечания:
- Поддерживается только на PC/Mac.
- В режиме записи фокусное расстояние камеры фиксировано и не меняется вместе с компонентом Camera.
- После завершения записи вызовите
SetRecordMode(false, ...), чтобы восстановить обычный рендеринг. - Должен вызываться после завершения загрузки LCC-сцены.