My first 3D game with Godot 4.4
This commit is contained in:
70
mob/smoke_puff/material/inner_smoke.gdshader
Normal file
70
mob/smoke_puff/material/inner_smoke.gdshader
Normal file
@@ -0,0 +1,70 @@
|
||||
shader_type spatial;
|
||||
render_mode shadows_disabled, cull_back;
|
||||
|
||||
uniform vec3 albedo : source_color;
|
||||
|
||||
varying float voronoi_value;
|
||||
|
||||
uniform float progress = 0.0;
|
||||
uniform float smoothness = 0.01;
|
||||
|
||||
uniform float ease = 2.0;
|
||||
uniform float base_scale = 1.0;
|
||||
uniform float deformation_scale = 1.0;
|
||||
|
||||
uniform float texture_offset = 0.0;
|
||||
|
||||
uniform float fresnel_offset = 1.0;
|
||||
uniform float global_alpha = 1.0;
|
||||
|
||||
// Voronoi method credit:
|
||||
// The MIT License
|
||||
// Copyright © 2013 Inigo Quilez
|
||||
// https://www.shadertoy.com/view/ldl3Dl
|
||||
|
||||
vec3 hash( vec3 x ){
|
||||
x = vec3( dot(x,vec3(127.1,311.7, 74.7)),
|
||||
dot(x,vec3(269.5,183.3,246.1)),
|
||||
dot(x,vec3(113.5,271.9,124.6)));
|
||||
return fract(sin(x)*43758.5453123);
|
||||
}
|
||||
|
||||
vec3 voronoi( in vec3 x ){
|
||||
vec3 p = floor( x );
|
||||
vec3 f = fract( x );
|
||||
|
||||
float id = 0.0;
|
||||
vec2 res = vec2( 100.0 );
|
||||
for( int k=-1; k<=1; k++ )
|
||||
for( int j=-1; j<=1; j++ )
|
||||
for( int i=-1; i<=1; i++ ) {
|
||||
vec3 b = vec3( float(i), float(j), float(k) );
|
||||
vec3 r = vec3( b ) - f + hash( p + b );
|
||||
float d = dot( r, r );
|
||||
if( d < res.x ) {
|
||||
id = dot( p+b, vec3(1.0,57.0,113.0 ) );
|
||||
res = vec2( d, res.x );
|
||||
} else if( d < res.y ) {
|
||||
res.y = d;
|
||||
}
|
||||
}
|
||||
return vec3( sqrt( res ), abs(id) );
|
||||
}
|
||||
|
||||
float fresnel(vec3 normal, vec3 view, float amount){
|
||||
return pow(1.0 - clamp(dot(normal, view), 0.0, 1.0), amount);
|
||||
}
|
||||
|
||||
void vertex() {
|
||||
float smooth_df = deformation_scale;
|
||||
voronoi_value = voronoi(VERTEX + texture_offset).x;
|
||||
VERTEX += NORMAL * (1.0 - pow(voronoi_value, ease)) * smooth_df;
|
||||
VERTEX *= base_scale;
|
||||
}
|
||||
|
||||
void fragment(){
|
||||
ALBEDO = albedo;
|
||||
EMISSION = albedo * 0.5;
|
||||
ALPHA = 1.0 - fresnel(NORMAL, VIEW, 2.0 * fresnel_offset);
|
||||
ALPHA *= global_alpha;
|
||||
}
|
||||
1
mob/smoke_puff/material/inner_smoke.gdshader.uid
Normal file
1
mob/smoke_puff/material/inner_smoke.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://0h8qjtcpk0mk
|
||||
17
mob/smoke_puff/material/inner_smoke.tres
Normal file
17
mob/smoke_puff/material/inner_smoke.tres
Normal file
@@ -0,0 +1,17 @@
|
||||
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://dr7gyunhpjiwf"]
|
||||
|
||||
[ext_resource type="Shader" path="res://mob/smoke_puff/material/inner_smoke.gdshader" id="1_6ucfb"]
|
||||
|
||||
[resource]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_6ucfb")
|
||||
shader_parameter/albedo = Color(1, 0.537255, 0.792157, 1)
|
||||
shader_parameter/progress = 0.0
|
||||
shader_parameter/smoothness = 0.01
|
||||
shader_parameter/ease = 2.0
|
||||
shader_parameter/base_scale = 1.1
|
||||
shader_parameter/deformation_scale = 1.0
|
||||
shader_parameter/texture_offset = 0.1
|
||||
shader_parameter/fresnel_offset = 0.5
|
||||
shader_parameter/global_alpha = 0.0
|
||||
64
mob/smoke_puff/material/outer_smoke.gdshader
Normal file
64
mob/smoke_puff/material/outer_smoke.gdshader
Normal file
@@ -0,0 +1,64 @@
|
||||
shader_type spatial;
|
||||
render_mode shadows_disabled, cull_disabled;
|
||||
|
||||
uniform vec3 albedo : source_color;
|
||||
|
||||
varying float voronoi_value;
|
||||
|
||||
uniform float progress = 0.0;
|
||||
uniform float smoothness = 0.01;
|
||||
|
||||
uniform float ease = 2.0;
|
||||
uniform float base_scale = 1.0;
|
||||
uniform float deformation_scale = 1.0;
|
||||
|
||||
uniform float texture_offset = 0.0;
|
||||
|
||||
// Voronoi method credit:
|
||||
// The MIT License
|
||||
// Copyright © 2013 Inigo Quilez
|
||||
// https://www.shadertoy.com/view/ldl3Dl
|
||||
|
||||
vec3 hash( vec3 x ){
|
||||
x = vec3( dot(x,vec3(127.1,311.7, 74.7)),
|
||||
dot(x,vec3(269.5,183.3,246.1)),
|
||||
dot(x,vec3(113.5,271.9,124.6)));
|
||||
return fract(sin(x)*43758.5453123);
|
||||
}
|
||||
|
||||
vec3 voronoi( in vec3 x ){
|
||||
vec3 p = floor( x );
|
||||
vec3 f = fract( x );
|
||||
|
||||
float id = 0.0;
|
||||
vec2 res = vec2( 100.0 );
|
||||
for( int k=-1; k<=1; k++ )
|
||||
for( int j=-1; j<=1; j++ )
|
||||
for( int i=-1; i<=1; i++ ) {
|
||||
vec3 b = vec3( float(i), float(j), float(k) );
|
||||
vec3 r = vec3( b ) - f + hash( p + b );
|
||||
float d = dot( r, r );
|
||||
if( d < res.x ) {
|
||||
id = dot( p+b, vec3(1.0,57.0,113.0 ) );
|
||||
res = vec2( d, res.x );
|
||||
} else if( d < res.y ) {
|
||||
res.y = d;
|
||||
}
|
||||
}
|
||||
return vec3( sqrt( res ), abs(id) );
|
||||
}
|
||||
|
||||
|
||||
void vertex() {
|
||||
float smooth_df = deformation_scale;
|
||||
voronoi_value = voronoi(VERTEX + texture_offset).x;
|
||||
VERTEX += NORMAL * (1.0 - pow(voronoi_value, ease)) * smooth_df;
|
||||
VERTEX *= base_scale;
|
||||
}
|
||||
|
||||
void fragment(){
|
||||
ALBEDO = albedo;
|
||||
EMISSION = albedo * 0.5;
|
||||
ALPHA = smoothstep(progress - smoothness, progress + smoothness, voronoi_value);
|
||||
ALPHA_SCISSOR_THRESHOLD = 0.5;
|
||||
}
|
||||
1
mob/smoke_puff/material/outer_smoke.gdshader.uid
Normal file
1
mob/smoke_puff/material/outer_smoke.gdshader.uid
Normal file
@@ -0,0 +1 @@
|
||||
uid://spi71y1qu06o
|
||||
15
mob/smoke_puff/material/outer_smoke.tres
Normal file
15
mob/smoke_puff/material/outer_smoke.tres
Normal file
@@ -0,0 +1,15 @@
|
||||
[gd_resource type="ShaderMaterial" load_steps=2 format=3 uid="uid://ctnipgxo3l72h"]
|
||||
|
||||
[ext_resource type="Shader" path="res://mob/smoke_puff/material/outer_smoke.gdshader" id="1_0emiy"]
|
||||
|
||||
[resource]
|
||||
resource_local_to_scene = true
|
||||
render_priority = 0
|
||||
shader = ExtResource("1_0emiy")
|
||||
shader_parameter/albedo = Color(0.937255, 0.698039, 1, 1)
|
||||
shader_parameter/progress = 1.8
|
||||
shader_parameter/smoothness = 0.1
|
||||
shader_parameter/ease = 3.0
|
||||
shader_parameter/base_scale = 1.2
|
||||
shader_parameter/deformation_scale = 1.5
|
||||
shader_parameter/texture_offset = -0.5
|
||||
BIN
mob/smoke_puff/poof.res
Normal file
BIN
mob/smoke_puff/poof.res
Normal file
Binary file not shown.
BIN
mob/smoke_puff/poof_sound.wav
Normal file
BIN
mob/smoke_puff/poof_sound.wav
Normal file
Binary file not shown.
24
mob/smoke_puff/poof_sound.wav.import
Normal file
24
mob/smoke_puff/poof_sound.wav.import
Normal file
@@ -0,0 +1,24 @@
|
||||
[remap]
|
||||
|
||||
importer="wav"
|
||||
type="AudioStreamWAV"
|
||||
uid="uid://ki0nh5lgryca"
|
||||
path="res://.godot/imported/poof_sound.wav-36d715cee95c69d05b3317b1fcb4cc24.sample"
|
||||
|
||||
[deps]
|
||||
|
||||
source_file="res://mob/smoke_puff/poof_sound.wav"
|
||||
dest_files=["res://.godot/imported/poof_sound.wav-36d715cee95c69d05b3317b1fcb4cc24.sample"]
|
||||
|
||||
[params]
|
||||
|
||||
force/8_bit=false
|
||||
force/mono=false
|
||||
force/max_rate=false
|
||||
force/max_rate_hz=44100
|
||||
edit/trim=false
|
||||
edit/normalize=false
|
||||
edit/loop_mode=0
|
||||
edit/loop_begin=0
|
||||
edit/loop_end=-1
|
||||
compress/mode=2
|
||||
34
mob/smoke_puff/smoke_puff.tscn
Normal file
34
mob/smoke_puff/smoke_puff.tscn
Normal file
@@ -0,0 +1,34 @@
|
||||
[gd_scene load_steps=7 format=3 uid="uid://cjk3frr43yesb"]
|
||||
|
||||
[ext_resource type="Material" uid="uid://ctnipgxo3l72h" path="res://mob/smoke_puff/material/outer_smoke.tres" id="2_1f3c4"]
|
||||
[ext_resource type="ArrayMesh" uid="uid://cxh3afoly2pv6" path="res://mob/smoke_puff/smoke_sphere.obj" id="3_2ucfv"]
|
||||
[ext_resource type="Material" uid="uid://dr7gyunhpjiwf" path="res://mob/smoke_puff/material/inner_smoke.tres" id="4_8vcwr"]
|
||||
[ext_resource type="Animation" uid="uid://drrd257af7jpy" path="res://mob/smoke_puff/poof.res" id="5_yvyul"]
|
||||
[ext_resource type="AudioStream" uid="uid://dyj752n6nuwa6" path="res://mob/smoke_puff/poof_sound.wav" id="6_8rosm"]
|
||||
|
||||
[sub_resource type="AnimationLibrary" id="AnimationLibrary_a08pi"]
|
||||
_data = {
|
||||
"poof": ExtResource("5_yvyul")
|
||||
}
|
||||
|
||||
[node name="smoke_puff" type="Node3D"]
|
||||
transform = Transform3D(0.5, 0, 0, 0, 0.5, 0, 0, 0, 0.5, 0, 0, 0)
|
||||
|
||||
[node name="OuterSmoke" type="MeshInstance3D" parent="."]
|
||||
material_override = ExtResource("2_1f3c4")
|
||||
mesh = ExtResource("3_2ucfv")
|
||||
|
||||
[node name="InnerSmoke" type="MeshInstance3D" parent="."]
|
||||
material_override = ExtResource("4_8vcwr")
|
||||
mesh = ExtResource("3_2ucfv")
|
||||
|
||||
[node name="AnimationPlayer" type="AnimationPlayer" parent="."]
|
||||
unique_name_in_owner = true
|
||||
libraries = {
|
||||
"": SubResource("AnimationLibrary_a08pi")
|
||||
}
|
||||
autoplay = "poof"
|
||||
|
||||
[node name="Sound" type="AudioStreamPlayer3D" parent="."]
|
||||
unique_name_in_owner = true
|
||||
stream = ExtResource("6_8rosm")
|
||||
6197
mob/smoke_puff/smoke_sphere.obj
Normal file
6197
mob/smoke_puff/smoke_sphere.obj
Normal file
File diff suppressed because it is too large
Load Diff
25
mob/smoke_puff/smoke_sphere.obj.import
Normal file
25
mob/smoke_puff/smoke_sphere.obj.import
Normal file
@@ -0,0 +1,25 @@
|
||||
[remap]
|
||||
|
||||
importer="wavefront_obj"
|
||||
importer_version=1
|
||||
type="Mesh"
|
||||
uid="uid://vsovom3bufqe"
|
||||
path="res://.godot/imported/smoke_sphere.obj-7dec537f94ed12354ea65934deb2dc4e.mesh"
|
||||
|
||||
[deps]
|
||||
|
||||
files=["res://.godot/imported/smoke_sphere.obj-7dec537f94ed12354ea65934deb2dc4e.mesh"]
|
||||
|
||||
source_file="res://mob/smoke_puff/smoke_sphere.obj"
|
||||
dest_files=["res://.godot/imported/smoke_sphere.obj-7dec537f94ed12354ea65934deb2dc4e.mesh", "res://.godot/imported/smoke_sphere.obj-7dec537f94ed12354ea65934deb2dc4e.mesh"]
|
||||
|
||||
[params]
|
||||
|
||||
generate_tangents=true
|
||||
generate_lods=true
|
||||
generate_shadow_mesh=true
|
||||
generate_lightmap_uv2=false
|
||||
generate_lightmap_uv2_texel_size=0.2
|
||||
scale_mesh=Vector3(1, 1, 1)
|
||||
offset_mesh=Vector3(0, 0, 0)
|
||||
force_disable_mesh_compression=false
|
||||
Reference in New Issue
Block a user