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