commit d0c9fe4fc020cd78052a6dc3d7aa368bfd83916a Author: Henry Date: Fri May 8 14:34:48 2026 +0100 Initial godot setup with billboarding experiment. diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f28239b --- /dev/null +++ b/.editorconfig @@ -0,0 +1,4 @@ +root = true + +[*] +charset = utf-8 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8ad74f7 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +# Normalize EOL for all files that Git considers text files. +* text=auto eol=lf diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..0af181c --- /dev/null +++ b/.gitignore @@ -0,0 +1,3 @@ +# Godot 4+ specific ignores +.godot/ +/android/ diff --git a/camera_3d.tscn b/camera_3d.tscn new file mode 100644 index 0000000..b0a77c9 --- /dev/null +++ b/camera_3d.tscn @@ -0,0 +1,4 @@ +[gd_scene format=3 uid="uid://dowvqakiqkvk5"] + +[node name="Camera3D" type="Camera3D" unique_id=691202574] +fov = 51.7 diff --git a/icon.svg b/icon.svg new file mode 100644 index 0000000..c6bbb7d --- /dev/null +++ b/icon.svg @@ -0,0 +1 @@ + diff --git a/icon.svg.import b/icon.svg.import new file mode 100644 index 0000000..f582a74 --- /dev/null +++ b/icon.svg.import @@ -0,0 +1,43 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cdxk1utraw20p" +path="res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://icon.svg" +dest_files=["res://.godot/imported/icon.svg-218a8f2b3041327d8a5756f3a245f83b.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 +svg/scale=1.0 +editor/scale_with_editor_scale=false +editor/convert_colors_with_editor_theme=false diff --git a/images/henry_wave_still.png b/images/henry_wave_still.png new file mode 100644 index 0000000..3219190 Binary files /dev/null and b/images/henry_wave_still.png differ diff --git a/images/henry_wave_still.png.import b/images/henry_wave_still.png.import new file mode 100644 index 0000000..10ccb8d --- /dev/null +++ b/images/henry_wave_still.png.import @@ -0,0 +1,41 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://btgh55yxpq1tq" +path.s3tc="res://.godot/imported/henry_wave_still.png-dc821527331a9fbf9194e8fd14751e18.s3tc.ctex" +metadata={ +"imported_formats": ["s3tc_bptc"], +"vram_texture": true +} + +[deps] + +source_file="res://images/henry_wave_still.png" +dest_files=["res://.godot/imported/henry_wave_still.png-dc821527331a9fbf9194e8fd14751e18.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 diff --git a/project.godot b/project.godot new file mode 100644 index 0000000..3c0f7a2 --- /dev/null +++ b/project.godot @@ -0,0 +1,23 @@ +; Engine configuration file. +; It's best edited using the editor UI and not directly, +; since the parameters that go here are not all obvious. +; +; Format: +; [section] ; section goes between [] +; param=value ; assign values to parameters + +config_version=5 + +[application] + +config/name="tojam20-elevator" +config/features=PackedStringArray("4.6", "Forward Plus") +config/icon="res://icon.svg" + +[physics] + +3d/physics_engine="Jolt Physics" + +[rendering] + +rendering_device/driver.windows="d3d12" diff --git a/resources/billboard_texture.tres b/resources/billboard_texture.tres new file mode 100644 index 0000000..f44b932 --- /dev/null +++ b/resources/billboard_texture.tres @@ -0,0 +1,9 @@ +[gd_resource type="MeshTexture" format=3 uid="uid://dpc31s6cp6fk1"] + +[sub_resource type="ImageTexture" id="ImageTexture_8gj05"] + +[sub_resource type="PlaneMesh" id="PlaneMesh_sp5qj"] + +[resource] +mesh = SubResource("PlaneMesh_sp5qj") +base_texture = SubResource("ImageTexture_8gj05") diff --git a/shaders/billboard.gdshader b/shaders/billboard.gdshader new file mode 100644 index 0000000..d4dbe7c --- /dev/null +++ b/shaders/billboard.gdshader @@ -0,0 +1,14 @@ +shader_type spatial; + +void vertex() { + vec3 right = normalize(cross(vec3(0.0, 1.0, 0.0), to_camera)); + vec3 up = vec3(0.0, 1.0, 0.0); + vec3 forward = normalize(cross(right, up)); + mat4 billboard_matrix = mat4( + vec4(right, 0.0), + vec4(up, 0.0), + vec4(forward, 0.0), + vec4(model_pos, 1.0) + ); + MODELVIEW_MATRIX = VIEW_MATRIX * billboard_matrix; +} diff --git a/shaders/billboard.gdshader.uid b/shaders/billboard.gdshader.uid new file mode 100644 index 0000000..091f554 --- /dev/null +++ b/shaders/billboard.gdshader.uid @@ -0,0 +1 @@ +uid://du6owhb1rw1ic diff --git a/world.tscn b/world.tscn new file mode 100644 index 0000000..afcc81b --- /dev/null +++ b/world.tscn @@ -0,0 +1,37 @@ +[gd_scene format=3 uid="uid://bnv1xxgceqbrc"] + +[ext_resource type="PackedScene" uid="uid://dowvqakiqkvk5" path="res://camera_3d.tscn" id="1_f3sb7"] +[ext_resource type="Texture2D" uid="uid://btgh55yxpq1tq" path="res://images/henry_wave_still.png" id="2_fj7yv"] + +[sub_resource type="PlaneMesh" id="PlaneMesh_tlwt5"] + +[sub_resource type="CapsuleMesh" id="CapsuleMesh_tlwt5"] + +[sub_resource type="CapsuleShape3D" id="CapsuleShape3D_aqk2v"] + +[node name="World" type="Node3D" unique_id=831374579] + +[node name="Camera3D" parent="." unique_id=691202574 instance=ExtResource("1_f3sb7")] +transform = Transform3D(0.033800576, 0, 0.99942863, 0, 1, 0, -0.99942863, 0, 0.033800576, 1.3208365, 0.92046463, 0) +fov = 72.2 + +[node name="Ground" type="MeshInstance3D" parent="." unique_id=2142800495] +transform = Transform3D(4.502052, 0, 0, 0, 1.2009083, 0, 0, 0, 2.6638024, 0, 0, 0) +mesh = SubResource("PlaneMesh_tlwt5") + +[node name="Sprite3D" type="Sprite3D" parent="." unique_id=131556752] +transform = Transform3D(-9.616505e-08, 0, -0.99999994, 0, 2.2, 0, 2.2, 0, -4.3711385e-08, -1.7076116, 0.76404345, 1.2956717) +billboard = 1 +double_sided = false +texture_filter = 0 +texture = ExtResource("2_fj7yv") + +[node name="StaticBody3D" type="StaticBody3D" parent="." unique_id=133407620] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -4) + +[node name="MeshInstance3D" type="MeshInstance3D" parent="StaticBody3D" unique_id=996721213] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -2.7, 1.0478041, 3.8988447) +mesh = SubResource("CapsuleMesh_tlwt5") + +[node name="CollisionShape3D" type="CollisionShape3D" parent="StaticBody3D" unique_id=1517735028] +shape = SubResource("CapsuleShape3D_aqk2v")