Deploying to published from @ godotengine/godot-website@c553666ba9 🚀

This commit is contained in:
Godot Organization
2025-12-16 11:56:52 +00:00
parent 8fcee96b11
commit fe60f3f5a1
18 changed files with 17 additions and 17 deletions

View File

@@ -1,11 +1,11 @@
<!doctype html><html lang=en><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Godot Engine"><meta name=description content="Now Godot has Inverse Kinematics in 3D."><script defer data-domain=godotengine.org src=https://plausible.godot.foundation/js/script.file-downloads.outbound-links.js></script><meta property="og:site_name" content="Godot Engine"><meta property="og:url" content="https://godotengine.org/article/inverse-kinematics-returns-to-godot-4-6/"><meta property="og:type" content="website"><meta property="og:description" content="Now Godot has Inverse Kinematics in 3D."><meta property="og:image" content="https://godotengine.org/storage/blog/covers/inverse-kinematics-returns-to-godot-4-6.webp"><meta name=twitter:card content="summary_large_image"><meta property="twitter:domain" content="godotengine.org"><meta property="twitter:url" content="https://godotengine.org/article/inverse-kinematics-returns-to-godot-4-6/"><meta property="og:title" content="Inverse Kinematics Returns to Godot 4.6 Godot Engine"><title>Inverse Kinematics Returns to Godot 4.6 Godot Engine</title>
<!doctype html><html lang=en><meta charset=utf-8><meta name=viewport content="width=device-width,initial-scale=1"><meta name=author content="Godot Engine"><meta name=description content="Now Godot has Inverse Kinematics in 3D."><script defer data-domain=godotengine.org src=https://plausible.godot.foundation/js/script.file-downloads.outbound-links.js></script><meta property="og:site_name" content="Godot Engine"><meta property="og:url" content="https://godotengine.org/article/inverse-kinematics-returns-to-godot-4-6/"><meta property="og:type" content="website"><meta property="og:description" content="Now Godot has Inverse Kinematics in 3D."><meta property="og:image" content="https://godotengine.org/storage/blog/covers/inverse-kinematics-returns-to-godot-4-6.jpg"><meta name=twitter:card content="summary_large_image"><meta property="twitter:domain" content="godotengine.org"><meta property="twitter:url" content="https://godotengine.org/article/inverse-kinematics-returns-to-godot-4-6/"><meta property="og:title" content="Inverse Kinematics Returns to Godot 4.6 Godot Engine"><title>Inverse Kinematics Returns to Godot 4.6 Godot Engine</title>
<link rel=alternate type=application/rss+xml title="Godot News" href=/rss.xml><link rel=alternate type=application/json title="Godot News" href=/rss.json><link rel=alternate type=application/atom+xml title="Godot News" href=/atom.xml><link rel=icon href=/assets/favicon.png sizes=any><link rel=icon href=/assets/favicon.svg type=image/svg+xml><link rel=stylesheet href=/assets/css/main.css?121><link rel=stylesheet href=/assets/css/header.css?6><link rel=stylesheet href=/assets/css/tobii.min.css><link rel=preload as=font href=/assets/fonts/Montserrat-Italic-VariableFont_wght.woff2 crossorigin><link rel=preload as=font href=/assets/fonts/Montserrat-VariableFont_wght.woff2 crossorigin><link rel=me href=https://mastodon.gamedev.place/@godotengine><style>.donation-header{background-color:#ffa700;color:#000;padding:15px;text-align:center;padding:40px 15px;font-size:1.5em;display:none}.donation-header.visible{display:block}.donation-header h2{color:#000;margin-bottom:0;font-size:1.5em}.donation-header p{margin-top:0}.donation-header img{position:absolute;right:10px;top:10px;filter:invert(1);cursor:pointer}.donation-header .btn{background:#000;color:#fff}@media(max-width:600px){.donation-header{font-size:1.2em}}</style><div class=donation-header id=donation-header><img src=/assets/icons/cross.svg width=24 height=24 alt=Close title=Close id=donation-header-close onclick=dismissHeader()><h2>Donate to Godot!</h2><p>This has been a great year for the engine, but there are still a lot of things we would love to do.<br>If everyone visiting the site would donate €5, we could hire 5 more developers to work on Godot full-time.<br></p><a class=btn href="https://fund.godotengine.org/?ref=december-2025" onclick=dismissHeader(!0)>Donate Now</a></div><script>function dismissHeader(e=!1){var t=new Date;e?t.setTime(t.getTime()+30*24*60*60*1e3):(t.setTime(t.getTime()+48*60*60*1e3),document.getElementById("donation-header").classList.remove("visible")),document.cookie="donationHeaderClosed=1;expires="+t.toUTCString()+";path=/"}document.addEventListener("DOMContentLoaded",function(){var e=document.getElementById("donation-header");document.cookie.includes("donationHeaderClosed=1")||e.classList.add("visible")})</script><input type=checkbox id=nav_toggle_cb><header class="flex column"><div class="container flex align-center"><div id=nav_head><a href=/ id=logo-link><img class=nav-logo src=/assets/logo.svg width=136 height=48 alt="Godot Engine">
<img class="nav-logo dark-logo" src=/assets/logo_dark.svg width=136 height=48 alt="Godot Engine"></a><div class=mobile-links><span class="fund mobile"><a href=https://fund.godotengine.org><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:13px;fill:#fff;margin-right:4px"><path d="M47.6 300.4 228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6.0 115.2.0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"/></svg> Donate</a></span>
<label for=nav_toggle_cb id=nav_toggle_btn><img src=/assets/icons/hamburger.svg width=24 height=24 alt="Main menu"></label></div></div><nav id=nav><ul class=left><li><a href=/features/ data-dropdown=features-dropdown>Features</a><li class=mobile-only><a href=/consoles/>Console support</a><li class=mobile-only><a href=/priorities/>Priorities</a><li><a href=/showcase/>Showcase</a><li><a href=/blog/>Blog</a><li><a href=/community/ data-dropdown=community-dropdown>Community</a><li><a href=https://godotengine.org/asset-library/asset>Assets</a></ul><ul class=right><li><a href=/download/windows/ class=set-os-download-url>Download</a><li><a href=https://docs.godotengine.org>Docs</a><li><a href=https://contributing.godotengine.org/en/latest/organization/how_to_contribute.html>Contribute</a><li class="fund desktop"><a href=https://fund.godotengine.org><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512" style="width:13px;fill:#fff;margin-right:4px;top:1px;position:relative"><path d="M47.6 300.4 228.3 469.1c7.5 7 17.4 10.9 27.7 10.9s20.2-3.9 27.7-10.9L464.4 300.4c30.4-28.3 47.6-68 47.6-109.5v-5.8c0-69.9-50.5-129.5-119.4-141C347 36.5 300.6 51.4 268 84L256 96 244 84c-32.6-32.6-79-47.5-124.6-39.9C50.5 55.6.0 115.2.0 185.1v5.8c0 41.5 17.2 81.2 47.6 109.5z"/></svg> Donate</a></ul></nav></div></header><div class=nav-dropdown-menu id=features-dropdown><a href=/features/ class=touch-only>Features</a>
<a href=/consoles/>Console support</a>
<a href=/priorities/>Priorities</a></div><div class=nav-dropdown-menu id=community-dropdown><a href=/community/ class=touch-only>Community</a>
<a href=https://forum.godotengine.org>Forum</a>
<a href=/events/>Events</a></div><script>document.addEventListener("DOMContentLoaded",function(){const e=document.querySelectorAll("[data-dropdown]");e.forEach(e=>{const n=e.getAttribute("data-dropdown"),t=document.getElementById(n);if(t){let n=-1;const i=()=>{if(n===-1)return;clearTimeout(n),n=-1},a=()=>t.style.display==="block",r=()=>{if(a())return;if(window.innerWidth<1200)return;i();const n=e.getBoundingClientRect();t.style.top=n.bottom+"px",t.style.left=n.left+"px",t.style.display="block",e.classList.add("dropdown-open")},s=({instant:s=!1}={})=>{if(!a())return;const o=()=>{i(),t.style.display="none",e.classList.remove("dropdown-open")};if(s){o();return}n=setTimeout(o,100)},l=e=>{if(window.innerWidth<1200)return;e.preventDefault(),a()?s({instant:!0}):r()},c=e=>t=>{t.pointerType==="touch"&&e(t)},o=e=>t=>{t.pointerType!=="touch"&&e(t)};e.addEventListener("pointerup",c(e=>l(e))),document.documentElement.addEventListener("pointerup",c(n=>{!e.contains(n.target)&&!t.contains(n.target)&&s({instant:!0})})),e.addEventListener("pointerenter",o(e=>r())),e.addEventListener("pointerleave",o(e=>s())),t.addEventListener("pointerenter",o(e=>i())),t.addEventListener("pointerleave",o(e=>s()))}})})</script><main><style>body{background-color:var(--background-color)}h1{margin-bottom:8px;margin-top:32px}:not(pre)>code{background:var(--code-background-color);padding:1px 4px;font-size:.95em;border-radius:3px}pre{background:var(--codeblock-background-color);color:var(--codeblock-color)}pre code{display:block;overflow-x:auto;padding:.5em}.date-big{line-height:2;margin-left:32px}article{background-color:var(--base-color);box-shadow:0 3px 2px rgba(0,0,0,.15)}figure{margin:0}figure img{margin:0}article img,article video{max-width:100%;height:auto;display:block;margin:auto;margin-top:16px;margin-bottom:16px}article h1{margin-top:64px}article h2,article h3,article h4{margin-top:42px}.article-info{display:flex;flex-direction:column;gap:8px}.article-metadata{display:flex;gap:24px;align-items:center;font-family:var(--header-font-family);margin-bottom:12px}@media(max-width:900px){.article-metadata{flex-direction:column;align-items:flex-start;gap:16px}}.article-author{color:var(--base-color-text-subtitle-date);font-weight:700;font-size:18px;flex-grow:1;display:flex;gap:12px;align-items:center}.article-author .avatar{border-radius:100%;margin:0;background:0 0}.article-author .by{color:var(--base-color-text-subtitle)}.article-metadata .date{color:var(--base-color-text-subtitle-date)}.article-metadata .date.post-recent-highlight{color:var(--post-recent-highlight-color);opacity:.8}.article-metadata .date.post-recent-highlight::after{font-size:80%;content:"NEW";border:2px solid var(--post-recent-highlight-color);padding:2px 3px;margin-left:8px}.tag.active{filter:saturate(.75)}@media screen and (min-width:900px){article .content{width:70%;margin:auto}}@media(max-width:900px){body{background-color:var(--base-color)}article{background-color:initial;box-shadow:none}article img:first-child,article video:first-child{max-width:100%}}.blog-navigation{display:grid;grid-template-columns:1fr 1fr;padding-top:30px;padding-bottom:60px}.blog-navigation .next{text-align:right}@media(max-width:900px){.blog-navigation{grid-template-columns:1fr;gap:20px;border-top:1px solid var(--code-background-color)}.blog-navigation .next{text-align:left}}.blog-navigation span{opacity:.6;font-weight:700;margin-bottom:5px;display:block}.blog-navigation a{display:inline-block;text-decoration:none;color:inherit;opacity:.6;transition:opacity .2s}.blog-navigation a:hover{opacity:1}</style><link rel=stylesheet href=/assets/css/highlight.obsidian.min.css><div class=container><article class=padded><div class="content article-container"><figure class=article-cover><img src=/storage/blog/covers/inverse-kinematics-returns-to-godot-4-6.webp title alt=" " class=rounded-lg style=width:100%;height:auto;background-color:initial></figure><div class=article-info><h1>Inverse Kinematics Returns to Godot 4.6</h1><div class=article-metadata><div class=article-author><span>By: </span><img class=avatar width=25 height=25 src=/assets/images/authors/tokage.png alt="Silc Renew" loading=lazy>
<a href=/events/>Events</a></div><script>document.addEventListener("DOMContentLoaded",function(){const e=document.querySelectorAll("[data-dropdown]");e.forEach(e=>{const n=e.getAttribute("data-dropdown"),t=document.getElementById(n);if(t){let n=-1;const i=()=>{if(n===-1)return;clearTimeout(n),n=-1},a=()=>t.style.display==="block",r=()=>{if(a())return;if(window.innerWidth<1200)return;i();const n=e.getBoundingClientRect();t.style.top=n.bottom+"px",t.style.left=n.left+"px",t.style.display="block",e.classList.add("dropdown-open")},s=({instant:s=!1}={})=>{if(!a())return;const o=()=>{i(),t.style.display="none",e.classList.remove("dropdown-open")};if(s){o();return}n=setTimeout(o,100)},l=e=>{if(window.innerWidth<1200)return;e.preventDefault(),a()?s({instant:!0}):r()},c=e=>t=>{t.pointerType==="touch"&&e(t)},o=e=>t=>{t.pointerType!=="touch"&&e(t)};e.addEventListener("pointerup",c(e=>l(e))),document.documentElement.addEventListener("pointerup",c(n=>{!e.contains(n.target)&&!t.contains(n.target)&&s({instant:!0})})),e.addEventListener("pointerenter",o(e=>r())),e.addEventListener("pointerleave",o(e=>s())),t.addEventListener("pointerenter",o(e=>i())),t.addEventListener("pointerleave",o(e=>s()))}})})</script><main><style>body{background-color:var(--background-color)}h1{margin-bottom:8px;margin-top:32px}:not(pre)>code{background:var(--code-background-color);padding:1px 4px;font-size:.95em;border-radius:3px}pre{background:var(--codeblock-background-color);color:var(--codeblock-color)}pre code{display:block;overflow-x:auto;padding:.5em}.date-big{line-height:2;margin-left:32px}article{background-color:var(--base-color);box-shadow:0 3px 2px rgba(0,0,0,.15)}figure{margin:0}figure img{margin:0}article img,article video{max-width:100%;height:auto;display:block;margin:auto;margin-top:16px;margin-bottom:16px}article h1{margin-top:64px}article h2,article h3,article h4{margin-top:42px}.article-info{display:flex;flex-direction:column;gap:8px}.article-metadata{display:flex;gap:24px;align-items:center;font-family:var(--header-font-family);margin-bottom:12px}@media(max-width:900px){.article-metadata{flex-direction:column;align-items:flex-start;gap:16px}}.article-author{color:var(--base-color-text-subtitle-date);font-weight:700;font-size:18px;flex-grow:1;display:flex;gap:12px;align-items:center}.article-author .avatar{border-radius:100%;margin:0;background:0 0}.article-author .by{color:var(--base-color-text-subtitle)}.article-metadata .date{color:var(--base-color-text-subtitle-date)}.article-metadata .date.post-recent-highlight{color:var(--post-recent-highlight-color);opacity:.8}.article-metadata .date.post-recent-highlight::after{font-size:80%;content:"NEW";border:2px solid var(--post-recent-highlight-color);padding:2px 3px;margin-left:8px}.tag.active{filter:saturate(.75)}@media screen and (min-width:900px){article .content{width:70%;margin:auto}}@media(max-width:900px){body{background-color:var(--base-color)}article{background-color:initial;box-shadow:none}article img:first-child,article video:first-child{max-width:100%}}.blog-navigation{display:grid;grid-template-columns:1fr 1fr;padding-top:30px;padding-bottom:60px}.blog-navigation .next{text-align:right}@media(max-width:900px){.blog-navigation{grid-template-columns:1fr;gap:20px;border-top:1px solid var(--code-background-color)}.blog-navigation .next{text-align:left}}.blog-navigation span{opacity:.6;font-weight:700;margin-bottom:5px;display:block}.blog-navigation a{display:inline-block;text-decoration:none;color:inherit;opacity:.6;transition:opacity .2s}.blog-navigation a:hover{opacity:1}</style><link rel=stylesheet href=/assets/css/highlight.obsidian.min.css><div class=container><article class=padded><div class="content article-container"><figure class=article-cover><img src=/storage/blog/covers/inverse-kinematics-returns-to-godot-4-6.jpg title alt=" " class=rounded-lg style=width:100%;height:auto;background-color:initial></figure><div class=article-info><h1>Inverse Kinematics Returns to Godot 4.6</h1><div class=article-metadata><div class=article-author><span>By: </span><img class=avatar width=25 height=25 src=/assets/images/authors/tokage.png alt="Silc Renew" loading=lazy>
<span class=by>Silc Renew</span></div><span class=date data-post-date="2025-12-16 10:00:00 +0000">16 December 2025</span></div><div class=tags><a href=/blog/progress-report><div class="tag active">Progress Report</div></a></div></div><div class=article-body><style>article .content img{background-color:initial}</style><p>In Godot 4.6, IK is back in 3D!<p><img src=/storage/blog/inverse-kinematics-returns-to-godot-4-6/picture01.webp alt="IK on the table"><p>Of course, “IK” means inverse kinematics.<p>If you have experience with Godot 3.x, you might remember that IK was removed during the upgrade to 4.0. I explained in a <a href=/article/design-of-the-skeleton-modifier-3d/>previous blog post</a> that it was removed because the old skeleton API design had issues and needed reworking.<p>Then, you might wonder if it was theoretically possible to implement IK alongside the <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code> implementation in 4.4. However, we had to avoid adding immature features and then hastily removing it again. To implement IK, we staged the elements for the entire IK across three versions.<p>This blog post will explain that journey.<p><img src=/storage/blog/inverse-kinematics-returns-to-godot-4-6/picture02.webp alt="Journey is begun"><h1 id=godot-44>Godot 4.4</h1><p>In Godot 4.4, I implemented the base class for <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code>, along with two new modifiers, <code class="language-plaintext highlighter-rouge">LookAtModifier3D</code> and <code class="language-plaintext highlighter-rouge">RetargetModifier3D</code>.<h2 id=skeletonmodifier3d--lookatmodifier3d>SkeletonModifier3D / LookAtModifier3D</h2><p><code class="language-plaintext highlighter-rouge">LookAtModifier3D</code> was the minimal implementation to verify that the <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code> design was correct. <code class="language-plaintext highlighter-rouge">LookAtModifier3D</code> could be considered equivalent to one-bone IK, so it was suitable as a test case.</p><video autoplay loop muted playsinline>
<source src=/storage/blog/inverse-kinematics-returns-to-godot-4-6/preview-look-at-modifier-3d.webm?1 type=video/webm></video><h2 id=retargetmodifier3d>RetargetModifier3D</h2><p>However, when implementing <code class="language-plaintext highlighter-rouge">LookAtModifier3D</code>, I confirmed that users must specify the bone axis based on the bone rest. It was my initial concern that the retarget feature implemented in 4.0 discarded the bone rests of the imported skeleton.<p>As this concern became a certainty, I attempted to preserve bone rests by implementing <code class="language-plaintext highlighter-rouge">RetargetModifier3D</code>.<p><img src=/storage/blog/inverse-kinematics-returns-to-godot-4-6/inspector-retarget-modifier-3d.webp alt="Inspector of RetargetModifier3D"><p>It was fortunate for me that the processing order design of <code class="language-plaintext highlighter-rouge">SkeletonModifier3D</code> matched the requirements for implementing <code class="language-plaintext highlighter-rouge">RetargetModifier3D</code>.<h1 id=godot-45>Godot 4.5</h1><p>In Godot 4.5, I implemented <code class="language-plaintext highlighter-rouge">SpringBoneSimulator3D</code> and <code class="language-plaintext highlighter-rouge">BoneConstraint3D</code> (and its three child classes <code class="language-plaintext highlighter-rouge">AimModifier3D</code>, <code class="language-plaintext highlighter-rouge">ConvertTransformModifier3D</code> and <code class="language-plaintext highlighter-rouge">CopyTransformModifier3D</code>).<p>By the way, Im involved in a project that utilizes a 3D character model format known as <a href=https://vrm.dev/>VRM</a>. VRM has implementations of <a href=https://vrm.dev/en/vrm1/springbone/>SpringBone</a> and <a href=https://vrm.dev/en/vrm1/constraint/>Constraint</a> as model-specific configurations that can be ported to cross-platform environments, so ensuring compatibility with these was one of the purposes.<h2 id=springbonesimulator3d>SpringBoneSimulator3D</h2><video autoplay loop muted playsinline>
<source src=/storage/blog/inverse-kinematics-returns-to-godot-4-6/preview-spring-bone-simulator-3d.webm?1 type=video/webm></video><p>One challenging part of implementing <code class="language-plaintext highlighter-rouge">SpringBoneSimulator3D</code> was creating the bone chain internally. Specifically, by setting the root bone as the ancestor and the end bone as the descendant, we could retrieve the bones between them and automatically construct the joint array.<p><img src=/storage/blog/inverse-kinematics-returns-to-godot-4-6/inspector-spring-bone-simulator-3d.webp alt="Inspector of SpringBoneSimulator3D"><p>Compared to users manually creating these arrays, this approach reduced user operations and validation on the core side, making it beneficial for both ends.<h2 id=boneconstraint3d-and-3-child-classes>BoneConstraint3D (and 3 child classes)</h2><p><code class="language-plaintext highlighter-rouge">BoneConstraint3D</code> is a feature that allows bones to interact with other bones. The actual behavior and calculations it provides are simple.<p>What was challenging here was the design for a base class containing a virtual struct array as a member and extending that struct in a child class. This topic is a bit more advanced for beginner coders, but when using struct arrays as properties in Godot, you need to implement a slightly tricky approach.<p><img src=/storage/blog/inverse-kinematics-returns-to-godot-4-6/inspector-bone-constraint-3d.webp alt="Inspector of BoneConstraint3D"><p>I already had the design idea that IK would have a base class similar to <code class="language-plaintext highlighter-rouge">BoneConstraint3D</code>, with child classes extending the structure to implement the actual solver. So, I was confident that merging and establishing that method at this point would be beneficial for IK.<h1 id=godot-46>Godot 4.6</h1><p>Finally, I began implementing IK in Godot 4.6.</p><video autoplay loop muted playsinline>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>Godot Engine Official</title><link href="https://godotengine.org/atom.xml" rel="self"/><link href="https://godotengine.org/"/><updated>2025-12-16T10:14:56+00:00</updated><id>https://godotengine.org/</id><entry><title>Inverse Kinematics Returns to Godot 4.6</title><link href="https://godotengine.org/article/inverse-kinematics-returns-to-godot-4-6/"/><updated>2025-12-16T10:00:00+00:00</updated><id>https://godotengine.org/article/inverse-kinematics-returns-to-godot-4-6/</id><summary>Now Godot has Inverse Kinematics in 3D.</summary><content type="html">&lt;style>article .content img { background-color: initial; }&lt;/style>
<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title>Godot Engine Official</title><link href="https://godotengine.org/atom.xml" rel="self"/><link href="https://godotengine.org/"/><updated>2025-12-16T11:56:00+00:00</updated><id>https://godotengine.org/</id><entry><title>Inverse Kinematics Returns to Godot 4.6</title><link href="https://godotengine.org/article/inverse-kinematics-returns-to-godot-4-6/"/><updated>2025-12-16T10:00:00+00:00</updated><id>https://godotengine.org/article/inverse-kinematics-returns-to-godot-4-6/</id><summary>Now Godot has Inverse Kinematics in 3D.</summary><content type="html">&lt;style>article .content img { background-color: initial; }&lt;/style>
&lt;p>In Godot 4.6, IK is back in 3D!&lt;/p>
&lt;p>&lt;img src="/storage/blog/inverse-kinematics-returns-to-godot-4-6/picture01.webp" alt="IK on the table" />&lt;/p>
&lt;p>Of course, “IK” means inverse kinematics.&lt;/p>

