Files
agame/sky_demo/Sky3DDemo.tscn
T
2026-10-08 17:38:08 +08:00

262 lines
12 KiB
Plaintext

[gd_scene load_steps=17 format=3 uid="uid://c5friqigqdh4k"]
[ext_resource type="PackedScene" uid="uid://dipn6t27p0nap" path="res://demo/assets/scenes/PrimitivesCity.tscn" id="2"]
[ext_resource type="Script" uid="uid://deo0gxkmk2ahd" path="res://addons/sky_3d/src/Sky3D.gd" id="2_cejat"]
[ext_resource type="Script" uid="uid://cjmkcj8hwm7ts" path="res://addons/sky_3d/src/TimeOfDay.gd" id="3"]
[ext_resource type="Script" uid="uid://b4tkplvh7fq40" path="res://addons/sky_3d/src/SkyDome.gd" id="4"]
[ext_resource type="Shader" uid="uid://cvd0x7lon1ur6" path="res://addons/sky_3d/shaders/SkyMaterial.gdshader" id="4_v8wrf"]
[ext_resource type="Texture2D" uid="uid://c1vwcdcdvb74a" path="res://addons/sky_3d/assets/thirdparty/textures/milkyway/Milkyway.jpg" id="5_0j4pb"]
[ext_resource type="Texture2D" uid="uid://cecwdqjol0ckd" path="res://addons/sky_3d/assets/textures/noiseClouds.png" id="5_rt0jr"]
[ext_resource type="Texture2D" uid="uid://cfqk60lpl5ljv" path="res://addons/sky_3d/assets/resources/SNoise.tres" id="6_1g8sw"]
[ext_resource type="Texture2D" uid="uid://2r8ylu6rg5dp" path="res://addons/sky_3d/assets/thirdparty/textures/moon/MoonMap.png" id="6_v8wrf"]
[ext_resource type="Texture2D" uid="uid://djpfuyxkryegn" path="res://addons/sky_3d/assets/textures/noise.jpg" id="7_d0ed4"]
[ext_resource type="Texture2D" uid="uid://bm7dot7t7u1q4" path="res://addons/sky_3d/assets/thirdparty/textures/milkyway/StarField.jpg" id="8_humls"]
[sub_resource type="GDScript" id="GDScript_v8wrf"]
script/source = "extends Node3D
## Combination Player and Camera Manager
## Included as a scene script (a bad practice) so it does not conflict with the Terrain3D demo when
## used together.
@export var move_speed: float = 60.0
const CAMERA_MAX_PITCH: float = deg_to_rad(70)
const CAMERA_MIN_PITCH: float = deg_to_rad(-89.9)
const CAMERA_RATIO: float = .625
@export var mouse_sensitivity: float = .002
@export var mouse_y_inversion: float = -1.0
@onready var _camera_yaw: Node3D = self
@onready var _camera_pitch: Node3D = $Camera3D
func _init() -> void:
RenderingServer.set_debug_generate_wireframes(true)
func _ready() -> void:
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
func _physics_process(p_delta: float) -> void:
position += get_camera_relative_input().normalized() * move_speed * p_delta
func _input(p_event: InputEvent) -> void:
if p_event is InputEventMouseMotion and Input.get_mouse_mode() == Input.MOUSE_MODE_CAPTURED:
rotate_camera(p_event.relative)
get_viewport().set_input_as_handled()
return
if p_event is InputEventMouseButton and p_event.pressed:
if p_event.button_index == MOUSE_BUTTON_WHEEL_UP:
$Camera3D.fov = max($Camera3D.fov - 2., 5.)
elif p_event.button_index == MOUSE_BUTTON_WHEEL_DOWN:
$Camera3D.fov = min($Camera3D.fov + 2., 160.)
return
if p_event is InputEventKey and p_event.pressed:
match p_event.keycode:
KEY_F8:
get_tree().quit()
KEY_F10:
var vp: Viewport = get_viewport()
vp.debug_draw = (vp.debug_draw + 1 ) % 6
get_viewport().set_input_as_handled()
KEY_F11:
toggle_fullscreen()
get_viewport().set_input_as_handled()
KEY_ESCAPE, KEY_F12:
if Input.get_mouse_mode() == Input.MOUSE_MODE_VISIBLE:
Input.set_mouse_mode(Input.MOUSE_MODE_CAPTURED)
else:
Input.set_mouse_mode(Input.MOUSE_MODE_VISIBLE)
get_viewport().set_input_as_handled()
# Returns the input vector relative to the camera. Forward is always the direction the camera is facing
func get_camera_relative_input() -> Vector3:
var input_dir: Vector3 = Vector3.ZERO
if Input.is_key_pressed(KEY_A): # Left
input_dir -= global_transform.basis.x
if Input.is_key_pressed(KEY_D): # Right
input_dir += global_transform.basis.x
if Input.is_key_pressed(KEY_W): # Forward
input_dir -= global_transform.basis.z
if Input.is_key_pressed(KEY_S): # Backward
input_dir += global_transform.basis.z
if Input.is_key_pressed(KEY_E) or Input.is_key_pressed(KEY_SPACE): # Up
input_dir += global_transform.basis.y
if Input.is_key_pressed(KEY_Q): # Down
input_dir -= global_transform.basis.y
if Input.is_key_pressed(KEY_KP_ADD) or Input.is_key_pressed(KEY_EQUAL):
move_speed = clamp(move_speed + .5, 5, 9999)
if Input.is_key_pressed(KEY_KP_SUBTRACT) or Input.is_key_pressed(KEY_MINUS):
move_speed = clamp(move_speed - .5, 5, 9999)
return input_dir
func rotate_camera(p_relative:Vector2) -> void:
_camera_yaw.rotation.y -= p_relative.x * mouse_sensitivity
_camera_yaw.orthonormalize()
_camera_pitch.rotation.x += p_relative.y * mouse_sensitivity * CAMERA_RATIO * mouse_y_inversion
_camera_pitch.rotation.x = clamp(_camera_pitch.rotation.x, CAMERA_MIN_PITCH, CAMERA_MAX_PITCH)
func toggle_fullscreen() -> void:
if DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN or \\
DisplayServer.window_get_mode() == DisplayServer.WINDOW_MODE_FULLSCREEN:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_WINDOWED)
DisplayServer.window_set_size(Vector2(1280, 720))
else:
DisplayServer.window_set_mode(DisplayServer.WINDOW_MODE_EXCLUSIVE_FULLSCREEN)
"
[sub_resource type="ShaderMaterial" id="ShaderMaterial_v8wrf"]
shader = ExtResource("4_v8wrf")
shader_parameter/sky_visible = true
shader_parameter/color_correction = Vector2(0, 1)
shader_parameter/ground_color = Color(0.3, 0.3, 0.3, 1)
shader_parameter/horizon_offset = 0.0
shader_parameter/atm_darkness = 0.5
shader_parameter/atm_sun_intensity = 18.0
shader_parameter/atm_day_tint = Color(0.807843, 0.909804, 1, 1)
shader_parameter/atm_horizon_light_tint = Color(0.980392, 0.635294, 0.462745, 1)
shader_parameter/atm_night_tint = Color(0.057391796, 0.068069525, 0.085420445, 0.34034762)
shader_parameter/atm_level_params = Vector3(1, 0, 0)
shader_parameter/atm_thickness = 0.7
shader_parameter/atm_beta_ray = Vector3(5.804544e-06, 1.3562913e-05, 3.311258e-05)
shader_parameter/atm_beta_mie = Vector3(3.038e-08, 3.038e-08, 3.038e-08)
shader_parameter/sun_light_color = Color(0.98, 0.523, 0.294, 1)
shader_parameter/sun_disk_color = Color(0.996094, 0.541334, 0.140076, 1)
shader_parameter/sun_disk_intensity = 30.0
shader_parameter/sun_disk_size = 0.02
shader_parameter/atm_sun_mie_tint = Color(1, 1, 1, 1)
shader_parameter/atm_sun_mie_intensity = 1.0
shader_parameter/atm_sun_partial_mie_phase = Vector3(0.36, 1.64, 1.6)
shader_parameter/moon_color = Color(1, 1, 1, 1)
shader_parameter/moon_texture = ExtResource("6_v8wrf")
shader_parameter/moon_texture_alignment = Vector3(7, 1.4, 4.8)
shader_parameter/moon_texture_flip_u = false
shader_parameter/moon_texture_flip_v = false
shader_parameter/moon_size = 0.07
shader_parameter/atm_moon_mie_tint = Color(0.137255, 0.184314, 0.292196, 1)
shader_parameter/atm_moon_mie_intensity = 0.23658217810094354
shader_parameter/atm_moon_partial_mie_phase = Vector3(0.36, 1.64, 1.6)
shader_parameter/starmap_color = Color(0.709804, 0.709804, 0.709804, 0.854902)
shader_parameter/starmap_texture = ExtResource("5_0j4pb")
shader_parameter/starmap_flip_u = false
shader_parameter/starmap_flip_v = false
shader_parameter/starmap_alignment = Vector3(2.68288, -0.25891, 0.40101)
shader_parameter/star_rotation_offset = 9.38899
shader_parameter/star_rotation = -9.711138284154199
shader_parameter/star_tilt = -1.2915436464758039
shader_parameter/star_field_color = Color(1, 1, 1, 1)
shader_parameter/star_field_texture = ExtResource("8_humls")
shader_parameter/star_scintillation = 0.75
shader_parameter/star_scintillation_speed = 0.01
shader_parameter/noise_tex = ExtResource("7_d0ed4")
shader_parameter/clouds_night_color = Color(0.090196, 0.094118, 0.129412, 1)
shader_parameter/cirrus_visible = true
shader_parameter/cirrus_intensity = 2.0
shader_parameter/cirrus_coverage = 0.5
shader_parameter/cirrus_thickness = 1.7
shader_parameter/cirrus_absorption = 2.0
shader_parameter/cirrus_sky_tint_fade = 0.5
shader_parameter/cirrus_size = 1.0
shader_parameter/cirrus_uv = Vector2(0.16, 0.11)
shader_parameter/cirrus_position1 = Vector2(0.7308965, 5.0460643e-05)
shader_parameter/cirrus_position2 = Vector2(0.7308965, 5.0460643e-05)
shader_parameter/cirrus_texture = ExtResource("6_1g8sw")
shader_parameter/cumulus_visible = true
shader_parameter/cumulus_intensity = 0.6
shader_parameter/cumulus_coverage = 0.55
shader_parameter/cumulus_thickness = 0.0243
shader_parameter/cumulus_absorption = 2.0
shader_parameter/cumulus_noise_freq = 2.7
shader_parameter/cumulus_sky_tint_fade = 0.0
shader_parameter/cumulus_size = 0.5
shader_parameter/cumulus_position = Vector2(79.19066, 0.00029048725)
shader_parameter/cumulus_texture = ExtResource("5_rt0jr")
shader_parameter/cumulus_partial_mie_phase = Vector3(0.957564, 1.042436, 0.412)
shader_parameter/cumulus_mie_intensity = 1.0
shader_parameter/show_azimuthal_grid = false
shader_parameter/azimuthal_grid_color = Color(0.87058824, 0.72156864, 0.5294118, 1)
shader_parameter/azimuthal_grid_rotation_offset = 0.03
shader_parameter/show_equatorial_grid = false
shader_parameter/equatorial_grid_color = Color(0, 0.75, 1, 1)
shader_parameter/equatorial_grid_rotation_offset = 0.03
shader_parameter/moon_matrix = Basis(-7.4505815e-09, -0.27634087, 0.9610598, -0.9609947, -0.2657975, -0.0764268, 0.2765671, -0.9235733, -0.26556212)
[sub_resource type="Sky" id="Sky_0j4pb"]
sky_material = SubResource("ShaderMaterial_v8wrf")
[sub_resource type="Environment" id="Environment_1g8sw"]
background_mode = 2
sky = SubResource("Sky_0j4pb")
ambient_light_source = 3
ambient_light_color = Color(0.38921005, 0.23168632, 0.16043657, 1)
ambient_light_sky_contribution = 0.7
reflected_light_source = 2
tonemap_mode = 3
tonemap_white = 6.0
[sub_resource type="CameraAttributesPractical" id="CameraAttributesPractical_d0ed4"]
[node name="Main" type="Node3D"]
[node name="PrimitivesCity" parent="." instance=ExtResource("2")]
[node name="CameraManager" type="Node3D" parent="."]
transform = Transform3D(0.0801989, 0, -0.996779, 0, 1, 0, 0.996779, 0, 0.0801989, -7.677, 4, 3.686)
script = SubResource("GDScript_v8wrf")
[node name="Camera3D" type="Camera3D" parent="CameraManager"]
transform = Transform3D(1, 0, 0, 0, 0.987688, 0.156434, 0, -0.156434, 0.987688, 0, 0, 0)
fov = 70.0
far = 8192.0
[node name="ReflectionProbe" type="ReflectionProbe" parent="."]
update_mode = 1
blend_distance = 8.0
size = Vector3(2000, 2000, 2000)
origin_offset = Vector3(0, 5, 0)
[node name="Sky3D" type="WorldEnvironment" parent="."]
environment = SubResource("Environment_1g8sw")
camera_attributes = SubResource("CameraAttributesPractical_d0ed4")
script = ExtResource("2_cejat")
current_time = 6.15
wind_speed = 7.0
wind_direction = 1.5708
metadata/_custom_type_script = "uid://deo0gxkmk2ahd"
[node name="SunLight" type="DirectionalLight3D" parent="Sky3D"]
transform = Transform3D(0.3947903, 0.037070245, 0.9180231, 0, 0.9991857, -0.040347632, -0.91877127, 0.015928853, 0.3944688, 0.9180231, -0.040347632, 0.3944688)
light_color = Color(0.98, 0.523, 0.294, 1)
light_energy = 0.0
directional_shadow_blend_splits = true
directional_shadow_max_distance = 600.0
[node name="MoonLight" type="DirectionalLight3D" parent="Sky3D"]
transform = Transform3D(0, -0.9609946, 0.27656707, -0.27634087, -0.26579747, -0.9235732, 0.9610597, -0.07642679, -0.2655621, 0.27656707, -0.9235732, -0.2655621)
light_color = Color(0.572549, 0.776471, 0.956863, 1)
light_energy = 0.0
directional_shadow_blend_splits = true
directional_shadow_max_distance = 256.0
[node name="SkyDome" type="Node" parent="Sky3D"]
script = ExtResource("4")
sun_azimuth = -1.9766359
sun_altitude = -1.6111549
moon_azimuth = -0.80569494
moon_altitude = -2.7480938
fog_density = 0.01
wind_speed = 7.0
wind_direction = 1.5708
[node name="TimeOfDay" type="Node" parent="Sky3D"]
script = ExtResource("3")
dome_path = NodePath("../SkyDome")
current_time = 6.15