{"id":1260,"date":"2025-12-21T21:33:08","date_gmt":"2025-12-22T02:33:08","guid":{"rendered":"https:\/\/willkolb.com\/?p=1260"},"modified":"2025-12-21T21:33:08","modified_gmt":"2025-12-22T02:33:08","slug":"raise-your-hand-if-youre-getting-shot","status":"publish","type":"post","link":"https:\/\/willkolb.com\/?p=1260","title":{"rendered":"&#8220;Raise your hand if you&#8217;re getting shot&#8221;"},"content":{"rendered":"\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/willkolb.com\/wp-content\/uploads\/2025\/12\/2025-12-21_20-34-59.mp4\"><\/video><\/figure>\n\n\n\n<p>Unreal engine has its quirks. A big one I found is the idea of &#8220;additive&#8221; animations (see <a href=\"https:\/\/dev.epicgames.com\/documentation\/en-us\/unreal-engine\/animation-blueprint-blend-nodes-in-unreal-engine\">this<\/a>). Which essentially take the animation you made and subtracts it from a reference pose or animation. This is how you can easily blend ontop of an animation instead of getting some weird median between two existing animations. I use this technique all the time, in the weapons I use it to add a fire animation ontop of the idle animation so you dont get weird glitching from recoil back to a relaxed state. In the bots I use it for everything that pretty much isn&#8217;t a &#8220;movement&#8221; state. Such as pitch tiling and hit reactions. In this case the hit reactions seem to be blending poorly with the rest of the animations. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"993\" height=\"764\" src=\"https:\/\/willkolb.com\/wp-content\/uploads\/2025\/12\/image-10.png\" alt=\"\" class=\"wp-image-1262\" srcset=\"https:\/\/willkolb.com\/wp-content\/uploads\/2025\/12\/image-10.png 993w, https:\/\/willkolb.com\/wp-content\/uploads\/2025\/12\/image-10-300x231.png 300w, https:\/\/willkolb.com\/wp-content\/uploads\/2025\/12\/image-10-768x591.png 768w\" sizes=\"auto, (max-width: 993px) 100vw, 993px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"786\" height=\"414\" src=\"https:\/\/willkolb.com\/wp-content\/uploads\/2025\/12\/image-11.png\" alt=\"\" class=\"wp-image-1263\" srcset=\"https:\/\/willkolb.com\/wp-content\/uploads\/2025\/12\/image-11.png 786w, https:\/\/willkolb.com\/wp-content\/uploads\/2025\/12\/image-11-300x158.png 300w, https:\/\/willkolb.com\/wp-content\/uploads\/2025\/12\/image-11-768x405.png 768w\" sizes=\"auto, (max-width: 786px) 100vw, 786px\" \/><\/figure>\n\n\n\n<p>I also added in bullet tracers which add a much needed element of feedback to shooting so you don&#8217;t feel like the gun is disconnected from the rest of the world. The problem here was that I was mixing a bunch of domains at the same time. When adding an animation there&#8217;s local space, and mesh space, and if you throw some IK stuff into the mix you hit issues where a vector of length 3 units in one space does not equal the same number of units in another space. In this case I was adding a bunch of animations in local space ontop of my IK rig which was manipulating everything in mesh space. This was harder to catch because I naturally assumed that each operation was isolated (akin to keeping each part of a math problem in parenthesis) however it seems like when ever I start playing with bones the manipulation strategy seems to stick onto the bones. So if I messed with something in local space, the next addition is assumed to be local space, so by switching everything to mesh space its working fine:<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/willkolb.com\/wp-content\/uploads\/2025\/12\/2025-12-21_20-53-53.mp4\"><\/video><\/figure>\n\n\n\n<p>In other news I somehow made the mags that the bots spawn on reload really big, which I think is probably a similar domain transfer issue.<\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/willkolb.com\/wp-content\/uploads\/2025\/12\/2025-12-21_21-00-13.mp4\"><\/video><\/figure>\n\n\n\n<p>Finally after all that talk about control rigs and modular rigs I&#8217;m hitting issues animating the mantis bot. <\/p>\n\n\n\n<figure class=\"wp-block-video\"><video height=\"1080\" style=\"aspect-ratio: 1920 \/ 1080;\" width=\"1920\" controls src=\"https:\/\/willkolb.com\/wp-content\/uploads\/2025\/12\/2025-12-21_21-28-53.mp4\"><\/video><\/figure>\n\n\n\n<p>There are things called &#8220;pole&#8221; controls (see <a href=\"https:\/\/help.autodesk.com\/view\/MAYAUL\/2025\/ENU\/?guid=GUID-73C8C5B2-B0F8-4B96-9BB3-8AD257747E3D\" data-type=\"link\" data-id=\"https:\/\/help.autodesk.com\/view\/MAYAUL\/2025\/ENU\/?guid=GUID-73C8C5B2-B0F8-4B96-9BB3-8AD257747E3D\">this<\/a>) which act as a place for elbows to point to (in this case the robotic knees) and for some reason unreal put them VERY far away so they&#8217;re pretty un-weidly to handle. I&#8217;m going to have to remake the control rig for this model in order to animate it properly. However even with that kinda broken, half finished animation I think I&#8217;m on track to hit what I want from the mantis bot.<\/p>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Unreal engine has its quirks. A big one I found is the idea of &#8220;additive&#8221; animations (see this). Which essentially take the animation you made and subtracts it from a reference pose or animation. This is how you can easily blend ontop of an animation instead of getting some weird median between two existing animations. [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1263,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[7,9],"tags":[],"class_list":["post-1260","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-gamedev","category-unreal"],"_links":{"self":[{"href":"https:\/\/willkolb.com\/index.php?rest_route=\/wp\/v2\/posts\/1260","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/willkolb.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/willkolb.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/willkolb.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/willkolb.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1260"}],"version-history":[{"count":1,"href":"https:\/\/willkolb.com\/index.php?rest_route=\/wp\/v2\/posts\/1260\/revisions"}],"predecessor-version":[{"id":1267,"href":"https:\/\/willkolb.com\/index.php?rest_route=\/wp\/v2\/posts\/1260\/revisions\/1267"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/willkolb.com\/index.php?rest_route=\/wp\/v2\/media\/1263"}],"wp:attachment":[{"href":"https:\/\/willkolb.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1260"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/willkolb.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1260"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/willkolb.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1260"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}