Interior Maps #13
BIN
local_player.scn (Stored with Git LFS)
BIN
local_player.scn (Stored with Git LFS)
Binary file not shown.
BIN
map_editor.scn (Stored with Git LFS)
BIN
map_editor.scn (Stored with Git LFS)
Binary file not shown.
|
@ -0,0 +1,12 @@
|
||||||
|
shader_type spatial;
|
||||||
|
render_mode unshaded, blend_add, cull_disabled;
|
||||||
|
|
||||||
|
uniform sampler2D source_texture;
|
||||||
|
|
||||||
|
uniform vec4 modulate: source_color = vec4(1.0);
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
vec4 source = texture(source_texture, UV);
|
||||||
|
ALBEDO = (source.rgb * modulate.rgb);
|
||||||
|
ALPHA = source.a;
|
||||||
|
}
|
Binary file not shown.
|
@ -0,0 +1,21 @@
|
||||||
|
class_name Tile extends Resource
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
enum Kind {
|
||||||
|
FLOOR,
|
||||||
|
WALL,
|
||||||
|
}
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
@export
|
||||||
|
var kind := Kind.FLOOR
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
|
@export
|
||||||
|
var mesh: Mesh = null
|
|
@ -1,4 +1,4 @@
|
||||||
class_name MeshGrid extends Node3D
|
class_name TileGrid extends Node3D
|
||||||
|
|
||||||
const _CHUNK_SIZE := 32
|
const _CHUNK_SIZE := 32
|
||||||
|
|
||||||
|
@ -8,17 +8,22 @@ const _GRID_ORIGIN := Vector2(0.5, 0.5)
|
||||||
## Baked block of meshes making up a segment of the grid.
|
## Baked block of meshes making up a segment of the grid.
|
||||||
##
|
##
|
||||||
class Chunk:
|
class Chunk:
|
||||||
|
var _floor_meshes: Array[Mesh] = []
|
||||||
|
|
||||||
var _multimesh_instances: Array[MultiMeshInstance] = []
|
var _multimesh_instances: Array[MultiMeshInstance] = []
|
||||||
|
|
||||||
var _meshes: Array[Mesh] = []
|
var _wall_meshes: Array[Mesh] = []
|
||||||
|
|
||||||
func _init() -> void:
|
func _init() -> void:
|
||||||
_meshes.resize(_CHUNK_SIZE * _CHUNK_SIZE)
|
var buffer_size := _CHUNK_SIZE * _CHUNK_SIZE
|
||||||
|
|
||||||
|
_floor_meshes.resize(buffer_size)
|
||||||
|
_wall_meshes.resize(buffer_size)
|
||||||
|
|
||||||
##
|
##
|
||||||
## Invalidates the mesh block, re-baking its contents from the current mesh data set.
|
## Invalidates the mesh block, re-baking its contents from the current mesh data set.
|
||||||
##
|
##
|
||||||
func invalidate(mesh_grid: MeshGrid, coordinate: Vector2i) -> void:
|
func invalidate(tile_grid: TileGrid, coordinate: Vector2i) -> void:
|
||||||
# TODO: Once this is all lowered into native code, look for ways to parallelize the loops.
|
# TODO: Once this is all lowered into native code, look for ways to parallelize the loops.
|
||||||
for multimesh_instance in _multimesh_instances:
|
for multimesh_instance in _multimesh_instances:
|
||||||
RenderingServer.free_rid(multimesh_instance._instance_rid)
|
RenderingServer.free_rid(multimesh_instance._instance_rid)
|
||||||
|
@ -28,10 +33,23 @@ class Chunk:
|
||||||
|
|
||||||
# Normalize mesh instance data for the chunk.
|
# Normalize mesh instance data for the chunk.
|
||||||
var transforms_by_mesh := {}
|
var transforms_by_mesh := {}
|
||||||
var grid_size := mesh_grid.size
|
var grid_size := tile_grid.size
|
||||||
|
|
||||||
for i in _meshes.size():
|
for i in _floor_meshes.size():
|
||||||
var mesh := _meshes[i]
|
var mesh := _floor_meshes[i]
|
||||||
|
|
||||||
|
if mesh != null:
|
||||||
|
if not(mesh in transforms_by_mesh):
|
||||||
|
transforms_by_mesh[mesh] = []
|
||||||
|
|
||||||
|
transforms_by_mesh[mesh].append(Transform3D(Basis.IDENTITY, Vector3(
|
||||||
|
(float(coordinate.x * _CHUNK_SIZE) + (i % _CHUNK_SIZE)) -
|
||||||
|
(float(grid_size.x) * _GRID_ORIGIN.x), 0.0,
|
||||||
|
(float(coordinate.y * _CHUNK_SIZE) + (i / _CHUNK_SIZE)) -
|
||||||
|
(float(grid_size.y) * _GRID_ORIGIN.y))))
|
||||||
|
|
||||||
|
for i in _wall_meshes.size():
|
||||||
|
var mesh := _wall_meshes[i]
|
||||||
|
|
||||||
if mesh != null:
|
if mesh != null:
|
||||||
if not(mesh in transforms_by_mesh):
|
if not(mesh in transforms_by_mesh):
|
||||||
|
@ -44,8 +62,8 @@ class Chunk:
|
||||||
(float(grid_size.y) * _GRID_ORIGIN.y))))
|
(float(grid_size.y) * _GRID_ORIGIN.y))))
|
||||||
|
|
||||||
# (Re)-bake into multimesh instances for the chunk.
|
# (Re)-bake into multimesh instances for the chunk.
|
||||||
var scenario_rid := mesh_grid.get_world_3d().scenario
|
var scenario_rid := tile_grid.get_world_3d().scenario
|
||||||
var global_transform := mesh_grid.global_transform
|
var global_transform := tile_grid.global_transform
|
||||||
|
|
||||||
for chunk_mesh in transforms_by_mesh:
|
for chunk_mesh in transforms_by_mesh:
|
||||||
var multimesh_instance := MultiMeshInstance.new(
|
var multimesh_instance := MultiMeshInstance.new(
|
||||||
|
@ -55,17 +73,27 @@ class Chunk:
|
||||||
_multimesh_instances.append(multimesh_instance)
|
_multimesh_instances.append(multimesh_instance)
|
||||||
|
|
||||||
##
|
##
|
||||||
## Sets the mesh location in the chunk at the relative [code]coordinatess[/code] to
|
## Sets the floor mesh in the chunk at the location relative [code]coordinatess[/code] to
|
||||||
## [code]mesh[/code].
|
## [code]mesh[/code].
|
||||||
##
|
##
|
||||||
## *Note* that [method Chunk.invalidate] must be called at some point after to visually update
|
## *Note* that [method Chunk.invalidate] must be called at some point after to visually update
|
||||||
## the chunk.
|
## the chunk.
|
||||||
##
|
##
|
||||||
func set_mesh(coordinates: Vector2i, mesh: Mesh) -> void:
|
func set_floor_mesh(coordinates: Vector2i, mesh: Mesh) -> void:
|
||||||
_meshes[(_CHUNK_SIZE * coordinates.y) + coordinates.x] = mesh
|
_floor_meshes[(_CHUNK_SIZE * coordinates.y) + coordinates.x] = mesh
|
||||||
|
|
||||||
|
##
|
||||||
|
## Sets the wall mesh in the chunk at the location relative [code]coordinatess[/code] to
|
||||||
|
## [code]mesh[/code].
|
||||||
|
##
|
||||||
|
## *Note* that [method Chunk.invalidate] must be called at some point after to visually update
|
||||||
|
## the chunk.
|
||||||
|
##
|
||||||
|
func set_wall_mesh(coordinates: Vector2i, mesh: Mesh) -> void:
|
||||||
|
_wall_meshes[(_CHUNK_SIZE * coordinates.y) + coordinates.x] = mesh
|
||||||
|
|
||||||
##
|
##
|
||||||
## Specialized multi-mesh instance convenience for use within the mesh grid and its chunks.
|
## Specialized multi-mesh instance convenience for use within the tile grid and its chunks.
|
||||||
##
|
##
|
||||||
class MultiMeshInstance:
|
class MultiMeshInstance:
|
||||||
var _instance_rid := RID()
|
var _instance_rid := RID()
|
||||||
|
@ -97,7 +125,7 @@ var _chunks: Array[Chunk] = []
|
||||||
var _chunks_size := Vector2i.ZERO
|
var _chunks_size := Vector2i.ZERO
|
||||||
|
|
||||||
##
|
##
|
||||||
## Size of the mesh grid (in engine units).
|
## Size of the tile grid (in engine units).
|
||||||
##
|
##
|
||||||
@export
|
@export
|
||||||
var size: Vector2i:
|
var size: Vector2i:
|
||||||
|
@ -123,18 +151,40 @@ func _notification(what: int) -> void:
|
||||||
multimesh_instance.set_offset_transform(global_transform)
|
multimesh_instance.set_offset_transform(global_transform)
|
||||||
|
|
||||||
##
|
##
|
||||||
## Clears the entire mesh grid to only contain [code]mesh[/code].
|
## Clears the entirety of the tile grid to only contain [code]tile[/code].
|
||||||
##
|
|
||||||
## [code]null[/code] may be past to [code]mesh[/code] for clearing the mesh grid to nothing.
|
|
||||||
##
|
##
|
||||||
## For clearing a specific region of the mesh grid, see [method fill_mesh].
|
## For clearing a specific region of the mesh grid, see [method fill_mesh].
|
||||||
##
|
##
|
||||||
func clear_mesh(mesh: Mesh) -> void:
|
func clear_tiles(tile: Tile) -> void:
|
||||||
for y in size.y:
|
if tile == null:
|
||||||
for x in size.x:
|
for y in size.y:
|
||||||
var coordinate := Vector2i(x, y)
|
for x in size.x:
|
||||||
|
var coordinates := Vector2i(x, y)
|
||||||
|
var chunk := _get_chunk(coordinates / _CHUNK_SIZE)
|
||||||
|
var chunk_coordinates := coordinates % _CHUNK_SIZE
|
||||||
|
|
||||||
_get_chunk(coordinate / _CHUNK_SIZE).set_mesh(coordinate % _CHUNK_SIZE, mesh)
|
chunk.set_floor_mesh(chunk_coordinates, null)
|
||||||
|
chunk.set_wall_mesh(chunk_coordinates, null)
|
||||||
|
|
||||||
|
else:
|
||||||
|
var mesh := tile.mesh
|
||||||
|
|
||||||
|
match tile.kind:
|
||||||
|
Tile.Kind.FLOOR:
|
||||||
|
for y in size.y:
|
||||||
|
for x in size.x:
|
||||||
|
var coordinate := Vector2i(x, y)
|
||||||
|
|
||||||
|
_get_chunk(coordinate / _CHUNK_SIZE).\
|
||||||
|
set_floor_mesh(coordinate % _CHUNK_SIZE, mesh)
|
||||||
|
|
||||||
|
Tile.Kind.WALL:
|
||||||
|
for y in size.y:
|
||||||
|
for x in size.x:
|
||||||
|
var coordinate := Vector2i(x, y)
|
||||||
|
|
||||||
|
_get_chunk(coordinate / _CHUNK_SIZE).\
|
||||||
|
set_floor_mesh(coordinate % _CHUNK_SIZE, mesh)
|
||||||
|
|
||||||
for y in _chunks_size.y:
|
for y in _chunks_size.y:
|
||||||
for x in _chunks_size.x:
|
for x in _chunks_size.x:
|
||||||
|
@ -143,9 +193,7 @@ func clear_mesh(mesh: Mesh) -> void:
|
||||||
_get_chunk(chunk_coordinate).invalidate(self, chunk_coordinate)
|
_get_chunk(chunk_coordinate).invalidate(self, chunk_coordinate)
|
||||||
|
|
||||||
##
|
##
|
||||||
## Clears the region of the mesh grid at [code]area[/code] to only contain [code]mesh[/code].
|
## Clears the region of the tile grid at [code]area[/code] to only contain [code]tile[/code].
|
||||||
##
|
|
||||||
## [code]null[/code] may be past to [code]mesh[/code] for filling the region to nothing.
|
|
||||||
##
|
##
|
||||||
## *Note* that [code]area[/code] *must* be within the area of the of the mesh grid, where
|
## *Note* that [code]area[/code] *must* be within the area of the of the mesh grid, where
|
||||||
## [code]Vector2i.ZERO[/code] is the top-left and [member size] [code]- 1[/code] is the bottom-
|
## [code]Vector2i.ZERO[/code] is the top-left and [member size] [code]- 1[/code] is the bottom-
|
||||||
|
@ -153,20 +201,46 @@ func clear_mesh(mesh: Mesh) -> void:
|
||||||
##
|
##
|
||||||
## For clearing the whole of the mesh grid, see [method clear_mesh].
|
## For clearing the whole of the mesh grid, see [method clear_mesh].
|
||||||
##
|
##
|
||||||
func fill_mesh(area: Rect2i, mesh: Mesh) -> void:
|
func fill_tiles(area: Rect2i, tile: Tile) -> void:
|
||||||
assert(get_area().encloses(area), "area must be within grid")
|
assert(get_area().encloses(area), "area must be within grid")
|
||||||
|
|
||||||
var filled_chunks := BitMap.new()
|
var filled_chunks := BitMap.new()
|
||||||
|
|
||||||
filled_chunks.resize(_chunks_size)
|
filled_chunks.resize(_chunks_size)
|
||||||
|
|
||||||
for y in range(area.position.y, area.end.y):
|
if tile == null:
|
||||||
for x in range(area.position.x, area.end.x):
|
for y in range(area.position.y, area.end.y):
|
||||||
var coordinate := Vector2i(x, y)
|
for x in range(area.position.x, area.end.x):
|
||||||
var chunk_coordinate := coordinate / _CHUNK_SIZE
|
var coordinates := Vector2i(x, y)
|
||||||
|
var chunk_coordinates := coordinates / _CHUNK_SIZE
|
||||||
|
var chunk := _get_chunk(coordinates / _CHUNK_SIZE)
|
||||||
|
var local_coordinates := coordinates % _CHUNK_SIZE
|
||||||
|
|
||||||
_get_chunk(chunk_coordinate).set_mesh(coordinate % _CHUNK_SIZE, mesh)
|
chunk.set_floor_mesh(local_coordinates, null)
|
||||||
filled_chunks.set_bitv(chunk_coordinate, true)
|
chunk.set_wall_mesh(local_coordinates, null)
|
||||||
|
filled_chunks.set_bitv(chunk_coordinates, true)
|
||||||
|
|
||||||
|
else:
|
||||||
|
var mesh := tile.mesh
|
||||||
|
|
||||||
|
match tile.kind:
|
||||||
|
Tile.Kind.FLOOR:
|
||||||
|
for y in range(area.position.y, area.end.y):
|
||||||
|
for x in range(area.position.x, area.end.x):
|
||||||
|
var coordinate := Vector2i(x, y)
|
||||||
|
var chunk_coordinate := coordinate / _CHUNK_SIZE
|
||||||
|
|
||||||
|
_get_chunk(chunk_coordinate).set_floor_mesh(coordinate % _CHUNK_SIZE, mesh)
|
||||||
|
filled_chunks.set_bitv(chunk_coordinate, true)
|
||||||
|
|
||||||
|
Tile.Kind.WALL:
|
||||||
|
for y in range(area.position.y, area.end.y):
|
||||||
|
for x in range(area.position.x, area.end.x):
|
||||||
|
var coordinate := Vector2i(x, y)
|
||||||
|
var chunk_coordinate := coordinate / _CHUNK_SIZE
|
||||||
|
|
||||||
|
_get_chunk(chunk_coordinate).set_wall_mesh(coordinate % _CHUNK_SIZE, mesh)
|
||||||
|
filled_chunks.set_bitv(chunk_coordinate, true)
|
||||||
|
|
||||||
for y in _chunks_size.y:
|
for y in _chunks_size.y:
|
||||||
for x in _chunks_size.x:
|
for x in _chunks_size.x:
|
||||||
|
@ -175,35 +249,43 @@ func fill_mesh(area: Rect2i, mesh: Mesh) -> void:
|
||||||
|
|
||||||
_get_chunk(chunk_coordinate).invalidate(self, chunk_coordinate)
|
_get_chunk(chunk_coordinate).invalidate(self, chunk_coordinate)
|
||||||
|
|
||||||
|
##
|
||||||
|
##
|
||||||
|
##
|
||||||
func get_area() -> Rect2i:
|
func get_area() -> Rect2i:
|
||||||
return Rect2i(Vector2i.ZERO, size)
|
return Rect2i(Vector2i.ZERO, size)
|
||||||
|
|
||||||
##
|
##
|
||||||
## Plots a single mesh at [code]coordinates[/code] to be [code]mesh[/code], overwriting whatever it
|
## Plots a single tile at [code]coordinates[/code] to be [code]tile[/code], overwriting whatever it
|
||||||
## previously contained.
|
## previously contained.
|
||||||
##
|
##
|
||||||
## [code]null[/code] may be past to [code]mesh[/code] for clearing the mesh grid to nothing.
|
|
||||||
##
|
|
||||||
## *Note* that [code]coordinates[/code] *must* be within the area of the of the mesh grid, where
|
## *Note* that [code]coordinates[/code] *must* be within the area of the of the mesh grid, where
|
||||||
## [code]Vector2i.ZERO[/code] is the top-left and [member size] [code]- 1[/code] is the bottom-
|
## [code]Vector2i.ZERO[/code] is the top-left and [member size] [code]- 1[/code] is the bottom-
|
||||||
## right.
|
## right.
|
||||||
##
|
##
|
||||||
## For bulk-setting many meshes at once, see [method fill_mesh] and [method clear_mesh].
|
## For bulk-setting many meshes at once, see [method fill_mesh] and [method clear_mesh].
|
||||||
##
|
##
|
||||||
func plot_mesh(coordinates: Vector2i, mesh: Mesh) -> void:
|
func plot_tile(coordinates: Vector2i, tile: Tile) -> void:
|
||||||
assert(get_area().has_point(coordinates), "coordinate must be within grid")
|
assert(get_area().has_point(coordinates), "coordinate must be within grid")
|
||||||
|
|
||||||
var chunk_coordinates := coordinates / _CHUNK_SIZE
|
var chunk_coordinates := coordinates / _CHUNK_SIZE
|
||||||
var chunk := _get_chunk(chunk_coordinates)
|
var chunk := _get_chunk(chunk_coordinates)
|
||||||
|
|
||||||
chunk.set_mesh(coordinates % _CHUNK_SIZE, mesh)
|
if tile == null:
|
||||||
chunk.invalidate(self, chunk_coordinates)
|
var local_coordinates := coordinates % _CHUNK_SIZE
|
||||||
|
|
||||||
##
|
chunk.set_floor_mesh(local_coordinates, null)
|
||||||
## Returns [code]world_position[/code] converted into a coordinate aligned with the [MeshGrid].
|
chunk.set_wall_mesh(local_coordinates, null)
|
||||||
##
|
chunk.invalidate(self, chunk_coordinates)
|
||||||
## Note that [code]world_position[/code] values not within the [MeshGrid] will produce grid
|
|
||||||
## coordinates outside of the [MeshGrid] bounds as well.
|
else:
|
||||||
##
|
var mesh := tile.mesh
|
||||||
func world_to_grid(world_position: Vector2) -> Vector2i:
|
|
||||||
return Vector2i((world_position + (Vector2(size) * _GRID_ORIGIN)).floor())
|
match tile.kind:
|
||||||
|
Tile.Kind.FLOOR:
|
||||||
|
chunk.set_floor_mesh(coordinates % _CHUNK_SIZE, mesh)
|
||||||
|
chunk.invalidate(self, chunk_coordinates)
|
||||||
|
|
||||||
|
Tile.Kind.WALL:
|
||||||
|
chunk.set_wall_mesh(coordinates % _CHUNK_SIZE, mesh)
|
||||||
|
chunk.invalidate(self, chunk_coordinates)
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://3m7gvnsmb4g"
|
||||||
|
path.s3tc="res://.godot/imported/hole_albedo.png-397908bd54a00ad5ae5c4ebd2e6a6712.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/hole_albedo.png-397908bd54a00ad5ae5c4ebd2e6a6712.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc", "etc2"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://tiling/tiles/limestone_dungeon/hole_albedo.png"
|
||||||
|
dest_files=["res://.godot/imported/hole_albedo.png-397908bd54a00ad5ae5c4ebd2e6a6712.s3tc.ctex", "res://.godot/imported/hole_albedo.png-397908bd54a00ad5ae5c4ebd2e6a6712.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
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
|
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://c8p7qvcrfsio7"
|
||||||
|
path.s3tc="res://.godot/imported/hole_height.png-33e0c22a7ec549d3b4415f6535e75389.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/hole_height.png-33e0c22a7ec549d3b4415f6535e75389.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc", "etc2"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://tiling/tiles/limestone_dungeon/hole_height.png"
|
||||||
|
dest_files=["res://.godot/imported/hole_height.png-33e0c22a7ec549d3b4415f6535e75389.s3tc.ctex", "res://.godot/imported/hole_height.png-33e0c22a7ec549d3b4415f6535e75389.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
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
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://c4eby3i7q2wts"
|
||||||
|
path.s3tc="res://.godot/imported/hole_normal.png-48d612f86efe0b8b5c20262f0d4e848a.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/hole_normal.png-48d612f86efe0b8b5c20262f0d4e848a.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc", "etc2"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://tiling/tiles/limestone_dungeon/hole_normal.png"
|
||||||
|
dest_files=["res://.godot/imported/hole_normal.png-48d612f86efe0b8b5c20262f0d4e848a.s3tc.ctex", "res://.godot/imported/hole_normal.png-48d612f86efe0b8b5c20262f0d4e848a.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=1
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=1
|
||||||
|
roughness/src_normal="res://tiles/tiles/limestone_dungeon/hole_normal.png"
|
||||||
|
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
|
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://dvqqmbf6r1jfm"
|
||||||
|
path.s3tc="res://.godot/imported/hole_orm.png-4f40ed9d2832b8b97cb8bb14a110f509.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/hole_orm.png-4f40ed9d2832b8b97cb8bb14a110f509.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc", "etc2"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://tiling/tiles/limestone_dungeon/hole_orm.png"
|
||||||
|
dest_files=["res://.godot/imported/hole_orm.png-4f40ed9d2832b8b97cb8bb14a110f509.s3tc.ctex", "res://.godot/imported/hole_orm.png-4f40ed9d2832b8b97cb8bb14a110f509.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
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
|
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://yu0p5ryoh7gr"
|
||||||
|
path.s3tc="res://.godot/imported/piping_albedo.png-d117bd6aedaaed5af7d5b88d016dd068.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/piping_albedo.png-d117bd6aedaaed5af7d5b88d016dd068.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc", "etc2"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://tiling/tiles/limestone_dungeon/piping_albedo.png"
|
||||||
|
dest_files=["res://.godot/imported/piping_albedo.png-d117bd6aedaaed5af7d5b88d016dd068.s3tc.ctex", "res://.godot/imported/piping_albedo.png-d117bd6aedaaed5af7d5b88d016dd068.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
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
|
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://byw6qkgod61ip"
|
||||||
|
path.s3tc="res://.godot/imported/piping_height.png-f888453774e014a184ce92a9b1a3c1ba.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/piping_height.png-f888453774e014a184ce92a9b1a3c1ba.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc", "etc2"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://tiling/tiles/limestone_dungeon/piping_height.png"
|
||||||
|
dest_files=["res://.godot/imported/piping_height.png-f888453774e014a184ce92a9b1a3c1ba.s3tc.ctex", "res://.godot/imported/piping_height.png-f888453774e014a184ce92a9b1a3c1ba.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
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
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bypqkn1tm036p"
|
||||||
|
path.s3tc="res://.godot/imported/piping_normal.png-0c487b0c66ff253b09c1ba11ef156621.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/piping_normal.png-0c487b0c66ff253b09c1ba11ef156621.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc", "etc2"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://tiling/tiles/limestone_dungeon/piping_normal.png"
|
||||||
|
dest_files=["res://.godot/imported/piping_normal.png-0c487b0c66ff253b09c1ba11ef156621.s3tc.ctex", "res://.godot/imported/piping_normal.png-0c487b0c66ff253b09c1ba11ef156621.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=1
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=1
|
||||||
|
roughness/src_normal="res://tiles/tiles/limestone_dungeon/piping_normal.png"
|
||||||
|
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
|
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bkpucv0ydae5v"
|
||||||
|
path.s3tc="res://.godot/imported/piping_orm.png-e22115d9c1ce0eff6ab03d386d564a38.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/piping_orm.png-e22115d9c1ce0eff6ab03d386d564a38.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc", "etc2"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://tiling/tiles/limestone_dungeon/piping_orm.png"
|
||||||
|
dest_files=["res://.godot/imported/piping_orm.png-e22115d9c1ce0eff6ab03d386d564a38.s3tc.ctex", "res://.godot/imported/piping_orm.png-e22115d9c1ce0eff6ab03d386d564a38.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
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
|
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://bydc62557j2d0"
|
||||||
|
path.s3tc="res://.godot/imported/tiling_albedo.png-335e15cc73fb0bac27ce85e385dd7ecf.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/tiling_albedo.png-335e15cc73fb0bac27ce85e385dd7ecf.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc", "etc2"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://tiling/tiles/limestone_dungeon/tiling_albedo.png"
|
||||||
|
dest_files=["res://.godot/imported/tiling_albedo.png-335e15cc73fb0bac27ce85e385dd7ecf.s3tc.ctex", "res://.godot/imported/tiling_albedo.png-335e15cc73fb0bac27ce85e385dd7ecf.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
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
|
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://didp3nfacohwd"
|
||||||
|
path.s3tc="res://.godot/imported/tiling_height.png-db37ee0c7501cd36b201bbde42feaaab.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/tiling_height.png-db37ee0c7501cd36b201bbde42feaaab.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc", "etc2"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://tiling/tiles/limestone_dungeon/tiling_height.png"
|
||||||
|
dest_files=["res://.godot/imported/tiling_height.png-db37ee0c7501cd36b201bbde42feaaab.s3tc.ctex", "res://.godot/imported/tiling_height.png-db37ee0c7501cd36b201bbde42feaaab.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=7
|
||||||
|
roughness/src_normal="res://tiles/tiles/limestone_dungeon/tiling_normal.png"
|
||||||
|
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
|
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://cv8yiluvc6mol"
|
||||||
|
path.s3tc="res://.godot/imported/tiling_normal.png-7e412b02fac9515815ce4cb07e3cb04b.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/tiling_normal.png-7e412b02fac9515815ce4cb07e3cb04b.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc", "etc2"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://tiling/tiles/limestone_dungeon/tiling_normal.png"
|
||||||
|
dest_files=["res://.godot/imported/tiling_normal.png-7e412b02fac9515815ce4cb07e3cb04b.s3tc.ctex", "res://.godot/imported/tiling_normal.png-7e412b02fac9515815ce4cb07e3cb04b.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=1
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=1
|
||||||
|
roughness/src_normal="res://tiles/tiles/limestone_dungeon/tiling_normal.png"
|
||||||
|
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
|
Binary file not shown.
|
@ -0,0 +1,36 @@
|
||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="CompressedTexture2D"
|
||||||
|
uid="uid://leoab2fjmxgk"
|
||||||
|
path.s3tc="res://.godot/imported/tiling_orm.png-d4a1309df6c98d9d7a8bcda0e97488e6.s3tc.ctex"
|
||||||
|
path.etc2="res://.godot/imported/tiling_orm.png-d4a1309df6c98d9d7a8bcda0e97488e6.etc2.ctex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": ["s3tc", "etc2"],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://tiling/tiles/limestone_dungeon/tiling_orm.png"
|
||||||
|
dest_files=["res://.godot/imported/tiling_orm.png-d4a1309df6c98d9d7a8bcda0e97488e6.s3tc.ctex", "res://.godot/imported/tiling_orm.png-d4a1309df6c98d9d7a8bcda0e97488e6.etc2.ctex"]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_compression=1
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
compress/channel_pack=0
|
||||||
|
mipmaps/generate=true
|
||||||
|
mipmaps/limit=-1
|
||||||
|
roughness/mode=0
|
||||||
|
roughness/src_normal=""
|
||||||
|
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
|
Loading…
Reference in New Issue