{"id":1608,"date":"2025-12-22T23:35:30","date_gmt":"2025-12-22T23:35:30","guid":{"rendered":"https:\/\/abdoubouam.com\/?p=1608"},"modified":"2025-12-22T23:35:30","modified_gmt":"2025-12-22T23:35:30","slug":"devlog-week-97-98","status":"publish","type":"post","link":"https:\/\/abdoubouam.com\/index.php\/2025\/12\/22\/devlog-week-97-98\/","title":{"rendered":"Devlog Week 97-98"},"content":{"rendered":"\n<p>I did some experimenting this week<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Dog model<\/h2>\n\n\n\n<p>I worked on dog sounds last week. I tried a few different approaches, but in the end I went with real royalty free dog sounds with several filters. Working with Audacity does the job, but it&#8217;s slow and lacks real-time effects, so I searched for other DAW software and found REAPER, which did the job well, so I got a license for it.<\/p>\n\n\n\n<p>Below is an example with the robot sounds.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video controls src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/Timeline-1.mp4\"><\/video><figcaption class=\"wp-element-caption\">Robot Dog Sounds<\/figcaption><\/figure>\n\n\n\n<p>After doing that, I noticed the eyes were not expressive enough. I thought about either adding mechanical eyelids, or an LCD display for the eyes. The first was too mechanically complex for the design, so I opted for a simple segmented LCD display approach, with 5 parts that light up for different expressions. It&#8217;s not implemented yet, but here&#8217;s the concept for it<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"1024\" src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye2.jpg\" alt=\"\" class=\"wp-image-1612\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye2.jpg 1024w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye2-300x300.jpg 300w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye2-150x150.jpg 150w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye2-768x768.jpg 768w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye2-1000x1000.jpg 1000w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye2-230x230.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye2-350x350.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye2-480x480.jpg 480w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure><\/div>\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1440\" height=\"1440\" src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye1.jpg\" alt=\"\" class=\"wp-image-1611\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye1.jpg 1440w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye1-300x300.jpg 300w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye1-150x150.jpg 150w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye1-768x768.jpg 768w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye1-1000x1000.jpg 1000w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye1-230x230.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye1-350x350.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/eye1-480x480.jpg 480w\" sizes=\"(max-width: 1440px) 100vw, 1440px\" \/><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p>And finally, I attempted to rig the model. Emphasis on &#8220;attempt&#8221;, because it did not go well lol.<\/p>\n\n\n\n<figure class=\"wp-block-gallery has-nested-images columns-1 wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex\"><div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1470\" height=\"905\" data-id=\"1619\" src=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_1.jpg\" alt=\"\" class=\"wp-image-1619\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_1.jpg 1470w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_1-300x185.jpg 300w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_1-768x473.jpg 768w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_1-1000x616.jpg 1000w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_1-230x142.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_1-350x215.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_1-480x296.jpg 480w\" sizes=\"(max-width: 1470px) 100vw, 1470px\" \/><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"512\" height=\"674\" data-id=\"1620\" src=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_2.jpg\" alt=\"\" class=\"wp-image-1620\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_2.jpg 512w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_2-228x300.jpg 228w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_2-230x303.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_2-350x461.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_2-480x632.jpg 480w\" sizes=\"(max-width: 512px) 100vw, 512px\" \/><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"587\" height=\"479\" data-id=\"1621\" src=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_3.jpg\" alt=\"\" class=\"wp-image-1621\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_3.jpg 587w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_3-300x245.jpg 300w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_3-230x188.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_3-350x286.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_3-480x392.jpg 480w\" sizes=\"(max-width: 587px) 100vw, 587px\" \/><\/figure><\/div>\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"836\" height=\"782\" data-id=\"1622\" src=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_4.jpg\" alt=\"\" class=\"wp-image-1622\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_4.jpg 836w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_4-300x281.jpg 300w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_4-768x718.jpg 768w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_4-230x215.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_4-350x327.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/rig_4-480x449.jpg 480w\" sizes=\"(max-width: 836px) 100vw, 836px\" \/><\/figure><\/div><\/figure>\n\n\n\n<p>I got it to a point where many poses are achievable, but with a lot of tweaking. Animation will be harder than it should with it, but this is the best I can do for now.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Sound visualization<\/h2>\n\n\n\n<p>Still on the subject of sounds and noises, I automated the entire process with python and Blender. It takes mp3\/wav files and generates the visualization I demonstrated previously <a href=\"https:\/\/abdoubouam.com\/index.php\/2024\/10\/14\/devlog-week-42-43\/\">devlog week 42-43<\/a><\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video controls src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/SoudnViz.mp4\"><\/video><\/figure>\n\n\n\n<p>It makes things faster, but most importantly by automating the process I don&#8217;t risk forgetting any part of the process.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Animation cache<\/h2>\n\n\n\n<p>I looked for easy methods with decent performance to send non-deforming animated objects to Unreal. Alembic, converting to skeletal animations and vertex animations were all possible options. One feature I needed that none satisfied was the option to pick a different time for each piece on run-time.<\/p>\n\n\n\n<p>With all that said, I decided to make my own cached animation &#8220;format&#8221;. Very similar to vertex animation textures, but instead of storing the info for each vertex, I do it for mesh parts instead. It&#8217;s much more efficient.<\/p>\n\n\n\n<p>I used Python, with the libraries OpenCV and Numpy Blender&#8217;s BPY to write the animation data into the pixels.<\/p>\n\n\n\n<p>I start with objects that have animations (rigidbody simulations, manually animated, procedurally&#8230;etc. As long as it can be keyframed object location and rotation animation in the end). With everything selected, I run the script.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1533\" height=\"979\" src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/1.jpg\" alt=\"\" class=\"wp-image-1614\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/1.jpg 1533w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/1-300x192.jpg 300w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/1-768x490.jpg 768w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/1-1000x639.jpg 1000w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/1-230x147.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/1-350x224.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/1-480x307.jpg 480w\" sizes=\"(max-width: 1533px) 100vw, 1533px\" \/><figcaption class=\"wp-element-caption\">Example of animated objects : a collapsing bridge<\/figcaption><\/figure><\/div>\n\n\n<p>The script converts that animation data into textures and merges all the individual objects into one single mesh with apropriate UVs.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"621\" height=\"318\" src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/2.jpg\" alt=\"\" class=\"wp-image-1615\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/2.jpg 621w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/2-300x154.jpg 300w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/2-230x118.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/2-350x179.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/2-480x246.jpg 480w\" sizes=\"(max-width: 621px) 100vw, 621px\" \/><figcaption class=\"wp-element-caption\">Cached animation and location maps<\/figcaption><\/figure><\/div>\n\n\n<p>The data is stored as raw values in .exr image textures. Each object takes one row, with each column representing a frame. Each object and frame takes exactly 1 pixel.<\/p>\n\n\n<div class=\"wp-block-image\">\n<figure class=\"aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"1576\" height=\"823\" src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/3.jpg\" alt=\"\" class=\"wp-image-1616\" srcset=\"https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/3.jpg 1576w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/3-300x157.jpg 300w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/3-768x401.jpg 768w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/3-1536x802.jpg 1536w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/3-1000x522.jpg 1000w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/3-230x120.jpg 230w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/3-350x183.jpg 350w, https:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/3-480x251.jpg 480w\" sizes=\"(max-width: 1576px) 100vw, 1576px\" \/><figcaption class=\"wp-element-caption\">Data format.<\/figcaption><\/figure><\/div>\n\n\n<p>This is very efficient because it only needs 1 pixel for each mesh island, so it depends on the number of animated objects initially instead of polygon count. The bridge example below has 2900 pieces and 250 frames, so the resolution of the texture needed is 2900&#215;250, even if it has 35K triangles.<\/p>\n\n\n\n<p>And since the animation is stored as textures, it means I can look up different times for different pieces. For example the pieces that are closer to the moving cube will have an animation time of 0, and the pieces that are far away will have a time of 10 seconds after collapse. This has a very interesting time rewinding effect.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video controls src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/2025-12-19-01-58-45.mp4\"><\/video><figcaption class=\"wp-element-caption\">Time rewinding effect<\/figcaption><\/figure>\n\n\n\n<p>I ported this to a material in Unreal Engine. Dealing with the axis difference was a bit confusing, and I also encountered some unforeseen issues (like the &#8220;Use High Precision UVs&#8221; not being precise enough, so I&#8217;m limited to &lt;1000 pieces per object). But in the end it worked fine. Experiencing the effect in third person is more interesting.<\/p>\n\n\n\n<figure class=\"wp-block-video aligncenter\"><video controls src=\"http:\/\/abdoubouam.com\/wp-content\/uploads\/2025\/12\/2025-12-22-03-04-54-1.mp4\"><\/video><figcaption class=\"wp-element-caption\">Cached animation in Unreal<\/figcaption><\/figure>\n\n\n\n<p>It doesn&#8217;t seem like it has any noticeable performance impact, but I have to test it on the Steam Deck to see how far I can push this.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Misc<\/h2>\n\n\n\n<p>I continued my job hunting. Most positions require on-site and\/or don&#8217;t offer visa sponsorship, so I don&#8217;t have a lot of options. But I&#8217;m still looking.<\/p>\n\n\n\n<p>I finished playing RDR2. It started slow, with emphasis on some parts I&#8217;m not really interested in (&#8220;life sim&#8221; that doesn&#8217;t progress the story or say a lot about characters), and I was very close to giving up on it. It also had annoying mechanics I wasn&#8217;t particularly fond about, emphasizing realism and all, but I installed a mod that added fast travel and allowed me to wear whatever clothes I wanted without worrying about heat and cold. After chapter 3, I was hooked, and I actually think it has the best video narrative and character story\/development of all time. The environments are also very well made, and I found myself using a freecam mod just to look around and take screenshots.<\/p>\n\n\n\n<p>That&#8217;s all for this time. Thanks for reading, and I hope to see you again soon.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I did some experimenting this week Dog model I worked on dog sounds last week. I tried a few different approaches, but in the end I went with real royalty free dog sounds with several filters. Working with Audacity does the job, but it&#8217;s slow and lacks real-time effects, so I searched for other DAW software and found REAPER, which did the job well, [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1618,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,5],"tags":[],"_links":{"self":[{"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/posts\/1608"}],"collection":[{"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/comments?post=1608"}],"version-history":[{"count":2,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/posts\/1608\/revisions"}],"predecessor-version":[{"id":1625,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/posts\/1608\/revisions\/1625"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/media\/1618"}],"wp:attachment":[{"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/media?parent=1608"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/categories?post=1608"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/abdoubouam.com\/index.php\/wp-json\/wp\/v2\/tags?post=1608"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}