From 0a384e32c8417d1b796dc1c416104b34cb2d574b Mon Sep 17 00:00:00 2001 From: Simon Ward Date: Thu, 22 Jan 2026 21:48:53 +1300 Subject: [PATCH 1/2] world: added grass and sky --- Shaders/SkyShader.gdshader | 9 +++++++++ Textures/grass.jpg | Bin 0 -> 16359 bytes main.tscn | 38 +++++++++++++++++++++++++++++++------ 3 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 Shaders/SkyShader.gdshader create mode 100644 Textures/grass.jpg diff --git a/Shaders/SkyShader.gdshader b/Shaders/SkyShader.gdshader new file mode 100644 index 0000000..504da4e --- /dev/null +++ b/Shaders/SkyShader.gdshader @@ -0,0 +1,9 @@ +shader_type sky; +uniform vec3 skyColor : source_color; +uniform vec3 horizonColor : source_color; + +void sky() { + float col = clamp(EYEDIR.y / 0.05, 0.0, 1.0); + vec3 finalColor = mix(horizonColor,skyColor,col); + COLOR = finalColor; +} diff --git a/Textures/grass.jpg b/Textures/grass.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a33c0c9cc2f9a8ddf5b9ebbe21a0bf5d0942071 GIT binary patch literal 16359 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 Date: Thu, 22 Jan 2026 21:48:53 +1300 Subject: [PATCH 2/2] world: add grass and sky --- main.tscn | 38 +++++++++++++++++++++++++++++++------ world/shaders/sky.gdshader | 9 +++++++++ world/textures/grass.jpg | Bin 0 -> 16359 bytes 3 files changed, 41 insertions(+), 6 deletions(-) create mode 100644 world/shaders/sky.gdshader create mode 100644 world/textures/grass.jpg diff --git a/main.tscn b/main.tscn index ae10ae9..56b4c54 100644 --- a/main.tscn +++ b/main.tscn @@ -1,19 +1,40 @@ -[gd_scene load_steps=9 format=3 uid="uid://eiaw4xbs3suk"] +[gd_scene load_steps=16 format=3 uid="uid://eiaw4xbs3suk"] [ext_resource type="PackedScene" uid="uid://qb8cbljxgnub" path="res://world/killbrick.tscn" id="1_h2yge"] [ext_resource type="PackedScene" uid="uid://cfceg80unq0pe" path="res://player/player.tscn" id="1_ig7tw"] [ext_resource type="PackedScene" uid="uid://bcmrj6qkemrll" path="res://world/radiohead_cube.tscn" id="2_0xm2m"] +[ext_resource type="Texture2D" uid="uid://b3wpwmlq750rc" path="res://world/textures/grass.jpg" id="2_272bh"] [ext_resource type="PackedScene" uid="uid://of6tq8gpjxtu" path="res://gears/gear_pickup.tscn" id="3_lquwl"] [ext_resource type="PackedScene" uid="uid://bafl8q0r61xrg" path="res://gears/gear.tscn" id="4_7mycd"] +[ext_resource type="Shader" uid="uid://cbufc0lxtpjco" path="res://world/shaders/sky.gdshader" id="7_272bh"] [sub_resource type="BoxShape3D" id="BoxShape3D_7dm0k"] -size = Vector3(100, 2, 100) +size = Vector3(1000, 2, 1000) [sub_resource type="BoxMesh" id="BoxMesh_ig7tw"] -size = Vector3(100, 2, 100) +size = Vector3(1000, 2, 1000) -[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_ig7tw"] -albedo_color = Color(0.49454, 0.79, 0.4424, 1) +[sub_resource type="StandardMaterial3D" id="StandardMaterial3D_272bh"] +albedo_color = Color(0, 1, 0, 1) +albedo_texture = ExtResource("2_272bh") +uv1_scale = Vector3(300, 300, 300) + +[sub_resource type="ShaderMaterial" id="ShaderMaterial_272bh"] +shader = ExtResource("7_272bh") +shader_parameter/skyColor = Color(0.4991548, 0.59654385, 0.98058206, 1) +shader_parameter/horizonColor = Color(0.64705884, 0.6901961, 0.8509804, 1) + +[sub_resource type="Sky" id="Sky_7mycd"] +sky_material = SubResource("ShaderMaterial_272bh") + +[sub_resource type="Environment" id="Environment_7mycd"] +background_mode = 2 +sky = SubResource("Sky_7mycd") +sky_rotation = Vector3(6.2831855, 0, 0) + +[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_272bh"] + +[sub_resource type="Compositor" id="Compositor_5vw27"] [node name="Main" type="Node3D"] @@ -26,7 +47,7 @@ shape = SubResource("BoxShape3D_7dm0k") [node name="MeshInstance3D" type="MeshInstance3D" parent="Baseplate"] mesh = SubResource("BoxMesh_ig7tw") -surface_material_override/0 = SubResource("StandardMaterial3D_ig7tw") +surface_material_override/0 = SubResource("StandardMaterial3D_272bh") [node name="DirectionalLight3D" type="DirectionalLight3D" parent="."] transform = Transform3D(0.7071068, -0.49999994, 0.49999994, 0, 0.7071067, 0.7071067, -0.7071068, -0.49999994, 0.49999994, 50, 50, 50) @@ -52,3 +73,8 @@ transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -12, 2, -21) [node name="Gear" parent="GearPickup" instance=ExtResource("4_7mycd")] transform = Transform3D(1, 0, 0, 0, -0.012967386, 0.9999159, 0, -0.9999159, -0.012967386, 0, 0.5, 0) + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource("Environment_7mycd") +camera_attributes = SubResource("CameraAttributesPractical_272bh") +compositor = SubResource("Compositor_5vw27") diff --git a/world/shaders/sky.gdshader b/world/shaders/sky.gdshader new file mode 100644 index 0000000..504da4e --- /dev/null +++ b/world/shaders/sky.gdshader @@ -0,0 +1,9 @@ +shader_type sky; +uniform vec3 skyColor : source_color; +uniform vec3 horizonColor : source_color; + +void sky() { + float col = clamp(EYEDIR.y / 0.05, 0.0, 1.0); + vec3 finalColor = mix(horizonColor,skyColor,col); + COLOR = finalColor; +} diff --git a/world/textures/grass.jpg b/world/textures/grass.jpg new file mode 100644 index 0000000000000000000000000000000000000000..0a33c0c9cc2f9a8ddf5b9ebbe21a0bf5d0942071 GIT binary patch literal 16359 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