View File

@@ -13,7 +13,7 @@
<a title="Godot Engine - Blog - Page 3" href=https://godotengine.org/blog/3/>3</a>
<a title="Godot Engine - Blog - Page 4" href=https://godotengine.org/blog/4/>4</a>
<a title="Godot Engine - Blog - Page 5" href=https://godotengine.org/blog/5/>5</a>
<a class=pagination-next href=https://godotengine.org/blog/2/>Next →</a></div><div class=posts><a href=/article/inverse-kinematics-returns-to-godot-4-6/ style=text-decoration:none><article class=article-card><div class=thumbnail style=background-image:url(/storage/blog/covers/inverse-kinematics-returns-to-godot-4-6.webp) href=/article/inverse-kinematics-returns-to-godot-4-6/></div><div class=content><div class=info><img class=avatar width=25 height=25 src=/assets/images/authors/tokage.png alt="Silc Renew" loading=lazy>
<a class=pagination-next href=https://godotengine.org/blog/2/>Next →</a></div><div class=posts><a href=/article/inverse-kinematics-returns-to-godot-4-6/ style=text-decoration:none><article class=article-card><div class=thumbnail style=background-image:url(/storage/blog/covers/inverse-kinematics-returns-to-godot-4-6.jpg) href=/article/inverse-kinematics-returns-to-godot-4-6/></div><div class=content><div class=info><img class=avatar width=25 height=25 src=/assets/images/authors/tokage.png alt="Silc Renew" loading=lazy>
<span class=by>Silc Renew </span><span class=date>&nbsp;-&nbsp;16 December 2025</span></div><h3>Inverse Kinematics Returns to Godot 4.6</h3><p class=excerpt>Now Godot has Inverse Kinematics in 3D.</div></article></a><a href=/article/dev-snapshot-godot-4-6-beta-1/ style=text-decoration:none><article class=article-card><div class=thumbnail style=background-image:url(/storage/blog/covers/dev-snapshot-godot-4-6-beta-1.jpg) href=/article/dev-snapshot-godot-4-6-beta-1/></div><div class=content><div class=info><img class=avatar width=25 height=25 src=/assets/images/authors/repiteo.jpg alt="Thaddeus Crews" loading=lazy>
<span class=by>Thaddeus Crews </span><span class=date>&nbsp;-&nbsp;10 December 2025</span></div><h3>Dev snapshot: Godot 4.6 beta 1</h3><p class=excerpt>Godot 4.6 enters beta!</div></article></a><a href=/article/dev-snapshot-godot-4-6-dev-6/ style=text-decoration:none><article class=article-card><div class=thumbnail style=background-image:url(/storage/blog/covers/dev-snapshot-godot-4-6-dev-6.jpg) href=/article/dev-snapshot-godot-4-6-dev-6/></div><div class=content><div class=info><img class=avatar width=25 height=25 src=/assets/images/authors/repiteo.jpg alt="Thaddeus Crews" loading=lazy>
<span class=by>Thaddeus Crews </span><span class=date>&nbsp;-&nbsp; 5 December 2025</span></div><h3>Dev snapshot: Godot 4.6 dev 6</h3><p class=excerpt>Feature freeze is here; time for one last round-up!</div></article></a><a href=/article/dev-snapshot-godot-4-6-dev-5/ style=text-decoration:none><article class=article-card><div class=thumbnail style=background-image:url(/storage/blog/covers/dev-snapshot-godot-4-6-dev-5.jpg) href=/article/dev-snapshot-godot-4-6-dev-5/></div><div class=content><div class=info><img class=avatar width=25 height=25 src=/assets/images/authors/repiteo.jpg alt="Thaddeus Crews" loading=lazy>

