-
Notifications
You must be signed in to change notification settings - Fork 0
Textures RU
🌐 English · Русский
← Формат мира · GPU-рендерер →
Любой объект может носить PNG-картинку-текстуру. Весь конвейер рендерится одинаково на CPU и GPU (проверяется самотестом gputest), а текстуры синхронизируются по сети, поэтому пир без файла всё равно видит картинку.
- Поддерживаемые 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 на каждый угол, генерируемым процедурно для примитивов и читаемым из .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= все; у куба0–5выбирают одну сторону; у других форм одна грань). -
textureFilter(TexFilter):-
0nearest — без сглаживания (по умолчанию). -
1bilinear — интерполирует соседние тексели (сглаживает увеличение). -
2mipmapped — трилинейная минификация по цепочке мипов с box-фильтром, чтобы дальние / скользящие поверхности не мерцали.
-
Nearest и bilinear побитово идентичны CPU↔GPU на меш-примитивах; аналитическая UV сферы допускает тонкий шов/полюсную полосу, а mipmapped-объект — тонкую полосу (выбор уровня — float). Редактируйте всё это вживую в инспекторе (Texture / TexScale / TexFace / TexFilter) — см. Управление.
Текстура объекта — это имя файла, но её байты PNG передаются пирам, поэтому клиент без файла всё равно видит её:
- Синхронизация мира — при подключении клиента каждая используемая текстура передаётся ему (мелкие — инлайн, крупные — чанками) перед миром.
- Runtime-push — при живой правке текстуры (или спавне) authority передаёт байты пирам до правки, которая их называет, поэтому пир сначала материализует файл.
Полученные текстуры пишутся в received/textures/ на клиенте. См. Мультиплеер.