From d0c9fe4fc020cd78052a6dc3d7aa368bfd83916a Mon Sep 17 00:00:00 2001 From: Henry Date: Fri, 8 May 2026 14:34:48 +0100 Subject: [PATCH] Initial godot setup with billboarding experiment. --- .editorconfig | 4 +++ .gitattributes | 2 ++ .gitignore | 3 ++ camera_3d.tscn | 4 +++ icon.svg | 1 + icon.svg.import | 43 +++++++++++++++++++++++++++++ images/henry_wave_still.png | Bin 0 -> 1751 bytes images/henry_wave_still.png.import | 41 +++++++++++++++++++++++++++ project.godot | 23 +++++++++++++++ resources/billboard_texture.tres | 9 ++++++ shaders/billboard.gdshader | 14 ++++++++++ shaders/billboard.gdshader.uid | 1 + world.tscn | 37 +++++++++++++++++++++++++ 13 files changed, 182 insertions(+) create mode 100644 .editorconfig create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 camera_3d.tscn create mode 100644 icon.svg create mode 100644 icon.svg.import create mode 100644 images/henry_wave_still.png create mode 100644 images/henry_wave_still.png.import create mode 100644 project.godot create mode 100644 resources/billboard_texture.tres create mode 100644 shaders/billboard.gdshader create mode 100644 shaders/billboard.gdshader.uid create mode 100644 world.tscn 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 0000000000000000000000000000000000000000..3219190b58a6c35b1855e3f31350de0614e9d5a2 GIT binary patch literal 1751 zcmZ`)eKgZ+9RF=IFT+ilqR?7$8`*}gm)RsHZ+TmB9kOefSz>I%TraI1S9$3uT;g^S zd2c4CluJa#sq})x?UvF=VV2xTcCPyyqT4z5ch2wmexJ|t`F=jn^L_q!(!D&K)Dc?| z005}FIFl)0w3GkJir`qwj2Q+4ghO$%2kIZ{z5^%WbU&9ccXz-D%#{HJh#~-!QvfJ9 zY+B7BV7_}DKgk3XmN@`m3q}Bdl|t5;rO>riyHePCE+^iu@6H4Os4DZYAJ@Oaq3_F}kDYi%_zt zGz&g!kKDK<&_HG)b1ot_cb@RgLDmSW!vz^A|LRlu5F5B^@0cXn!sb@b^wbo!Nawd} z(g*W5niF42WkcpW?^-OiytG*q-OU?ZeB@L#I@xUVw_SKj-HW|Hcrs+-?3ae;I8#F> zNPrExp-3flp)%{QN^sg?98@5@6)VPj3^$ysN(r#w!LOf(HgN*jw3HTYhQxe( zo3utl%d0Uzb)n?Z=BzWxG(%j|+IZ1S9#&8p(A^*4@Nid1b~yBVz#t(mYSiR%ojflAx-z0bkoqEB8!VXux0zP-EGrv zdCAWQvk~tl=Zm}jLoFGyIiV8KC@##`2T*HyUFeCK7*P-b1$zB+iTpm+usT<9{HNB9 z&%4Ik5h*k5rY)t~A8OwtduJ!6|9PT9g%{tXJW$&`B$^Dg`KnCy;?NJ&jyu4-=@|HDfR?xMP+wfrlU&J=T=y>=9Ljd4=lzP zr((FR6?$YE;wrA4<0mEUSzLntPLqW?-q49M6g4IgZ0?ku(iJ6T%$=_WvZ;-8uB^0o zSYh6DoVg{VDa6+O!%T-1cK`l%18-4*VqwXn@}BVtGW>enJ%0Htp2jywf2iw<7xbed z^xuqAmoD#5H{Vxs@_Md16+#W{_g97a4^2(XE9k++3(PXuRNG*DI-g1fzr8k0%rU9siR@SIHHfJuP>bHG|Fs6N%S zyHTg-0#ztQ%JjV!BOjl@YHRE|Y%2Xj$*N}(4tBj^Y~V)YMXr#5DZP}&%pwJeX>;)z zL5SlWlt~-7h)oaw9mWkE=C^x;cGJB&-8{ya0)$Tq*&wK@gUv$m=Vg)e^P4e$^jf`_b_JG5J&O%f#ko&D_T?0Tz^MkhQE zu0{`3Kh+?4s!zmVgeh;Tfr@Jqt4>+PFudYf`9GR7>0(%)*e9iEFk_S8$D7AFC2oPb S&cliF=fK6$gIsSPB={F?ufXB} literal 0 HcmV?d00001 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")