From 47a199009027d4d6e1dbe4156c23f8841e061318 Mon Sep 17 00:00:00 2001 From: Voyager Date: Tue, 4 Aug 2026 22:34:52 -0400 Subject: [PATCH] Refine environment texture rendering --- .../textures/grass_lite.png.import | 14 +++++------ .../environment/textures/sand.png.import | 14 +++++------ tests/terrain_projection_validation.gd | 24 ++++++++++++++++--- world/environment/netfishing_sky.tres | 23 ++++++++++++++++-- .../terrain_surface_projection.gdshader | 2 +- 5 files changed, 55 insertions(+), 22 deletions(-) diff --git a/art/exported/environment/textures/grass_lite.png.import b/art/exported/environment/textures/grass_lite.png.import index a878153..8359322 100644 --- a/art/exported/environment/textures/grass_lite.png.import +++ b/art/exported/environment/textures/grass_lite.png.import @@ -3,21 +3,19 @@ importer="texture" type="CompressedTexture2D" uid="uid://crci2on30ctoc" -path.s3tc="res://.godot/imported/grass_lite.png-f89cf6413257cd31582bd4f9f875ae85.s3tc.ctex" -path.etc2="res://.godot/imported/grass_lite.png-f89cf6413257cd31582bd4f9f875ae85.etc2.ctex" +path="res://.godot/imported/grass_lite.png-f89cf6413257cd31582bd4f9f875ae85.ctex" metadata={ -"imported_formats": ["s3tc_bptc", "etc2_astc"], -"vram_texture": true +"vram_texture": false } [deps] source_file="res://art/exported/environment/textures/grass_lite.png" -dest_files=["res://.godot/imported/grass_lite.png-f89cf6413257cd31582bd4f9f875ae85.s3tc.ctex", "res://.godot/imported/grass_lite.png-f89cf6413257cd31582bd4f9f875ae85.etc2.ctex"] +dest_files=["res://.godot/imported/grass_lite.png-f89cf6413257cd31582bd4f9f875ae85.ctex"] [params] -compress/mode=2 +compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -25,7 +23,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=true +mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -39,4 +37,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=0 +detect_3d/compress_to=1 diff --git a/art/exported/environment/textures/sand.png.import b/art/exported/environment/textures/sand.png.import index fdf8720..40d6167 100644 --- a/art/exported/environment/textures/sand.png.import +++ b/art/exported/environment/textures/sand.png.import @@ -3,21 +3,19 @@ importer="texture" type="CompressedTexture2D" uid="uid://bnje415gq85nn" -path.s3tc="res://.godot/imported/sand.png-41fc96c392119deeba43c2d4e49d88a5.s3tc.ctex" -path.etc2="res://.godot/imported/sand.png-41fc96c392119deeba43c2d4e49d88a5.etc2.ctex" +path="res://.godot/imported/sand.png-41fc96c392119deeba43c2d4e49d88a5.ctex" metadata={ -"imported_formats": ["s3tc_bptc", "etc2_astc"], -"vram_texture": true +"vram_texture": false } [deps] source_file="res://art/exported/environment/textures/sand.png" -dest_files=["res://.godot/imported/sand.png-41fc96c392119deeba43c2d4e49d88a5.s3tc.ctex", "res://.godot/imported/sand.png-41fc96c392119deeba43c2d4e49d88a5.etc2.ctex"] +dest_files=["res://.godot/imported/sand.png-41fc96c392119deeba43c2d4e49d88a5.ctex"] [params] -compress/mode=2 +compress/mode=0 compress/high_quality=false compress/lossy_quality=0.7 compress/uastc_level=0 @@ -25,7 +23,7 @@ compress/rdo_quality_loss=0.0 compress/hdr_compression=1 compress/normal_map=0 compress/channel_pack=0 -mipmaps/generate=true +mipmaps/generate=false mipmaps/limit=-1 roughness/mode=0 roughness/src_normal="" @@ -39,4 +37,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=0 +detect_3d/compress_to=1 diff --git a/tests/terrain_projection_validation.gd b/tests/terrain_projection_validation.gd index 88a9999..41053ef 100644 --- a/tests/terrain_projection_validation.gd +++ b/tests/terrain_projection_validation.gd @@ -22,8 +22,14 @@ func _run() -> void: assert(terrain.mesh.surface_get_name(3) == "cliff_wall") assert(terrain.mesh.surface_get_name(4) == "dirt_wall") - _validate_projected_material(terrain.get_surface_override_material(0)) - _validate_projected_material(terrain.get_surface_override_material(2)) + _validate_projected_material( + terrain.get_surface_override_material(0), + "res://art/exported/environment/textures/grass_lite.png" + ) + _validate_projected_material( + terrain.get_surface_override_material(2), + "res://art/exported/environment/textures/sand.png" + ) for surface: int in [1, 3, 4]: assert(terrain.get_surface_override_material(surface) == null) assert(terrain.mesh.surface_get_material(surface) is StandardMaterial3D) @@ -33,7 +39,10 @@ func _run() -> void: quit() -func _validate_projected_material(material: Material) -> void: +func _validate_projected_material( + material: Material, + expected_texture_path: String, +) -> void: assert(material is ShaderMaterial) var shader_material := material as ShaderMaterial assert( @@ -58,3 +67,12 @@ func _validate_projected_material(material: Material) -> void: 2.0 ) ) + var texture: Texture2D = shader_material.get_shader_parameter( + "albedo_texture" + ) as Texture2D + assert(texture != null) + assert(texture.resource_path == expected_texture_path) + var imported_image: Image = texture.get_image() + assert(imported_image != null) + assert(not imported_image.has_mipmaps()) + assert(imported_image.get_format() == Image.FORMAT_RGBA8) diff --git a/world/environment/netfishing_sky.tres b/world/environment/netfishing_sky.tres index 3661dee..7e84c45 100644 --- a/world/environment/netfishing_sky.tres +++ b/world/environment/netfishing_sky.tres @@ -1,9 +1,28 @@ -[gd_resource type="Sky" load_steps=3 format=3 uid="uid://dersyay71dyat"] +[gd_resource type="Sky" format=3 uid="uid://dersyay71dyat"] -[ext_resource type="Shader" path="res://world/environment/netfishing_sky.gdshader" id="1_sky_shader"] +[ext_resource type="Shader" uid="uid://chbcdlhui3ro4" path="res://world/environment/netfishing_sky.gdshader" id="1_sky_shader"] [sub_resource type="ShaderMaterial" id="ShaderMaterial_netfishing"] shader = ExtResource("1_sky_shader") +shader_parameter/sky_top_color = Color(0.204, 0.498, 0.643, 1) +shader_parameter/sky_horizon_color = Color(0.663, 0.843, 0.847, 1) +shader_parameter/ground_bottom_color = Color(0.157, 0.361, 0.439, 1) +shader_parameter/ground_horizon_color = Color(0.549, 0.749, 0.765, 1) +shader_parameter/horizon_blend_width = 0.01 +shader_parameter/sun_direction = Vector3(0, 1, 0) +shader_parameter/sun_color = Color(1, 0.86, 0.46, 1) +shader_parameter/sun_visibility = 1.0 +shader_parameter/sun_radius = 0.055 +shader_parameter/sun_edge_softness = 0.003 +shader_parameter/sun_halo_radius = 0.14 +shader_parameter/sun_halo_strength = 0.16 +shader_parameter/moon_direction = Vector3(0, -1, 0) +shader_parameter/moon_color = Color(0.78, 0.88, 1, 1) +shader_parameter/moon_visibility = 0.0 +shader_parameter/moon_radius = 0.045 +shader_parameter/moon_edge_softness = 0.003 +shader_parameter/moon_halo_radius = 0.11 +shader_parameter/moon_halo_strength = 0.12 [resource] sky_material = SubResource("ShaderMaterial_netfishing") diff --git a/world/materials/terrain_surface_projection.gdshader b/world/materials/terrain_surface_projection.gdshader index 4842e50..b879c63 100644 --- a/world/materials/terrain_surface_projection.gdshader +++ b/world/materials/terrain_surface_projection.gdshader @@ -1,7 +1,7 @@ shader_type spatial; render_mode cull_back; -uniform sampler2D albedo_texture : source_color, repeat_enable, filter_nearest_mipmap_anisotropic; +uniform sampler2D albedo_texture : source_color, repeat_enable, filter_nearest; uniform vec4 albedo_tint : source_color = vec4(1.0); uniform float tile_world_size : hint_range(0.1, 20.0, 0.05) = 2.5; uniform float blend_sharpness : hint_range(1.0, 16.0, 0.25) = 6.0;