View File

@@ -13,7 +13,7 @@
<a title="Blog - Progress Report - Page 3" href=https://godotengine.org/blog/progress-report/3/>3</a>
<a title="Blog - Progress Report - Page 4" href=https://godotengine.org/blog/progress-report/4/>4</a>
<a title="Blog - Progress Report - Page 5" href=https://godotengine.org/blog/progress-report/5/>5</a>
<a class=pagination-next href=https://godotengine.org/blog/progress-report/2/>Next →</a></div><div class=posts><a href=/article/inverse-kinematics-returns-to-godot-4-6/ style=text-decoration:none><article class=article-card><div class=thumbnail style=background-image:url(/storage/blog/covers/inverse-kinematics-returns-to-godot-4-6.webp) href=/article/inverse-kinematics-returns-to-godot-4-6/></div><div class=content><div class=info><img class=avatar width=25 height=25 src=/assets/images/authors/tokage.png alt="Silc Renew" loading=lazy>
<a class=pagination-next href=https://godotengine.org/blog/progress-report/2/>Next →</a></div><div class=posts><a href=/article/inverse-kinematics-returns-to-godot-4-6/ style=text-decoration:none><article class=article-card><div class=thumbnail style=background-image:url(/storage/blog/covers/inverse-kinematics-returns-to-godot-4-6.jpg) href=/article/inverse-kinematics-returns-to-godot-4-6/></div><div class=content><div class=info><img class=avatar width=25 height=25 src=/assets/images/authors/tokage.png alt="Silc Renew" loading=lazy>
<span class=by>Silc Renew </span><span class=date>&nbsp;-&nbsp;16 December 2025</span></div><h3>Inverse Kinematics Returns to Godot 4.6</h3><p class=excerpt>Now Godot has Inverse Kinematics in 3D.</div></article></a><a href=/article/godot-xr-update-nov-2025/ style=text-decoration:none><article class=article-card><div class=thumbnail style=background-image:url(/storage/blog/covers/november-2025-update-godot-xr-community.jpg) href=/article/godot-xr-update-nov-2025/></div><div class=content><div class=info><img class=avatar width=25 height=25 src=/assets/images/authors/bastiaan.jpg alt="Bastiaan Olij" loading=lazy>
<span class=by>Bastiaan Olij </span><span class=date>&nbsp;-&nbsp;21 November 2025</span></div><h3>Godot XR update - November 2025</h3><p class=excerpt>MOAT XR, XR game jam results, new features, OpenXR inventory</div></article></a><a href=/article/godot-xr-update-aug-2025/ style=text-decoration:none><article class=article-card><div class=thumbnail style=background-image:url(/storage/blog/covers/august-2025-update-godot-xr-community.webp) href=/article/godot-xr-update-aug-2025/></div><div class=content><div class=info><img class=avatar width=25 height=25 src=/assets/images/authors/bastiaan.jpg alt="Bastiaan Olij" loading=lazy>
<span class=by>Bastiaan Olij </span><span class=date>&nbsp;-&nbsp; 2 September 2025</span></div><h3>Godot XR update - August 2025</h3><p class=excerpt>Upcoming XR game jam, using the XR editor, new release channels and the new Render Models API</div></article></a><a href=/article/godot-openxr-vendors-plugin-400/ style=text-decoration:none><article class=article-card><div class=thumbnail style=background-image:url(/storage/blog/covers/godot-openxr-vendors-plugin-400.webp) href=/article/godot-openxr-vendors-plugin-400/></div><div class=content><div class=info><img class=avatar width=25 height=25 src=/assets/images/authors/dsnopek.webp alt="David Snopek" loading=lazy>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -113,7 +113,7 @@
&lt;p>At last, I wish you all the best in creating fun games using &lt;code class="language-plaintext highlighter-rouge">SkeletonModifier3D&lt;/code>s.&lt;/p>
&lt;h2 id="support">Support&lt;/h2>
&lt;p>Godot is a non-profit, open-source game engine developed by hundreds of contributors in their free time, as well as a handful of part or full-time developers hired thanks to &lt;a href="https://fund.godotengine.org/">generous donations from the Godot community&lt;/a>. A big thank you to everyone who has contributed &lt;a href="https://github.com/godotengine/godot/blob/master/AUTHORS.md">their time&lt;/a> or &lt;a href="https://github.com/godotengine/godot/blob/master/DONORS.md">their financial support&lt;/a> to the project!&lt;/p>
&lt;p>If youd like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></description><category>Progress Report</category><guid>https://godotengine.org/article/inverse-kinematics-returns-to-godot-4-6/</guid><dc:creator>Silc Renew</dc:creator><pubDate>Tue, 16 Dec 2025 10:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/inverse-kinematics-returns-to-godot-4-6.webp</image></item><item><title>Dev snapshot: Godot 4.6 beta 1</title><link>https://godotengine.org/article/dev-snapshot-godot-4-6-beta-1/</link><summary>Godot 4.6 enters beta!</summary><description>&lt;p>Its finally time for the 4.6 release cycle to feature its very first beta! Thanks to handling the feature freeze in &lt;a href="/article/dev-snapshot-godot-4-6-dev-6">dev 6&lt;/a>, there are already been several bugs and regressions identified early and subsequently squashed. However, there are still more to iron out, so all contributors are encouraged to shift their focus to &lt;a href="https://github.com/godotengine/godot/issues?q=is%3Aopen+is%3Aissue+label%3Aregression+milestone%3A4.6">regression fixes&lt;/a> exclusively.&lt;/p>
&lt;p>If youd like to support the project financially and help us secure our future hires, you can do so using the &lt;a href="https://fund.godotengine.org/">Godot Development Fund&lt;/a> platform managed by &lt;a href="https://godot.foundation/">Godot Foundation&lt;/a>. There are also several &lt;a href="/donate">alternative ways to donate&lt;/a> which you may find more suitable.&lt;/p></description><category>Progress Report</category><guid>https://godotengine.org/article/inverse-kinematics-returns-to-godot-4-6/</guid><dc:creator>Silc Renew</dc:creator><pubDate>Tue, 16 Dec 2025 10:00:00 +0000</pubDate><image>https://godotengine.org/storage/blog/covers/inverse-kinematics-returns-to-godot-4-6.jpg</image></item><item><title>Dev snapshot: Godot 4.6 beta 1</title><link>https://godotengine.org/article/dev-snapshot-godot-4-6-beta-1/</link><summary>Godot 4.6 enters beta!</summary><description>&lt;p>Its finally time for the 4.6 release cycle to feature its very first beta! Thanks to handling the feature freeze in &lt;a href="/article/dev-snapshot-godot-4-6-dev-6">dev 6&lt;/a>, there are already been several bugs and regressions identified early and subsequently squashed. However, there are still more to iron out, so all contributors are encouraged to shift their focus to &lt;a href="https://github.com/godotengine/godot/issues?q=is%3Aopen+is%3Aissue+label%3Aregression+milestone%3A4.6">regression fixes&lt;/a> exclusively.&lt;/p>
&lt;p>For those interested in aiding us on our quest to squash any bugs that come up during this time, we once again encourage you to join our bug-hunting sprints. Anyone interested should read the &lt;a href="https://github.com/godotengine/godot-maintainers-docs/blob/main/bug-triage/introduction.md">Bug Triage Introduction&lt;/a> for more information, and join the &lt;a href="https://chat.godotengine.org/channel/bugsquad">&lt;code class="language-plaintext highlighter-rouge">#bugsquad&lt;/code>&lt;/a> and &lt;a href="https://chat.godotengine.org/channel/bugsquad-sprints">&lt;code class="language-plaintext highlighter-rouge">#bugsquad-sprints&lt;/code>&lt;/a> channels on our developer RocketChat to participate!&lt;/p>
&lt;p>Please consider &lt;a href="#support">supporting the project financially&lt;/a>, if you are able. Godot is maintained by the efforts of volunteers and a small team of paid contributors. Your donations go towards sponsoring their work and ensuring they can dedicate their undivided attention to the needs of the project.&lt;/p>
&lt;p>&lt;a href="#downloads">Jump to the &lt;strong>Downloads&lt;/strong> section&lt;/a>, and give it a spin right now, or continue reading to learn more about improvements in this release. You can also try the &lt;a href="https://editor.godotengine.org/releases/4.6.beta1/">&lt;strong>Web editor&lt;/strong>&lt;/a>, the &lt;a href="https://www.meta.com/s/h9JcJGHfg">&lt;strong>XR editor&lt;/strong>&lt;/a>, or the &lt;a href="https://play.google.com/store/apps/details?id=org.godotengine.editor.v4">&lt;strong>Android editor&lt;/strong>&lt;/a> for this release. If you are interested in the latter, please request to join &lt;a href="https://groups.google.com/g/godot-testers">our testing group&lt;/a> to get access to pre-release builds.&lt;/p>

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 794 KiB

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long