first commit
@@ -0,0 +1,4 @@
|
||||
root = true
|
||||
|
||||
[*]
|
||||
charset = utf-8
|
||||
@@ -0,0 +1,2 @@
|
||||
# Normalize EOL for all files that Git considers text files.
|
||||
* text=auto eol=lf
|
||||
@@ -0,0 +1,23 @@
|
||||
# Godot 4+ specific ignores
|
||||
.godot/
|
||||
/android/
|
||||
|
||||
# WoW client (большой, не коммитим)
|
||||
/sources/
|
||||
|
||||
# Распакованные MPQ-файлы
|
||||
/extracted/
|
||||
|
||||
# Offline-baked terrain cache
|
||||
/cache/baked_terrain*/
|
||||
|
||||
# Offline M2 model cache
|
||||
/cache/m2_glb/
|
||||
|
||||
# Скомпилированные GDExtension библиотеки
|
||||
/addons/mpq_extractor/bin/*.dll
|
||||
/addons/mpq_extractor/bin/*.so
|
||||
/addons/mpq_extractor/bin/*.dylib
|
||||
|
||||
# CMake build директория
|
||||
/gdextension/build/
|
||||
@@ -0,0 +1,7 @@
|
||||
[submodule "thirdparty/StormLib"]
|
||||
path = thirdparty/StormLib
|
||||
url = https://github.com/ladislav-zezula/StormLib
|
||||
[submodule "thirdparty/godot-cpp"]
|
||||
path = thirdparty/godot-cpp
|
||||
url = https://github.com/godotengine/godot-cpp
|
||||
branch = 4.5
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"cmake.sourceDirectory": "C:/Users/sindo/open-wc/gdextension",
|
||||
"godotTools.editorPath.godot4": "c:\\Godot 4.6\\Godot_v4.6.1-stable_win64.exe"
|
||||
}
|
||||
@@ -0,0 +1,373 @@
|
||||
# OpenWC
|
||||
|
||||
Портирование клиента **World of Warcraft 3.3.5a (12340)** на **Godot 4.6**.
|
||||
|
||||
Текущий фокус проекта: загрузка данных из клиента, разбор форматов WoW и отображение мира в Godot так, чтобы его можно было смотреть и дальше редактировать уже средствами движка.
|
||||
|
||||
Сейчас проект уже умеет:
|
||||
|
||||
- открывать MPQ-архивы клиента через editor plugin;
|
||||
- извлекать файлы из MPQ в `res://extracted`;
|
||||
- читать `BLP2` текстуры;
|
||||
- читать `ADT`-тайлы terrain;
|
||||
- рендерить terrain из `ADT` с текстурными слоями `MCLY/MCAL`;
|
||||
- учитывать `holes` в `MCNK`;
|
||||
- читать и рендерить воду из `MH2O`;
|
||||
- стримить мир чанками с LOD в runtime;
|
||||
- стримить мир в **editor preview** по мере движения камеры в 3D viewport;
|
||||
- читать `WMO` в отдельный `Dictionary` и собирать его в `Node3D` вручную.
|
||||
|
||||
Что пока не доведено до полноценного world renderer:
|
||||
|
||||
- автоматическая подстановка `WMO` и `M2` в мир из `ADT/WDT`;
|
||||
- вода без простого базового материала: нет нормального water shader, depth fade, shoreline blending, анимации;
|
||||
- world-level `WDT` loader;
|
||||
- импорт обратно в форматы WoW;
|
||||
- полноценные инструменты редактирования мира в editor.
|
||||
|
||||
## Текущее состояние
|
||||
|
||||
### Реализовано
|
||||
|
||||
- `MPQManager`
|
||||
- открытие клиентских архивов;
|
||||
- список архивов по приоритету;
|
||||
- listing/extract по фильтру.
|
||||
- `BLPLoader`
|
||||
- чтение `BLP2` из файла или из байтов;
|
||||
- поддержка основных сжатых форматов, достаточная для terrain textures.
|
||||
- `ADTLoader`
|
||||
- `MTEX`, `MMDX/MMID`, `MWMO/MWID`;
|
||||
- `MDDF`, `MODF`;
|
||||
- `MCVT`, `MCNR`, `MCLY`, `MCAL`;
|
||||
- `holes`;
|
||||
- `MH2O`.
|
||||
- `ADTBuilder`
|
||||
- сборка terrain в `Node3D`;
|
||||
- terrain material с 4 слоями;
|
||||
- legacy/big/compressed alpha;
|
||||
- chunk-level LOD;
|
||||
- первый проход рендера воды.
|
||||
- `StreamingWorld`
|
||||
- runtime streaming тайлов и чанков;
|
||||
- editor streaming вокруг камеры viewport;
|
||||
- отдельные `ADT`-узлы под `Terrain` в дереве сцены.
|
||||
|
||||
### Частично реализовано
|
||||
|
||||
- `WMOLoader`
|
||||
- root/group parsing есть;
|
||||
- `WMOBuilder` собирает mesh по группам;
|
||||
- в общий world streaming пока не интегрировано.
|
||||
|
||||
### Не реализовано
|
||||
|
||||
- `M2` renderer;
|
||||
- `WDT` streaming metadata;
|
||||
- сохранение terrain/liquid/object placement обратно в WoW-форматы;
|
||||
- редакторские инструменты изменения ADT/WMO данных.
|
||||
|
||||
## Структура проекта
|
||||
|
||||
- `sources/`
|
||||
- исходный клиент WoW 3.3.5a, без модификаций.
|
||||
- `extracted/`
|
||||
- извлечённые из MPQ файлы, с которыми работает Godot.
|
||||
- `addons/mpq_extractor/`
|
||||
- editor plugin и GDScript-сборщики сцен.
|
||||
- `gdextension/`
|
||||
- C++ GDExtension: MPQ, BLP, ADT, WMO.
|
||||
- `maps/`
|
||||
- готовые сцены для просмотра мира.
|
||||
- `scenes/`
|
||||
- скрипты streaming/preview/camera.
|
||||
- `thirdparty/`
|
||||
- `godot-cpp`, `StormLib` и другие зависимости.
|
||||
|
||||
## Требования
|
||||
|
||||
- Windows
|
||||
- Godot `4.6`
|
||||
- Visual Studio 2022 с C++ workload
|
||||
- CMake
|
||||
- клиент **WoW 3.3.5a (12340)**
|
||||
|
||||
## Сборка
|
||||
|
||||
Собрать GDExtension:
|
||||
|
||||
```bat
|
||||
cd gdextension
|
||||
build.bat Release
|
||||
```
|
||||
|
||||
После успешной сборки DLL появится в:
|
||||
|
||||
```text
|
||||
addons/mpq_extractor/bin/
|
||||
```
|
||||
|
||||
## Подготовка данных
|
||||
|
||||
По умолчанию plugin смотрит на клиент в:
|
||||
|
||||
```text
|
||||
res://sources
|
||||
```
|
||||
|
||||
И извлекает файлы в:
|
||||
|
||||
```text
|
||||
res://extracted
|
||||
```
|
||||
|
||||
### Через editor plugin
|
||||
|
||||
1. Открой проект в Godot.
|
||||
2. Убедись, что plugin `MPQ Extractor` включён.
|
||||
3. Внизу editor открой панель `MPQ Extractor`.
|
||||
4. Укажи путь к клиенту WoW 3.3.5a.
|
||||
5. Выбери locale.
|
||||
6. Нажми `Open Client Archives`.
|
||||
7. Для полной распаковки используй фильтр `*` и `Extract`.
|
||||
|
||||
Для terrain/world обычно нужны как минимум:
|
||||
|
||||
- `World/Maps/...`
|
||||
- `Textures/...`
|
||||
- `World/wmo/...`
|
||||
- `DBFilesClient/...` если позже понадобится работа с DBC
|
||||
|
||||
## Основные классы GDExtension
|
||||
|
||||
### `MPQManager`
|
||||
|
||||
Доступен из GDScript. Основные методы:
|
||||
|
||||
- `open_client(base_path, locale)`
|
||||
- `list_files(filter="*")`
|
||||
- `extract_files(filter, output_dir)`
|
||||
- `read_file(internal_path)`
|
||||
|
||||
### `BLPLoader`
|
||||
|
||||
Читает WoW `BLP2` и возвращает `Image`.
|
||||
|
||||
Основные методы:
|
||||
|
||||
- `load_image(path)`
|
||||
- `load_image_from_bytes(bytes)`
|
||||
|
||||
### `ADTLoader`
|
||||
|
||||
Читает `ADT` и возвращает `Dictionary` с terrain, texture layers, placements и liquid.
|
||||
|
||||
Основные поля результата:
|
||||
|
||||
- `textures`
|
||||
- `m2_names`
|
||||
- `wmo_names`
|
||||
- `m2_placements`
|
||||
- `wmo_placements`
|
||||
- `chunks`
|
||||
|
||||
Каждый chunk содержит:
|
||||
|
||||
- `index_x`, `index_y`
|
||||
- `origin`
|
||||
- `heights`
|
||||
- `normals`
|
||||
- `holes`
|
||||
- `layers`
|
||||
- `alpha_maps`
|
||||
- `liquids`
|
||||
|
||||
### `WMOLoader`
|
||||
|
||||
Читает root/group файлы `WMO` и возвращает `Dictionary` с `materials` и `groups`.
|
||||
|
||||
Это уже можно использовать вручную, но в world streaming оно пока не подключено.
|
||||
|
||||
## GDScript-сборщики
|
||||
|
||||
### `ADTBuilder`
|
||||
|
||||
Файл: `addons/mpq_extractor/loaders/adt_builder.gd`
|
||||
|
||||
Умеет:
|
||||
|
||||
- собрать весь `ADT` в `Node3D`;
|
||||
- собрать отдельный chunk с нужным LOD;
|
||||
- собрать water root для тайла;
|
||||
- создать layered terrain material;
|
||||
- загрузить BLP-текстуры через `BLPLoader`.
|
||||
|
||||
### `WMOBuilder`
|
||||
|
||||
Файл: `addons/mpq_extractor/loaders/wmo_builder.gd`
|
||||
|
||||
Умеет:
|
||||
|
||||
- собрать `Node3D` из данных `WMOLoader`;
|
||||
- создать по одному `MeshInstance3D` на группу;
|
||||
- назначить базовые материалы.
|
||||
|
||||
## Сцены просмотра
|
||||
|
||||
### `maps/test.tscn`
|
||||
|
||||
Файл: `maps/test.tscn`
|
||||
|
||||
Тестовая сцена, которая грузит квадрат тайлов вокруг центра карты.
|
||||
|
||||
Скрипт: `scenes/test_world_loader.gd`
|
||||
|
||||
Подходит для:
|
||||
|
||||
- быстрой проверки terrain;
|
||||
- отладки парсинга `ADT`;
|
||||
- проверки AABB и координат.
|
||||
|
||||
### `maps/adt_tile_preview.tscn`
|
||||
|
||||
Файл: `maps/adt_tile_preview.tscn`
|
||||
|
||||
Preview одного `ADT` прямо в editor.
|
||||
|
||||
Скрипт: `scenes/adt_tile_preview.gd`
|
||||
|
||||
Полезно для:
|
||||
|
||||
- проверки одного конкретного тайла;
|
||||
- отладки terrain layers;
|
||||
- проверки воды и дыр по отдельному `ADT`.
|
||||
|
||||
Основные export-поля:
|
||||
|
||||
- `map_name`
|
||||
- `tile_x`
|
||||
- `tile_y`
|
||||
- `reload_now`
|
||||
|
||||
### `maps/eastern_kingdoms_streaming.tscn`
|
||||
|
||||
Файл: `maps/eastern_kingdoms_streaming.tscn`
|
||||
|
||||
Главная сцена для стриминга мира.
|
||||
|
||||
Скрипт: `scenes/streaming_world_loader.gd`
|
||||
|
||||
Умеет:
|
||||
|
||||
- находить все доступные `ADT` тайлы в `World/Maps/Azeroth`;
|
||||
- загружать/выгружать тайлы по мере перемещения;
|
||||
- строить chunk mesh по LOD;
|
||||
- отдельно добавлять воду на тайл;
|
||||
- работать и в runtime, и в editor.
|
||||
|
||||
## Editor streaming
|
||||
|
||||
`StreamingWorld` теперь умеет подгружать мир прямо в editor по мере движения камеры viewport.
|
||||
|
||||
Ключевые export-поля:
|
||||
|
||||
- `editor_preview_enabled`
|
||||
- `editor_follow_view_camera`
|
||||
- `editor_preview_center_x`
|
||||
- `editor_preview_center_y`
|
||||
- `editor_preview_tile_radius`
|
||||
- `editor_reload_now`
|
||||
|
||||
Логика такая:
|
||||
|
||||
- `editor_preview_center_x/y` задают anchor, который сдвигается к `origin`, чтобы мир было удобно смотреть в Godot;
|
||||
- при `editor_follow_view_camera = true` стриминг идёт вокруг положения editor camera в 3D viewport;
|
||||
- тайлы и их children появляются под `Terrain` в Scene Tree.
|
||||
|
||||
Это нужно, чтобы визуально проверить, что мир действительно собирается по мере перемещения по карте, а не только как статичный превью-блок.
|
||||
|
||||
## Runtime streaming и LOD
|
||||
|
||||
В runtime `StreamingWorld`:
|
||||
|
||||
- подгружает `ADT` тайлы по расстоянию;
|
||||
- для terrain использует chunk-level LOD;
|
||||
- хранит дальний мир на грубом chunk LOD;
|
||||
- отдельно создаёт воду на тайл.
|
||||
|
||||
Основные параметры:
|
||||
|
||||
- `tiles_per_tick`
|
||||
- `chunk_ops_per_tick`
|
||||
- `lod0_radius_chunks`
|
||||
- `lod1_radius_chunks`
|
||||
- `lod2_radius_chunks`
|
||||
- `lod2_tile_radius`
|
||||
|
||||
## Управление камерой
|
||||
|
||||
Файл: `scenes/fly_camera.gd`
|
||||
|
||||
Управление:
|
||||
|
||||
- `RMB` удерживать для обзора;
|
||||
- `WASD` движение;
|
||||
- `Q/E` вниз/вверх;
|
||||
- `Shift` ускорение.
|
||||
|
||||
## Что именно уже исправлено в terrain pipeline
|
||||
|
||||
По сравнению с самым ранним состоянием проекта уже поправлены:
|
||||
|
||||
- layout `MCNKHeader`;
|
||||
- offsets внутри `MCNK`;
|
||||
- чтение `MCVT`;
|
||||
- чтение `MCNR`;
|
||||
- legacy `MCAL`;
|
||||
- big alpha / compressed alpha;
|
||||
- корректные local coordinates внутри `ADT`-узла;
|
||||
- holes;
|
||||
- chunk winding/culling;
|
||||
- editor preview одного тайла;
|
||||
- streaming всего `Azeroth`;
|
||||
- первый проход `MH2O`.
|
||||
|
||||
## Ограничения текущей версии
|
||||
|
||||
- terrain текстурирование уже рабочее, но ещё не 1:1 как в клиенте/Noggit во всех edge cases;
|
||||
- water renderer сейчас базовый, без настоящих WoW water materials;
|
||||
- `WMO` читается отдельно, но world placement пока не подключён;
|
||||
- `M2` placements из `ADT` парсятся, но renderer нет;
|
||||
- `WDT` ещё не управляет составом мира;
|
||||
- проект сейчас ориентирован на просмотр и исследование данных, а не на полный round-trip import/export.
|
||||
|
||||
## Ближайшие логичные шаги
|
||||
|
||||
1. Подключить `WDT`, чтобы мир собирался не по сканированию папки, а по данным карты.
|
||||
2. Интегрировать `WMO` placement в `StreamingWorld`.
|
||||
3. Добавить `M2` loader/renderer.
|
||||
4. Довести water shader.
|
||||
5. Начать editor-side инструменты для редактирования terrain/liquid/object placement.
|
||||
6. Подготовить формат сохранения обратно в WoW-совместимые структуры.
|
||||
|
||||
## Быстрый старт
|
||||
|
||||
1. Положить клиент WoW 3.3.5a в `sources/` или указать путь через plugin.
|
||||
2. Собрать расширение:
|
||||
|
||||
```bat
|
||||
cd gdextension
|
||||
build.bat Release
|
||||
```
|
||||
|
||||
3. Извлечь данные в `res://extracted` через `MPQ Extractor`.
|
||||
4. Открыть одну из сцен:
|
||||
- `maps/adt_tile_preview.tscn`
|
||||
- `maps/test.tscn`
|
||||
- `maps/eastern_kingdoms_streaming.tscn`
|
||||
|
||||
Если нужен именно просмотр мира в editor по движению камеры, используй:
|
||||
|
||||
- `maps/eastern_kingdoms_streaming.tscn`
|
||||
- `editor_preview_enabled = true`
|
||||
- `editor_follow_view_camera = true`
|
||||
@@ -0,0 +1 @@
|
||||
uid://cwsdumb6pp10m
|
||||
@@ -0,0 +1,127 @@
|
||||
## Converts raw M2Loader data into a Godot Node3D scene tree.
|
||||
## Usage:
|
||||
## var data = M2Loader.new().load_m2(abs_path)
|
||||
## var node = M2Builder.build(data, "res://extracted")
|
||||
## add_child(node)
|
||||
class_name M2Builder
|
||||
|
||||
static var _texture_cache: Dictionary = {}
|
||||
|
||||
static func build(data: Dictionary, extracted_dir: String = "") -> Node3D:
|
||||
var root := Node3D.new()
|
||||
root.name = "M2"
|
||||
|
||||
var verts: PackedVector3Array = data.get("vertices", PackedVector3Array())
|
||||
var normals: PackedVector3Array = data.get("normals", PackedVector3Array())
|
||||
var uvs: PackedVector2Array = data.get("uvs", PackedVector2Array())
|
||||
var indices: PackedInt32Array = data.get("indices", PackedInt32Array())
|
||||
var batches: Array = data.get("batches", [])
|
||||
|
||||
if verts.is_empty() or indices.is_empty() or batches.is_empty():
|
||||
return root
|
||||
|
||||
var textures: PackedStringArray = data.get("textures", PackedStringArray())
|
||||
var materials: Array = data.get("materials", [])
|
||||
var tex_combos: PackedInt32Array = data.get("texture_combos", PackedInt32Array())
|
||||
|
||||
var mesh := ArrayMesh.new()
|
||||
|
||||
for batch_variant in batches:
|
||||
if not (batch_variant is Dictionary):
|
||||
continue
|
||||
var batch: Dictionary = batch_variant
|
||||
var idx_start: int = int(batch.get("index_start", 0))
|
||||
var idx_count: int = int(batch.get("index_count", 0))
|
||||
var mat_id: int = int(batch.get("material_id", -1))
|
||||
var tc_idx: int = int(batch.get("texture_combo_index", -1))
|
||||
|
||||
if idx_count <= 0 or idx_start + idx_count > indices.size():
|
||||
continue
|
||||
|
||||
var batch_indices := indices.slice(idx_start, idx_start + idx_count)
|
||||
if batch_indices.is_empty():
|
||||
continue
|
||||
|
||||
var arrays := []
|
||||
arrays.resize(Mesh.ARRAY_MAX)
|
||||
arrays[Mesh.ARRAY_VERTEX] = verts
|
||||
if normals.size() == verts.size():
|
||||
arrays[Mesh.ARRAY_NORMAL] = normals
|
||||
if uvs.size() == verts.size():
|
||||
arrays[Mesh.ARRAY_TEX_UV] = uvs
|
||||
arrays[Mesh.ARRAY_INDEX] = batch_indices
|
||||
|
||||
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
|
||||
|
||||
var surf_idx := mesh.get_surface_count() - 1
|
||||
var mat_def: Dictionary = materials[mat_id] if mat_id >= 0 and mat_id < materials.size() else {}
|
||||
mesh.surface_set_material(surf_idx, _build_material(mat_def, tc_idx, textures, tex_combos, extracted_dir))
|
||||
|
||||
if mesh.get_surface_count() == 0:
|
||||
return root
|
||||
|
||||
var mi := MeshInstance3D.new()
|
||||
mi.name = "Mesh"
|
||||
mi.mesh = mesh
|
||||
root.add_child(mi)
|
||||
return root
|
||||
|
||||
|
||||
static func _build_material(
|
||||
mat_def: Dictionary,
|
||||
texture_combo_index: int,
|
||||
textures: PackedStringArray,
|
||||
tex_combos: PackedInt32Array,
|
||||
extracted_dir: String) -> StandardMaterial3D:
|
||||
|
||||
var mat := StandardMaterial3D.new()
|
||||
mat.cull_mode = BaseMaterial3D.CULL_DISABLED
|
||||
mat.roughness = 0.85
|
||||
mat.metallic = 0.0
|
||||
mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
||||
mat.specular_mode = BaseMaterial3D.SPECULAR_DISABLED
|
||||
mat.vertex_color_use_as_albedo = false
|
||||
|
||||
var blend_mode: int = mat_def.get("blend_mode", 0)
|
||||
match blend_mode:
|
||||
0: mat.transparency = BaseMaterial3D.TRANSPARENCY_DISABLED
|
||||
1: mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA_SCISSOR
|
||||
_: mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
|
||||
|
||||
if texture_combo_index >= 0 and texture_combo_index < tex_combos.size():
|
||||
var tex_idx: int = tex_combos[texture_combo_index]
|
||||
if tex_idx >= 0 and tex_idx < textures.size():
|
||||
var tex_path: String = str(textures[tex_idx]).replace("\\", "/")
|
||||
if not tex_path.is_empty():
|
||||
var tex := _load_texture(tex_path, extracted_dir)
|
||||
if tex:
|
||||
mat.albedo_texture = tex
|
||||
mat.texture_filter = BaseMaterial3D.TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC
|
||||
|
||||
return mat
|
||||
|
||||
|
||||
static func _load_texture(rel_path: String, extracted_dir: String) -> Texture2D:
|
||||
if rel_path.is_empty() or extracted_dir.is_empty():
|
||||
return null
|
||||
|
||||
var abs_path := ProjectSettings.globalize_path(extracted_dir.path_join(rel_path))
|
||||
if _texture_cache.has(abs_path):
|
||||
return _texture_cache[abs_path]
|
||||
|
||||
if not ClassDB.class_exists("BLPLoader"):
|
||||
return null
|
||||
|
||||
var loader = ClassDB.instantiate("BLPLoader")
|
||||
if loader == null:
|
||||
return null
|
||||
|
||||
var img: Image = loader.call("load_image", abs_path)
|
||||
if img == null or img.is_empty():
|
||||
_texture_cache[abs_path] = null
|
||||
return null
|
||||
|
||||
img.generate_mipmaps()
|
||||
var tex := ImageTexture.create_from_image(img)
|
||||
_texture_cache[abs_path] = tex
|
||||
return tex
|
||||
@@ -0,0 +1 @@
|
||||
uid://bsr7e0tp543di
|
||||
@@ -0,0 +1,164 @@
|
||||
## Converts raw WMOLoader data into a Godot Node3D scene tree.
|
||||
## Usage:
|
||||
## var data = WMOLoader.new().load_wmo(abs_path)
|
||||
## var node = WMOBuilder.build(data, "res://extracted")
|
||||
## add_child(node)
|
||||
class_name WMOBuilder
|
||||
|
||||
static var _texture_cache: Dictionary = {}
|
||||
|
||||
# Returns a Node3D containing one MeshInstance3D per WMO group.
|
||||
static func build(data: Dictionary, extracted_dir: String = "") -> Node3D:
|
||||
var root := Node3D.new()
|
||||
root.name = "WMO"
|
||||
|
||||
if not data.has("groups"):
|
||||
return root
|
||||
|
||||
var textures: PackedStringArray = data.get("textures", PackedStringArray())
|
||||
var materials: Array = data.get("materials", [])
|
||||
|
||||
# Build Godot materials from WMO material definitions
|
||||
var godot_materials: Array[StandardMaterial3D] = []
|
||||
for mat_def in materials:
|
||||
godot_materials.append(_build_material(mat_def, textures, extracted_dir))
|
||||
|
||||
# Build one MeshInstance3D per group
|
||||
var groups: Array = data.get("groups", [])
|
||||
for gi in groups.size():
|
||||
var g: Dictionary = groups[gi]
|
||||
if g.is_empty():
|
||||
continue
|
||||
var mesh_inst := _build_group_mesh(g, godot_materials)
|
||||
mesh_inst.name = "Group_%d" % gi
|
||||
root.add_child(mesh_inst)
|
||||
|
||||
return root
|
||||
|
||||
|
||||
static func _build_group_mesh(
|
||||
g: Dictionary,
|
||||
godot_mats: Array[StandardMaterial3D]) -> MeshInstance3D:
|
||||
|
||||
var verts: PackedVector3Array = g.get("vertices", PackedVector3Array())
|
||||
var normals: PackedVector3Array = g.get("normals", PackedVector3Array())
|
||||
var uvs: PackedVector2Array = g.get("uvs", PackedVector2Array())
|
||||
var colors: PackedColorArray = g.get("colors", PackedColorArray())
|
||||
var indices: PackedInt32Array = g.get("indices", PackedInt32Array())
|
||||
var batches: Array = g.get("batches", [])
|
||||
var mesh := ArrayMesh.new()
|
||||
if verts.is_empty() or indices.is_empty():
|
||||
var empty := MeshInstance3D.new()
|
||||
empty.mesh = mesh
|
||||
return empty
|
||||
|
||||
if batches.is_empty():
|
||||
batches = [{
|
||||
"index_start": 0,
|
||||
"index_count": indices.size(),
|
||||
"material_id": -1,
|
||||
}]
|
||||
|
||||
for batch_variant in batches:
|
||||
if not (batch_variant is Dictionary):
|
||||
continue
|
||||
var batch: Dictionary = batch_variant
|
||||
var idx_start: int = int(batch.get("index_start", 0))
|
||||
var idx_count: int = int(batch.get("index_count", 0))
|
||||
var mat_id: int = int(batch.get("material_id", -1))
|
||||
if idx_count <= 0 or idx_start >= indices.size():
|
||||
continue
|
||||
|
||||
var batch_indices := PackedInt32Array()
|
||||
for i in range(idx_start, mini(idx_start + idx_count, indices.size()), 3):
|
||||
if i + 2 >= indices.size():
|
||||
break
|
||||
# Reverse winding for the current local basis conversion.
|
||||
batch_indices.append(indices[i + 0])
|
||||
batch_indices.append(indices[i + 2])
|
||||
batch_indices.append(indices[i + 1])
|
||||
if batch_indices.is_empty():
|
||||
continue
|
||||
|
||||
var arrays := []
|
||||
arrays.resize(Mesh.ARRAY_MAX)
|
||||
arrays[Mesh.ARRAY_VERTEX] = verts
|
||||
if normals.size() == verts.size():
|
||||
arrays[Mesh.ARRAY_NORMAL] = normals
|
||||
if uvs.size() == verts.size():
|
||||
arrays[Mesh.ARRAY_TEX_UV] = uvs
|
||||
if colors.size() == verts.size():
|
||||
arrays[Mesh.ARRAY_COLOR] = colors
|
||||
arrays[Mesh.ARRAY_INDEX] = batch_indices
|
||||
|
||||
mesh.add_surface_from_arrays(Mesh.PRIMITIVE_TRIANGLES, arrays)
|
||||
|
||||
var surf_idx := mesh.get_surface_count() - 1
|
||||
if mat_id >= 0 and mat_id < godot_mats.size():
|
||||
mesh.surface_set_material(surf_idx, godot_mats[mat_id])
|
||||
|
||||
var mi := MeshInstance3D.new()
|
||||
mi.mesh = mesh
|
||||
return mi
|
||||
|
||||
|
||||
static func _build_material(
|
||||
mat_def: Dictionary,
|
||||
textures: PackedStringArray,
|
||||
extracted_dir: String = "") -> StandardMaterial3D:
|
||||
|
||||
var mat := StandardMaterial3D.new()
|
||||
mat.cull_mode = BaseMaterial3D.CULL_DISABLED
|
||||
mat.roughness = 0.85
|
||||
mat.metallic = 0.0
|
||||
mat.shading_mode = BaseMaterial3D.SHADING_MODE_UNSHADED
|
||||
mat.specular_mode = BaseMaterial3D.SPECULAR_DISABLED
|
||||
mat.vertex_color_use_as_albedo = false
|
||||
|
||||
var blend_mode: int = mat_def.get("blend_mode", 0)
|
||||
match blend_mode:
|
||||
0: mat.transparency = BaseMaterial3D.TRANSPARENCY_DISABLED
|
||||
1: mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA_SCISSOR
|
||||
_: mat.transparency = BaseMaterial3D.TRANSPARENCY_ALPHA
|
||||
|
||||
# Texture is loaded later by the scene assembler (needs BLP→Image conversion)
|
||||
# Store the path as metadata for the assembler to pick up
|
||||
var tex0_id: int = mat_def.get("texture0", -1)
|
||||
if tex0_id >= 0 and tex0_id < textures.size():
|
||||
var tex_path: String = str(textures[tex0_id]).replace("\\", "/")
|
||||
mat.set_meta("texture0_path", tex_path)
|
||||
var tex := _load_texture(tex_path, extracted_dir)
|
||||
if tex:
|
||||
mat.albedo_texture = tex
|
||||
mat.texture_filter = BaseMaterial3D.TEXTURE_FILTER_LINEAR_WITH_MIPMAPS_ANISOTROPIC
|
||||
|
||||
mat.set_meta("wow_flags", mat_def.get("flags", 0))
|
||||
mat.set_meta("wow_shader", mat_def.get("shader", 0))
|
||||
|
||||
return mat
|
||||
|
||||
|
||||
static func _load_texture(rel_path: String, extracted_dir: String) -> Texture2D:
|
||||
if rel_path.is_empty() or extracted_dir.is_empty():
|
||||
return null
|
||||
|
||||
var abs_path := ProjectSettings.globalize_path(extracted_dir.path_join(rel_path.replace("\\", "/")))
|
||||
if _texture_cache.has(abs_path):
|
||||
return _texture_cache[abs_path]
|
||||
|
||||
if not ClassDB.class_exists("BLPLoader"):
|
||||
return null
|
||||
|
||||
var loader = ClassDB.instantiate("BLPLoader")
|
||||
if loader == null:
|
||||
return null
|
||||
|
||||
var img: Image = loader.call("load_image", abs_path)
|
||||
if img == null or img.is_empty():
|
||||
_texture_cache[abs_path] = null
|
||||
return null
|
||||
|
||||
img.generate_mipmaps()
|
||||
var tex := ImageTexture.create_from_image(img)
|
||||
_texture_cache[abs_path] = tex
|
||||
return tex
|
||||
@@ -0,0 +1 @@
|
||||
uid://b7qb5j8qms0b0
|
||||
@@ -0,0 +1,11 @@
|
||||
[configuration]
|
||||
entry_symbol = "mpq_extractor_init"
|
||||
compatibility_minimum = "4.6"
|
||||
|
||||
[libraries]
|
||||
windows.x86_64.debug = "res://addons/mpq_extractor/bin/libmpq_extractor.windows.x86_64.dll"
|
||||
windows.x86_64.release = "res://addons/mpq_extractor/bin/libmpq_extractor.windows.x86_64.dll"
|
||||
linux.x86_64.debug = "res://addons/mpq_extractor/bin/libmpq_extractor.linux.x86_64.so"
|
||||
linux.x86_64.release = "res://addons/mpq_extractor/bin/libmpq_extractor.linux.x86_64.so"
|
||||
macos.debug = "res://addons/mpq_extractor/bin/libmpq_extractor.macos.universal.dylib"
|
||||
macos.release = "res://addons/mpq_extractor/bin/libmpq_extractor.macos.universal.dylib"
|
||||
@@ -0,0 +1 @@
|
||||
uid://bd6x7bgktb61c
|
||||
@@ -0,0 +1,6 @@
|
||||
[plugin]
|
||||
name="MPQ Extractor"
|
||||
description="Extracts WoW 3.3.5a (build 12340) MPQ archives respecting Blizzard client priority."
|
||||
author="OpenWC"
|
||||
version="1.0.0"
|
||||
script="plugin.gd"
|
||||
@@ -0,0 +1,21 @@
|
||||
@tool
|
||||
extends EditorPlugin
|
||||
|
||||
var _dock: Control
|
||||
|
||||
func _enter_tree() -> void:
|
||||
var script: Script = load("res://addons/mpq_extractor/ui/mpq_tool.gd")
|
||||
if script == null:
|
||||
push_error("MPQ Extractor: не удалось загрузить mpq_tool.gd")
|
||||
return
|
||||
_dock = VBoxContainer.new()
|
||||
_dock.name = "MPQExtractorDock"
|
||||
_dock.set_script(script)
|
||||
add_control_to_bottom_panel(_dock, "MPQ Extractor")
|
||||
make_bottom_panel_item_visible(_dock)
|
||||
|
||||
func _exit_tree() -> void:
|
||||
if _dock:
|
||||
remove_control_from_bottom_panel(_dock)
|
||||
_dock.queue_free()
|
||||
_dock = null
|
||||
@@ -0,0 +1 @@
|
||||
uid://dds11be30harj
|
||||
@@ -0,0 +1,191 @@
|
||||
@tool
|
||||
extends VBoxContainer
|
||||
|
||||
# ─── State ────────────────────────────────────────────────────────────────────
|
||||
var _mpq = null # MPQManager
|
||||
|
||||
const LOCALES := ["ruRU", "enUS", "enGB", "deDE", "frFR", "esES", "esMX",
|
||||
"koKR", "zhCN", "zhTW", "ptBR", "ptPT"]
|
||||
|
||||
# ─── UI nodes (created in _ready) ─────────────────────────────────────────────
|
||||
var _client_path_edit: LineEdit
|
||||
var _locale_option: OptionButton
|
||||
var _filter_edit: LineEdit
|
||||
var _output_edit: LineEdit
|
||||
var _open_btn: Button
|
||||
var _extract_btn: Button
|
||||
var _list_btn: Button
|
||||
var _status_label: Label
|
||||
var _file_list: ItemList
|
||||
var _archive_list: ItemList
|
||||
var _progress: ProgressBar
|
||||
|
||||
# ─── Build UI ─────────────────────────────────────────────────────────────────
|
||||
func _ready() -> void:
|
||||
size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
add_theme_constant_override("separation", 6)
|
||||
|
||||
_add_title()
|
||||
_add_separator()
|
||||
_add_client_row()
|
||||
_add_locale_row()
|
||||
_open_btn = _add_button("Open Client Archives", _on_open_pressed)
|
||||
_add_separator()
|
||||
_add_label("Loaded archives (highest priority first):")
|
||||
_archive_list = _add_item_list(100)
|
||||
_add_separator()
|
||||
_add_filter_row()
|
||||
_add_output_row()
|
||||
var btns := HBoxContainer.new(); add_child(btns)
|
||||
_list_btn = _add_button_to("List Files", btns, _on_list_pressed)
|
||||
_extract_btn = _add_button_to("Extract", btns, _on_extract_pressed)
|
||||
_progress = ProgressBar.new(); _progress.visible = false; add_child(_progress)
|
||||
_add_label("Files matching filter:")
|
||||
_file_list = _add_item_list(0, true) # expand vertically
|
||||
_status_label = _add_label("Ready.")
|
||||
|
||||
_extract_btn.disabled = true
|
||||
_list_btn.disabled = true
|
||||
|
||||
|
||||
# ─── UI helpers ───────────────────────────────────────────────────────────────
|
||||
func _add_title() -> void:
|
||||
var lbl := Label.new()
|
||||
lbl.text = "MPQ Extractor (WoW 3.3.5a)"
|
||||
lbl.add_theme_font_size_override("font_size", 14)
|
||||
add_child(lbl)
|
||||
|
||||
func _add_separator() -> void:
|
||||
add_child(HSeparator.new())
|
||||
|
||||
func _add_label(text: String) -> Label:
|
||||
var lbl := Label.new(); lbl.text = text
|
||||
add_child(lbl); return lbl
|
||||
|
||||
func _add_item_list(min_height: int, expand := false) -> ItemList:
|
||||
var il := ItemList.new()
|
||||
if min_height > 0:
|
||||
il.custom_minimum_size = Vector2(0, min_height)
|
||||
if expand:
|
||||
il.size_flags_vertical = Control.SIZE_EXPAND_FILL
|
||||
add_child(il); return il
|
||||
|
||||
func _add_button(text: String, cb: Callable) -> Button:
|
||||
var btn := Button.new(); btn.text = text
|
||||
btn.pressed.connect(cb); add_child(btn); return btn
|
||||
|
||||
func _add_button_to(text: String, parent: Control, cb: Callable) -> Button:
|
||||
var btn := Button.new()
|
||||
btn.text = text
|
||||
btn.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
btn.pressed.connect(cb); parent.add_child(btn); return btn
|
||||
|
||||
func _add_row(label_text: String) -> HBoxContainer:
|
||||
var row := HBoxContainer.new(); add_child(row)
|
||||
var lbl := Label.new()
|
||||
lbl.text = label_text
|
||||
lbl.custom_minimum_size = Vector2(90, 0)
|
||||
row.add_child(lbl); return row
|
||||
|
||||
func _add_client_row() -> void:
|
||||
var row := _add_row("Client path")
|
||||
_client_path_edit = LineEdit.new()
|
||||
_client_path_edit.text = "res://sources"
|
||||
_client_path_edit.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
_client_path_edit.placeholder_text = "res://sources"
|
||||
row.add_child(_client_path_edit)
|
||||
|
||||
func _add_locale_row() -> void:
|
||||
var row := _add_row("Locale")
|
||||
_locale_option = OptionButton.new()
|
||||
_locale_option.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
for loc in LOCALES:
|
||||
_locale_option.add_item(loc)
|
||||
row.add_child(_locale_option)
|
||||
|
||||
func _add_filter_row() -> void:
|
||||
var row := _add_row("Filter")
|
||||
_filter_edit = LineEdit.new()
|
||||
_filter_edit.text = "*"
|
||||
_filter_edit.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
_filter_edit.placeholder_text = "DBFilesClient\\*.dbc"
|
||||
row.add_child(_filter_edit)
|
||||
|
||||
func _add_output_row() -> void:
|
||||
var row := _add_row("Output dir")
|
||||
_output_edit = LineEdit.new()
|
||||
_output_edit.text = "res://extracted"
|
||||
_output_edit.size_flags_horizontal = Control.SIZE_EXPAND_FILL
|
||||
row.add_child(_output_edit)
|
||||
|
||||
|
||||
# ─── Handlers ─────────────────────────────────────────────────────────────────
|
||||
func _on_open_pressed() -> void:
|
||||
if not ClassDB.class_exists("MPQManager"):
|
||||
_set_status("ERROR: MPQManager не найден. Собери GDExtension (build.bat Release).")
|
||||
return
|
||||
|
||||
if _mpq:
|
||||
_mpq.call("close")
|
||||
_mpq = ClassDB.instantiate("MPQManager")
|
||||
|
||||
var client_path: String = ProjectSettings.globalize_path(_client_path_edit.text)
|
||||
var locale: String = LOCALES[_locale_option.selected]
|
||||
|
||||
_set_status("Opening archives…")
|
||||
var count: int = _mpq.call("open_client", client_path, locale)
|
||||
|
||||
if count == 0:
|
||||
_set_status("ERROR: no archives opened. Check client path / locale.")
|
||||
_extract_btn.disabled = true
|
||||
_list_btn.disabled = true
|
||||
return
|
||||
|
||||
_archive_list.clear()
|
||||
var info_list: Array = _mpq.call("get_archive_info")
|
||||
for info in info_list:
|
||||
var lbl_text := "[%d] %s (%d files)" % [
|
||||
info["priority"],
|
||||
(info["path"] as String).get_file(),
|
||||
info["file_count"]
|
||||
]
|
||||
_archive_list.add_item(lbl_text)
|
||||
|
||||
_set_status("Opened %d archives. Locale: %s" % [count, locale])
|
||||
_extract_btn.disabled = false
|
||||
_list_btn.disabled = false
|
||||
|
||||
|
||||
func _on_list_pressed() -> void:
|
||||
if not _mpq: return
|
||||
_file_list.clear()
|
||||
_set_status("Listing files…")
|
||||
|
||||
var filter: String = _filter_edit.text if not _filter_edit.text.is_empty() else "*"
|
||||
var files: PackedStringArray = _mpq.call("list_files", filter)
|
||||
for f in files:
|
||||
_file_list.add_item(f)
|
||||
_set_status("Found %d files matching '%s'" % [files.size(), filter])
|
||||
|
||||
|
||||
func _on_extract_pressed() -> void:
|
||||
if not _mpq: return
|
||||
|
||||
var filter: String = _filter_edit.text if not _filter_edit.text.is_empty() else "*"
|
||||
var output_dir: String = ProjectSettings.globalize_path(_output_edit.text)
|
||||
|
||||
_set_status("Extracting…")
|
||||
_progress.visible = true
|
||||
_progress.value = 0
|
||||
|
||||
var count: int = _mpq.call("extract_files", filter, output_dir)
|
||||
|
||||
_progress.value = 100
|
||||
_progress.visible = false
|
||||
_set_status("Extracted %d files → %s" % [count, output_dir])
|
||||
|
||||
|
||||
# ─── Helpers ──────────────────────────────────────────────────────────────────
|
||||
func _set_status(text: String) -> void:
|
||||
_status_label.text = text
|
||||
print("[MPQTool] ", text)
|
||||
@@ -0,0 +1 @@
|
||||
uid://b1s1aqegqtlg
|
||||
@@ -0,0 +1,102 @@
|
||||
[gd_scene load_steps=2 format=3 uid="uid://mpq_tool"]
|
||||
|
||||
[ext_resource type="Script" path="res://addons/mpq_extractor/ui/mpq_tool.gd" id="1_script"]
|
||||
|
||||
[node name="MPQTool" type="VBoxContainer"]
|
||||
script = ExtResource("1_script")
|
||||
custom_minimum_size = Vector2(280, 0)
|
||||
|
||||
[node name="Title" type="Label" parent="."]
|
||||
text = "MPQ Extractor (WoW 3.3.5a)"
|
||||
theme_override_font_sizes/font_size = 14
|
||||
|
||||
[node name="HSep1" type="HSeparator" parent="."]
|
||||
|
||||
[node name="ClientPathRow" type="HBoxContainer" parent="."]
|
||||
|
||||
[node name="ClientLabel" type="Label" parent="ClientPathRow"]
|
||||
text = "Client path"
|
||||
custom_minimum_size = Vector2(80, 0)
|
||||
|
||||
[node name="ClientPathEdit" type="LineEdit" parent="ClientPathRow"]
|
||||
unique_name_in_owner = true
|
||||
size_flags_horizontal = 3
|
||||
placeholder_text = "res://sources"
|
||||
|
||||
[node name="LocaleRow" type="HBoxContainer" parent="."]
|
||||
|
||||
[node name="LocaleLabel" type="Label" parent="LocaleRow"]
|
||||
text = "Locale"
|
||||
custom_minimum_size = Vector2(80, 0)
|
||||
|
||||
[node name="LocaleOption" type="OptionButton" parent="LocaleRow"]
|
||||
unique_name_in_owner = true
|
||||
size_flags_horizontal = 3
|
||||
|
||||
[node name="OpenBtn" type="Button" parent="."]
|
||||
unique_name_in_owner = true
|
||||
text = "Open Client Archives"
|
||||
|
||||
[node name="HSep2" type="HSeparator" parent="."]
|
||||
|
||||
[node name="ArchiveLabel" type="Label" parent="."]
|
||||
text = "Loaded archives (highest priority first):"
|
||||
|
||||
[node name="ArchiveList" type="ItemList" parent="."]
|
||||
unique_name_in_owner = true
|
||||
custom_minimum_size = Vector2(0, 110)
|
||||
|
||||
[node name="HSep3" type="HSeparator" parent="."]
|
||||
|
||||
[node name="FilterRow" type="HBoxContainer" parent="."]
|
||||
|
||||
[node name="FilterLabel" type="Label" parent="FilterRow"]
|
||||
text = "Filter"
|
||||
custom_minimum_size = Vector2(80, 0)
|
||||
|
||||
[node name="FilterEdit" type="LineEdit" parent="FilterRow"]
|
||||
unique_name_in_owner = true
|
||||
size_flags_horizontal = 3
|
||||
placeholder_text = "DBFilesClient\\*.dbc"
|
||||
text = "*"
|
||||
|
||||
[node name="OutputRow" type="HBoxContainer" parent="."]
|
||||
|
||||
[node name="OutputLabel" type="Label" parent="OutputRow"]
|
||||
text = "Output dir"
|
||||
custom_minimum_size = Vector2(80, 0)
|
||||
|
||||
[node name="OutputEdit" type="LineEdit" parent="OutputRow"]
|
||||
unique_name_in_owner = true
|
||||
size_flags_horizontal = 3
|
||||
placeholder_text = "res://extracted"
|
||||
text = "res://extracted"
|
||||
|
||||
[node name="ActionRow" type="HBoxContainer" parent="."]
|
||||
|
||||
[node name="ListBtn" type="Button" parent="ActionRow"]
|
||||
unique_name_in_owner = true
|
||||
size_flags_horizontal = 3
|
||||
text = "List Files"
|
||||
|
||||
[node name="ExtractBtn" type="Button" parent="ActionRow"]
|
||||
unique_name_in_owner = true
|
||||
size_flags_horizontal = 3
|
||||
text = "Extract"
|
||||
|
||||
[node name="ProgressBar" type="ProgressBar" parent="."]
|
||||
unique_name_in_owner = true
|
||||
visible = false
|
||||
|
||||
[node name="FileListLabel" type="Label" parent="."]
|
||||
text = "Files matching filter:"
|
||||
|
||||
[node name="FileList" type="ItemList" parent="."]
|
||||
unique_name_in_owner = true
|
||||
size_flags_vertical = 3
|
||||
custom_minimum_size = Vector2(0, 200)
|
||||
|
||||
[node name="StatusLabel" type="Label" parent="."]
|
||||
unique_name_in_owner = true
|
||||
text = "Ready."
|
||||
autowrap_mode = 3
|
||||
@@ -0,0 +1,42 @@
|
||||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://d1hgbro27dodt"
|
||||
path="res://.godot/imported/BloodElfFemale.glb-b1741861349e3fc4fb17e94f1918c49c.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale.glb"
|
||||
dest_files=["res://.godot/imported/BloodElfFemale.glb-b1741861349e3fc4fb17e94f1918c49c.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/root_script=null
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
nodes/use_name_suffixes=true
|
||||
nodes/use_node_type_suffixes=true
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
materials/extract=0
|
||||
materials/extract_format=0
|
||||
materials/extract_path=""
|
||||
_subresources={}
|
||||
gltf/naming_version=2
|
||||
gltf/embedded_image_handling=1
|
||||
|
After Width: | Height: | Size: 1.5 KiB |
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c3yq4bmdthh5k"
|
||||
path.s3tc="res://.godot/imported/BloodElfFemale_BLOODELFFEMALEEYEGLOWGREEN.png-0402444f90360f9f4e8cdddcdbbc6820.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "e4357947558b2043edc1c7ee3887ce57"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_BLOODELFFEMALEEYEGLOWGREEN.png"
|
||||
dest_files=["res://.godot/imported/BloodElfFemale_BLOODELFFEMALEEYEGLOWGREEN.png-0402444f90360f9f4e8cdddcdbbc6820.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
|
After Width: | Height: | Size: 170 KiB |
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cfv75i5np5o34"
|
||||
path.s3tc="res://.godot/imported/BloodElfFemale_BLOODELFFEMALESKIN00_00.png-65eb8b7e90125863cb003a1d12b3c5f2.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "ca0783394a973566ae902d46a0ec18c5"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_BLOODELFFEMALESKIN00_00.png"
|
||||
dest_files=["res://.godot/imported/BloodElfFemale_BLOODELFFEMALESKIN00_00.png-65eb8b7e90125863cb003a1d12b3c5f2.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
|
After Width: | Height: | Size: 22 KiB |
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ccxw4dvqfcdlc"
|
||||
path.s3tc="res://.godot/imported/BloodElfFemale_HAIR00_00.png-088bf1c3a201c9b95eaae625806fa47d.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "4715cf74f5fc16ae5c7799dc1d350179"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_HAIR00_00.png"
|
||||
dest_files=["res://.godot/imported/BloodElfFemale_HAIR00_00.png-088bf1c3a201c9b95eaae625806fa47d.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
|
After Width: | Height: | Size: 1.3 KiB |
@@ -0,0 +1,44 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bektfowjblk3w"
|
||||
path.s3tc="res://.godot/imported/BloodElfFemale_deathKnightEyeGlow.png-53c34a083ecd3e17af912a6fcdd97056.s3tc.ctex"
|
||||
metadata={
|
||||
"imported_formats": ["s3tc_bptc"],
|
||||
"vram_texture": true
|
||||
}
|
||||
generator_parameters={
|
||||
"md5": "de4c150e4cd2d49505d8aea5ac12e337"
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_deathKnightEyeGlow.png"
|
||||
dest_files=["res://.godot/imported/BloodElfFemale_deathKnightEyeGlow.png-53c34a083ecd3e17af912a6fcdd97056.s3tc.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=2
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=true
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=0
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://fswc0wa00p16"
|
||||
path="res://.godot/imported/face_lower_00_00.png-56a7519d9ad23a24f0f94b4cf524ec40.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_00.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_00.png-56a7519d9ad23a24f0f94b4cf524ec40.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b7hb2njov3pmt"
|
||||
path="res://.godot/imported/face_lower_00_01.png-ada336a3632cc6b7594a349a5ab0afad.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_01.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_01.png-ada336a3632cc6b7594a349a5ab0afad.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cvhx54078wh1"
|
||||
path="res://.godot/imported/face_lower_00_02.png-db574ecdcf45eede4db14673c0b067a9.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_02.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_02.png-db574ecdcf45eede4db14673c0b067a9.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://8mjqidjds1j"
|
||||
path="res://.godot/imported/face_lower_00_03.png-149edb7caa0471aa54a5ff86ab3ea78d.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_03.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_03.png-149edb7caa0471aa54a5ff86ab3ea78d.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cpfi88no1a0s1"
|
||||
path="res://.godot/imported/face_lower_00_04.png-07e43b43898296ab0d51ff251261774b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_04.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_04.png-07e43b43898296ab0d51ff251261774b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b374h0bu1y21h"
|
||||
path="res://.godot/imported/face_lower_00_05.png-4f5da848e008132e48e3999559ac8b88.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_05.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_05.png-4f5da848e008132e48e3999559ac8b88.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dyyjbyl5aymon"
|
||||
path="res://.godot/imported/face_lower_00_06.png-91a5aca789a732af8ec6b51e22ea7468.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_06.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_06.png-91a5aca789a732af8ec6b51e22ea7468.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b24cflepuw7em"
|
||||
path="res://.godot/imported/face_lower_00_07.png-0a15e214166e3279421c558cd337c4cd.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_07.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_07.png-0a15e214166e3279421c558cd337c4cd.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ducjruc8ttlmj"
|
||||
path="res://.godot/imported/face_lower_00_08.png-12fac00a92211e9da24a4cd7dfb1a3e8.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_08.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_08.png-12fac00a92211e9da24a4cd7dfb1a3e8.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ckejgoj6wevto"
|
||||
path="res://.godot/imported/face_lower_00_09.png-1bf534f03d09c4c94908848d4599bc91.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_09.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_09.png-1bf534f03d09c4c94908848d4599bc91.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 11 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://caiwqqkeuwch"
|
||||
path="res://.godot/imported/face_lower_00_10.png-878b133623f76c69f671b5d125eb1344.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_10.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_10.png-878b133623f76c69f671b5d125eb1344.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 12 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://7p2uxhu7464j"
|
||||
path="res://.godot/imported/face_lower_00_11.png-9d8d5c808637e84e47df27fac3b9496d.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_11.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_11.png-9d8d5c808637e84e47df27fac3b9496d.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 10 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ctwdh21wmfw04"
|
||||
path="res://.godot/imported/face_lower_00_12.png-67280568396d23adc1218860d63fb7b0.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_00_12.png"
|
||||
dest_files=["res://.godot/imported/face_lower_00_12.png-67280568396d23adc1218860d63fb7b0.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://befp1t0ahx3kq"
|
||||
path="res://.godot/imported/face_lower_01_00.png-215dbe2e43ecbe1632f57e40d85b71e3.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_01_00.png"
|
||||
dest_files=["res://.godot/imported/face_lower_01_00.png-215dbe2e43ecbe1632f57e40d85b71e3.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://df31jd8modpwp"
|
||||
path="res://.godot/imported/face_lower_01_01.png-12e03019449c96f2d183ad302fc3bec6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_01_01.png"
|
||||
dest_files=["res://.godot/imported/face_lower_01_01.png-12e03019449c96f2d183ad302fc3bec6.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://ebhleyk0qa2k"
|
||||
path="res://.godot/imported/face_lower_01_02.png-12aed3ccfec8639f0949e16d3bf2b165.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_01_02.png"
|
||||
dest_files=["res://.godot/imported/face_lower_01_02.png-12aed3ccfec8639f0949e16d3bf2b165.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dkht7l6gg4r3m"
|
||||
path="res://.godot/imported/face_lower_01_03.png-d118d7d8314adc55fc19da76235dcbca.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_01_03.png"
|
||||
dest_files=["res://.godot/imported/face_lower_01_03.png-d118d7d8314adc55fc19da76235dcbca.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://d0hv6rw2uigw1"
|
||||
path="res://.godot/imported/face_lower_01_04.png-5413355ccd8c0229b53d71977511df02.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_01_04.png"
|
||||
dest_files=["res://.godot/imported/face_lower_01_04.png-5413355ccd8c0229b53d71977511df02.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://f13k7r67tc6s"
|
||||
path="res://.godot/imported/face_lower_01_05.png-018acfb2eb5861f6c7d6fff657daec04.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_01_05.png"
|
||||
dest_files=["res://.godot/imported/face_lower_01_05.png-018acfb2eb5861f6c7d6fff657daec04.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://c6exxcl4t4way"
|
||||
path="res://.godot/imported/face_lower_01_06.png-186fdded358b46411f84a6a132a2a1c8.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_01_06.png"
|
||||
dest_files=["res://.godot/imported/face_lower_01_06.png-186fdded358b46411f84a6a132a2a1c8.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://waq2x8jf3xli"
|
||||
path="res://.godot/imported/face_lower_01_07.png-9052d751ed01e5aff8a7de79101544b6.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_01_07.png"
|
||||
dest_files=["res://.godot/imported/face_lower_01_07.png-9052d751ed01e5aff8a7de79101544b6.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://jlkna41didhf"
|
||||
path="res://.godot/imported/face_lower_01_08.png-f18dd8d6ec81c37fc334c2595efc576d.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_01_08.png"
|
||||
dest_files=["res://.godot/imported/face_lower_01_08.png-f18dd8d6ec81c37fc334c2595efc576d.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dn6q7maum4fia"
|
||||
path="res://.godot/imported/face_lower_01_09.png-caba5d6fff9c54be3f3c7137e853c471.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_01_09.png"
|
||||
dest_files=["res://.godot/imported/face_lower_01_09.png-caba5d6fff9c54be3f3c7137e853c471.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 26 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bebs2g42si2vn"
|
||||
path="res://.godot/imported/face_lower_02_00.png-68e2702ad72042b72a3398ba7ef6d719.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_02_00.png"
|
||||
dest_files=["res://.godot/imported/face_lower_02_00.png-68e2702ad72042b72a3398ba7ef6d719.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://dgh865wvtt5x0"
|
||||
path="res://.godot/imported/face_lower_02_01.png-b577ad7674c39736144f82162fcd7128.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_02_01.png"
|
||||
dest_files=["res://.godot/imported/face_lower_02_01.png-b577ad7674c39736144f82162fcd7128.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://odwrutr0qxh5"
|
||||
path="res://.godot/imported/face_lower_02_02.png-9afb8ca9ae0737f6ae3d112057573b48.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_02_02.png"
|
||||
dest_files=["res://.godot/imported/face_lower_02_02.png-9afb8ca9ae0737f6ae3d112057573b48.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bmkjl0h7gqe2t"
|
||||
path="res://.godot/imported/face_lower_02_03.png-e2faf35fe5ba2652d0f858a389dad498.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_02_03.png"
|
||||
dest_files=["res://.godot/imported/face_lower_02_03.png-e2faf35fe5ba2652d0f858a389dad498.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cknvyuosyb4on"
|
||||
path="res://.godot/imported/face_lower_02_04.png-8fcad97e37e49c38c433de744434e01e.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_02_04.png"
|
||||
dest_files=["res://.godot/imported/face_lower_02_04.png-8fcad97e37e49c38c433de744434e01e.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bun1g2ptkfyiq"
|
||||
path="res://.godot/imported/face_lower_02_05.png-041bae345c5c8ed9a75b4cb6a80c9b6b.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_02_05.png"
|
||||
dest_files=["res://.godot/imported/face_lower_02_05.png-041bae345c5c8ed9a75b4cb6a80c9b6b.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 23 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://bw13fnydvbdaj"
|
||||
path="res://.godot/imported/face_lower_02_06.png-b0b2205b65b48bff278de38fe783c255.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_02_06.png"
|
||||
dest_files=["res://.godot/imported/face_lower_02_06.png-b0b2205b65b48bff278de38fe783c255.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 24 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://b6n6a2ycwm25q"
|
||||
path="res://.godot/imported/face_lower_02_07.png-23d80ffc52e88e30e516a1f0b75be6fe.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_02_07.png"
|
||||
dest_files=["res://.godot/imported/face_lower_02_07.png-23d80ffc52e88e30e516a1f0b75be6fe.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||
|
After Width: | Height: | Size: 27 KiB |
@@ -0,0 +1,40 @@
|
||||
[remap]
|
||||
|
||||
importer="texture"
|
||||
type="CompressedTexture2D"
|
||||
uid="uid://cmnem56pxfks1"
|
||||
path="res://.godot/imported/face_lower_02_08.png-58b31ce3886f8db0fb3f8a9d1b368fca.ctex"
|
||||
metadata={
|
||||
"vram_texture": false
|
||||
}
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://exported_glb/BloodElfFemale_textures/face_lower_02_08.png"
|
||||
dest_files=["res://.godot/imported/face_lower_02_08.png-58b31ce3886f8db0fb3f8a9d1b368fca.ctex"]
|
||||
|
||||
[params]
|
||||
|
||||
compress/mode=0
|
||||
compress/high_quality=false
|
||||
compress/lossy_quality=0.7
|
||||
compress/uastc_level=0
|
||||
compress/rdo_quality_loss=0.0
|
||||
compress/hdr_compression=1
|
||||
compress/normal_map=0
|
||||
compress/channel_pack=0
|
||||
mipmaps/generate=false
|
||||
mipmaps/limit=-1
|
||||
roughness/mode=0
|
||||
roughness/src_normal=""
|
||||
process/channel_remap/red=0
|
||||
process/channel_remap/green=1
|
||||
process/channel_remap/blue=2
|
||||
process/channel_remap/alpha=3
|
||||
process/fix_alpha_border=true
|
||||
process/premult_alpha=false
|
||||
process/normal_map_invert_y=false
|
||||
process/hdr_as_srgb=false
|
||||
process/hdr_clamp_exposure=false
|
||||
process/size_limit=0
|
||||
detect_3d/compress_to=1
|
||||