Add a first-view controller and a bunch of things

1. Replace 4k models with low-poly once
2. Use bare mixamo for testing
3. Add a basic menu
4. Add a map with collisions and spawn areas
This commit is contained in:
Nikolai Rodionov 2025-01-16 18:17:06 +01:00
parent 34e019f40a
commit b214f8d278
798 changed files with 24962 additions and 465 deletions

5
.gitattributes vendored
View File

@ -1,6 +1,5 @@
# Normalize EOL for all files that Git considers text files.
* text=auto eol=lf
*.png filter=lfs diff=lfs merge=lfs -text
assets filter=lfs diff=lfs merge=lfs -text
assets/models filter=lfs diff=lfs merge=lfs -text
assets/sounds filter=lfs diff=lfs merge=lfs -text
assets/** filter=lfs diff=lfs merge=lfs -text
resources/** filter=lfs diff=lfs merge=lfs -text

73
Demo/DemoWorld.tscn Normal file
View File

@ -0,0 +1,73 @@
[gd_scene load_steps=10 format=3 uid="uid://0576fim4xnjw"]
[ext_resource type="Script" path="res://Demo/MainCamera.gd" id="1"]
[ext_resource type="Script" path="res://addons/Mirror/Mirror/Mirror.gd" id="2"]
[sub_resource type="ProceduralSkyMaterial" id="ProceduralSkyMaterial_omm3q"]
[sub_resource type="Sky" id="Sky_bigpx"]
sky_material = SubResource("ProceduralSkyMaterial_omm3q")
[sub_resource type="Environment" id="Environment_y6thg"]
background_mode = 2
sky = SubResource("Sky_bigpx")
[sub_resource type="SphereMesh" id="4"]
radius = 1.0
height = 2.0
[sub_resource type="CapsuleMesh" id="7"]
radius = 0.33
height = 1.66
[sub_resource type="FastNoiseLite" id="8"]
[sub_resource type="NoiseTexture2D" id="9"]
seamless = true
noise = SubResource("8")
[node name="DemoWorld" type="Node3D"]
[node name="WorldEnvironment" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_y6thg")
[node name="MeshInstance2" type="MeshInstance3D" parent="."]
transform = Transform3D(0.4, 0, 0, 0, 0.4, 0, 0, 0, 0.4, 0.311584, -0.508855, 0.519106)
layers = 2
mesh = SubResource("4")
[node name="MeshInstance3" type="MeshInstance3D" parent="."]
transform = Transform3D(0.4, 0, 0, 0, 0.4, 0, 0, 0, 0.4, 0.4, 0.4, 0.773196)
mesh = SubResource("4")
[node name="MeshInstance4" type="MeshInstance3D" parent="."]
transform = Transform3D(0.3, 0, 0, 0, 0.3, 0, 0, 0, 0.3, 0.396369, 0.461957, -1.66788)
mesh = SubResource("4")
[node name="Player" type="Node3D" parent="."]
transform = Transform3D(0.733279, 0, -0.679928, 0, 1, 0, 0.679928, 0, 0.733279, -3.01042, 0.611678, 3.23258)
script = ExtResource("1")
[node name="CameraRod" type="Node3D" parent="Player"]
[node name="MainCamera" type="Camera3D" parent="Player/CameraRod"]
near = 0.3
[node name="MeshInstance3D" type="MeshInstance3D" parent="Player/CameraRod"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.4, 0)
mesh = SubResource("7")
skeleton = NodePath("../../..")
[node name="Mirror" type="Node3D" parent="."]
script = ExtResource("2")
ResolutionPerUnit = 200
MainCamPath = NodePath("../Player/CameraRod/MainCamera")
MirrorColor = Color(1, 1, 1, 1)
[node name="Mirror2" type="Node3D" parent="."]
transform = Transform3D(0.658492, 0, -0.752587, 0, 1, 0, 0.752587, 0, 0.658492, 2.4934, 0, 0.705538)
script = ExtResource("2")
ResolutionPerUnit = 200
MainCamPath = NodePath("../Player/CameraRod/MainCamera")
MirrorDistortion = 20
DistortionTexture = SubResource("9")

108
Demo/MainCamera.gd Normal file
View File

@ -0,0 +1,108 @@
extends Node3D
class_name TpsCamera
# Nodes
@onready var camera_pivot : Node3D = self
@onready var camera_rod : Node3D = get_node("CameraRod")
@onready var camera : Camera3D = get_node("CameraRod/MainCamera")
# Movement
@export var mouse_sensitivity : float = 0.15
@export var camera_min_vertical_rotation : float = -85.0
@export var camera_max_vertical_rotation : float = 85.0
# zooming
@export var camera_zoom : float = 3.0 : set = set_camera_zoom
func set_camera_zoom(value): camera_zoom = clamp(value, camera_min_zoom_distance, camera_max_zoom_distance)
@export var camera_min_zoom_distance : float = 3.0
@export var camera_max_zoom_distance : float = 15.0
@export var camera_zoom_step : float = 0.5
# Cursor
@onready var is_cursor_visible : get = get_is_cursor_visible, set = set_is_cursor_visible
func set_is_cursor_visible(value): Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE if value else Input.MOUSE_MODE_CAPTURED)
func get_is_cursor_visible(): return Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE
var speed = 0.1
#####################
# Default methods #
#####################
func _ready() -> void:
self.is_cursor_visible = false
func _process(delta: float) -> void:
process_basic_input()
if Input.is_action_pressed("ui_up"):
self.global_transform.origin += - $CameraRod/MainCamera.global_transform.basis.z * speed
if Input.is_action_pressed("ui_down"):
self.global_transform.origin += $CameraRod/MainCamera.global_transform.basis.z * speed
if Input.is_action_pressed("ui_right"):
self.global_transform.origin += $CameraRod/MainCamera.global_transform.basis.x * speed
if Input.is_action_pressed("ui_left"):
self.global_transform.origin += - $CameraRod/MainCamera.global_transform.basis.x * speed
#self.transform.origin = lerp(self.transform.origin, player.transform.origin, 0.1)
func _unhandled_input(event: InputEvent) -> void:
process_mouse_input(event)
####################
# Camera3D methods #
####################
func rotate_camera(camera_direction : Vector2) -> void:
self.rotation.y += -camera_direction.x
# Vertical rotation
camera_rod.rotate_x(-camera_direction.y)
# Limit vertical rotation
camera_rod.rotation_degrees.x = clamp(
camera_rod.rotation_degrees.x,
camera_min_vertical_rotation, camera_max_vertical_rotation
)
func toggle_cursor_visibility() -> void:
self.is_cursor_visible = !self.is_cursor_visible
###################
# Input methods #
###################
func process_basic_input():
if Input.is_action_just_pressed("ui_cancel"):
toggle_cursor_visibility()
func process_mouse_input(event : InputEvent) -> void:
# Cursor movement
if event is InputEventMouseMotion:
var camera_direction = Vector2(
deg_to_rad(event.relative.x * mouse_sensitivity),
deg_to_rad(event.relative.y * mouse_sensitivity)
)
if !self.is_cursor_visible:
rotate_camera(camera_direction)
# Scrolling
elif event is InputEventMouseButton:
if event.is_pressed() and not self.is_cursor_visible:
if event.button_index == MOUSE_BUTTON_WHEEL_UP:
self.camera_zoom -= camera_zoom_step
if event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
self.camera_zoom += camera_zoom_step

7
Demo/default_env.tres Normal file
View File

@ -0,0 +1,7 @@
[gd_resource type="Environment" load_steps=2 format=2]
[sub_resource type="Sky" id=1]
[resource]
background_mode = 2
background_sky = SubResource( 1 )

21
LICENSE.md Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 Norodix
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -1,2 +1 @@
# open-strike-2

0
Screenshots/.gdignore Normal file
View File

BIN
Screenshots/Godot_icon.png (Stored with Git LFS) Normal file

Binary file not shown.

220
Screenshots/Godot_icon.svg Normal file
View File

@ -0,0 +1,220 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="1024"
height="1024"
id="svg3030"
version="1.1"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
sodipodi:docname="Godot_icon.svg"
inkscape:export-filename="/home/bence/Documents/GodotMirror/Screenshots/Godot_icon.svg.png"
inkscape:export-xdpi="24"
inkscape:export-ydpi="24">
<defs
id="defs3032" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="0.7"
inkscape:cx="454.17422"
inkscape:cy="511.72319"
inkscape:document-units="px"
inkscape:current-layer="g1049"
showgrid="false"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1"
inkscape:document-rotation="0" />
<metadata
id="metadata3035">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(0,-98.519719)">
<g
id="g1049">
<path
id="rect1129"
style="fill:#ececec;stroke:#000000;stroke-width:37.583;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stop-color:#000000;opacity:1;fill-opacity:1;stroke-linejoin:round"
d="M 39.535993,146.47003 553.73185,331.49989 V 894.11097 L 39.535993,1079.1409 Z"
sodipodi:nodetypes="ccccc" />
<g
id="g1127"
transform="matrix(1.0517442,0,0,1.0517442,-126.67183,-45.231534)">
<g
id="g1065"
transform="translate(168.57143,10)">
<g
id="g78"
transform="matrix(1.6878585,0,0,-1.6878585,885.69963,674.45569)"
style="stroke-width:0.320312">
<path
d="m 0,0 c 0,0 -0.325,1.994 -0.515,1.976 l -36.182,-3.491 c -2.879,-0.278 -5.115,-2.574 -5.317,-5.459 l -0.994,-14.247 -27.992,-1.997 -1.904,12.912 c -0.424,2.872 -2.932,5.037 -5.835,5.037 h -38.188 c -2.902,0 -5.41,-2.165 -5.834,-5.037 l -1.905,-12.912 -27.992,1.997 -0.994,14.247 c -0.202,2.886 -2.438,5.182 -5.317,5.46 l -36.2,3.49 c -0.187,0.018 -0.324,-1.978 -0.511,-1.978 l -0.049,-7.83 30.658,-4.944 1.004,-14.374 c 0.203,-2.91 2.551,-5.263 5.463,-5.472 l 38.551,-2.75 c 0.146,-0.01 0.29,-0.016 0.434,-0.016 2.897,0 5.401,2.166 5.825,5.038 l 1.959,13.286 h 28.005 l 1.959,-13.286 c 0.423,-2.871 2.93,-5.037 5.831,-5.037 0.142,0 0.284,0.005 0.423,0.015 l 38.556,2.75 c 2.911,0.209 5.26,2.562 5.463,5.472 l 1.003,14.374 30.645,4.966 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path80"
inkscape:connector-curvature="0" />
</g>
<g
id="g82-3"
transform="matrix(1.6878585,0,0,-1.6878585,555.4187,574.80276)"
style="stroke-width:0.320312">
<path
d="m 0,0 v -47.514 -6.035 -5.492 c 0.108,-0.001 0.216,-0.005 0.323,-0.015 l 36.196,-3.49 c 1.896,-0.183 3.382,-1.709 3.514,-3.609 l 1.116,-15.978 31.574,-2.253 2.175,14.747 c 0.282,1.912 1.922,3.329 3.856,3.329 h 38.188 c 1.933,0 3.573,-1.417 3.855,-3.329 l 2.175,-14.747 31.575,2.253 1.115,15.978 c 0.133,1.9 1.618,3.425 3.514,3.609 l 36.182,3.49 c 0.107,0.01 0.214,0.014 0.322,0.015 v 4.711 l 0.015,0.005 V 0 h 0.134 c 4.795,6.12 9.232,12.569 13.487,19.449 -5.651,9.62 -12.575,18.217 -19.976,26.182 -6.864,-3.455 -13.531,-7.369 -19.828,-11.534 -3.151,3.132 -6.7,5.694 -10.186,8.372 -3.425,2.751 -7.285,4.768 -10.946,7.118 1.09,8.117 1.629,16.108 1.846,24.448 -9.446,4.754 -19.519,7.906 -29.708,10.17 -4.068,-6.837 -7.788,-14.241 -11.028,-21.479 -3.842,0.642 -7.702,0.88 -11.567,0.926 v 0.006 c -0.027,0 -0.052,-0.006 -0.075,-0.006 -0.024,0 -0.049,0.006 -0.073,0.006 V 63.652 C 93.903,63.606 90.046,63.368 86.203,62.726 82.965,69.964 79.247,77.368 75.173,84.205 64.989,81.941 54.915,78.789 45.47,74.035 45.686,65.695 46.225,57.704 47.318,49.587 43.65,47.237 39.795,45.22 36.369,42.469 32.888,39.791 29.333,37.229 26.181,34.097 19.884,38.262 13.219,42.176 6.353,45.631 -1.048,37.666 -7.968,29.069 -13.621,19.449 -9.368,12.569 -4.928,6.12 -0.134,0 Z"
style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path84-6"
inkscape:connector-curvature="0" />
</g>
<g
id="g86-7"
transform="matrix(1.6878585,0,0,-1.6878585,830.89115,692.93384)"
style="stroke-width:0.320312">
<path
d="m 0,0 -1.121,-16.063 c -0.135,-1.936 -1.675,-3.477 -3.611,-3.616 l -38.555,-2.751 c -0.094,-0.007 -0.188,-0.01 -0.281,-0.01 -1.916,0 -3.569,1.406 -3.852,3.33 l -2.211,14.994 H -81.09 l -2.211,-14.994 c -0.297,-2.018 -2.101,-3.469 -4.133,-3.32 l -38.555,2.751 c -1.936,0.139 -3.476,1.68 -3.611,3.616 L -130.721,0 -163.268,3.138 c 0.015,-3.498 0.06,-7.33 0.06,-8.093 0,-34.374 43.605,-50.896 97.781,-51.086 h 0.066 0.067 c 54.176,0.19 97.766,16.712 97.766,51.086 0,0.777 0.047,4.593 0.063,8.093 z"
style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path88-5"
inkscape:connector-curvature="0" />
</g>
<g
id="g90-3"
transform="matrix(1.6878585,0,0,-1.6878585,670.78441,615.25518)"
style="stroke-width:0.320312">
<path
d="m -22.024595,1.6720738 c -12.042,0 -25.67305,-13.0143828 -21.598405,-1.6720738 3.739059,10.408162 17.019368,10.676839 21.492607,10.693249 C -17.657154,10.709659 -2.7380023,7.1323685 0,0 2.7380023,-7.1323685 -9.9765953,1.6720738 -22.024595,1.6720738 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path92-5"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sszzs" />
</g>
<g
id="g98-9"
transform="matrix(1.6878585,0,0,-1.6878585,720.56874,655.42554)"
style="stroke-width:0.320312">
<path
d="m 0,0 c -3.878,0 -7.021,2.858 -7.021,6.381 v 20.081 c 0,3.52 3.143,6.381 7.021,6.381 3.878,0 7.028,-2.861 7.028,-6.381 V 6.381 C 7.028,2.858 3.878,0 0,0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path100-1"
inkscape:connector-curvature="0" />
</g>
<g
id="g102-2"
transform="matrix(1.6878585,0,0,-1.6878585,770.35921,615.25518)"
style="stroke-width:0.320312">
<path
d="m 0,0 c 0,-12.052 9.765,-21.815 21.815,-21.815 12.041,0 21.808,9.763 21.808,21.815 0,12.044 -9.767,21.802 -21.808,21.802 C 9.765,21.802 0,12.044 0,0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path104-7"
inkscape:connector-curvature="0" />
</g>
<g
id="g106-0"
transform="matrix(1.6878585,0,0,-1.6878585,779.22038,617.43899)"
style="stroke-width:0.320312">
<path
d="m 0,0 c 0,-7.994 6.477,-14.473 14.471,-14.473 8.002,0 14.479,6.479 14.479,14.473 0,7.994 -6.477,14.479 -14.479,14.479 C 6.477,14.479 0,7.994 0,0"
style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path108-9"
inkscape:connector-curvature="0" />
</g>
</g>
<g
id="g1095"
transform="matrix(-1,0,0,1,1125.4286,10)">
<g
id="g1069"
transform="matrix(1.6878585,0,0,-1.6878585,885.69963,674.45569)"
style="stroke-width:0.320312">
<path
d="m 0,0 c 0,0 -0.325,1.994 -0.515,1.976 l -36.182,-3.491 c -2.879,-0.278 -5.115,-2.574 -5.317,-5.459 l -0.994,-14.247 -27.992,-1.997 -1.904,12.912 c -0.424,2.872 -2.932,5.037 -5.835,5.037 h -38.188 c -2.902,0 -5.41,-2.165 -5.834,-5.037 l -1.905,-12.912 -27.992,1.997 -0.994,14.247 c -0.202,2.886 -2.438,5.182 -5.317,5.46 l -36.2,3.49 c -0.187,0.018 -0.324,-1.978 -0.511,-1.978 l -0.049,-7.83 30.658,-4.944 1.004,-14.374 c 0.203,-2.91 2.551,-5.263 5.463,-5.472 l 38.551,-2.75 c 0.146,-0.01 0.29,-0.016 0.434,-0.016 2.897,0 5.401,2.166 5.825,5.038 l 1.959,13.286 h 28.005 l 1.959,-13.286 c 0.423,-2.871 2.93,-5.037 5.831,-5.037 0.142,0 0.284,0.005 0.423,0.015 l 38.556,2.75 c 2.911,0.209 5.26,2.562 5.463,5.472 l 1.003,14.374 30.645,4.966 z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path1067"
inkscape:connector-curvature="0" />
</g>
<g
id="g1073"
transform="matrix(1.6878585,0,0,-1.6878585,555.4187,574.80276)"
style="stroke-width:0.320312">
<path
d="m 0,0 v -47.514 -6.035 -5.492 c 0.108,-0.001 0.216,-0.005 0.323,-0.015 l 36.196,-3.49 c 1.896,-0.183 3.382,-1.709 3.514,-3.609 l 1.116,-15.978 31.574,-2.253 2.175,14.747 c 0.282,1.912 1.922,3.329 3.856,3.329 h 38.188 c 1.933,0 3.573,-1.417 3.855,-3.329 l 2.175,-14.747 31.575,2.253 1.115,15.978 c 0.133,1.9 1.618,3.425 3.514,3.609 l 36.182,3.49 c 0.107,0.01 0.214,0.014 0.322,0.015 v 4.711 l 0.015,0.005 V 0 h 0.134 c 4.795,6.12 9.232,12.569 13.487,19.449 -5.651,9.62 -12.575,18.217 -19.976,26.182 -6.864,-3.455 -13.531,-7.369 -19.828,-11.534 -3.151,3.132 -6.7,5.694 -10.186,8.372 -3.425,2.751 -7.285,4.768 -10.946,7.118 1.09,8.117 1.629,16.108 1.846,24.448 -9.446,4.754 -19.519,7.906 -29.708,10.17 -4.068,-6.837 -7.788,-14.241 -11.028,-21.479 -3.842,0.642 -7.702,0.88 -11.567,0.926 v 0.006 c -0.027,0 -0.052,-0.006 -0.075,-0.006 -0.024,0 -0.049,0.006 -0.073,0.006 V 63.652 C 93.903,63.606 90.046,63.368 86.203,62.726 82.965,69.964 79.247,77.368 75.173,84.205 64.989,81.941 54.915,78.789 45.47,74.035 45.686,65.695 46.225,57.704 47.318,49.587 43.65,47.237 39.795,45.22 36.369,42.469 32.888,39.791 29.333,37.229 26.181,34.097 19.884,38.262 13.219,42.176 6.353,45.631 -1.048,37.666 -7.968,29.069 -13.621,19.449 -9.368,12.569 -4.928,6.12 -0.134,0 Z"
style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path1071"
inkscape:connector-curvature="0" />
</g>
<g
id="g1077"
transform="matrix(1.6878585,0,0,-1.6878585,830.89115,692.93384)"
style="stroke-width:0.320312">
<path
d="m 0,0 -1.121,-16.063 c -0.135,-1.936 -1.675,-3.477 -3.611,-3.616 l -38.555,-2.751 c -0.094,-0.007 -0.188,-0.01 -0.281,-0.01 -1.916,0 -3.569,1.406 -3.852,3.33 l -2.211,14.994 H -81.09 l -2.211,-14.994 c -0.297,-2.018 -2.101,-3.469 -4.133,-3.32 l -38.555,2.751 c -1.936,0.139 -3.476,1.68 -3.611,3.616 L -130.721,0 -163.268,3.138 c 0.015,-3.498 0.06,-7.33 0.06,-8.093 0,-34.374 43.605,-50.896 97.781,-51.086 h 0.066 0.067 c 54.176,0.19 97.766,16.712 97.766,51.086 0,0.777 0.047,4.593 0.063,8.093 z"
style="fill:#478cbf;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path1075"
inkscape:connector-curvature="0" />
</g>
<g
id="g1081"
transform="matrix(1.6878585,0,0,-1.6878585,670.78441,615.25518)"
style="stroke-width:0.320312">
<path
d="m -22.024595,1.6720738 c -12.042,0 -25.67305,-13.0143828 -21.598405,-1.6720738 3.739059,10.408162 17.019368,10.676839 21.492607,10.693249 C -17.657154,10.709659 -2.7380023,7.1323685 0,0 2.7380023,-7.1323685 -9.9765953,1.6720738 -22.024595,1.6720738 Z"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path1079"
inkscape:connector-curvature="0"
sodipodi:nodetypes="sszzs" />
</g>
<g
id="g1085"
transform="matrix(1.6878585,0,0,-1.6878585,720.56874,655.42554)"
style="stroke-width:0.320312">
<path
d="m 0,0 c -3.878,0 -7.021,2.858 -7.021,6.381 v 20.081 c 0,3.52 3.143,6.381 7.021,6.381 3.878,0 7.028,-2.861 7.028,-6.381 V 6.381 C 7.028,2.858 3.878,0 0,0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path1083"
inkscape:connector-curvature="0" />
</g>
<g
id="g1089"
transform="matrix(1.6878585,0,0,-1.6878585,770.35921,615.25518)"
style="stroke-width:0.320312">
<path
d="m 0,0 c 0,-12.052 9.765,-21.815 21.815,-21.815 12.041,0 21.808,9.763 21.808,21.815 0,12.044 -9.767,21.802 -21.808,21.802 C 9.765,21.802 0,12.044 0,0"
style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path1087"
inkscape:connector-curvature="0" />
</g>
<g
id="g1093"
transform="matrix(1.6878585,0,0,-1.6878585,779.22038,617.43899)"
style="stroke-width:0.320312">
<path
d="m 0,0 c 0,-7.994 6.477,-14.473 14.471,-14.473 8.002,0 14.479,6.479 14.479,14.473 0,7.994 -6.477,14.479 -14.479,14.479 C 6.477,14.479 0,7.994 0,0"
style="fill:#414042;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.320312"
id="path1091"
inkscape:connector-curvature="0" />
</g>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 14 KiB

BIN
Screenshots/Mirror.png (Stored with Git LFS) Normal file

Binary file not shown.

21
addons/Mirror/LICENSE.md Normal file
View File

@ -0,0 +1,21 @@
MIT License
Copyright (c) 2022 Norodix
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

View File

@ -0,0 +1,103 @@
@tool
extends Node3D
const whitegreen : Color = Color(0.9, 0.97, 0.94)
## Size of the mirror in world units
@export var size : Vector2 = Vector2(2, 2)
## Resolution of the rendered viewport is Size*ResolutionPerUnit
@export var ResolutionPerUnit = 100
## The NodePath to the main camera
@export var MainCamPath: NodePath = ""
## The cull mask array contains the visual layers which are NOT rendered. The render layers numbering is different from their indexing. To avoid rendering layer 1 add a 0 element to the list. To avoid rendering layer 2 add a 1 element to the list and so on.
@export var cullMask : Array[int] = []
## Tint color of the mirror surface
@export_color_no_alpha var MirrorColor : Color = whitegreen
## Distortion multiplier of the mirror
@export_range(0, 30, 0.01) var MirrorDistortion = 0
## The distortion texture of the mirror
@export var DistortionTexture: Texture2D
var MainCam : Camera3D = null
var cam : Camera3D
var mirror : MeshInstance3D
var viewport : SubViewport
func _enter_tree():
var node = preload("MirrorContainer.tscn").instantiate()
add_child(node)
var mesh_instance : MeshInstance3D = node.find_child("MeshInstance3D")
mesh_instance.mesh = mesh_instance.mesh.duplicate()
func _ready():
MainCam = get_node_or_null(MainCamPath)
cam = $MirrorContainer/SubViewport/Camera3D
mirror = $MirrorContainer/MeshInstance3D
viewport = $MirrorContainer/SubViewport
func _process(delta):
_ready() # need to reload for proper operation when used as a toolscript
if MainCam == null:
# No camera specified for the mirror to operate checked
return
# Cull camera layers
cam.cull_mask = 0xFF
for i in cullMask:
cam.cull_mask &= ~(1<<i)
# set mirror surface's size
mirror.mesh.size = size
# set viewport to specified resolution
viewport.size = size * ResolutionPerUnit
# Set tint color
mirror.get_active_material(0).set_shader_parameter("tint", MirrorColor)
# Set distortion texture
mirror.get_active_material(0).set_shader_parameter("distort_tex", DistortionTexture)
# Set distortion strength
mirror.get_active_material(0).set_shader_parameter("distort_strength", MirrorDistortion)
# Transform3D the mirror camera to the opposite side of the mirror plane
var MirrorNormal = mirror.global_transform.basis.z
var MirrorTransform = Mirror_transform(MirrorNormal, mirror.global_transform.origin)
cam.global_transform = MirrorTransform * MainCam.global_transform
# Look perpendicular into the mirror plane for frostum camera
cam.global_transform = cam.global_transform.looking_at(
cam.global_transform.origin/2 + MainCam.global_transform.origin/2, \
mirror.global_transform.basis.y
)
var cam2mirror_offset = mirror.global_transform.origin - cam.global_transform.origin
var near = abs((cam2mirror_offset).dot(MirrorNormal)) # near plane distance
near += 0.05 # avoid rendering own surface
# transform offset to camera's local coordinate system (frostum offset uses local space)
var cam2mirror_camlocal = cam.global_transform.basis.inverse() * cam2mirror_offset
var frostum_offset = Vector2(cam2mirror_camlocal.x, cam2mirror_camlocal.y)
cam.set_frustum(mirror.mesh.size.x, frostum_offset, near, 10000)
# n is the normal of the mirror plane
# d is the offset from the plane of the mirrored object
# Gets the transformation that mirrors through the plane with normal n and offset d
func Mirror_transform(n : Vector3, d : Vector3) -> Transform3D:
var basisX : Vector3 = Vector3(1.0, 0, 0) - 2 * Vector3(n.x * n.x, n.x * n.y, n.x * n.z)
var basisY : Vector3 = Vector3(0, 1.0, 0) - 2 * Vector3(n.y * n.x, n.y * n.y, n.y * n.z)
var basisZ : Vector3 = Vector3(0, 0, 1.0) - 2 * Vector3(n.z * n.x, n.z * n.y, n.z * n.z)
var offset = Vector3.ZERO
offset = 2 * n.dot(d)*n
return Transform3D(Basis(basisX, basisY, basisZ), offset)
pass

View File

@ -0,0 +1,31 @@
shader_type spatial;
render_mode cull_disabled, unshaded;
uniform vec4 tint : source_color = vec4(vec3(0.98),1.0);
uniform sampler2D mirror_tex : source_color, repeat_disable;
uniform sampler2D distort_tex : source_color;
uniform float distort_strength : hint_range(0, 30);
void vertex() {
UV.x = 1.0 - UV.x;
}
void fragment() {
vec2 m_UV = UV;
// Backface texcoord flip correction
if (!FRONT_FACING) {
m_UV.x = 1.0 - m_UV.x;
}
float distort_ofs = texture(distort_tex, m_UV).r;
// Map offset to [-1, 1] region
distort_ofs = (distort_ofs * 2.0) - 1.0;
vec2 base_uv = m_UV + distort_ofs * distort_strength / VIEWPORT_SIZE;
vec4 mirror_sample = texture(mirror_tex,base_uv);
ALBEDO = tint.rgb * mirror_sample.rgb;
}

View File

@ -0,0 +1,29 @@
[gd_scene load_steps=3 format=3 uid="uid://b51uk2h1t8l33"]
[ext_resource type="Material" uid="uid://cp471l6edt4ab" path="res://addons/Mirror/Mirror/MirrorMaterial.tres" id="1"]
[sub_resource type="QuadMesh" id="11"]
size = Vector2(2, 2)
[node name="MirrorContainer" type="Node3D"]
[node name="SubViewport" type="SubViewport" parent="."]
size = Vector2i(100, 100)
render_target_update_mode = 3
[node name="Camera3D" type="Camera3D" parent="SubViewport"]
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0.406672, 1.21628, 8.51171)
keep_aspect = 0
cull_mask = 1048571
projection = 2
size = 3.0
frustum_offset = Vector2(-0.406672, -1.21628)
near = 8.51171
far = 10000.0
[node name="MeshInstance3D" type="MeshInstance3D" parent="."]
transform = Transform3D(1, 0, 2.38419e-07, 0, 1, 0, -2.38419e-07, 0, 1, 0, 0, 0)
layers = 4
mesh = SubResource("11")
skeleton = NodePath("../..")
surface_material_override/0 = ExtResource("1")

View File

@ -0,0 +1,14 @@
[gd_resource type="ShaderMaterial" load_steps=3 format=3 uid="uid://cp471l6edt4ab"]
[ext_resource type="Shader" path="res://addons/Mirror/Mirror/Mirror.gdshader" id="1"]
[sub_resource type="ViewportTexture" id="12"]
viewport_path = NodePath("SubViewport")
[resource]
resource_local_to_scene = true
render_priority = 0
shader = ExtResource("1")
shader_parameter/tint = Color(0.98, 0.98, 0.98, 1)
shader_parameter/distort_strength = 0.0
shader_parameter/mirror_tex = SubResource("12")

24
addons/Mirror/README.md Normal file
View File

@ -0,0 +1,24 @@
# Godot Mirror
![mirror](Demo/Mirror.png)
A plugin created for godot to instance mirrors in a 3D scene. The mirrors use additional cameras to render the scene from a mirrored perspective.
Mirror properties that can be adjusted:
- Tint
- Size
- Visible visual layers
- Player camera
## Usage
After the addon is enabled a custom node is added to godot under the spatial node.
The main camera that renders the scene needs to be selected in the variables of the node. Only one camera is supported at a time. The plugin adds a secondary camera to the opposite side of the mirror relative to this camera and renders the image to the mirror surface.
The cull mask array contains the visual layers which are NOT rendered. The render layers numbering is different from their indexing. To avoid rendering layer 1 add a 0 element to the list.
To avoid rendering layer 2 add a 1 element to the list and so on.
## Installation
Copy the addons/Mirror folder into your godot root directory, same as the asset library installs addons. Enable the plugin in Project settings/Plugins.

78
addons/Mirror/icon.svg Normal file
View File

@ -0,0 +1,78 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="16"
height="16"
viewBox="0 0 4.2333332 4.2333332"
version="1.1"
id="svg8"
inkscape:version="1.0.2 (e86c870879, 2021-01-15)"
sodipodi:docname="icon.svg">
<defs
id="defs2" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="22.627417"
inkscape:cx="8.6940988"
inkscape:cy="12.428262"
inkscape:document-units="mm"
inkscape:current-layer="layer1"
inkscape:document-rotation="0"
showgrid="false"
units="px"
inkscape:window-width="1920"
inkscape:window-height="1016"
inkscape:window-x="1920"
inkscape:window-y="27"
inkscape:window-maximized="1" />
<metadata
id="metadata5">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1">
<g
id="g872"
transform="translate(0.02117361,-0.01175623)"
style="fill:none;stroke-width:0.34395833;stroke-miterlimit:4;stroke-dasharray:none;stroke:#e58f91;stroke-opacity:1">
<path
id="rect842"
style="fill:none;stroke:#e58f91;stroke-width:0.34395833;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stop-color:#000000;stroke-opacity:1"
d="M 0.3745072,0.3633829 2.2572793,0.71289572 V 3.5439501 L 0.3745072,3.8934629 Z"
sodipodi:nodetypes="ccccc" />
<circle
style="fill:none;stroke:#e58f91;stroke-width:0.34395833;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stop-color:#000000;stroke-opacity:1"
id="path847"
cx="3.3799474"
cy="2.1284225"
r="0.43653148" />
<circle
style="fill:none;stroke:#e58f91;stroke-width:0.34395833;stroke-linecap:round;stroke-miterlimit:4;stroke-dasharray:none;stop-color:#000000;stroke-opacity:1"
id="circle849"
cx="1.3158932"
cy="2.1284225"
r="0.43653148" />
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

@ -0,0 +1,37 @@
[remap]
importer="texture"
type="CompressedTexture2D"
uid="uid://dxj8owcka0ldn"
path="res://.godot/imported/icon.svg-d5bf744255b68932164587d8eb3dc79a.ctex"
metadata={
"vram_texture": false
}
[deps]
source_file="res://addons/Mirror/icon.svg"
dest_files=["res://.godot/imported/icon.svg-d5bf744255b68932164587d8eb3dc79a.ctex"]
[params]
compress/mode=0
compress/high_quality=false
compress/lossy_quality=0.7
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/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
svg/scale=1.0
editor/scale_with_editor_scale=false
editor/convert_colors_with_editor_theme=false

7
addons/Mirror/plugin.cfg Normal file
View File

@ -0,0 +1,7 @@
[plugin]
name="Mirror"
description="Adds custom mirror node to the editor"
author="Norodix"
version="0.2"
script="plugin.gd"

12
addons/Mirror/plugin.gd Normal file
View File

@ -0,0 +1,12 @@
@tool
extends EditorPlugin
func _enter_tree():
add_custom_type("Mirror", "Node3D", preload("Mirror/Mirror.gd"), preload("icon.svg"))
pass
func _exit_tree():
remove_custom_type("Mirror")
pass

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bawho1fs8uowk"
path="res://.godot/imported/texture_02.png-814d4f515892bb8274d285748f4a73a0.ctex"
path.s3tc="res://.godot/imported/texture_02.png-814d4f515892bb8274d285748f4a73a0.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_02.png"
dest_files=["res://.godot/imported/texture_02.png-814d4f515892bb8274d285748f4a73a0.ctex"]
dest_files=["res://.godot/imported/texture_02.png-814d4f515892bb8274d285748f4a73a0.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://kijtpalgio4q"
path="res://.godot/imported/texture_03.png-eef45c22e5a84c5df22e7f80e41112c6.ctex"
path.s3tc="res://.godot/imported/texture_03.png-eef45c22e5a84c5df22e7f80e41112c6.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_03.png"
dest_files=["res://.godot/imported/texture_03.png-eef45c22e5a84c5df22e7f80e41112c6.ctex"]
dest_files=["res://.godot/imported/texture_03.png-eef45c22e5a84c5df22e7f80e41112c6.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://du0f7hc4skged"
path="res://.godot/imported/texture_06.png-004ed3d5b88361cdfb83a20714e917e7.ctex"
path.s3tc="res://.godot/imported/texture_06.png-004ed3d5b88361cdfb83a20714e917e7.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_06.png"
dest_files=["res://.godot/imported/texture_06.png-004ed3d5b88361cdfb83a20714e917e7.ctex"]
dest_files=["res://.godot/imported/texture_06.png-004ed3d5b88361cdfb83a20714e917e7.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bg7hbu285xx3c"
path="res://.godot/imported/texture_07.png-7c77ff22e41b4a54319073cb71530d81.ctex"
path.s3tc="res://.godot/imported/texture_07.png-7c77ff22e41b4a54319073cb71530d81.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_07.png"
dest_files=["res://.godot/imported/texture_07.png-7c77ff22e41b4a54319073cb71530d81.ctex"]
dest_files=["res://.godot/imported/texture_07.png-7c77ff22e41b4a54319073cb71530d81.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://o0rxfy5dvpsb"
path="res://.godot/imported/texture_08.png-5883ddd047173c8b118ead887054e6fc.ctex"
path.s3tc="res://.godot/imported/texture_08.png-5883ddd047173c8b118ead887054e6fc.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_08.png"
dest_files=["res://.godot/imported/texture_08.png-5883ddd047173c8b118ead887054e6fc.ctex"]
dest_files=["res://.godot/imported/texture_08.png-5883ddd047173c8b118ead887054e6fc.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://cxj3qslcw455r"
path="res://.godot/imported/texture_09.png-8e25cd5657e2d326068eb27bfa1aacec.ctex"
path.s3tc="res://.godot/imported/texture_09.png-8e25cd5657e2d326068eb27bfa1aacec.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_09.png"
dest_files=["res://.godot/imported/texture_09.png-8e25cd5657e2d326068eb27bfa1aacec.ctex"]
dest_files=["res://.godot/imported/texture_09.png-8e25cd5657e2d326068eb27bfa1aacec.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://n25a1tlc20r2"
path="res://.godot/imported/texture_10.png-1e788999a192eabd201c3b3435475799.ctex"
path.s3tc="res://.godot/imported/texture_10.png-1e788999a192eabd201c3b3435475799.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_10.png"
dest_files=["res://.godot/imported/texture_10.png-1e788999a192eabd201c3b3435475799.ctex"]
dest_files=["res://.godot/imported/texture_10.png-1e788999a192eabd201c3b3435475799.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://ciwwbgcpode0d"
path="res://.godot/imported/texture_11.png-f61ad46caf1a41d85454e490ec43c8ec.ctex"
path.s3tc="res://.godot/imported/texture_11.png-f61ad46caf1a41d85454e490ec43c8ec.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_11.png"
dest_files=["res://.godot/imported/texture_11.png-f61ad46caf1a41d85454e490ec43c8ec.ctex"]
dest_files=["res://.godot/imported/texture_11.png-f61ad46caf1a41d85454e490ec43c8ec.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dsf0exq5n4glb"
path="res://.godot/imported/texture_12.png-aa893b2c5354267551e55ec14bb1999b.ctex"
path.s3tc="res://.godot/imported/texture_12.png-aa893b2c5354267551e55ec14bb1999b.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/dark/texture_12.png"
dest_files=["res://.godot/imported/texture_12.png-aa893b2c5354267551e55ec14bb1999b.ctex"]
dest_files=["res://.godot/imported/texture_12.png-aa893b2c5354267551e55ec14bb1999b.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://brf3u1fddrxlq"
path="res://.godot/imported/texture_01.png-94ebd82494c839e91a05b9e1cc2750ca.ctex"
path.s3tc="res://.godot/imported/texture_01.png-94ebd82494c839e91a05b9e1cc2750ca.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_01.png"
dest_files=["res://.godot/imported/texture_01.png-94ebd82494c839e91a05b9e1cc2750ca.ctex"]
dest_files=["res://.godot/imported/texture_01.png-94ebd82494c839e91a05b9e1cc2750ca.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://yg2714dns88k"
path="res://.godot/imported/texture_02.png-aa1bb055b55bdc7c20e196b7286eebdf.ctex"
path.s3tc="res://.godot/imported/texture_02.png-aa1bb055b55bdc7c20e196b7286eebdf.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_02.png"
dest_files=["res://.godot/imported/texture_02.png-aa1bb055b55bdc7c20e196b7286eebdf.ctex"]
dest_files=["res://.godot/imported/texture_02.png-aa1bb055b55bdc7c20e196b7286eebdf.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://kbyfceu4geke"
path="res://.godot/imported/texture_04.png-4678cc1dfb831f775bdc30cfd7f78769.ctex"
path.s3tc="res://.godot/imported/texture_04.png-4678cc1dfb831f775bdc30cfd7f78769.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/green/texture_04.png"
dest_files=["res://.godot/imported/texture_04.png-4678cc1dfb831f775bdc30cfd7f78769.ctex"]
dest_files=["res://.godot/imported/texture_04.png-4678cc1dfb831f775bdc30cfd7f78769.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dkaygit5l83nq"
path="res://.godot/imported/texture_01.png-e10423e44834e1b4a90c3134e446b32d.ctex"
path.s3tc="res://.godot/imported/texture_01.png-e10423e44834e1b4a90c3134e446b32d.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_01.png"
dest_files=["res://.godot/imported/texture_01.png-e10423e44834e1b4a90c3134e446b32d.ctex"]
dest_files=["res://.godot/imported/texture_01.png-e10423e44834e1b4a90c3134e446b32d.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://bpgpb8fitgael"
path="res://.godot/imported/texture_02.png-ffde4d38b35463525c3815b255790206.ctex"
path.s3tc="res://.godot/imported/texture_02.png-ffde4d38b35463525c3815b255790206.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/light/texture_02.png"
dest_files=["res://.godot/imported/texture_02.png-ffde4d38b35463525c3815b255790206.ctex"]
dest_files=["res://.godot/imported/texture_02.png-ffde4d38b35463525c3815b255790206.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

View File

@ -3,25 +3,26 @@
importer="texture"
type="CompressedTexture2D"
uid="uid://dx31pblshvnjw"
path="res://.godot/imported/texture_02.png-fcb52d424cd62d43221e4153fa3176f8.ctex"
path.s3tc="res://.godot/imported/texture_02.png-fcb52d424cd62d43221e4153fa3176f8.s3tc.ctex"
metadata={
"vram_texture": false
"imported_formats": ["s3tc_bptc"],
"vram_texture": true
}
[deps]
source_file="res://addons/kenney_prototype_textures/purple/texture_02.png"
dest_files=["res://.godot/imported/texture_02.png-fcb52d424cd62d43221e4153fa3176f8.ctex"]
dest_files=["res://.godot/imported/texture_02.png-fcb52d424cd62d43221e4153fa3176f8.s3tc.ctex"]
[params]
compress/mode=0
compress/mode=2
compress/high_quality=false
compress/lossy_quality=0.7
compress/hdr_compression=1
compress/normal_map=0
compress/channel_pack=0
mipmaps/generate=false
mipmaps/generate=true
mipmaps/limit=-1
roughness/mode=0
roughness/src_normal=""
@ -31,4 +32,4 @@ 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
detect_3d/compress_to=0

BIN
assets/models/character/character.glb (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/character/character.glb.import (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/character/character_Ch02_1001_Diffuse.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/models/character/character_Ch02_1001_Glossiness.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/models/character/character_Ch02_1001_Normal.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/models/character/character_Ch02_1001_Specular.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/models/character/character_Ch02_1002_Diffuse.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/models/character/character_Ch02_1002_Normal.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/models/character/dummy/dummy.glb (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/character/dummy/dummy.glb.import (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/el_test_Image_0.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/el_test_Image_0.png.import (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/el_test_Image_1.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/el_test_Image_1.png.import (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/el_test_Image_2.png (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/el_test_Image_2.png.import (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/hands/hands.glb (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/hands/hands.glb.import (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/balconyLadder_bottom.glb (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/balconyLadder_top.glb (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/balconyLadder_top.glb.import (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/balconyLadder_top_bars.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/balcony_typeA.glb (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/balcony_typeA.glb.import (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/balcony_typeA_bars.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/detailAwning_small.glb (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/detailAwning_small_roof.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/detailAwning_wide.glb (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/detailAwning_wide.glb.import (Stored with Git LFS) Normal file

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/detailAwning_wide_roof.png (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/detailBarrier_typeA.glb (Stored with Git LFS) Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

BIN
assets/models/kenney/RetroUrban/detailBarrier_typeB.glb (Stored with Git LFS) Normal file

Binary file not shown.

Some files were not shown because too many files have changed in this diff Show More