Skip to content

Textures RU

Yahasi edited this page Jul 6, 2026 · 1 revision

🌐 English · Русский

← Формат мира · GPU-рендерер →

Текстуры

Любой объект может носить PNG-картинку-текстуру. Весь конвейер рендерится одинаково на CPU и GPU (проверяется самотестом gputest), а текстуры синхронизируются по сети, поэтому пир без файла всё равно видит картинку.

Загрузка PNG

  • Поддерживаемые PNG: 8-бит, без чередования (non-interlaced), цветовой тип 2 (RGB) или 6 (RGBA). Декодер встроен в приложение (через .NET-овский System.IO.Compression.ZLibStream) — без сторонней библиотеки изображений.
  • Текстуры лежат в SampleGame/textures/. Ссылайтесь из мира, задав "texture": "<file>.png" на объекте.
  • Отсутствующий или неподдерживаемый файл логируется, и объект откатывается к плоскому цвету (без падения). Логи называют точную причину.
  • Причина №1 «текстуры не грузятся» — это JPEG/GIF/BMP/WebP, просто переименованный в .png. Декодер определяет и называет реальный формат в логе. Исправление — пере-экспортировать в настоящий PNG, а не менять код.

UV-маппинг по типам объектов

Текстуры мапятся по UV на каждый угол, генерируемым процедурно для примитивов и читаемым из .obj для импортированных мешей:

  • Куб — каждая из 6 граней мапит полную текстуру; TexFace может ограничить одной стороной.
  • Рампа / пирамида — меши-примитивы с UV на угол; наклонные/треугольные грани развёрнуты по своим рёбрам. Побитово идентично CPU↔GPU.
  • Цилиндр / конус — бок развёрнут как угол × высота; крышки завёрнуты на текстурный диск.
  • Сфераэквиректангулярная (широта/долгота) карта, вычисляемая в точке попадания из направления поверхности в локальном базисе сферы, поэтому текстура вращается вместе с объектом.
  • Flat picture — двусторонний вертикальный квад, мапящий полную текстуру правильной стороной вверх (зеркалится с обратной стороны), без коллизии — постер / билборд.
  • Импортированный меш — мапится по UV, заданным в .obj (строки vt), с v-переворотом OBJ→картинка, чтобы модели ложились правильной стороной вверх. Файл без vt рендерится без текстуры, побайтово как раньше.

Пер-объектные параметры

  • textureScale (TexScale) — тайлинг UV: 2 тайлит 2×2, 0.5 показывает половину.
  • textureFace (TexFace) — какая грань носит текстуру (-1 = все; у куба 05 выбирают одну сторону; у других форм одна грань).
  • textureFilter (TexFilter):
    • 0 nearest — без сглаживания (по умолчанию).
    • 1 bilinear — интерполирует соседние тексели (сглаживает увеличение).
    • 2 mipmapped — трилинейная минификация по цепочке мипов с box-фильтром, чтобы дальние / скользящие поверхности не мерцали.

Nearest и bilinear побитово идентичны CPU↔GPU на меш-примитивах; аналитическая UV сферы допускает тонкий шов/полюсную полосу, а mipmapped-объект — тонкую полосу (выбор уровня — float). Редактируйте всё это вживую в инспекторе (Texture / TexScale / TexFace / TexFilter) — см. Управление.

Сетевая синхронизация текстур

Текстура объекта — это имя файла, но её байты PNG передаются пирам, поэтому клиент без файла всё равно видит её:

  1. Синхронизация мира — при подключении клиента каждая используемая текстура передаётся ему (мелкие — инлайн, крупные — чанками) перед миром.
  2. Runtime-push — при живой правке текстуры (или спавне) authority передаёт байты пирам до правки, которая их называет, поэтому пир сначала материализует файл.

Полученные текстуры пишутся в received/textures/ на клиенте. См. Мультиплеер.

Clone this wiki locally