From 40bcc0f55feb26d3aa89f1d10a35cb6dec15e59d Mon Sep 17 00:00:00 2001 From: TwistedTwigleg Date: Wed, 29 Jan 2020 17:37:04 -0500 Subject: [PATCH] Added SkeletonIK example to IK demo. Updated the anchors on all of the UI so it can scale to any sized window. Removed the project settings keeping the aspect ratio the same --- 3d/ik/fabrik_ik.tscn | 53 +++++---- 3d/ik/fps/fps_example.tscn | 208 +++++++++++++++++++----------------- 3d/ik/look_at_ik.tscn | 33 ++++-- 3d/ik/project.godot | 5 - 3d/ik/skeleton_ik.tscn | 168 +++++++++++++++++++++++++++++ 3d/ik/skeleton_ik_runner.gd | 4 + 6 files changed, 340 insertions(+), 131 deletions(-) create mode 100644 3d/ik/skeleton_ik.tscn create mode 100644 3d/ik/skeleton_ik_runner.gd diff --git a/3d/ik/fabrik_ik.tscn b/3d/ik/fabrik_ik.tscn index 0545aba1..77a74f52 100644 --- a/3d/ik/fabrik_ik.tscn +++ b/3d/ik/fabrik_ik.tscn @@ -165,21 +165,28 @@ mesh = SubResource( 5 ) material/0 = SubResource( 6 ) [node name="Control" type="Control" parent="."] -margin_right = 40.0 -margin_bottom = 40.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +__meta__ = { +"_edit_use_anchors_": false +} [node name="Panel" type="Panel" parent="Control"] modulate = Color( 1, 1, 1, 0.784314 ) +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 margin_left = -2.0 -margin_top = 530.0 -margin_right = 1028.0 -margin_bottom = 600.0 +margin_top = -70.0 +margin_right = 4.0 [node name="Label" type="Label" parent="Control/Panel"] +anchor_right = 1.0 +anchor_bottom = 1.0 margin_left = 12.0 margin_top = 10.0 -margin_right = 1012.0 -margin_bottom = 41.0 +margin_right = -18.0 +margin_bottom = -29.0 text = "F.A.B.R.I.K IK Move mouse to move IK targets (Using 3 bones in the right hand, only 2 in the left. 3+ recommended)" @@ -187,10 +194,12 @@ align = 1 valign = 1 [node name="Label_extra" type="Label" parent="Control/Panel"] +anchor_right = 1.0 +anchor_bottom = 1.0 margin_left = 12.0 margin_top = 80.0 -margin_right = 1012.0 -margin_bottom = 128.0 +margin_right = -18.0 +margin_bottom = 58.0 text = "NOTE: You will get a few errors when saving with FABRIK IK nodes in your scene This is a known bug. Please ignore the errors for now, as they do not do anything (They're just annoying. If you find a fix, please add it to the demo repository!)" @@ -198,9 +207,11 @@ align = 1 valign = 1 [node name="Label_left" type="Label" parent="Control/Panel"] -margin_left = 782.0 +anchor_left = 1.0 +anchor_right = 1.0 +margin_left = -248.0 margin_top = 4.0 -margin_right = 895.0 +margin_right = -135.0 margin_bottom = 18.0 text = "Left Hand" align = 1 @@ -214,19 +225,25 @@ text = "Right Hand" align = 1 [node name="Button_Next" type="Button" parent="Control"] -margin_left = 900.0 -margin_top = 540.0 -margin_right = 1019.0 -margin_bottom = 590.0 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -124.0 +margin_top = -60.0 +margin_right = -5.0 +margin_bottom = -10.0 text = "Next scene" script = ExtResource( 10 ) -scene_to_change_to = "res://fps/fps_example.tscn" +scene_to_change_to = "res://skeleton_ik.tscn" [node name="Button_Prev" type="Button" parent="Control"] +anchor_top = 1.0 +anchor_bottom = 1.0 margin_left = 10.0 -margin_top = 540.0 +margin_top = -60.0 margin_right = 129.0 -margin_bottom = 590.0 +margin_bottom = -10.0 text = "Previous scene" script = ExtResource( 10 ) scene_to_change_to = "res://look_at_ik.tscn" diff --git a/3d/ik/fps/fps_example.tscn b/3d/ik/fps/fps_example.tscn index 76e8f06c..dab2bb07 100644 --- a/3d/ik/fps/fps_example.tscn +++ b/3d/ik/fps/fps_example.tscn @@ -14,35 +14,35 @@ [ext_resource path="res://battle_bot_color.tres" type="Material" id=12] [ext_resource path="res://battle_bot_emission.tres" type="Material" id=13] -[sub_resource type="PlaneMesh" id=5] +[sub_resource type="PlaneMesh" id=1] size = Vector2( 40, 40 ) -[sub_resource type="SpatialMaterial" id=6] +[sub_resource type="SpatialMaterial" id=2] albedo_texture = ExtResource( 1 ) roughness = 0.2 uv1_scale = Vector3( 0.25, 0.25, 0.25 ) uv1_triplanar = true -[sub_resource type="BoxShape" id=7] +[sub_resource type="BoxShape" id=3] extents = Vector3( 20, 1, 20 ) -[sub_resource type="CubeMesh" id=8] +[sub_resource type="CubeMesh" id=4] size = Vector3( 4, 4, 4 ) -[sub_resource type="SpatialMaterial" id=9] +[sub_resource type="SpatialMaterial" id=5] albedo_color = Color( 0.148438, 1, 0, 1 ) albedo_texture = ExtResource( 1 ) uv1_triplanar = true -[sub_resource type="BoxShape" id=10] +[sub_resource type="BoxShape" id=6] extents = Vector3( 2, 2, 2 ) -[sub_resource type="SpatialMaterial" id=11] +[sub_resource type="SpatialMaterial" id=7] albedo_color = Color( 0, 0.882813, 1, 1 ) albedo_texture = ExtResource( 1 ) uv1_triplanar = true -[sub_resource type="ProceduralSky" id=3] +[sub_resource type="ProceduralSky" id=8] sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 ) sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 ) sky_curve = 0.25 @@ -50,9 +50,9 @@ ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 ) ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 ) ground_curve = 0.01 -[sub_resource type="Environment" id=4] +[sub_resource type="Environment" id=9] background_mode = 2 -background_sky = SubResource( 3 ) +background_sky = SubResource( 8 ) ambient_light_color = Color( 1, 0.909804, 0.784314, 1 ) ambient_light_energy = 1.4 ambient_light_sky_contribution = 0.72 @@ -65,17 +65,17 @@ glow_intensity = 0.2 glow_bloom = 0.03 glow_blend_mode = 0 -[sub_resource type="CapsuleShape" id=12] +[sub_resource type="CapsuleShape" id=10] radius = 4.0 height = 6.0 -[sub_resource type="Curve3D" id=13] +[sub_resource type="Curve3D" id=11] _data = { "points": PoolVector3Array( 0, 0, 0, 0, 0, 0, -2.43129, -0.955339, 0, 0, 0, 0, 0, 0, 0, -0.670561, 0.183959, 0, 0, 0, 0, 0, 0, 0, 0.64629, 0.228347, 0, 0, 0, 0, 0, 0, 0, 2.31825, -0.925747, 0 ), "tilts": PoolRealArray( 0, 0, 0, 0 ) } -[sub_resource type="Animation" id=14] +[sub_resource type="Animation" id=12] tracks/0/type = "value" tracks/0/path = NodePath("Lean_Path/PathFollow/IK_LookAt_Chest/Aim_pos:translation") tracks/0/interp = 1 @@ -113,7 +113,7 @@ tracks/2/keys = { "values": [ 80.0, 60.0 ] } -[sub_resource type="Animation" id=15] +[sub_resource type="Animation" id=13] tracks/0/type = "value" tracks/0/path = NodePath("Lean_Path/PathFollow/IK_LookAt_Chest/Camera:fov") tracks/0/interp = 1 @@ -151,7 +151,7 @@ tracks/2/keys = { "values": [ Vector3( 0, 0, 0 ), Vector3( 0, -2, 0 ) ] } -[sub_resource type="Animation" id=16] +[sub_resource type="Animation" id=14] tracks/0/type = "value" tracks/0/path = NodePath("Lean_Path/PathFollow/IK_LookAt_Chest/Aim_pos:translation") tracks/0/interp = 1 @@ -195,206 +195,206 @@ tracks/2/keys = { [node name="Floor_plane" type="MeshInstance" parent="Level"] transform = Transform( 2, 0, 0, 0, 2, 0, 0, 0, 2, 0, 0, 0 ) -mesh = SubResource( 5 ) -material/0 = SubResource( 6 ) +mesh = SubResource( 1 ) +material/0 = SubResource( 2 ) [node name="StaticBody" type="StaticBody" parent="Level/Floor_plane"] [node name="CollisionShape" type="CollisionShape" parent="Level/Floor_plane/StaticBody"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, -0.956119, 0 ) -shape = SubResource( 7 ) +shape = SubResource( 3 ) [node name="Walls" type="Spatial" parent="Level"] [node name="LargeWall" type="MeshInstance" parent="Level/Walls"] transform = Transform( 1, 0, 0, 0, 10, 0, 0, 0, 10, -39.9997, 20.0003, 20.0002 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 9 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 5 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/LargeWall"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/LargeWall/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="LargeWall2" type="MeshInstance" parent="Level/Walls"] transform = Transform( 1, 0, 0, 0, 10, 0, 0, 0, 10, -39.9997, 20.0003, -19.9998 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 9 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 5 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/LargeWall2"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/LargeWall2/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="LargeWall3" type="MeshInstance" parent="Level/Walls"] transform = Transform( -4.37114e-08, 0, -10, 0, 10, 0, 1, 0, -4.37114e-07, -18.9997, 20.0003, -40.9998 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 9 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 5 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/LargeWall3"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/LargeWall3/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="LargeWall4" type="MeshInstance" parent="Level/Walls"] transform = Transform( -4.37114e-08, 0, -10, 0, 10, 0, 1, 0, -4.37114e-07, 21.0003, 20.0003, -40.9998 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 9 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 5 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/LargeWall4"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/LargeWall4/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="LargeWall5" type="MeshInstance" parent="Level/Walls"] transform = Transform( -1, 0, 8.74228e-07, 0, 10, 0, -8.74228e-08, 0, -10, 41.0003, 20.0003, -19.9998 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 9 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 5 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/LargeWall5"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/LargeWall5/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="LargeWall6" type="MeshInstance" parent="Level/Walls"] transform = Transform( -1, 0, 8.74228e-07, 0, 10, 0, -8.74228e-08, 0, -10, 41.0003, 20.0003, 20.0002 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 9 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 5 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/LargeWall6"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/LargeWall6/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="LargeWall7" type="MeshInstance" parent="Level/Walls"] transform = Transform( 1.31134e-07, 0, 10, 0, 10, 0, -1, 0, 1.31134e-06, 21.0003, 20.0003, 40.0002 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 9 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 5 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/LargeWall7"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/LargeWall7/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="LargeWall8" type="MeshInstance" parent="Level/Walls"] transform = Transform( 1.31134e-07, 0, 10, 0, 10, 0, -1, 0, 1.31134e-06, -18.9997, 20.0003, 40.0002 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 9 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 5 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/LargeWall8"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/LargeWall8/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="Wall" type="MeshInstance" parent="Level/Walls"] transform = Transform( 7.54979e-08, 0, 4, 0, 4, 0, -1, 0, 3.01992e-07, -9.9997, 8.00032, 22.0005 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 11 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 7 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/Wall"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/Wall/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="Wall2" type="MeshInstance" parent="Level/Walls"] transform = Transform( 1, 0, -4.76837e-07, 0, 4, 0, 1.19209e-07, 0, 4, -19.9997, 8.00032, 16.0005 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 11 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 7 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/Wall2"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/Wall2/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="Wall3" type="MeshInstance" parent="Level/Walls"] transform = Transform( 1, 0, -3.57627e-07, 0, 4, 0, 1.19209e-07, 0, 3, -19.9997, 8.00032, 2.00049 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 11 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 7 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/Wall3"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/Wall3/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="Wall4" type="MeshInstance" parent="Level/Walls"] transform = Transform( 1, 0, -4.76837e-07, 0, 4, 0, 1.19209e-07, 0, 4, -19.9997, 8.00032, -21.9995 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 11 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 7 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/Wall4"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/Wall4/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="Wall5" type="MeshInstance" parent="Level/Walls"] transform = Transform( -1.62921e-07, 0, -4, 0, 4, 0, 1, 0, -6.51683e-07, -9.9997, 8.00032, -27.9995 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 11 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 7 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/Wall5"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/Wall5/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="Wall6" type="MeshInstance" parent="Level/Walls"] transform = Transform( -1, 0, 8.26528e-07, 0, 4, 0, -2.06632e-07, 0, -4, 0.000319004, 8.00032, -21.9995 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 11 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 7 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/Wall6"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/Wall6/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="Wall7" type="MeshInstance" parent="Level/Walls"] transform = Transform( -1.62921e-07, 0, -4, 0, 4, 0, 1, 0, -6.51683e-07, 10.0003, 8.00032, -15.9995 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 11 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 7 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/Wall7"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/Wall7/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="Wall9" type="MeshInstance" parent="Level/Walls"] transform = Transform( 1, 0, -4.76837e-07, 0, 4, 0, 1.19209e-07, 0, 4, 25.0003, 8.00032, -25.9995 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 11 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 7 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/Wall9"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/Wall9/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="Wall10" type="MeshInstance" parent="Level/Walls"] transform = Transform( 0.573577, 0, 3.27661, 0, 4, 0, -0.819152, 0, 2.29431, 23.0003, 8.00032, 3.00049 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 11 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 7 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/Wall10"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/Wall10/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="Wall11" type="MeshInstance" parent="Level/Walls"] transform = Transform( -0.819152, 0, 2.29431, 0, 4, 0, -0.573577, 0, -3.27661, 22.2126, 8.00032, 14.7123 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 11 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 7 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/Wall11"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/Wall11/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="Wall12" type="MeshInstance" parent="Level/Walls"] transform = Transform( -0.627507, 2.10616, 2.29431, 0.642788, 3.06418, 0, -0.439385, 1.47475, -3.27661, 14.8402, 8.00032, 9.55015 ) -mesh = SubResource( 8 ) -material/0 = SubResource( 11 ) +mesh = SubResource( 4 ) +material/0 = SubResource( 7 ) [node name="StaticBody" type="StaticBody" parent="Level/Walls/Wall12"] [node name="CollisionShape" type="CollisionShape" parent="Level/Walls/Wall12/StaticBody"] -shape = SubResource( 10 ) +shape = SubResource( 6 ) [node name="DirectionalLight" type="DirectionalLight" parent="."] transform = Transform( 0.388878, -0.754027, 0.529355, 0, 0.574581, 0.818448, -0.921289, -0.318277, 0.223442, -9.77531, 11.5204, 11.766 ) @@ -402,50 +402,66 @@ light_color = Color( 1, 0.925598, 0.820313, 1 ) shadow_enabled = true [node name="WorldEnvironment" type="WorldEnvironment" parent="."] -environment = SubResource( 4 ) +environment = SubResource( 9 ) [node name="Control" type="Control" parent="."] -margin_right = 40.0 -margin_bottom = 40.0 +anchor_right = 1.0 +anchor_bottom = 1.0 [node name="Panel" type="Panel" parent="Control"] modulate = Color( 1, 1, 1, 0.784314 ) +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 margin_left = -2.0 -margin_top = 530.0 -margin_right = 1028.0 -margin_bottom = 600.0 +margin_top = -70.0 +margin_right = 4.0 [node name="Label" type="Label" parent="Control/Panel"] +anchor_right = 1.0 +anchor_bottom = 1.0 margin_left = 12.0 margin_top = 10.0 -margin_right = 1012.0 -margin_bottom = 41.0 -text = "Example use case: Dynamic FPS Animations +margin_right = -18.0 +margin_bottom = -29.0 +text = "F.A.B.R.I.K IK Example use case: Dynamic FPS Animations Controls: WASD/Arrows to move, left click to fire, right click to look down sights, Q/E to lean left/right Escape to free/lock mouse cursor" align = 1 valign = 1 [node name="Button_Prev" type="Button" parent="Control"] +anchor_top = 1.0 +anchor_bottom = 1.0 margin_left = 10.0 -margin_top = 540.0 +margin_top = -60.0 margin_right = 129.0 -margin_bottom = 590.0 +margin_bottom = -10.0 text = "Previous scene" script = ExtResource( 2 ) scene_to_change_to = "res://fabrik_ik.tscn" [node name="Crosshair" type="Control" parent="Control"] modulate = Color( 1, 1, 1, 0.784314 ) -margin_left = 492.0 -margin_top = 280.0 -margin_right = 532.0 -margin_bottom = 320.0 +anchor_left = 0.5 +anchor_top = 0.5 +anchor_right = 0.5 +anchor_bottom = 0.5 +margin_left = -20.0 +margin_top = -20.0 +margin_right = 20.0 +margin_bottom = 20.0 +__meta__ = { +"_edit_use_anchors_": false +} [node name="ColorRect" type="ColorRect" parent="Control/Crosshair"] margin_left = 19.0 margin_right = 21.0 margin_bottom = 40.0 +__meta__ = { +"_edit_use_anchors_": false +} [node name="ColorRect2" type="ColorRect" parent="Control/Crosshair"] margin_left = 40.0 @@ -459,13 +475,13 @@ script = ExtResource( 3 ) [node name="CollisionShape" type="CollisionShape" parent="KinematicBody"] transform = Transform( 1, 0, 0, 0, -4.37114e-08, -1, 0, 1, -4.37114e-08, 0, 7, 0 ) -shape = SubResource( 12 ) +shape = SubResource( 10 ) [node name="CameraHolder" type="Spatial" parent="KinematicBody"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 13, 0 ) [node name="Lean_Path" type="Path" parent="KinematicBody/CameraHolder"] -curve = SubResource( 13 ) +curve = SubResource( 11 ) [node name="PathFollow" type="PathFollow" parent="KinematicBody/CameraHolder/Lean_Path"] transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, -0.0412404, 0.205172, 0 ) @@ -499,7 +515,6 @@ __meta__ = { skeleton_path = NodePath("../../../../../../BattleBot/Armature/Skeleton") bones_in_chain = PoolStringArray( "Left_UpperArm", "Left_LowerArm", "Left_Hand" ) bones_in_chain_lengths = PoolRealArray( 1.97, 3, 0.1 ) -chain_iterations = 5 limit_chain_iterations = false use_middle_joint_target = true @@ -537,7 +552,6 @@ __meta__ = { skeleton_path = NodePath("../../../../../../BattleBot/Armature/Skeleton") bones_in_chain = PoolStringArray( "Right_UpperArm", "Right_LowerArm", "Right_Hand" ) bones_in_chain_lengths = PoolRealArray( 1.97, 3, 0.1 ) -chain_iterations = 3 limit_chain_iterations = false use_middle_joint_target = true @@ -581,9 +595,9 @@ bone_name = "Head" [node name="AnimationPlayer" type="AnimationPlayer" parent="KinematicBody/CameraHolder"] autoplay = "Start" playback_speed = 4.0 -anims/Aiming = SubResource( 14 ) -anims/Idle = SubResource( 15 ) -anims/Start = SubResource( 16 ) +anims/Aiming = SubResource( 12 ) +anims/Idle = SubResource( 13 ) +anims/Start = SubResource( 14 ) [node name="Weapon" type="Spatial" parent="KinematicBody/CameraHolder"] diff --git a/3d/ik/look_at_ik.tscn b/3d/ik/look_at_ik.tscn index 765d7373..329b8229 100644 --- a/3d/ik/look_at_ik.tscn +++ b/3d/ik/look_at_ik.tscn @@ -95,31 +95,42 @@ bone_name = "Right_UpperArm" additional_rotation = Vector3( 0, 0, 180 ) [node name="Control" type="Control" parent="."] -margin_right = 40.0 -margin_bottom = 40.0 +anchor_right = 1.0 +anchor_bottom = 1.0 [node name="Panel" type="Panel" parent="Control"] modulate = Color( 1, 1, 1, 0.784314 ) +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 margin_left = -2.0 -margin_top = 530.0 -margin_right = 1028.0 -margin_bottom = 600.0 +margin_top = -70.0 +margin_right = 4.0 +__meta__ = { +"_edit_use_anchors_": false +} [node name="Label" type="Label" parent="Control/Panel"] +anchor_right = 1.0 +anchor_bottom = 1.0 margin_left = 12.0 margin_top = 10.0 -margin_right = 1012.0 -margin_bottom = 41.0 +margin_right = -18.0 +margin_bottom = -29.0 text = "LookAt IK Move mouse to move IK targets" align = 1 valign = 1 [node name="Button_Next" type="Button" parent="Control"] -margin_left = 900.0 -margin_top = 540.0 -margin_right = 1019.0 -margin_bottom = 590.0 +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -124.0 +margin_top = -60.0 +margin_right = -5.0 +margin_bottom = -10.0 text = "Next scene" script = ExtResource( 8 ) scene_to_change_to = "res://fabrik_ik.tscn" diff --git a/3d/ik/project.godot b/3d/ik/project.godot index 176cf6fb..abcf5706 100644 --- a/3d/ik/project.godot +++ b/3d/ik/project.godot @@ -19,11 +19,6 @@ config/name="3D IK" run/main_scene="res://look_at_ik.tscn" config/icon="res://icon.png" -[display] - -window/stretch/mode="2d" -window/stretch/aspect="keep" - [editor_plugins] enabled=PoolStringArray( "sade" ) diff --git a/3d/ik/skeleton_ik.tscn b/3d/ik/skeleton_ik.tscn new file mode 100644 index 00000000..00f77cf4 --- /dev/null +++ b/3d/ik/skeleton_ik.tscn @@ -0,0 +1,168 @@ +[gd_scene load_steps=16 format=2] + +[ext_resource path="res://skeleton_ik_runner.gd" type="Script" id=1] +[ext_resource path="res://addons/sade/ik_look_at.png" type="Texture" id=2] +[ext_resource path="res://addons/sade/editor_gizmo_texture.png" type="Texture" id=3] +[ext_resource path="res://godot_battle_bot.dae" type="PackedScene" id=4] +[ext_resource path="res://target_from_mousepos.gd" type="Script" id=5] +[ext_resource path="res://battle_bot_color.tres" type="Material" id=6] +[ext_resource path="res://battle_bot_emission.tres" type="Material" id=7] +[ext_resource path="res://button_change_scene.gd" type="Script" id=8] +[ext_resource path="res://addons/sade/ik_look_at.gd" type="Script" id=9] + +[sub_resource type="PlaneMesh" id=1] +size = Vector2( 40, 40 ) + +[sub_resource type="SpatialMaterial" id=2] +albedo_texture = ExtResource( 3 ) +roughness = 0.2 +uv1_scale = Vector3( 0.25, 0.25, 0.25 ) +uv1_triplanar = true + +[sub_resource type="ProceduralSky" id=3] +sky_top_color = Color( 0.0470588, 0.454902, 0.976471, 1 ) +sky_horizon_color = Color( 0.556863, 0.823529, 0.909804, 1 ) +sky_curve = 0.25 +ground_bottom_color = Color( 0.101961, 0.145098, 0.188235, 1 ) +ground_horizon_color = Color( 0.482353, 0.788235, 0.952941, 1 ) +ground_curve = 0.01 + +[sub_resource type="Environment" id=4] +background_mode = 2 +background_sky = SubResource( 3 ) +ambient_light_color = Color( 1, 0.909804, 0.784314, 1 ) +ambient_light_energy = 1.4 +ambient_light_sky_contribution = 0.72 +tonemap_mode = 3 +glow_enabled = true +glow_levels/1 = true +glow_levels/2 = true +glow_levels/5 = false +glow_intensity = 0.2 +glow_bloom = 0.03 +glow_blend_mode = 0 + +[sub_resource type="CubeMesh" id=5] +size = Vector3( 1, 1, 1 ) + +[sub_resource type="SpatialMaterial" id=6] +albedo_color = Color( 0, 0.191406, 0.765625, 1 ) +roughness = 0.0 + +[node name="Skeleton_IK" type="Spatial"] + +[node name="Floor_plane" type="MeshInstance" parent="."] +mesh = SubResource( 1 ) +material/0 = SubResource( 2 ) + +[node name="DirectionalLight" type="DirectionalLight" parent="."] +transform = Transform( 0.56827, 0.673454, -0.472789, 0, 0.574581, 0.818448, 0.822842, -0.465099, 0.326517, -9.77531, 11.5204, 11.766 ) + +[node name="WorldEnvironment" type="WorldEnvironment" parent="."] +environment = SubResource( 4 ) + +[node name="BattleBot" parent="." instance=ExtResource( 4 )] + +[node name="godot_battle_bot" parent="BattleBot/Armature/Skeleton" index="0"] +material/0 = ExtResource( 6 ) +material/1 = ExtResource( 7 ) + +[node name="SkeletonIK_Left" type="SkeletonIK" parent="BattleBot/Armature/Skeleton" index="1"] +process_priority = 1 +root_bone = "Left_UpperArm" +tip_bone = "Left_Hand" +target_node = NodePath("../../../../Camera/targets/Target_Left") +script = ExtResource( 1 ) + +[node name="SkeletonIK_Right" type="SkeletonIK" parent="BattleBot/Armature/Skeleton" index="2"] +process_priority = 1 +root_bone = "Right_UpperArm" +tip_bone = "Right_Hand" +target_node = NodePath("../../../../Camera/targets/Target_Right") +script = ExtResource( 1 ) + +[node name="Camera" type="Camera" parent="."] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 11.5, 11 ) +fov = 74.0 +script = ExtResource( 5 ) +MOVEMENT_SPEED = -8.0 +flip_axis = true + +[node name="targets" type="Spatial" parent="Camera"] +transform = Transform( 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, -8 ) + +[node name="IK_LookAt_Head" type="Spatial" parent="Camera/targets"] +script = ExtResource( 9 ) +__meta__ = { +"_editor_icon": ExtResource( 2 ) +} +skeleton_path = NodePath("../../../../Skeleton_IK/BattleBot/Armature/Skeleton") +bone_name = "Head" +additional_rotation = Vector3( 90, 0, 0 ) + +[node name="MeshInstance" type="MeshInstance" parent="Camera/targets"] +mesh = SubResource( 5 ) +material/0 = SubResource( 6 ) + +[node name="Target_Left" type="Position3D" parent="Camera/targets"] +transform = Transform( -0.179447, 0.98366, -0.0145678, 0.981822, 0.178142, -0.0654973, -0.0618319, -0.0260563, -0.997746, 0.653517, -0.112305, -0.760886 ) + +[node name="Target_Right" type="Position3D" parent="Camera/targets"] +transform = Transform( -0.0217688, 0.998559, -0.0490576, 0.992503, 0.0274873, 0.119085, 0.120262, -0.0460975, -0.991671, -0.683053, 0.0251284, -0.811513 ) + +[node name="Control" type="Control" parent="."] +anchor_right = 1.0 +anchor_bottom = 1.0 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Panel" type="Panel" parent="Control"] +modulate = Color( 1, 1, 1, 0.784314 ) +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -2.0 +margin_top = -70.0 +margin_right = 4.0 + +[node name="Label" type="Label" parent="Control/Panel"] +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = 12.0 +margin_top = 10.0 +margin_right = -18.0 +margin_bottom = -29.0 +text = "SkeletonIK node +Move mouse to move IK targets" +align = 1 +valign = 1 +__meta__ = { +"_edit_use_anchors_": false +} + +[node name="Button_Next" type="Button" parent="Control"] +anchor_left = 1.0 +anchor_top = 1.0 +anchor_right = 1.0 +anchor_bottom = 1.0 +margin_left = -124.0 +margin_top = -60.0 +margin_right = -5.0 +margin_bottom = -10.0 +text = "Next scene" +script = ExtResource( 8 ) +scene_to_change_to = "res://fps/fps_example.tscn" + +[node name="Button_Prev" type="Button" parent="Control"] +anchor_top = 1.0 +anchor_bottom = 1.0 +margin_left = 10.0 +margin_top = -60.0 +margin_right = 129.0 +margin_bottom = -10.0 +text = "Previous scene" +script = ExtResource( 8 ) +scene_to_change_to = "res://fabrik_ik.tscn" + +[editable path="BattleBot"] diff --git a/3d/ik/skeleton_ik_runner.gd b/3d/ik/skeleton_ik_runner.gd new file mode 100644 index 00000000..de6e43fc --- /dev/null +++ b/3d/ik/skeleton_ik_runner.gd @@ -0,0 +1,4 @@ +extends SkeletonIK + +func _ready(): + start(false)