generated from krampus/template-godot4
Added 3D UI arrow & transparent gummy material
This commit is contained in:
parent
828d89db33
commit
d2a6cf5885
Binary file not shown.
|
@ -0,0 +1,50 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://byrygy8j6yeur"
|
||||
valid=false
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://asset_dev/arrow.blend"
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={}
|
||||
blender/nodes/visible=0
|
||||
blender/nodes/active_collection_only=false
|
||||
blender/nodes/punctual_lights=true
|
||||
blender/nodes/cameras=true
|
||||
blender/nodes/custom_properties=true
|
||||
blender/nodes/modifiers=1
|
||||
blender/meshes/colors=false
|
||||
blender/meshes/uvs=true
|
||||
blender/meshes/normals=true
|
||||
blender/meshes/tangents=true
|
||||
blender/meshes/skins=2
|
||||
blender/meshes/export_bones_deforming_mesh_only=false
|
||||
blender/materials/unpack_enabled=true
|
||||
blender/materials/export_materials=1
|
||||
blender/animation/limit_playback=true
|
||||
blender/animation/always_sample=true
|
||||
blender/animation/group_tracks=true
|
Binary file not shown.
|
@ -0,0 +1,45 @@
|
|||
[gd_resource type="ShaderMaterial" load_steps=8 format=3 uid="uid://d3ka0yjhxu5ks"]
|
||||
|
||||
[ext_resource type="Shader" path="res://src/shaders/frosted_glass.gdshader" id="1_jx055"]
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_ieey5"]
|
||||
noise_type = 2
|
||||
fractal_type = 2
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_7g8ap"]
|
||||
seamless = true
|
||||
as_normal_map = true
|
||||
noise = SubResource("FastNoiseLite_ieey5")
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_etunr"]
|
||||
noise_type = 2
|
||||
seed = 1
|
||||
fractal_type = 2
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_5huy0"]
|
||||
seamless = true
|
||||
noise = SubResource("FastNoiseLite_etunr")
|
||||
|
||||
[sub_resource type="FastNoiseLite" id="FastNoiseLite_bxk71"]
|
||||
|
||||
[sub_resource type="NoiseTexture2D" id="NoiseTexture2D_umhmc"]
|
||||
noise = SubResource("FastNoiseLite_bxk71")
|
||||
|
||||
[resource]
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_jx055")
|
||||
shader_parameter/albedo = Color(1, 0.6, 1, 0.34902)
|
||||
shader_parameter/roughness = 0.55
|
||||
shader_parameter/refraction = 0.0500008
|
||||
shader_parameter/refraction_texture_channel = Vector4(1, 0, 0, 0)
|
||||
shader_parameter/texture_refraction = SubResource("NoiseTexture2D_5huy0")
|
||||
shader_parameter/normal_strength = 0.200001
|
||||
shader_parameter/normal_map = SubResource("NoiseTexture2D_7g8ap")
|
||||
shader_parameter/subsurface_scattering_strength = 1.0
|
||||
shader_parameter/texture_subsurface_scattering = SubResource("NoiseTexture2D_umhmc")
|
||||
shader_parameter/edge_color = Color(0, 0, 0, 1)
|
||||
shader_parameter/surface_contribution = 0.9
|
||||
shader_parameter/specular_contribution = 20.0
|
||||
shader_parameter/refraction_contribution = 3.0
|
||||
shader_parameter/uv1_scale = Vector3(1, 1, 1)
|
||||
shader_parameter/uv1_offset = Vector3(0, 0, 0)
|
Binary file not shown.
|
@ -0,0 +1,43 @@
|
|||
[remap]
|
||||
|
||||
importer="scene"
|
||||
importer_version=1
|
||||
type="PackedScene"
|
||||
uid="uid://bw54bi35myvpg"
|
||||
path="res://.godot/imported/arrow.glb-529b70086bc22d1673d9206ecda53d79.scn"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://assets/models/ui/arrow/arrow.glb"
|
||||
dest_files=["res://.godot/imported/arrow.glb-529b70086bc22d1673d9206ecda53d79.scn"]
|
||||
|
||||
[params]
|
||||
|
||||
nodes/root_type=""
|
||||
nodes/root_name=""
|
||||
nodes/apply_root_scale=true
|
||||
nodes/root_scale=1.0
|
||||
nodes/import_as_skeleton_bones=false
|
||||
meshes/ensure_tangents=true
|
||||
meshes/generate_lods=true
|
||||
meshes/create_shadow_meshes=true
|
||||
meshes/light_baking=1
|
||||
meshes/lightmap_texel_size=0.2
|
||||
meshes/force_disable_compression=false
|
||||
skins/use_named_skins=true
|
||||
animation/import=true
|
||||
animation/fps=30
|
||||
animation/trimming=false
|
||||
animation/remove_immutable_tracks=true
|
||||
animation/import_rest_as_RESET=false
|
||||
import_script/path=""
|
||||
_subresources={
|
||||
"materials": {
|
||||
"Material": {
|
||||
"use_external/enabled": false,
|
||||
"use_external/path": "res://assets/materials/gummy_material.tres"
|
||||
}
|
||||
}
|
||||
}
|
||||
gltf/naming_version=1
|
||||
gltf/embedded_image_handling=1
|
|
@ -0,0 +1,76 @@
|
|||
shader_type spatial;
|
||||
// render_mode blend_mix, depth_draw_always, cull_disabled;
|
||||
render_mode diffuse_burley, specular_schlick_ggx, blend_mix, depth_draw_always, cull_disabled, sss_mode_skin;
|
||||
|
||||
group_uniforms albedo;
|
||||
uniform vec4 albedo: source_color = vec4(1.0, 1.0, 1.0, 0.0);
|
||||
uniform sampler2D albedo_texture: source_color, hint_default_white;
|
||||
|
||||
group_uniforms roughness;
|
||||
uniform float roughness: hint_range(0.0, 1.0) = 0.15;
|
||||
uniform sampler2D roughness_texture: hint_roughness_r;
|
||||
|
||||
group_uniforms refraction;
|
||||
uniform float refraction: hint_range(-16,16) = 0.5;
|
||||
uniform sampler2D texture_refraction: filter_linear_mipmap,repeat_enable;
|
||||
uniform vec4 refraction_texture_channel = vec4(1.0, 0.0, 0.0, 0.0);
|
||||
uniform sampler2D screen_texture: hint_screen_texture, repeat_disable, filter_linear_mipmap;
|
||||
|
||||
group_uniforms normal;
|
||||
uniform float normal_strength: hint_range(-16.0, 16.0) = 0.0;
|
||||
uniform sampler2D normal_map: hint_normal;
|
||||
|
||||
group_uniforms subsurface_scattering;
|
||||
uniform float subsurface_scattering_strength: hint_range(0.0, 1.0, 0.01);
|
||||
uniform sampler2D texture_subsurface_scattering : hint_default_white, filter_linear_mipmap, repeat_enable;
|
||||
|
||||
group_uniforms misc;
|
||||
uniform vec4 edge_color: source_color = vec4(0.0, 0.0, 0.0, 1.0);
|
||||
uniform float surface_contribution = 0.2;
|
||||
uniform float specular_contribution = 0.2;
|
||||
uniform float refraction_contribution = 1.0;
|
||||
|
||||
group_uniforms uv;
|
||||
uniform vec3 uv1_scale = vec3(1.0);
|
||||
uniform vec3 uv1_offset = vec3(0.0);
|
||||
|
||||
float SchlickFresnel(float u) {
|
||||
float m = 1.0 - u;
|
||||
float m2 = m * m;
|
||||
return m2 * m2 * m;
|
||||
}
|
||||
|
||||
void vertex() {
|
||||
UV=UV*uv1_scale.xy+uv1_offset.xy;
|
||||
}
|
||||
|
||||
void fragment() {
|
||||
NORMAL_MAP = texture(normal_map, UV).xyz;
|
||||
NORMAL_MAP_DEPTH = normal_strength;
|
||||
|
||||
float VdotN = dot(VIEW, NORMAL);
|
||||
float fresnel = clamp(SchlickFresnel(VdotN), 0.0, 1.0);
|
||||
|
||||
vec4 albedo_mix = texture(albedo_texture, UV) * albedo;
|
||||
float roughness_mix = texture(roughness_texture, UV).r * roughness;
|
||||
float sss_mix = texture(texture_subsurface_scattering, UV).r * subsurface_scattering_strength;
|
||||
|
||||
float a = mix(0.001, 1.0, albedo_mix.a);
|
||||
float a_factor_0 = mix(fresnel * edge_color.a, 1.0, a);
|
||||
float a_factor_1 = 0.5 * sqrt(a);
|
||||
float a_factor_2 = a_factor_0 + a_factor_1;
|
||||
|
||||
ALBEDO = mix(edge_color.rgb * edge_color.a, albedo_mix.rgb * surface_contribution, a);
|
||||
ROUGHNESS = roughness_mix;
|
||||
SPECULAR = 0.5 * inversesqrt(specular_contribution);
|
||||
SSS_STRENGTH = sss_mix;
|
||||
|
||||
vec3 unpacked_normal = NORMAL_MAP;
|
||||
unpacked_normal.xy = unpacked_normal.xy * 2.0 - 1.0;
|
||||
unpacked_normal.z = sqrt(max(0.0, 1.0 - dot(unpacked_normal.xy, unpacked_normal.xy)));
|
||||
vec3 ref_normal = normalize(mix(NORMAL,TANGENT * unpacked_normal.x + BINORMAL * unpacked_normal.y + NORMAL * unpacked_normal.z,NORMAL_MAP_DEPTH));
|
||||
vec2 ref_ofs = SCREEN_UV - ref_normal.xy * dot(texture(texture_refraction, UV),refraction_texture_channel) * refraction;
|
||||
float ref_amount = 1.0 - albedo_mix.a;
|
||||
EMISSION += (textureLod(screen_texture,ref_ofs,ROUGHNESS * 8.0).rgb * ref_amount * EXPOSURE * mix(vec3(mix(0.02, 0.1, a)), albedo_mix.rgb*refraction_contribution, a))/a_factor_2;
|
||||
ALBEDO *= 1.0 - ref_amount;
|
||||
}
|
|
@ -0,0 +1,31 @@
|
|||
@tool
|
||||
extends Node3D
|
||||
|
||||
const COLOR_PARAMETER := "albedo"
|
||||
|
||||
enum Loop {
|
||||
RESET,
|
||||
BOB_TIP,
|
||||
BOB_TAIL,
|
||||
}
|
||||
|
||||
@export var loop_animation: Loop:
|
||||
set(value):
|
||||
if is_instance_valid(animation_player):
|
||||
animation_player.play(str(Loop.keys()[value]))
|
||||
loop_animation = value
|
||||
|
||||
@export var color := Color("#ff99ff99"):
|
||||
set(value):
|
||||
if is_instance_valid(cube):
|
||||
var shader: ShaderMaterial = cube.get_surface_override_material(0)
|
||||
shader.set_shader_parameter(COLOR_PARAMETER, value)
|
||||
color = value
|
||||
|
||||
@onready var cube: MeshInstance3D = %Cube
|
||||
@onready var animation_player: AnimationPlayer = %AnimationPlayer
|
||||
|
||||
|
||||
func _ready() -> void:
|
||||
loop_animation = loop_animation
|
||||
color = color
|
|
@ -0,0 +1,112 @@
|
|||
[gd_scene load_steps=9 format=3 uid="uid://c2k88ns0h5ie1"]
|
||||
|
||||
[ext_resource type="PackedScene" uid="uid://bw54bi35myvpg" path="res://assets/models/ui/arrow/arrow.glb" id="1_xifl6"]
|
||||
[ext_resource type="Script" path="res://src/ui/arrow.gd" id="2_0viam"]
|
||||
[ext_resource type="Material" uid="uid://d3ka0yjhxu5ks" path="res://assets/materials/gummy_material.tres" id="3_g7vwe"]
|
||||
|
||||
[sub_resource type="Animation" id="Animation_hsqkd"]
|
||||
resource_name = "bob_tail"
|
||||
length = 0.8
|
||||
loop_mode = 1
|
||||
step = 0.01
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Cube:scale")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.4, 0.8),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(1, 1, 1), Vector3(1, 0.95, 1), Vector3(1, 1, 1)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Cube:position")
|
||||
tracks/1/interp = 2
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0, 0.4, 0.8),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0), Vector3(0, 0.38, 0), Vector3(0, 0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_evviq"]
|
||||
resource_name = "loop"
|
||||
length = 0.8
|
||||
loop_mode = 1
|
||||
step = 0.01
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Cube:scale")
|
||||
tracks/0/interp = 2
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0, 0.4, 0.8),
|
||||
"transitions": PackedFloat32Array(1, 1, 1),
|
||||
"update": 0,
|
||||
"values": [Vector3(1, 1, 1), Vector3(1, 0.95, 1), Vector3(1, 1, 1)]
|
||||
}
|
||||
|
||||
[sub_resource type="Animation" id="Animation_uoidj"]
|
||||
length = 0.001
|
||||
tracks/0/type = "value"
|
||||
tracks/0/imported = false
|
||||
tracks/0/enabled = true
|
||||
tracks/0/path = NodePath("Cube:scale")
|
||||
tracks/0/interp = 1
|
||||
tracks/0/loop_wrap = true
|
||||
tracks/0/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(1, 1, 1)]
|
||||
}
|
||||
tracks/1/type = "value"
|
||||
tracks/1/imported = false
|
||||
tracks/1/enabled = true
|
||||
tracks/1/path = NodePath("Cube:position")
|
||||
tracks/1/interp = 1
|
||||
tracks/1/loop_wrap = true
|
||||
tracks/1/keys = {
|
||||
"times": PackedFloat32Array(0),
|
||||
"transitions": PackedFloat32Array(1),
|
||||
"update": 0,
|
||||
"values": [Vector3(0, 0, 0)]
|
||||
}
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_7avkl"]
|
||||
_data = {
|
||||
"BOB_TAIL": SubResource("Animation_hsqkd"),
|
||||
"BOB_TIP": SubResource("Animation_evviq"),
|
||||
"RESET": SubResource("Animation_uoidj")
|
||||
}
|
||||
|
||||
[sub_resource type="BoxMesh" id="BoxMesh_q4cym"]
|
||||
|
||||
[node name="Arrow" instance=ExtResource("1_xifl6")]
|
||||
script = ExtResource("2_0viam")
|
||||
|
||||
[node name="Cube" parent="." index="0"]
|
||||
unique_name_in_owner = true
|
||||
surface_material_override/0 = ExtResource("3_g7vwe")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="." index="1"]
|
||||
unique_name_in_owner = true
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_7avkl")
|
||||
}
|
||||
autoplay = "BOB_TIP"
|
||||
|
||||
[node name="Node3D" type="Node3D" parent="." index="2"]
|
||||
transform = Transform3D(1, 0, 0, 0, 7.619, 0, 0, 0, 1, 0, 0, 0)
|
||||
visible = false
|
||||
|
||||
[node name="MeshInstance3D" type="MeshInstance3D" parent="Node3D" index="0"]
|
||||
transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.500484, 0)
|
||||
mesh = SubResource("BoxMesh_q4cym")
|
||||
skeleton = NodePath("../..")
|
Loading…
Reference in New Issue