Missile with Exhaust Effects
Created a missile model with 4 exhausts in Blender and imported it with collision shapes (not tested yet if they work). Created an exhaust shader with a simple particle trail. The shader that creates the exhaust flame can be adapted to the missile burn power.main
parent
7c86284ca8
commit
8b25efe822
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
Binary file not shown.
After Width: | Height: | Size: 110 KiB |
@ -0,0 +1,37 @@
|
|||||||
|
[remap]
|
||||||
|
|
||||||
|
importer="texture"
|
||||||
|
type="StreamTexture"
|
||||||
|
path.s3tc="res://.import/missile_albedo.png-2cb94eaa9de484fd50d1215f51f806b4.s3tc.stex"
|
||||||
|
path.etc2="res://.import/missile_albedo.png-2cb94eaa9de484fd50d1215f51f806b4.etc2.stex"
|
||||||
|
metadata={
|
||||||
|
"imported_formats": [ "s3tc", "etc2" ],
|
||||||
|
"vram_texture": true
|
||||||
|
}
|
||||||
|
|
||||||
|
[deps]
|
||||||
|
|
||||||
|
source_file="res://assets/entities/missile/missile_albedo.png"
|
||||||
|
dest_files=[ "res://.import/missile_albedo.png-2cb94eaa9de484fd50d1215f51f806b4.s3tc.stex", "res://.import/missile_albedo.png-2cb94eaa9de484fd50d1215f51f806b4.etc2.stex" ]
|
||||||
|
|
||||||
|
[params]
|
||||||
|
|
||||||
|
compress/mode=2
|
||||||
|
compress/lossy_quality=0.7
|
||||||
|
compress/hdr_mode=0
|
||||||
|
compress/bptc_ldr=0
|
||||||
|
compress/normal_map=0
|
||||||
|
flags/repeat=true
|
||||||
|
flags/filter=true
|
||||||
|
flags/mipmaps=true
|
||||||
|
flags/anisotropic=false
|
||||||
|
flags/srgb=1
|
||||||
|
process/fix_alpha_border=true
|
||||||
|
process/premult_alpha=false
|
||||||
|
process/HDR_as_SRGB=false
|
||||||
|
process/invert_color=false
|
||||||
|
process/normal_map_invert_y=false
|
||||||
|
stream=false
|
||||||
|
size_limit=0
|
||||||
|
detect_3d=false
|
||||||
|
svg/scale=1.0
|
@ -0,0 +1,15 @@
|
|||||||
|
extends Area
|
||||||
|
|
||||||
|
onready var turret_main = get_node("../../../../")
|
||||||
|
|
||||||
|
var seen_nodes = []
|
||||||
|
|
||||||
|
func body_entered(body: Node):
|
||||||
|
print(body.name+" just entered the vision!")
|
||||||
|
seen_nodes.append(body)
|
||||||
|
|
||||||
|
func body_exited(body: Node):
|
||||||
|
seen_nodes.remove(body)
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass
|
@ -0,0 +1,19 @@
|
|||||||
|
extends Spatial
|
||||||
|
|
||||||
|
|
||||||
|
onready var exhaust_node = $Exhaust;
|
||||||
|
|
||||||
|
var exhausts = ["Exhaust", "Exhaust2", "Exhaust3", "Exhaust4"]
|
||||||
|
|
||||||
|
func change_engine_power(power):
|
||||||
|
var MAX_POWER = 10;
|
||||||
|
print("Changing missile exhaust to: ", power);
|
||||||
|
for e in exhausts:
|
||||||
|
var node: MeshInstance = exhaust_node.get_node("./"+e);
|
||||||
|
node.get_active_material(0).set_shader_param("power", clamp(power, .0, MAX_POWER));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
func _ready():
|
||||||
|
pass;
|
||||||
|
#change_engine_power(10);
|
@ -0,0 +1,136 @@
|
|||||||
|
[gd_scene load_steps=13 format=2]
|
||||||
|
|
||||||
|
[ext_resource path="res://assets/entities/missile/missile.glb" type="PackedScene" id=1]
|
||||||
|
[ext_resource path="res://assets/entities/missile/missile_albedo.png" type="Texture" id=2]
|
||||||
|
[ext_resource path="res://scenes/entities/missile.gd" type="Script" id=3]
|
||||||
|
[ext_resource path="res://scenes/entities/missiles/missile_exhaust.gdshader" type="Shader" id=4]
|
||||||
|
|
||||||
|
[sub_resource type="SpatialMaterial" id=2]
|
||||||
|
albedo_texture = ExtResource( 2 )
|
||||||
|
metallic = 1.0
|
||||||
|
roughness = 0.41
|
||||||
|
|
||||||
|
[sub_resource type="CapsuleShape" id=1]
|
||||||
|
height = 10.1286
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id=8]
|
||||||
|
shader = ExtResource( 4 )
|
||||||
|
shader_param/ANIM_SPEED = 100.0
|
||||||
|
shader_param/hot_color = Color( 0.9, 0.9, 9, 0.5 )
|
||||||
|
shader_param/cold_color = Color( 1, 1, 1, 0 )
|
||||||
|
shader_param/power = 1.0
|
||||||
|
|
||||||
|
[sub_resource type="SphereMesh" id=9]
|
||||||
|
material = SubResource( 8 )
|
||||||
|
radius = 0.35
|
||||||
|
height = 0.5
|
||||||
|
radial_segments = 128
|
||||||
|
rings = 64
|
||||||
|
|
||||||
|
[sub_resource type="ParticlesMaterial" id=3]
|
||||||
|
emission_shape = 1
|
||||||
|
emission_sphere_radius = 0.25
|
||||||
|
gravity = Vector3( 0, 40, 0 )
|
||||||
|
|
||||||
|
[sub_resource type="Shader" id=5]
|
||||||
|
code = "shader_type spatial;
|
||||||
|
render_mode depth_draw_opaque, unshaded, shadows_disabled;
|
||||||
|
|
||||||
|
uniform float MIX = 1.;
|
||||||
|
uniform float particle_alpha: hint_range(0.0, 1.0) = 1.0;
|
||||||
|
uniform vec4 top_color: hint_color = vec4(.2, .5, .8, 0.3);
|
||||||
|
uniform vec4 bot_color: hint_color = vec4(.2, .5, .8, 1);
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
vec4 exhaust_color = mix(top_color, bot_color, .5);
|
||||||
|
|
||||||
|
ALPHA = exhaust_color.a;
|
||||||
|
ALBEDO = exhaust_color.rgb;
|
||||||
|
}
|
||||||
|
"
|
||||||
|
|
||||||
|
[sub_resource type="ShaderMaterial" id=6]
|
||||||
|
shader = SubResource( 5 )
|
||||||
|
shader_param/MIX = 1.0
|
||||||
|
shader_param/particle_alpha = 1.0
|
||||||
|
shader_param/top_color = Color( 0.2, 0.5, 0.8, 0.3 )
|
||||||
|
shader_param/bot_color = Color( 0.2, 0.5, 0.8, 1 )
|
||||||
|
|
||||||
|
[sub_resource type="SphereMesh" id=4]
|
||||||
|
material = SubResource( 6 )
|
||||||
|
radius = 0.025
|
||||||
|
height = 0.05
|
||||||
|
radial_segments = 32
|
||||||
|
rings = 16
|
||||||
|
|
||||||
|
[node name="missile" instance=ExtResource( 1 )]
|
||||||
|
script = ExtResource( 3 )
|
||||||
|
|
||||||
|
[node name="missile body" parent="." index="0"]
|
||||||
|
material/0 = SubResource( 2 )
|
||||||
|
|
||||||
|
[node name="RigidBody" type="RigidBody" parent="." index="1"]
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="RigidBody" index="0"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0.371096 )
|
||||||
|
shape = SubResource( 1 )
|
||||||
|
|
||||||
|
[node name="Exhaust" type="Spatial" parent="." index="2"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -4.901 )
|
||||||
|
|
||||||
|
[node name="Exhaust" type="MeshInstance" parent="Exhaust" index="0"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0.5, 0.5, 0.1 )
|
||||||
|
mesh = SubResource( 9 )
|
||||||
|
|
||||||
|
[node name="Particles" type="Particles" parent="Exhaust/Exhaust" index="0"]
|
||||||
|
visible = false
|
||||||
|
cast_shadow = 0
|
||||||
|
amount = 50
|
||||||
|
lifetime = 3.0
|
||||||
|
visibility_aabb = AABB( nan, 0.05694, -7.38708, 0.867362, 0.904675, 14.7742 )
|
||||||
|
process_material = SubResource( 3 )
|
||||||
|
draw_pass_1 = SubResource( 4 )
|
||||||
|
|
||||||
|
[node name="Exhaust2" type="MeshInstance" parent="Exhaust" index="1"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, -0.5, 0.5, 0.1 )
|
||||||
|
mesh = SubResource( 9 )
|
||||||
|
skeleton = NodePath("../Exhaust")
|
||||||
|
|
||||||
|
[node name="Particles" type="Particles" parent="Exhaust/Exhaust2" index="0"]
|
||||||
|
visible = false
|
||||||
|
cast_shadow = 0
|
||||||
|
amount = 50
|
||||||
|
lifetime = 3.0
|
||||||
|
visibility_aabb = AABB( nan, 0.05694, -7.38708, 0.867362, 0.904675, 14.7742 )
|
||||||
|
process_material = SubResource( 3 )
|
||||||
|
draw_pass_1 = SubResource( 4 )
|
||||||
|
|
||||||
|
[node name="Exhaust3" type="MeshInstance" parent="Exhaust" index="2"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0.5, -0.5, 0.1 )
|
||||||
|
mesh = SubResource( 9 )
|
||||||
|
skeleton = NodePath("../Exhaust2")
|
||||||
|
|
||||||
|
[node name="Particles" type="Particles" parent="Exhaust/Exhaust3" index="0"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, -1, 8.74228e-08, 0, -8.74228e-08, -1, 0, 0, 0 )
|
||||||
|
visible = false
|
||||||
|
cast_shadow = 0
|
||||||
|
amount = 50
|
||||||
|
lifetime = 3.0
|
||||||
|
visibility_aabb = AABB( nan, 0.05694, -7.38708, 0.867362, 0.904675, 14.7742 )
|
||||||
|
process_material = SubResource( 3 )
|
||||||
|
draw_pass_1 = SubResource( 4 )
|
||||||
|
|
||||||
|
[node name="Exhaust4" type="MeshInstance" parent="Exhaust" index="3"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, -0.5, -0.5, 0.1 )
|
||||||
|
mesh = SubResource( 9 )
|
||||||
|
skeleton = NodePath(".")
|
||||||
|
|
||||||
|
[node name="Particles" type="Particles" parent="Exhaust/Exhaust4" index="0"]
|
||||||
|
transform = Transform( 1, 0, 0, 0, -1, 8.74228e-08, 0, -8.74228e-08, -1, 0, 0, 0 )
|
||||||
|
visible = false
|
||||||
|
cast_shadow = 0
|
||||||
|
amount = 50
|
||||||
|
lifetime = 3.0
|
||||||
|
visibility_aabb = AABB( nan, 0.05694, -7.38708, 0.867362, 0.904675, 14.7742 )
|
||||||
|
process_material = SubResource( 3 )
|
||||||
|
draw_pass_1 = SubResource( 4 )
|
@ -0,0 +1,20 @@
|
|||||||
|
shader_type spatial;
|
||||||
|
|
||||||
|
uniform float ANIM_SPEED = 100.0;
|
||||||
|
uniform vec4 hot_color: hint_color = vec4(.9, .9, 9., .5);
|
||||||
|
uniform vec4 cold_color: hint_color = vec4(1., 1., 1., 0.);
|
||||||
|
|
||||||
|
uniform float power = 1.;
|
||||||
|
|
||||||
|
void vertex() {
|
||||||
|
float distance = sqrt(pow(VERTEX.z, 2) + pow(VERTEX.x, 2));
|
||||||
|
VERTEX.y = min(sin(VERTEX.x * TIME * ANIM_SPEED) * power / (distance * 10. + 1.), 0.);
|
||||||
|
|
||||||
|
vec4 exhaust_color = mix(hot_color, cold_color, VERTEX.y / 5.8);
|
||||||
|
COLOR = exhaust_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
ALPHA = COLOR.a;
|
||||||
|
ALBEDO = COLOR.rgb;
|
||||||
|
}
|
@ -0,0 +1,23 @@
|
|||||||
|
[gd_scene load_steps=3 format=2]
|
||||||
|
|
||||||
|
[sub_resource type="SphereMesh" id=1]
|
||||||
|
radius = 0.2
|
||||||
|
height = 0.2
|
||||||
|
radial_segments = 32
|
||||||
|
rings = 16
|
||||||
|
|
||||||
|
[sub_resource type="CapsuleShape" id=2]
|
||||||
|
radius = 0.13991
|
||||||
|
height = 0.16003
|
||||||
|
|
||||||
|
[node name="Projectile" type="Spatial"]
|
||||||
|
|
||||||
|
[node name="MeshInstance" type="MeshInstance" parent="."]
|
||||||
|
transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 0.5, 0, 0, 0 )
|
||||||
|
mesh = SubResource( 1 )
|
||||||
|
|
||||||
|
[node name="RigidBody" type="RigidBody" parent="."]
|
||||||
|
|
||||||
|
[node name="CollisionShape" type="CollisionShape" parent="RigidBody"]
|
||||||
|
transform = Transform( -4.37114e-08, 0, 1, 0, 1, 0, -1, 0, -4.37114e-08, 0, 0, 0 )
|
||||||
|
shape = SubResource( 2 )
|
@ -0,0 +1,16 @@
|
|||||||
|
[gd_resource type="ShaderMaterial" load_steps=2 format=2]
|
||||||
|
|
||||||
|
[sub_resource type="Shader" id=2]
|
||||||
|
code = "shader_type spatial;
|
||||||
|
|
||||||
|
void vertex() {
|
||||||
|
VERTEX.x += NORMAL.x * sin(40. * VERTEX.x) / 5.;
|
||||||
|
}
|
||||||
|
|
||||||
|
void fragment() {
|
||||||
|
ALBEDO = vec3(.2, .6, .8);
|
||||||
|
ROUGHNESS = .5;
|
||||||
|
}"
|
||||||
|
|
||||||
|
[resource]
|
||||||
|
shader = SubResource( 2 )
|
Loading…
Reference in New Issue