<?xml version="1.0" encoding="utf-8" ?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:tt="http://teletype.in/" xmlns:opensearch="http://a9.com/-/spec/opensearch/1.1/"><title>Vladislav Krilev</title><subtitle>Рабочий журнал для скрытых проектов</subtitle><author><name>Vladislav Krilev</name></author><id>https://teletype.in/atom/glitchysparx</id><link rel="self" type="application/atom+xml" href="https://teletype.in/atom/glitchysparx?offset=0"></link><link rel="alternate" type="text/html" href="https://teletype.in/@glitchysparx?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=glitchysparx"></link><link rel="next" type="application/rss+xml" href="https://teletype.in/atom/glitchysparx?offset=10"></link><link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></link><updated>2026-04-19T08:14:58.676Z</updated><entry><id>glitchysparx:successfull_game</id><link rel="alternate" type="text/html" href="https://teletype.in/@glitchysparx/successfull_game?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=glitchysparx"></link><title>Reasons for Half-life cult following</title><published>2025-12-18T15:10:35.380Z</published><updated>2025-12-19T09:59:52.263Z</updated><summary type="html">NOTES:</summary><content type="html">
  &lt;figure id=&quot;6adV&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/7CH3uhED-fQ?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;2BGH&quot;&gt;NOTES:&lt;/p&gt;
  &lt;ol id=&quot;4j8X&quot;&gt;
    &lt;li id=&quot;ZABn&quot;&gt;Механическая драма: &lt;/li&gt;
    &lt;ol id=&quot;dQBc&quot;&gt;
      &lt;li id=&quot;cHKb&quot;&gt;За эмоциональные перепады игрока отвечают геймплейные механики&lt;/li&gt;
      &lt;li id=&quot;E3nF&quot;&gt;Изменения темпа и типа механик в зависимости от ситуаций&lt;/li&gt;
    &lt;/ol&gt;
    &lt;li id=&quot;hdo0&quot;&gt;Распознание игрока и плотность опыта&lt;/li&gt;
    &lt;ol id=&quot;mClf&quot;&gt;
      &lt;li id=&quot;wx92&quot;&gt;Если игрок делает что-то, игра должна это распознать. Игрок стреляет в стену - в ней остаются следы от пуль. Игрок заходит в комнату, на него оборачиваются персы.&lt;/li&gt;
      &lt;li id=&quot;PkYv&quot;&gt;С игроком должны происходить события, количество которых должно быть пропорционально размеру карты.&lt;/li&gt;
    &lt;/ol&gt;
    &lt;li id=&quot;yMeo&quot;&gt;Качественный экшен &lt;/li&gt;
  &lt;/ol&gt;

</content></entry><entry><id>glitchysparx:niagara_ue</id><link rel="alternate" type="text/html" href="https://teletype.in/@glitchysparx/niagara_ue?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=glitchysparx"></link><title>Niagara UE</title><published>2025-08-28T15:19:10.262Z</published><updated>2025-08-28T22:07:15.652Z</updated><summary type="html">&lt;img src=&quot;https://img3.teletype.in/files/ae/82/ae8269df-2150-42d2-b0e9-3a3c8c9e46d3.png&quot;&gt;These modules requires the Skeletal Mesh settings :

Allow CPUAccess -&gt; true</summary><content type="html">
  &lt;h3 id=&quot;8URJ&quot;&gt;Important notes:&lt;/h3&gt;
  &lt;p id=&quot;M74v&quot;&gt;&lt;/p&gt;
  &lt;ul id=&quot;3yms&quot;&gt;
    &lt;li id=&quot;NS70&quot;&gt;&lt;strong&gt;Mesh Reproduction Sprites&lt;/strong&gt; modules&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;blockquote id=&quot;H6CE&quot;&gt;These modules requires the &lt;strong&gt;Skeletal Mesh&lt;/strong&gt; settings :&lt;br /&gt;&lt;br /&gt;&lt;em&gt;Allow CPUAccess -&amp;gt; true&lt;/em&gt;&lt;/blockquote&gt;
    &lt;figure id=&quot;uDaN&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/ae/82/ae8269df-2150-42d2-b0e9-3a3c8c9e46d3.png&quot; width=&quot;628&quot; /&gt;
      &lt;figcaption&gt;UE5.4&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;ul id=&quot;KiXn&quot;&gt;
    &lt;li id=&quot;E7SX&quot;&gt;Sub UV settings in the Sprite Renderer module:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;blockquote id=&quot;fOSf&quot;&gt; Sub image size means number of columns in X and rows in Y.&lt;/blockquote&gt;
    &lt;figure id=&quot;26lf&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/28/57/28577900-66d4-4a68-9705-ca28a4ea4dc3.png&quot; width=&quot;779&quot; /&gt;
      &lt;figcaption&gt;UE5.4&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;ul id=&quot;z5Is&quot;&gt;
    &lt;li id=&quot;XEWu&quot;&gt;Camera Offset emitter module:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;blockquote id=&quot;vcOZ&quot;&gt;Module is used to set the depth for rendered layers. It fixes that bug the sprite clips through the mesh. &lt;/blockquote&gt;
    &lt;figure id=&quot;D5of&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/3e/df/3edf62c1-5310-4b63-8116-6d4d62c7fc59.png&quot; width=&quot;1019&quot; /&gt;
      &lt;figcaption&gt;UE5.4&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;p id=&quot;7fak&quot;&gt;FDG&lt;/p&gt;
  &lt;/section&gt;

</content></entry><entry><id>glitchysparx:cinematic_production</id><link rel="alternate" type="text/html" href="https://teletype.in/@glitchysparx/cinematic_production?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=glitchysparx"></link><title>Cinematics production UE5</title><published>2025-08-26T16:48:23.764Z</published><updated>2025-11-26T16:03:40.673Z</updated><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/df/8b/df8bff41-6fdf-470b-b7a9-5df495c46e8a.png&quot;&gt;know-how</summary><content type="html">
  &lt;h3 id=&quot;B8Q6&quot;&gt;Sequencer:&lt;/h3&gt;
  &lt;ul id=&quot;bUY5&quot;&gt;
    &lt;li id=&quot;84Tp&quot;&gt;CTRL + drag&amp;amp;drop the animation ending -&amp;gt; slow the animation &lt;/li&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;f35a&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/df/8b/df8bff41-6fdf-470b-b7a9-5df495c46e8a.png&quot; width=&quot;2097&quot; /&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;URdx&quot;&gt;
    &lt;li id=&quot;GU7J&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/documentation/en-us/unreal-engine/sequencer-hotkeys-in-unreal-engine&quot; target=&quot;_blank&quot;&gt;Sequencer hotkeys&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;hir0&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/documentation/en-us/unreal-engine/cinematic-color-fade-track-in-unreal-engine&quot; target=&quot;_blank&quot;&gt;Cinematic color fade track&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote id=&quot;4pGT&quot;&gt;Can be used for fade-in / fade-out camera effects&lt;/blockquote&gt;
  &lt;ul id=&quot;XQp4&quot;&gt;
    &lt;li id=&quot;SHmx&quot;&gt;&lt;strong&gt;OCIO - OpenСolorIO&lt;/strong&gt; &lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote id=&quot;rb7o&quot;&gt;Plugin for exporting to DaVinci for color grading&lt;/blockquote&gt;
  &lt;figure id=&quot;drDP&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/b1/91/b191044c-104f-4d05-b06a-ec71862f25fb.png&quot; width=&quot;661&quot; /&gt;
    &lt;figcaption&gt;UE5.4&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;qdp8&quot;&gt;
    &lt;li id=&quot;4OF3&quot;&gt;&lt;strong&gt;Movie Render Queue&lt;/strong&gt; &lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote id=&quot;fYG9&quot;&gt;Plugin for advanced render settings&lt;/blockquote&gt;
  &lt;ul id=&quot;bxSc&quot;&gt;
    &lt;li id=&quot;U2wr&quot;&gt;Movie Render Queue Additional Render Passes&lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote id=&quot;xshd&quot;&gt; Plugin for render passes settings&lt;/blockquote&gt;

</content></entry><entry><id>glitchysparx:metahuman_groom_error</id><link rel="alternate" type="text/html" href="https://teletype.in/@glitchysparx/metahuman_groom_error?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=glitchysparx"></link><title>Groom error</title><published>2025-08-19T15:36:12.034Z</published><updated>2025-08-19T18:36:43.447Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img2.teletype.in/files/5a/b6/5ab646ea-90d9-4281-a61f-8f5f298904b6.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img2.teletype.in/files/d4/ab/d4ab6aa3-4b90-4234-8afa-d6de1536f458.png&quot;&gt;Hair spiking:</summary><content type="html">
  &lt;h3 id=&quot;Od2R&quot;&gt;Hair spiking&lt;/h3&gt;
  &lt;p id=&quot;86js&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;Nj2e&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/d4/ab/d4ab6aa3-4b90-4234-8afa-d6de1536f458.png&quot; width=&quot;1222&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;fZk8&quot;&gt;Fix:&lt;/p&gt;
  &lt;figure id=&quot;IqTJ&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a2/a9/a2a9affd-f5c3-42d2-b4a0-8cbb1552942f.png&quot; width=&quot;2402&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;7cOy&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;2Z6V&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;n5u7&quot;&gt;Lack of rougness&lt;br /&gt;&lt;br /&gt;Fix:&lt;br /&gt;&lt;/h3&gt;
  &lt;figure id=&quot;QPi4&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/a2/6b/a26b686b-8030-4518-83f6-78993bcc6f0a.png&quot; width=&quot;2500&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ae1F&quot;&gt;&lt;em&gt;Scatter Scene Lighting -&amp;gt; True&lt;/em&gt;&lt;/p&gt;

</content></entry><entry><id>glitchysparx:reflection-system-ue5</id><link rel="alternate" type="text/html" href="https://teletype.in/@glitchysparx/reflection-system-ue5?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=glitchysparx"></link><title>Reflection system</title><published>2025-06-12T18:54:00.350Z</published><updated>2025-06-30T13:14:57.680Z</updated><summary type="html">Speech: &quot;The Hidden Life of UObjects: From SCS to GC&quot;</summary><content type="html">
  &lt;p id=&quot;4jMA&quot;&gt;Title: &amp;quot;The Hidden Life of UObjects: From SCS to GC&amp;quot;&lt;/p&gt;
  &lt;p id=&quot;Q889&quot;&gt;Description: At the heart of Unreal Engine lies a powerful but often misunderstood system: UObject. This article takes a deep dive into how the reflection system works under the hood — from GENERATED_BODY() macros to FProperty and metadata — and how these systems enable Blueprints, serialization, and editor tools. We’ll also explore how Unreal’s custom Garbage Collection ties into the UObject model, and how understanding these internals can help you debug smarter, write safer systems, and even build your own advanced tools on top of the engine. We’ll briefly touch on how SCS (Simple Construction Script) fits into this system as a bridge between editable Blueprint data and runtime component instancing.&lt;/p&gt;
  &lt;p id=&quot;NaKW&quot;&gt;Target Audience: Programmers&lt;/p&gt;
  &lt;p id=&quot;HrzN&quot;&gt;Level: Intermediate&lt;/p&gt;
  &lt;p id=&quot;PRff&quot;&gt;Takeaways: &lt;/p&gt;
  &lt;p id=&quot;wxmb&quot;&gt;* Developing the mechanics used the Reflection system &lt;br /&gt;* Working with Garbage Collector &lt;br /&gt;* Developing Editor tools &lt;br /&gt;* Understanding how UE usess UObjects &lt;br /&gt;* What is a Blueprint class&lt;/p&gt;
  &lt;h2 id=&quot;ynAs&quot;&gt;Topics:&lt;/h2&gt;
  &lt;ul id=&quot;xQEw&quot;&gt;
    &lt;li id=&quot;lQT1&quot;&gt;&lt;em&gt;&lt;u&gt;Reflection system&lt;/u&gt;&lt;/em&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;cMqd&quot;&gt;What is Reflection and why UE5 relies on it so heavily&lt;/p&gt;
  &lt;p id=&quot;Pyiv&quot;&gt;&lt;code&gt;UCLASS&lt;/code&gt;, &lt;code&gt;USTRUCT&lt;/code&gt;, &lt;code&gt;UPROPERTY&lt;/code&gt;, how reflection powers BP integration, serialization, networking. Diagrams of memory layout, &lt;code&gt;FField.&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;CWAY&quot;&gt;Role of the &lt;strong&gt;Unreal Header Tool (UHT)&lt;/strong&gt; and what happens at compile time&lt;/p&gt;
  &lt;p id=&quot;Aj70&quot;&gt;Comparison of reflection in UE vs traditional C++ RTTI or C# reflection&lt;/p&gt;
  &lt;p id=&quot;7aMk&quot;&gt;Custom metadata and property reflection at runtime (&lt;code&gt;FindField&lt;/code&gt;, &lt;code&gt;GetDefaultObject&lt;/code&gt;, etc.)&lt;/p&gt;
  &lt;p id=&quot;r3Dh&quot;&gt;✅ This is &lt;strong&gt;not common knowledge&lt;/strong&gt;. Even many devs who use macros daily don’t really know what’s going on under the hood.&lt;/p&gt;
  &lt;p id=&quot;aCyz&quot;&gt;&lt;/p&gt;
  &lt;ul id=&quot;POql&quot;&gt;
    &lt;li id=&quot;7yKz&quot;&gt;&lt;u&gt;&lt;em&gt;Garbage Collection&lt;/em&gt;&lt;/u&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ITA4&quot;&gt;Covering &lt;code&gt;AddToRoot&lt;/code&gt;, &lt;code&gt;TWeakObjectPtr&lt;/code&gt;, reference chains, &lt;code&gt;MarkPendingKill&lt;/code&gt;&lt;/p&gt;
  &lt;p id=&quot;0Br5&quot;&gt;What’s &amp;quot;managed&amp;quot; and what’s not in UE’s memory model&lt;/p&gt;
  &lt;p id=&quot;Xo5O&quot;&gt;&lt;code&gt;UObject&lt;/code&gt; lifecycle: New → Referenced → Pending Kill → GC’d&lt;/p&gt;
  &lt;p id=&quot;64vr&quot;&gt;Circular references and memory leaks in blueprints&lt;/p&gt;
  &lt;p id=&quot;7bq4&quot;&gt;Bonus: &lt;strong&gt;visually demo memory leaks and safe practices&lt;/strong&gt; in a project.&lt;/p&gt;
  &lt;p id=&quot;Amks&quot;&gt;&lt;/p&gt;
  &lt;ul id=&quot;dxmt&quot;&gt;
    &lt;li id=&quot;I9bk&quot;&gt;Components vs SCS_Nodes&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;aI3K&quot;&gt;The difference between runtime components and editor-only SCS_Nodes, how blueprint compilation handles them, instancing behavior, transform inheritance&lt;/p&gt;
  &lt;p id=&quot;cx14&quot;&gt;✅ Even advanced BP users don’t know the difference clearly. This talk would &lt;strong&gt;demystify&lt;/strong&gt; something that causes bugs in real games.&lt;/p&gt;
  &lt;p id=&quot;4Y0Z&quot;&gt;&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;eqYT&quot;&gt;The people who get invited to speak &lt;strong&gt;don’t have to say something no one’s ever heard&lt;/strong&gt;. They just need to say something most people &lt;strong&gt;never fully understood&lt;/strong&gt; — and explain it &lt;em&gt;clearly, visually, and with passion&lt;/em&gt;.&lt;/p&gt;
    &lt;p id=&quot;1D7X&quot;&gt;You’re focusing on &lt;strong&gt;what the community &lt;em&gt;should&lt;/em&gt; know deeply&lt;/strong&gt;, not just what’s flashy.&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;i5Fi&quot;&gt;&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;WzC7&quot;&gt;Consider adding a short real-world example like:&lt;/p&gt;
    &lt;p id=&quot;wiwB&quot;&gt;“This bug once haunted me for weeks... until I realized the difference between a component and an SCS_Node.”&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;w0HV&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;SEw0&quot;&gt;Include 2–3 short stories of real bugs, crashes, or editor issues you solved by deeply understanding these systems.&lt;/p&gt;
  &lt;ul id=&quot;uGkw&quot;&gt;
    &lt;li id=&quot;7hgs&quot;&gt;Accidentally GC-ing a critical object in PIE → solution&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;ZRS9&quot;&gt;(The error we had in the slates (new Editor tool im) with managing UObjects where there is not place for UPROPERTY and for AddReferencedObjects() function. Our solution was TStrongPtr.&lt;/p&gt;
  &lt;p id=&quot;WbQc&quot;&gt;&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(0,   0%,  var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;DISE&quot;&gt;Other related interesting topics: &lt;/p&gt;
    &lt;ul id=&quot;X2oD&quot;&gt;
      &lt;li id=&quot;UmQ1&quot;&gt;&lt;strong&gt;Blueprint Compilation Pipeline&lt;/strong&gt; – From Graph to Bytecode&lt;/li&gt;
      &lt;li id=&quot;riuw&quot;&gt;&lt;strong&gt;Editor vs Runtime behavior&lt;/strong&gt; of assets and classes&lt;/li&gt;
      &lt;li id=&quot;sKEU&quot;&gt;A debug tool that visualizes GC reference chains&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/section&gt;
  &lt;p id=&quot;f5xL&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Ek48&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;af7E&quot;&gt;What is SCS (SimpleConstructionScript)?&lt;/h2&gt;
  &lt;p id=&quot;wFOG&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;hmqi&quot;&gt;To explain what SCS stands for, we should understand what exactly the Blueprint is. And the answer is: Blueprints are assets, not objects. &lt;/p&gt;
  &lt;p id=&quot;fXUO&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;jA3y&quot;&gt;&lt;a href=&quot;https://heapcleaner.wordpress.com/2016/06/12/inside-of-unreal-engine-blueprint/&quot; target=&quot;_blank&quot;&gt;Inside of Blueprint&lt;/a&gt;&lt;/p&gt;

</content></entry><entry><id>glitchysparx:render-settings</id><link rel="alternate" type="text/html" href="https://teletype.in/@glitchysparx/render-settings?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=glitchysparx"></link><title>Render with UE5</title><published>2025-06-04T16:17:34.971Z</published><updated>2025-08-20T09:28:54.455Z</updated><summary type="html">Demystifying Movie Render Queue</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#XRX8&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#3Fb1&quot;&gt;Movie Render Queue (MRQ) pluggin settings&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#gfoG&quot;&gt;Noise&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#FYJU&quot;&gt;Post-production&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#7BXh&quot;&gt;Tutorials&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#GrDY&quot;&gt;New Screenshots&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;XRX8&quot;&gt;Docs&lt;/h3&gt;
  &lt;p id=&quot;Ysin&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/community/learning/tutorials/GxdV/unreal-engine-demystifying-movie-render-queue&quot; target=&quot;_blank&quot;&gt;Demystifying Movie Render Queue&lt;/a&gt;&lt;/p&gt;
  &lt;p id=&quot;0Q5q&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;3Fb1&quot;&gt;&lt;strong&gt;Movie Render Queue (MRQ) pluggin settings&lt;/strong&gt;&lt;/h3&gt;
  &lt;ul id=&quot;QwAj&quot;&gt;
    &lt;li id=&quot;TitJ&quot;&gt;EXR format is a standard formar for rendering&lt;/li&gt;
    &lt;ul id=&quot;kKcK&quot;&gt;
      &lt;li id=&quot;pyxq&quot;&gt;a 16 bit format image what stores much more data&lt;/li&gt;
      &lt;li id=&quot;omJ2&quot;&gt;&lt;em&gt;for color grading purposes&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;spMz&quot;&gt;Color Output tab:&lt;/li&gt;
    &lt;ul id=&quot;3j7T&quot;&gt;
      &lt;li id=&quot;nt4d&quot;&gt;Disable Tone Curve -&amp;gt; true&lt;/li&gt;
      &lt;li id=&quot;X6QV&quot;&gt;It ensures that the rendered image is in linear space and not a baked tone mapped image&lt;/li&gt;
      &lt;li id=&quot;5Xpn&quot;&gt;&lt;em&gt;for color grading purposes&lt;/em&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;vBOz&quot;&gt;Console Variables tab:&lt;/li&gt;
    &lt;ul id=&quot;Yqc0&quot;&gt;
      &lt;li id=&quot;jIxi&quot;&gt;CVARs used to fix specific issues&lt;/li&gt;
      &lt;li id=&quot;ENmf&quot;&gt;Don&amp;#x27;t use any variable unless you really know what are you doing&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;o9U6&quot;&gt;Game Overrides tab:&lt;/li&gt;
    &lt;ul id=&quot;D1Hi&quot;&gt;
      &lt;li id=&quot;ZSto&quot;&gt;It&amp;#x27;s used by default under the hood&lt;/li&gt;
      &lt;li id=&quot;RVA2&quot;&gt;Maxes out the quality of some console variables&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;MgWj&quot;&gt;Anti-aliasing tab:&lt;/li&gt;
    &lt;ul id=&quot;61c4&quot;&gt;
      &lt;li id=&quot;Y9ks&quot;&gt;Ask yourself: &amp;quot;Do you want motion blur in your shot or do you want crisp sharp images without motion blur?&amp;quot;&lt;/li&gt;
      &lt;li id=&quot;AZOr&quot;&gt;Motion Blur: Temporal Samples&lt;/li&gt;
      &lt;ul id=&quot;pxxK&quot;&gt;
        &lt;li id=&quot;f1hh&quot;&gt;If you have some strange motion blur in physics objects or etc. you can use next fix:&lt;/li&gt;
        &lt;ul id=&quot;fJhc&quot;&gt;
          &lt;li id=&quot;t3gl&quot;&gt;Increase the frame rate of the sequence (f.e. 48 fps instead of 24 fps) and set Motion Blur Amout to 1. It will skip every second frame but will make the motion blur smoother. &lt;/li&gt;
        &lt;/ul&gt;
        &lt;li id=&quot;UUCT&quot;&gt;Why it works?&lt;/li&gt;
        &lt;ul id=&quot;2E2r&quot;&gt;
          &lt;li id=&quot;a2F6&quot;&gt;By doubling the frame rate you basically reducing the  amount of motion blur in half but we bring it back by doubling the motion blur settings value to 1 (instead of 0.5 used by default).&lt;/li&gt;
        &lt;/ul&gt;
      &lt;/ul&gt;
    &lt;/ul&gt;
    &lt;ul id=&quot;9dDM&quot;&gt;
      &lt;li id=&quot;ag0C&quot;&gt;No Motion Blur: Spatial Samples &lt;/li&gt;
      &lt;ul id=&quot;TBMH&quot;&gt;
        &lt;li id=&quot;hi7s&quot;&gt;+ Post Process Volume (PPV) / Camera settings: Set Motion Blur Amount to 0.&lt;/li&gt;
      &lt;/ul&gt;
      &lt;li id=&quot;4g7i&quot;&gt;Do not mix both Temporal and Spatial, otherwise you will lose out on the benefits of temporal samples&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;aWy3&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/da/8b/da8b38b9-516f-401e-99d9-8c755465cd1c.png&quot; width=&quot;1949&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;OoWP&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/5c/b0/5cb0ba66-7be1-40c0-b9dc-bf8e11732aca.png&quot; width=&quot;1942&quot; /&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;zWuR&quot;&gt;
    &lt;ul id=&quot;wnHL&quot;&gt;
      &lt;li id=&quot;xy2W&quot;&gt;Sample Count works only if the Anti Aliasing Method is set to &lt;strong&gt;None&lt;/strong&gt;, otherwise it&amp;#x27;ll be controlled by AA method.&lt;/li&gt;
      &lt;li id=&quot;otUO&quot;&gt;Use &lt;strong&gt;odd numbers &lt;/strong&gt;for sample counts. You may not notice the difference but it&amp;#x27;s recommended way.&lt;/li&gt;
      &lt;li id=&quot;WNoK&quot;&gt;There are only 2 reasons to increase the sample count:&lt;/li&gt;
      &lt;ol id=&quot;qW9u&quot;&gt;
        &lt;li id=&quot;j4to&quot;&gt;To increase the motion blur quality&lt;/li&gt;
        &lt;li id=&quot;FLg8&quot;&gt;Anti-aliasing quality&lt;/li&gt;
      &lt;/ol&gt;
      &lt;ul id=&quot;OHxB&quot;&gt;
        &lt;li id=&quot;VKOF&quot;&gt;It doesn&amp;#x27;t affect the noise or flickering&lt;/li&gt;
      &lt;/ul&gt;
      &lt;li id=&quot;pyZU&quot;&gt;Sample Count 64-128+ is largely unnecessary unless you disabled the denoisers and really need that extra samples. &lt;/li&gt;
      &lt;li id=&quot;8rxD&quot;&gt;Sample Count 15-31 is pretty enough in 95-98% of situations!&lt;/li&gt;
      &lt;li id=&quot;OWcN&quot;&gt;If you need 1-8 samples, then use TSR (Temporal Super Resolution) method. It will be the fastest way to render. &lt;/li&gt;
      &lt;li id=&quot;eQVM&quot;&gt;For Pathtracing it isn&amp;#x27;t unusual to need 256-1024+ samples depending on your scene.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;w7dq&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;gfoG&quot;&gt;Noise&lt;/h3&gt;
  &lt;ul id=&quot;z9jP&quot;&gt;
    &lt;li id=&quot;7fCN&quot;&gt;It is likely caused by the denoisers which can be disabled&lt;/li&gt;
    &lt;li id=&quot;EWyF&quot;&gt;It&amp;#x27;s likely has more to do with the PPV settings:&lt;/li&gt;
    &lt;ul id=&quot;yjb0&quot;&gt;
      &lt;li id=&quot;9l7x&quot;&gt;Lumen quality and distance fields&lt;/li&gt;
    &lt;/ul&gt;
    &lt;ul id=&quot;JftF&quot;&gt;
      &lt;li id=&quot;rtNB&quot;&gt;Ray Tracing reflection samples&lt;/li&gt;
      &lt;li id=&quot;x6nN&quot;&gt;Individual lights also have their own sample count&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;figure id=&quot;H2vD&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/56/08/5608f5ae-d9d5-44c6-afce-1e69b3d2ca78.png&quot; width=&quot;1948&quot; /&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;oYwB&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/6a/f6/6af664f4-5902-4c79-bfe9-c97808439542.png&quot; width=&quot;1960&quot; /&gt;
  &lt;/figure&gt;
  &lt;ul id=&quot;vGi2&quot;&gt;
    &lt;ul id=&quot;2Xfs&quot;&gt;
      &lt;li id=&quot;G9rc&quot;&gt;&lt;strong&gt;Common Misconception:&lt;/strong&gt; Increasing Anti-aliasing Sample Count does not reduce noise/flickering! &lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;mdTP&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;FYJU&quot;&gt;Post-production&lt;/h3&gt;
  &lt;ul id=&quot;uHcX&quot;&gt;
    &lt;li id=&quot;P7NZ&quot;&gt;When rendering to EXR, ensure your video editing software (DaVinci Resolve, Blender, Adobe, ect) has the Color Management/Input Lookup Table set to Linear to sRGB (or Linear to Gamma 2.4 as an alternative) or else your EXR sequence will look dark, over saturated, and not what your viewport looks like.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;076q&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;7BXh&quot;&gt;Tutorials&lt;/h3&gt;
  &lt;figure id=&quot;WD3p&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/fVg5ihB8Wdc?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;RQok&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;OBX7&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;u17p&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;GrDY&quot;&gt;New Screenshots&lt;/h3&gt;
  &lt;p id=&quot;DlgR&quot;&gt;&lt;/p&gt;
  &lt;figure id=&quot;eg0S&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/0a/ba/0abae213-25d6-48ed-837a-86735cc70f16.png&quot; width=&quot;1056&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;0MAT&quot;&gt;Use OCIO settings in case of opening the picture in other softwares. But do not use this settings for next import to DaVinci because DaVinci already have the OCIO settings by default! For DaVinci you have to disable OCIO output but you should enable that for usual picture! Also Disable Tone Curve for DaVinci!&lt;/p&gt;
  &lt;figure id=&quot;uHAV&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/71/c5/71c5a071-5539-4d8f-80e5-f63cf19b1c75.png&quot; width=&quot;1336&quot; /&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;5RLq&quot;&gt;Always use OCIO Viewport settings in UE in case of exporting the image to the DaVinci becasue DaVinci expects that! Otherwise, the picture will be dark i&lt;/p&gt;

</content></entry><entry><id>glitchysparx:lighting</id><link rel="alternate" type="text/html" href="https://teletype.in/@glitchysparx/lighting?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=glitchysparx"></link><title>Lighting</title><published>2025-05-27T16:46:50.813Z</published><updated>2025-08-28T08:48:30.534Z</updated><summary type="html">Source:</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Di8W&quot;&gt;Lighting mindset&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#E1LM&quot;&gt;Lumen Settings &amp; Light Sources&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#sfv9&quot;&gt;Lumen Settings:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#8FN6&quot;&gt;Light Sources:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#fQ1a&quot;&gt;Lighting Interiors&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#AgdS&quot;&gt;Lighting and shadow course&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#RL39&quot;&gt;Bugs:&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#xlWz&quot;&gt;Bug no. 1&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#6NxJ&quot;&gt;Bug no. 2&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;Di8W&quot;&gt;Lighting mindset&lt;/h2&gt;
  &lt;p id=&quot;1m5t&quot;&gt;Source:&lt;/p&gt;
  &lt;figure id=&quot;wApL&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/dT4Vl3PGe08?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;ucqI&quot;&gt;Notes:&lt;/p&gt;
  &lt;ul id=&quot;w518&quot;&gt;
    &lt;li id=&quot;kvMl&quot;&gt;Light direction&lt;/li&gt;
    &lt;li id=&quot;GSdx&quot;&gt;Light size:&lt;/li&gt;
  &lt;/ul&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;GDY3&quot;&gt; The bigger it it, the softer shadows it casts.&lt;/p&gt;
  &lt;/section&gt;
  &lt;ul id=&quot;dMpQ&quot;&gt;
    &lt;li id=&quot;roUr&quot;&gt;Color and intensity&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;naJv&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;b1KC&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;E1LM&quot;&gt;Lumen Settings &amp;amp; Light Sources&lt;/h2&gt;
  &lt;p id=&quot;43HM&quot;&gt;Source: &lt;/p&gt;
  &lt;figure id=&quot;p7YJ&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/TbBFZKAbcYo?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;dg2a&quot;&gt;&lt;em&gt;UE Version: 5.5&lt;/em&gt;&lt;/p&gt;
  &lt;h3 id=&quot;sfv9&quot;&gt;Lumen Settings:&lt;/h3&gt;
  &lt;p id=&quot;NSSe&quot;&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;UTKQ&quot;&gt;World Settings:&lt;/blockquote&gt;
  &lt;ul id=&quot;OL0l&quot;&gt;
    &lt;li id=&quot;X4In&quot;&gt;Force No Precomputed Lighting -&amp;gt; true&lt;/li&gt;
  &lt;/ul&gt;
  &lt;blockquote id=&quot;ind7&quot;&gt;Project Settings:&lt;/blockquote&gt;
  &lt;ul id=&quot;VN65&quot;&gt;
    &lt;li id=&quot;47FU&quot;&gt;Default RHI -&amp;gt; DirectX 12&lt;/li&gt;
    &lt;li id=&quot;X2XO&quot;&gt;Dynamic Global Illumination Method -&amp;gt; Lumen&lt;/li&gt;
    &lt;li id=&quot;kOgu&quot;&gt;Reflection Method -&amp;gt; Lumen&lt;/li&gt;
    &lt;li id=&quot;2Mmx&quot;&gt;Use Hardware Ray Tracing when available -&amp;gt; true&lt;/li&gt;
    &lt;ul id=&quot;I2co&quot;&gt;
      &lt;li id=&quot;BbFB&quot;&gt;Keep in mind that you need &lt;em&gt;&lt;u&gt;NVIDIA RTX&lt;/u&gt;&lt;/em&gt; graphic card for hardware ray tracing&lt;/li&gt;
      &lt;li id=&quot;MQ0q&quot;&gt;If you don&amp;#x27;t have one, you can still use software ray tracing&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;b1JN&quot;&gt;Software Ray Tracing Mode -&amp;gt; Detail Tracing&lt;/li&gt;
    &lt;li id=&quot;lqNG&quot;&gt;Ray Lighting Mode -&amp;gt; Surface Cache&lt;/li&gt;
    &lt;li id=&quot;38RX&quot;&gt;MegaLights -&amp;gt; true&lt;/li&gt;
    &lt;li id=&quot;dHbn&quot;&gt;Shadow Map Method -&amp;gt; Virtual Shadow Maps&lt;/li&gt;
    &lt;li id=&quot;KBSR&quot;&gt;Support Hardware Ray Tracing -&amp;gt; true&lt;/li&gt;
    &lt;li id=&quot;5GgM&quot;&gt;Texture LOD -&amp;gt; true&lt;/li&gt;
    &lt;li id=&quot;KPXe&quot;&gt;Path Tracing -&amp;gt; true&lt;/li&gt;
    &lt;li id=&quot;zcgt&quot;&gt;Generate Mesh Distance Fields -&amp;gt; true&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;5TuC&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;8FN6&quot;&gt;Light Sources:&lt;/h3&gt;
  &lt;p id=&quot;7uAJ&quot;&gt;Set Mobility to &lt;strong&gt;Movable &lt;/strong&gt;for all light sources to use Lumen computations.&lt;/p&gt;
  &lt;p id=&quot;mQQS&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;NgFF&quot;&gt;✨ &lt;u&gt;Directional Light&lt;/u&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;LLtB&quot;&gt;It acts like a &lt;strong&gt;sun &lt;/strong&gt;in the scene. &lt;/blockquote&gt;
  &lt;p id=&quot;g4yG&quot;&gt;Settings:&lt;/p&gt;
  &lt;ul id=&quot;fQyc&quot;&gt;
    &lt;ul id=&quot;uiGh&quot;&gt;
      &lt;li id=&quot;tSFJ&quot;&gt;&lt;strong&gt;Source Angle&lt;/strong&gt; makes the shadows softer&lt;/li&gt;
      &lt;li id=&quot;VXj8&quot;&gt;&lt;strong&gt;Source Soft Angle&lt;/strong&gt; influences only the metalic surfaces&lt;/li&gt;
      &lt;li id=&quot;SPpJ&quot;&gt;&lt;strong&gt;Indirect Lighting Intensity&lt;/strong&gt; with value 0 disables Lumen&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;sx5Z&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;bO2x&quot;&gt;✨ &lt;u&gt;Point Light&lt;/u&gt;&lt;/p&gt;
  &lt;blockquote id=&quot;m0hV&quot;&gt;It emits light in all directions from a single point. Great for adding &lt;strong&gt;localized&lt;/strong&gt; lighting.&lt;/blockquote&gt;
  &lt;p id=&quot;OAiz&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;fQ1a&quot;&gt;Lighting Interiors&lt;/h2&gt;
  &lt;p id=&quot;NNvC&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;pMX1&quot;&gt;Source:&lt;/p&gt;
  &lt;figure id=&quot;LUPM&quot; class=&quot;m_column&quot;&gt;
    &lt;iframe src=&quot;https://www.youtube.com/embed/0GYyHDuaPcg?autoplay=0&amp;loop=0&amp;mute=0&quot;&gt;&lt;/iframe&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;f7PC&quot;&gt;&lt;em&gt;UE Version: 5.3&lt;/em&gt;&lt;/p&gt;
  &lt;p id=&quot;VzFd&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;AgdS&quot;&gt;Lighting and shadow course&lt;/h2&gt;
  &lt;p id=&quot;RtBh&quot;&gt;&lt;/p&gt;
  &lt;ul id=&quot;isV1&quot;&gt;
    &lt;li id=&quot;qj7p&quot;&gt;&lt;strong&gt;&lt;u&gt;Directional light:&lt;/u&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;0Ydj&quot;&gt;
      &lt;li id=&quot;DuMX&quot;&gt;Do not use the high values for  intensity for non-PBR lighting scenarios.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;Zzcf&quot;&gt;&lt;strong&gt;&lt;u&gt;Light sources:&lt;/u&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;Umh2&quot;&gt;
      &lt;li id=&quot;9ysS&quot;&gt;Disable megalights (UE5.5+)&lt;/li&gt;
      &lt;li id=&quot;8uPc&quot;&gt;&lt;strong&gt;Volumetric Scattering Intensity&lt;/strong&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;v6iw&quot;&gt;&lt;strong&gt;&lt;u&gt;PostProcessVolume:&lt;/u&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;Y4RB&quot;&gt;
      &lt;li id=&quot;ka1e&quot;&gt;&lt;strong&gt;Skylight Leaking&lt;/strong&gt; is used for indoor non-PBR lighting. &lt;/li&gt;
      &lt;li id=&quot;jWh0&quot;&gt;&lt;strong&gt;Screen Traces&lt;/strong&gt; -&amp;gt; false (Global Illumination settings)&lt;/li&gt;
      &lt;li id=&quot;kRZM&quot;&gt;&lt;strong&gt;Screen Traces&lt;/strong&gt; -&amp;gt; true + &lt;strong&gt;Final Gather Quality&lt;/strong&gt; -&amp;gt; high values (Global Illumination settings)&lt;/li&gt;
      &lt;li id=&quot;RJKk&quot;&gt;&lt;strong&gt;Exposure metering mode&lt;/strong&gt; -&amp;gt; Manual&lt;/li&gt;
      &lt;li id=&quot;hMTG&quot;&gt;&lt;strong&gt;Exposure Compensation&lt;/strong&gt; -&amp;gt; 0.0&lt;/li&gt;
      &lt;li id=&quot;mAFw&quot;&gt;&lt;strong&gt;Auto Exposure Apply Physical Camera Exposure &lt;/strong&gt;-&amp;gt; false &lt;/li&gt;
      &lt;li id=&quot;dM0U&quot;&gt;&lt;strong&gt;Camera Settings&lt;/strong&gt; in case of PBR&lt;/li&gt;
      &lt;li id=&quot;WjLt&quot;&gt;&lt;strong&gt;Infinite Extent (Unbound)&lt;/strong&gt; -&amp;gt; true&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;nFMH&quot;&gt;&lt;strong&gt;&lt;u&gt;Project Settings:&lt;/u&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;AaKu&quot;&gt;
      &lt;li id=&quot;gi6W&quot;&gt;&lt;strong&gt;Support Hardware Ray Tracing&lt;/strong&gt; -&amp;gt; true&lt;/li&gt;
      &lt;li id=&quot;SiRO&quot;&gt;&lt;strong&gt;Shadow Map Method&lt;/strong&gt; -&amp;gt; VirtualShadowMaps&lt;/li&gt;
      &lt;li id=&quot;l1ho&quot;&gt;&lt;strong&gt;Use Hardware Ray Tracing when available&lt;/strong&gt; -&amp;gt; true&lt;/li&gt;
      &lt;li id=&quot;nd3u&quot;&gt;&lt;strong&gt;Ray Lighting Mode&lt;/strong&gt; -&amp;gt; HitLighting for Reflections&lt;/li&gt;
      &lt;li id=&quot;ucnM&quot;&gt;&lt;strong&gt;Reflection method&lt;/strong&gt; -&amp;gt; Lumen&lt;/li&gt;
      &lt;li id=&quot;Dx0a&quot;&gt;&lt;strong&gt;Dynamic Global Illumination Method&lt;/strong&gt; -&amp;gt; Lumen&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;shEC&quot;&gt;&lt;strong&gt;&lt;u&gt;Fog:&lt;/u&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;eWbv&quot;&gt;
      &lt;li id=&quot;CEUB&quot;&gt;&lt;strong&gt;Exponential Height Fog &lt;/strong&gt;can be used for both exponential and volumetric fogs.&lt;/li&gt;
      &lt;li id=&quot;miut&quot;&gt;&lt;strong&gt;Local Fog Volume&lt;/strong&gt; enables the local fog only under the light source influence and is controlled by main &lt;strong&gt;Exponential Height Fog &lt;/strong&gt;at the same time. &lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;XHU7&quot;&gt;&lt;strong&gt;&lt;u&gt;Console commands:&lt;/u&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;7h1C&quot;&gt;
      &lt;li id=&quot;Xfv3&quot;&gt;r.VolumetricFog.InjectRaytracedLights -&amp;gt; 0/1 (default 0)&lt;/li&gt;
      &lt;li id=&quot;u59g&quot;&gt;r.VolumetricFog.GridSizeZ -&amp;gt; 1-1024 (default 512)&lt;/li&gt;
      &lt;li id=&quot;NJNI&quot;&gt;r.VolumetricFog.GridPixelSize -&amp;gt; 1-1024 (default 8)&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;48cN&quot;&gt;&lt;strong&gt;&lt;u&gt;Key points:&lt;/u&gt;&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;bV5U&quot;&gt;
      &lt;li id=&quot;xZCW&quot;&gt;Layers for depth&lt;/li&gt;
      &lt;li id=&quot;By5r&quot;&gt;Eye lighting for character lighting&lt;/li&gt;
      &lt;li id=&quot;uSd0&quot;&gt;Color grading, color palette preset and color script on preproduction&lt;/li&gt;
      &lt;li id=&quot;vLY0&quot;&gt;Key frames and references on preproduction&lt;/li&gt;
      &lt;li id=&quot;hnK6&quot;&gt;Detailed lighting scenarious &lt;/li&gt;
      &lt;li id=&quot;4T2B&quot;&gt;Interactive lighting for reflection of the actions what are going on the scene&lt;/li&gt;
      &lt;li id=&quot;kNId&quot;&gt;PBR vs non-PBR lighting&lt;/li&gt;
      &lt;li id=&quot;bG0n&quot;&gt;Render passes for layers postproduction in Nuke&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;LgXG&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;v89a&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;RL39&quot;&gt;Bugs:&lt;/h2&gt;
  &lt;p id=&quot;zSjw&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;xlWz&quot;&gt;&lt;strong&gt;Bug no. 1&lt;/strong&gt;&lt;/h3&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;7sGi&quot;&gt;&lt;em&gt;&lt;u&gt;Description:&lt;/u&gt;&lt;/em&gt; Doubled reflection layers&lt;/p&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;6qGy&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/aa/31/aa317703-c28f-4784-88f3-efb273642c5e.png&quot; width=&quot;1173&quot; /&gt;
    &lt;figcaption&gt;UE5.4&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;figure id=&quot;TWNB&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img2.teletype.in/files/54/2c/542ccac2-bad2-441d-8ddc-57576992cd53.png&quot; width=&quot;1047&quot; /&gt;
    &lt;figcaption&gt;UE5.4&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;cGhD&quot;&gt;&lt;em&gt;&lt;u&gt;Fix 1:&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;v11H&quot;&gt;&lt;em&gt;Light Source settings&lt;/em&gt;: &lt;strong&gt;Source Radius&lt;/strong&gt; -&amp;gt; 0.0 &lt;/p&gt;
    &lt;blockquote id=&quot;f2VJ&quot;&gt;&lt;em&gt;(Works for SpotLight)&lt;/em&gt;&lt;/blockquote&gt;
  &lt;/section&gt;
  &lt;p id=&quot;YTzx&quot;&gt;&lt;em&gt;&lt;u&gt;Fix 2:&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;bpnN&quot;&gt;&lt;em&gt;Light Source settings&lt;/em&gt;: &lt;strong&gt;Cast Ray Traced Shadows&lt;/strong&gt; -&amp;gt; Disabled &lt;/p&gt;
    &lt;blockquote id=&quot;NCfA&quot;&gt;(&lt;em&gt;Works for any source of light)&lt;/em&gt;&lt;/blockquote&gt;
  &lt;/section&gt;
  &lt;p id=&quot;5afk&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;ZsyC&quot;&gt;&lt;em&gt;&lt;u&gt;Final result:&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
  &lt;figure id=&quot;nOkN&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img3.teletype.in/files/ea/f7/eaf79bf1-e03c-4b72-aa55-2216fb891fc4.png&quot; width=&quot;1141&quot; /&gt;
  &lt;/figure&gt;
  &lt;hr /&gt;
  &lt;h3 id=&quot;6NxJ&quot;&gt;Bug no. 2&lt;/h3&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;YXPZ&quot;&gt;&lt;em&gt;&lt;u&gt;Description:&lt;/u&gt;&lt;/em&gt; Flickering pulsing light&lt;/p&gt;
    &lt;blockquote id=&quot;i6YH&quot;&gt;Statue&amp;#x27;s eyes lights are flickering instead of projecting the static light. &lt;/blockquote&gt;
  &lt;/section&gt;
  &lt;figure id=&quot;2a5q&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img1.teletype.in/files/85/9d/859d350a-3396-4b9e-9c94-e41e0d95186e.gif&quot; width=&quot;706&quot; /&gt;
    &lt;figcaption&gt;UE5.4&lt;/figcaption&gt;
  &lt;/figure&gt;
  &lt;p id=&quot;Y7wm&quot;&gt;&lt;em&gt;&lt;u&gt;Fix 1:&lt;/u&gt;&lt;/em&gt;&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;vGlH&quot;&gt;&lt;em&gt;PostProcessVolume settings:&lt;/em&gt; &lt;strong&gt;Screen Traces&lt;/strong&gt; -&amp;gt; false&lt;/p&gt;
  &lt;/section&gt;
  &lt;hr /&gt;

</content></entry><entry><id>glitchysparx:ue_rendering_notes</id><link rel="alternate" type="text/html" href="https://teletype.in/@glitchysparx/ue_rendering_notes?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=glitchysparx"></link><title>Rendering notes</title><published>2025-04-25T12:38:44.088Z</published><updated>2025-04-25T14:58:54.252Z</updated><summary type="html">UE provide UPrimitiveComponent - a base class for all actor components &quot;that contains or generate some sort of geometry, generally to be rendered or used as collision data&quot;.  That class is created and managed by the Game Thread.</summary><content type="html">
  &lt;nav&gt;
    &lt;ul&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#vzBF&quot;&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#cSbM&quot;&gt;📝Overview&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#hubq&quot;&gt;1. FPrimitiveSceneProxy&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#ozeI&quot;&gt;&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#KPsJ&quot;&gt;2. FMeshBatch&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#hOB6&quot;&gt;3. Mesh Pass&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#quKt&quot;&gt;4. FMeshDrawCommand&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#hjRL&quot;&gt;5. RHI&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_1&quot;&gt;&lt;a href=&quot;#Ra7p&quot;&gt;6. Under the UE hood&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#3E1A&quot;&gt;⚙️ What UE5 Does by Default&lt;/a&gt;&lt;/li&gt;
      &lt;li class=&quot;m_level_2&quot;&gt;&lt;a href=&quot;#yiRB&quot;&gt;🔥 How InstancedStaticMeshComponent (ISM) Optimizes Rendering&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/nav&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;cSbM&quot;&gt;📝Overview&lt;/h2&gt;
  &lt;p id=&quot;9Rtd&quot;&gt;&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;figure id=&quot;JHBQ&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/75/5c/755caf58-94c9-43f9-85c9-5e3aaf1c0eaa.png&quot; width=&quot;1440&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;p id=&quot;EBLq&quot;&gt;Sources:&lt;/p&gt;
  &lt;ul id=&quot;EsEQ&quot;&gt;
    &lt;li id=&quot;HyXN&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/documentation/en-us/unreal-engine/mesh-drawing-pipeline-in-unreal-engine&quot; target=&quot;_blank&quot;&gt;UE Mesh Drawing Pipeline&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;BF7z&quot;&gt;UE source code&lt;/li&gt;
    &lt;li id=&quot;PPyT&quot;&gt;ChatGPT&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;LaP4&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;FAAu&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;hubq&quot;&gt;1. FPrimitiveSceneProxy&lt;/h2&gt;
  &lt;p id=&quot;WhPY&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;xVWo&quot;&gt;UE provide &lt;strong&gt;&lt;em&gt;&lt;u&gt;UPrimitiveComponent &lt;/u&gt;&lt;/em&gt;&lt;/strong&gt;- a base class for all actor components &amp;quot;that contains or generate some sort of &lt;strong&gt;geometry&lt;/strong&gt;, generally to be rendered or used as collision data&amp;quot;.  That class is created and managed by the Game Thread. &lt;/p&gt;
  &lt;p id=&quot;aHBm&quot;&gt;To be rendered that component create the class &lt;strong&gt;&lt;em&gt;&lt;u&gt;FPrimitiveSceneProxy &lt;/u&gt;&lt;/em&gt;&lt;/strong&gt;- an Unreal’s &lt;strong&gt;render-thread representation&lt;/strong&gt; of a primitive. It acts as a &lt;strong&gt;bridge&lt;/strong&gt; between the &lt;strong&gt;game-thread&lt;/strong&gt; and the &lt;strong&gt;render-thread&lt;/strong&gt;, storing minimal data needed to render the mesh efficiently.&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;hU5Q&quot; data-lang=&quot;cpp&quot;&gt;// copied code from UPrimitiveComponent class UE5.2

/** 
* Creates a proxy to represent the primitive to the scene manager 
* in the rendering thread. 
* @return The proxy object. 
*/

virtual FPrimitiveSceneProxy* CreateSceneProxy()
{    
   return NULL;
}&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;2ORt&quot;&gt;For every new class derived from the &lt;em&gt;UPrimitiveComponent &lt;/em&gt;UE implements a new primitive proxy class derived from &lt;em&gt;FPrimitiveSceneProxy&lt;/em&gt;: &lt;em&gt;FSpriteSceneProxy, FSphereSceneProxy, FTextRenderSceneProxy, FParticleSystemSceneProxy, FWidget3DSceneProxy&lt;/em&gt; etc. &lt;/p&gt;
  &lt;p id=&quot;Dxfk&quot;&gt;The same way for creating this objects each new class derived from the &lt;em&gt;UPrimitiveComponent&lt;/em&gt; overrides &lt;em&gt;CreateSceneProxy()&lt;/em&gt; function.&lt;/p&gt;
  &lt;p id=&quot;FPGV&quot;&gt;&lt;em&gt;FPrimitiveSceneProxy&lt;/em&gt; is responsible for submitting &lt;em&gt;FMeshBatch&amp;#x27;s&lt;/em&gt; to the renderer through the callbacks to &lt;em&gt;GetDynamicMeshElements()&lt;/em&gt; and &lt;em&gt;DrawStaticElements()&lt;/em&gt;.&lt;/p&gt;
  &lt;p id=&quot;2YdA&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;h2 id=&quot;ozeI&quot;&gt;&lt;/h2&gt;
  &lt;h2 id=&quot;KPsJ&quot;&gt;2. FMeshBatch&lt;/h2&gt;
  &lt;p id=&quot;HXv3&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;bj78&quot;&gt;&lt;strong&gt;&lt;em&gt;&lt;u&gt;FMeshBatch&lt;/u&gt;&lt;/em&gt;&lt;/strong&gt; describes a &lt;strong&gt;single draw call&lt;/strong&gt; to the GPU. It specifies:&lt;/p&gt;
  &lt;ul id=&quot;ce09&quot;&gt;
    &lt;li id=&quot;ov2V&quot;&gt;Vertex buffers, index buffers&lt;/li&gt;
    &lt;li id=&quot;HbXU&quot;&gt;Material/shader references&lt;/li&gt;
    &lt;li id=&quot;wE1m&quot;&gt;Render states (depth, stencil, blending)&lt;/li&gt;
    &lt;li id=&quot;fVAA&quot;&gt;LOD and mesh pass information&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;sdor&quot;&gt;When the rendering pipeline prepares to draw meshes, it assembles them into batches (&lt;em&gt;FMeshBatch&lt;/em&gt;) grouped by compatible render states and materials.&lt;/p&gt;
  &lt;p id=&quot;vzPr&quot;&gt;&lt;strong&gt;One mesh can generate multiple batches&lt;/strong&gt;:&lt;/p&gt;
  &lt;ul id=&quot;bixj&quot;&gt;
    &lt;li id=&quot;QTXL&quot;&gt;Multiple materials → multiple batches.&lt;/li&gt;
    &lt;li id=&quot;Fb0O&quot;&gt;Different rendering passes (shadow, depth pre-pass, base pass) → separate batches.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;KSZO&quot;&gt;🔸Simple Example:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;p id=&quot;QBeZ&quot;&gt;Mesh: SM_Rock&lt;br /&gt;- Material: M_Stone → FMeshBatch #1 (Base Pass)&lt;br /&gt;- Shadow Pass → FMeshBatch #2 (Shadow Pass)&lt;/p&gt;
  &lt;/section&gt;
  &lt;p id=&quot;bg08&quot;&gt;&lt;em&gt;FMeshBatch &lt;/em&gt;decouples the &lt;em&gt;FPrimitiveSceneProxy &lt;/em&gt;implementation (user code) from mesh passes (private renderer module). It contains everything the pass needs to figure out final shader bindings and render state, so the proxy never knows what passes it will be rendered in.&lt;/p&gt;
  &lt;p id=&quot;WHm7&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;TjQE&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;hOB6&quot;&gt;3. Mesh Pass&lt;/h2&gt;
  &lt;p id=&quot;6xrO&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;Ns5p&quot;&gt;A &lt;strong&gt;Mesh Pass&lt;/strong&gt; is a step (or &amp;quot;stage&amp;quot;) of rendering, each with different goals:&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;8dwk&quot;&gt;______________________________________________________________________
   Mesh Pass Name   |                   Goal                         
--------------------+-------------------------------------------------
Depth Pre-Pass      |Fill depth buffer early (efficient depth testing
Base Pass           |Main color/material rendering                   
Shadow Pass         |Shadow map generation                           
Translucency Pass   |Draw transparent objects                        
Post-Processing Pass|Effects (lighting, bloom, reflections)          
----------------------------------------------------------------------&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;GScS&quot;&gt;Each mesh pass collects and processes specific &lt;em&gt;FMeshBatches&lt;/em&gt;.&lt;/p&gt;
  &lt;p id=&quot;ORkB&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;wj0D&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;quKt&quot;&gt;4. FMeshDrawCommand&lt;/h2&gt;
  &lt;p id=&quot;W3g9&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;cXnK&quot;&gt;The next step is to convert &lt;em&gt;FMeshBatch&lt;/em&gt; into a mesh pass specific &lt;em&gt;&lt;u&gt;&lt;strong&gt;FMeshDrawCommand&lt;/strong&gt;&lt;/u&gt;&lt;/em&gt; .&lt;/p&gt;
  &lt;p id=&quot;SlLn&quot;&gt;&lt;em&gt;FMeshDrawCommand&lt;/em&gt; is an interface between &lt;em&gt;FMeshBatch&lt;/em&gt; and the &lt;em&gt;RHI&lt;/em&gt;. It&amp;#x27;s a fully stateless draw description that stores everything that the &lt;em&gt;RHI &lt;/em&gt;needs to know about a mesh draw:&lt;/p&gt;
  &lt;ul id=&quot;hX89&quot;&gt;
    &lt;li id=&quot;46Cv&quot;&gt;Which shaders to use.&lt;/li&gt;
    &lt;li id=&quot;ZEiI&quot;&gt;Their resource bindings.&lt;/li&gt;
    &lt;li id=&quot;T7gN&quot;&gt;Draw call parameters.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;gnmx&quot;&gt;This enables caching and merging the draw calls just above the &lt;em&gt;RHI&lt;/em&gt; level. &lt;em&gt;FMeshDrawCommand&lt;/em&gt; is created from a &lt;em&gt;FMeshBatch&lt;/em&gt; by a mesh pass specific &lt;em&gt;&lt;u&gt;&lt;strong&gt;FMeshPassProcessor&lt;/strong&gt;&lt;/u&gt;&lt;/em&gt;.&lt;/p&gt;
  &lt;p id=&quot;clBj&quot;&gt;Finally, &lt;em&gt;SubmitMeshDrawCommands()&lt;/em&gt; is used to convert &lt;em&gt;FMeshDrawCommand &lt;/em&gt;into a series of &lt;em&gt;RHI &lt;/em&gt;commands set on a &lt;em&gt;RHICommandList&lt;/em&gt;.&lt;/p&gt;
  &lt;p id=&quot;8bbe&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;cwq5&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;hjRL&quot;&gt;5. RHI&lt;/h2&gt;
  &lt;p id=&quot;lQBm&quot;&gt;&lt;/p&gt;
  &lt;p id=&quot;kyAj&quot;&gt;&lt;em&gt;RHI &lt;/em&gt;is Unreal’s &lt;u&gt;abstraction layer over graphics APIs&lt;/u&gt; (DirectX, Vulkan, Metal, etc.):&lt;/p&gt;
  &lt;ul id=&quot;gxyV&quot;&gt;
    &lt;li id=&quot;hNLQ&quot;&gt;It standardizes rendering commands across platforms.&lt;/li&gt;
    &lt;li id=&quot;EF9I&quot;&gt;Allows Unreal to support multiple graphics APIs without rewriting rendering logic.&lt;/li&gt;
    &lt;li id=&quot;hmoZ&quot;&gt;Handles buffers, shaders, textures, and GPU communication.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;5t7R&quot;&gt;&lt;/p&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;pre id=&quot;Rsla&quot;&gt;[Game Thread (Component)]
       ↓
[Render Thread (FPrimitiveSceneProxy -&amp;gt; FMeshBatch -&amp;gt; MeshPasses)]
       ↓
[RHI Commands]
       ↓
[Vulkan / DirectX / Metal API calls]
       ↓
[GPU]&lt;/pre&gt;
  &lt;/section&gt;
  &lt;p id=&quot;xwdW&quot;&gt;&lt;/p&gt;
  &lt;hr /&gt;
  &lt;p id=&quot;pcfG&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Ra7p&quot;&gt;6. Under the UE hood&lt;/h2&gt;
  &lt;p id=&quot;P6qk&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;3E1A&quot;&gt;⚙️ &lt;u&gt;What UE5 Does by Default&lt;/u&gt;&lt;/h3&gt;
  &lt;p id=&quot;lM06&quot;&gt;When you have multiple identical &lt;strong&gt;StaticMeshActors&lt;/strong&gt;:&lt;/p&gt;
  &lt;ul id=&quot;MwVf&quot;&gt;
    &lt;li id=&quot;vsAR&quot;&gt;&lt;strong&gt;Rendering pipeline&lt;/strong&gt; creates a separate &lt;em&gt;FPrimitiveSceneProxy &lt;/em&gt;and separate &lt;em&gt;FMeshBatch &lt;/em&gt;for &lt;strong&gt;each actor/component&lt;/strong&gt;.&lt;/li&gt;
    &lt;li id=&quot;kg4n&quot;&gt;Each separate &lt;em&gt;FMeshBatch &lt;/em&gt;typically becomes a separate GPU draw call.&lt;/li&gt;
    &lt;li id=&quot;xCKA&quot;&gt;More actors → More draw calls → Higher CPU overhead → Lower frame rate.&lt;/li&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;0U7x&quot;&gt;UE5 optimizes many things (occlusion culling, frustum culling, Nanite for high-density geometry), &lt;strong&gt;but does NOT automatically combine separate actors&lt;/strong&gt; into batches. Each actor is considered a unique primitive.&lt;/p&gt;
  &lt;p id=&quot;MiYN&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;yiRB&quot;&gt;🔥 &lt;strong&gt;&lt;u&gt;How InstancedStaticMeshComponent (ISM) Optimizes Rendering&lt;/u&gt;&lt;/strong&gt;&lt;/h3&gt;
  &lt;p id=&quot;UMsV&quot;&gt;When you explicitly group actors into &lt;strong&gt;ISMs&lt;/strong&gt;:&lt;/p&gt;
  &lt;ul id=&quot;jnKM&quot;&gt;
    &lt;li id=&quot;ASGX&quot;&gt;A single &lt;em&gt;FPrimitiveSceneProxy &lt;/em&gt;is created for the entire instanced group.&lt;/li&gt;
    &lt;li id=&quot;AWyE&quot;&gt;A single (or fewer) &lt;em&gt;FMeshBatch &lt;/em&gt;per mesh/material → dramatically reduced draw calls.&lt;/li&gt;
    &lt;li id=&quot;4Mym&quot;&gt;GPU efficiently draws multiple instances with only one GPU call, changing transforms internally per-instance.&lt;/li&gt;
  &lt;/ul&gt;

</content></entry><entry><id>glitchysparx:docs-for-new-team-mates</id><link rel="alternate" type="text/html" href="https://teletype.in/@glitchysparx/docs-for-new-team-mates?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=glitchysparx"></link><title>Docs for new team mates</title><published>2024-11-11T14:03:15.232Z</published><updated>2024-11-11T14:03:15.232Z</updated><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://img1.teletype.in/files/40/83/4083e506-f627-4004-9602-a1082c77f3b0.png"></media:thumbnail><summary type="html">&lt;img src=&quot;https://img4.teletype.in/files/32/db/32db51e0-0c11-433a-bfdc-0d1cf7564419.png&quot;&gt;</summary><content type="html">
  &lt;figure id=&quot;4J6Y&quot; class=&quot;m_column&quot;&gt;
    &lt;img src=&quot;https://img4.teletype.in/files/32/db/32db51e0-0c11-433a-bfdc-0d1cf7564419.png&quot; width=&quot;1024&quot; /&gt;
  &lt;/figure&gt;
  &lt;h3 id=&quot;WqJi&quot;&gt;Docs list:&lt;/h3&gt;
  &lt;ol id=&quot;XRaG&quot;&gt;
    &lt;li id=&quot;8dk5&quot;&gt;&lt;a href=&quot;https://docs.google.com/document/d/1uw9Dfui5ZepSrBpMc1DrxFOeRFnDu8ubzFse8Mr_s7E/edit?tab=t.0#heading=h.l2reo28si4bc&quot; target=&quot;_blank&quot;&gt;https://docs.google.com/document/d/1uw9Dfui5ZepSrBpMc1DrxFOeRFnDu8ubzFse8Mr_s7E/edit?tab=t.0#heading=h.l2reo28si4bc&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;KLlb&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/documentation/en-us/unreal-engine/programming-subsystems-in-unreal-engine&quot; target=&quot;_blank&quot;&gt;https://dev.epicgames.com/documentation/en-us/unreal-engine/programming-subsystems-in-unreal-engine&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;kq0C&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/documentation/en-us/unreal-engine/function-specifiers?application_version=4.27&quot; target=&quot;_blank&quot;&gt;https://dev.epicgames.com/documentation/en-us/unreal-engine/function-specifiers?application_version=4.27&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;CibQ&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/documentation/en-us/unreal-engine/epic-cplusplus-coding-standard-for-unreal-engine&quot; target=&quot;_blank&quot;&gt;https://dev.epicgames.com/documentation/en-us/unreal-engine/epic-cplusplus-coding-standard-for-unreal-engine&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;SePl&quot;&gt;&lt;a href=&quot;https://dev.epicgames.com/community/learning/knowledge-base/GDD9/unreal-engine-modules-overview-and-structure&quot; target=&quot;_blank&quot;&gt;https://dev.epicgames.com/community/learning/knowledge-base/GDD9/unreal-engine-modules-overview-and-structure&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;EMeq&quot;&gt;&lt;a href=&quot;https://benui.ca/unreal/uclass/&quot; target=&quot;_blank&quot;&gt;https://benui.ca/unreal/uclass/&lt;/a&gt;&lt;/li&gt;
  &lt;/ol&gt;
  &lt;p id=&quot;jGt1&quot;&gt;&lt;/p&gt;
  &lt;h3 id=&quot;rvNC&quot;&gt;Suggests areas of expertise or knowledge:&lt;/h3&gt;
  &lt;ol id=&quot;X2We&quot;&gt;
    &lt;li id=&quot;qhP9&quot;&gt;Architecture design and patterns&lt;/li&gt;
    &lt;li id=&quot;elYb&quot;&gt;Representation of 3D models data in cpp&lt;/li&gt;
    &lt;li id=&quot;Ts4x&quot;&gt;Slates&lt;/li&gt;
    &lt;li id=&quot;V0Tb&quot;&gt;Garbage Collector and Reflection system (with UHT)&lt;/li&gt;
    &lt;li id=&quot;y7D5&quot;&gt;Smart pointers in UE&lt;/li&gt;
    &lt;li id=&quot;dRNo&quot;&gt;Modules (preprocessor) and subsystems (runtime)&lt;/li&gt;
    &lt;li id=&quot;ohbs&quot;&gt;Multithreading&lt;/li&gt;
  &lt;/ol&gt;

</content></entry><entry><id>glitchysparx:software-architecture-patterns</id><link rel="alternate" type="text/html" href="https://teletype.in/@glitchysparx/software-architecture-patterns?utm_source=teletype&amp;utm_medium=feed_atom&amp;utm_campaign=glitchysparx"></link><title>Software architecture patterns</title><published>2024-10-30T12:00:37.068Z</published><updated>2024-10-31T18:14:34.977Z</updated><summary type="html">3 pattern design types:</summary><content type="html">
  &lt;p id=&quot;adN5&quot;&gt;Brief:&lt;/p&gt;
  &lt;ul id=&quot;WWcH&quot;&gt;
    &lt;li id=&quot;JgsD&quot;&gt;&lt;a href=&quot;#U3KK&quot;&gt;3 pattern design types&lt;/a&gt;&lt;/li&gt;
    &lt;li id=&quot;5E6J&quot;&gt;&lt;a href=&quot;#Az8r&quot;&gt;Creational&lt;/a&gt;&lt;/li&gt;
    &lt;ul id=&quot;YvZN&quot;&gt;
      &lt;li id=&quot;kZmc&quot;&gt;&lt;a href=&quot;#US4G&quot;&gt;Factory&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;pPsj&quot;&gt;&lt;a href=&quot;#2IWZ&quot;&gt;Abstract Factory&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;uWur&quot;&gt;&lt;a href=&quot;#tt7h&quot;&gt;Builder&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;hNk8&quot;&gt;&lt;a href=&quot;#B6v4&quot;&gt;Prototype&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;ww2y&quot;&gt;&lt;a href=&quot;#X6lq&quot;&gt;Singleton&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;BdV9&quot;&gt;&lt;a href=&quot;#mZug&quot;&gt;Structural&lt;/a&gt;&lt;/li&gt;
    &lt;ul id=&quot;7L8N&quot;&gt;
      &lt;li id=&quot;XUc3&quot;&gt;&lt;a href=&quot;#XCpU&quot;&gt;Adapter&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;twnG&quot;&gt;&lt;a href=&quot;#V1u6&quot;&gt;Bridge&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;NRdj&quot;&gt;&lt;a href=&quot;#isHN&quot;&gt;Composite&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;YWg6&quot;&gt;&lt;a href=&quot;#aKv6&quot;&gt;Decorator&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;EEIk&quot;&gt;&lt;a href=&quot;#z9Gu&quot;&gt;Facade&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;65UD&quot;&gt;&lt;a href=&quot;#kcRb&quot;&gt;Flyweight&lt;/a&gt;&lt;/li&gt;
      &lt;li id=&quot;4kXo&quot;&gt;&lt;a href=&quot;#Lko4&quot;&gt;Proxy&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;Bwoe&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;U3KK&quot;&gt;&lt;u&gt;3 pattern design types:&lt;/u&gt;&lt;/h2&gt;
  &lt;ul id=&quot;2vzY&quot;&gt;
    &lt;li id=&quot;cwpO&quot;&gt;&lt;strong&gt;Creational&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;AydM&quot;&gt;
      &lt;li id=&quot;DyuL&quot;&gt;&lt;em&gt;Purpose&lt;/em&gt;: Manage the creation of objects, enhancing flexibility and reuse.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;DOhT&quot;&gt;&lt;strong&gt;Structural&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;OiGQ&quot;&gt;
      &lt;li id=&quot;vsQD&quot;&gt;&lt;em&gt;Purpose&lt;/em&gt;: Define how classes and objects are composed to form larger structures.&lt;/li&gt;
    &lt;/ul&gt;
    &lt;li id=&quot;TP5g&quot;&gt;&lt;strong&gt;Behavioral&lt;/strong&gt;&lt;/li&gt;
    &lt;ul id=&quot;rajD&quot;&gt;
      &lt;li id=&quot;0yEv&quot;&gt;&lt;em&gt;Purpose:&lt;/em&gt; Handle communication between objects, manage algorithms, and responsibility chains.&lt;/li&gt;
    &lt;/ul&gt;
  &lt;/ul&gt;
  &lt;p id=&quot;oGMB&quot;&gt;&lt;/p&gt;
  &lt;h2 id=&quot;Az8r&quot;&gt;&lt;strong&gt;Creational:&lt;/strong&gt;&lt;/h2&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;US4G&quot;&gt;&lt;strong&gt;Factory&lt;/strong&gt;&lt;/h3&gt;
    &lt;ul id=&quot;8sTz&quot;&gt;&lt;/ul&gt;
    &lt;ul id=&quot;bwV9&quot;&gt;&lt;/ul&gt;
    &lt;p id=&quot;Cnq6&quot;&gt;Defines an interface for creating objects but lets subclasses alter the type of created objects.&lt;/p&gt;
    &lt;figure id=&quot;oHgb&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/b0/36/b036ca80-b958-44b1-a4a9-6dd2974c2d7c.png&quot; width=&quot;980&quot; /&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;ZsYc&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img1.teletype.in/files/02/d0/02d0f6c8-b77c-4799-86c3-76a1d02381fe.png&quot; width=&quot;1122&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;2IWZ&quot;&gt;&lt;strong&gt;Abstract Factory&lt;/strong&gt;&lt;/h3&gt;
    &lt;ul id=&quot;mizU&quot;&gt;&lt;/ul&gt;
    &lt;p id=&quot;WZfD&quot;&gt;Provides an interface for &lt;strong&gt;creating families of related objects&lt;/strong&gt; without specifying their concrete classes.&lt;/p&gt;
    &lt;figure id=&quot;XTTF&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/7b/87/7b877eb7-32c7-4dbd-a383-4c76e3e39f23.png&quot; width=&quot;1075&quot; /&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;98k6&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/f6/1a/f61ab6b0-4005-4fa3-b3fc-983c884547d4.png&quot; width=&quot;1083&quot; /&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;6gJe&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img1.teletype.in/files/ca/f6/caf6edcf-9724-4c58-820f-a9e7fc1ed78d.png&quot; width=&quot;1018&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(263, 48%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;tt7h&quot;&gt;&lt;strong&gt;Builder&lt;/strong&gt;&lt;/h3&gt;
    &lt;ul id=&quot;h9oS&quot;&gt;&lt;/ul&gt;
    &lt;p id=&quot;J5XW&quot;&gt;Constructs a complex object &lt;strong&gt;step by step&lt;/strong&gt;, often used when objects need many optional parameters or different configurations.&lt;/p&gt;
    &lt;figure id=&quot;WfHB&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/fa/0f/fa0f603e-ff69-4ecb-8775-d1a3a778bad0.png&quot; width=&quot;1029&quot; /&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;s7CT&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/32/81/3281f51f-b129-430b-895c-44da8e7363e3.png&quot; width=&quot;1018&quot; /&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;xxIa&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img1.teletype.in/files/cb/63/cb6372e2-421f-4956-9238-f895a4db02ec.png&quot; width=&quot;1008&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(170, 33%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;B6v4&quot;&gt;&lt;strong&gt;Prototype&lt;/strong&gt;&lt;/h3&gt;
    &lt;ul id=&quot;KSiU&quot;&gt;&lt;/ul&gt;
    &lt;p id=&quot;gkXk&quot;&gt;Creates new objects by copying an existing object, used for cloning and when object creation is expensive.&lt;/p&gt;
    &lt;figure id=&quot;7QRR&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/fc/21/fc21b1aa-d820-4114-90c1-ae9ee3df365c.png&quot; width=&quot;1005&quot; /&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;4OU4&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/5f/29/5f296b6d-ab02-47ab-9c6d-68ac27c5ae30.png&quot; width=&quot;1018&quot; /&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;5ccN&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img1.teletype.in/files/8b/6e/8b6eb081-513b-465b-8973-6d5b6432280e.png&quot; width=&quot;827&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;X6lq&quot;&gt;Singleton&lt;/h3&gt;
    &lt;p id=&quot;qCsj&quot;&gt;Ensures a &lt;strong&gt;class has only one instance&lt;/strong&gt; and provides a global access point to it.&lt;/p&gt;
    &lt;figure id=&quot;zVJq&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/d2/c0/d2c09db4-bf61-4834-80d0-715142e7e680.png&quot; width=&quot;1048&quot; /&gt;
    &lt;/figure&gt;
    &lt;p id=&quot;Oc73&quot;&gt;Such class doesn&amp;#x27;t have a public constructor but a pulic static getter returned the instance of this class.&lt;/p&gt;
    &lt;figure id=&quot;jyp3&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/b2/47/b2478a76-7fc6-420c-9d96-6a01d29ba659.png&quot; width=&quot;761&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;h2 id=&quot;mZug&quot;&gt;&lt;strong&gt;Structural&lt;/strong&gt;&lt;/h2&gt;
  &lt;section style=&quot;background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;XCpU&quot;&gt;Adapter&lt;/h3&gt;
    &lt;p id=&quot;xNu0&quot;&gt;Converts an interface of a class into another interface that clients expect, allowing incompatible interfaces to work together.&lt;/p&gt;
    &lt;figure id=&quot;Dhgp&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/5c/09/5c09bc83-e1db-48da-a5c1-5c8d02361feb.png&quot; width=&quot;999&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;V1u6&quot;&gt;Bridge&lt;/h3&gt;
    &lt;p id=&quot;XM1e&quot;&gt;Separates an abstraction from its implementation, so the two can vary independently.&lt;/p&gt;
    &lt;figure id=&quot;wjKV&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/9c/0e/9c0e7dc2-f7ea-498f-9c90-c980d34cf0f1.png&quot; width=&quot;983&quot; /&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;Tv2S&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/71/88/7188cce7-899e-4650-8d74-59daa67f9964.png&quot; width=&quot;1075&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(24,  24%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;isHN&quot;&gt;Composite (Tree)&lt;/h3&gt;
    &lt;p id=&quot;MQAK&quot;&gt;Treats individual objects and compositions of objects uniformly, often used to represent hierarchies (e.g., a file system).&lt;/p&gt;
    &lt;figure id=&quot;wSsK&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/19/9f/199f58d5-0ae9-451f-a61e-499eb1cb7e55.png&quot; width=&quot;824&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(236, 74%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;aKv6&quot;&gt;Decorator (Wrapper)&lt;/h3&gt;
    &lt;p id=&quot;rr2K&quot;&gt;Adds new behavior to objects dynamically without altering their structure, useful for adding features at runtime.&lt;/p&gt;
    &lt;figure id=&quot;kylR&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/5f/19/5f1980d7-65fd-4e83-98ab-3adb52235b0c.png&quot; width=&quot;954&quot; /&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;OT9F&quot; class=&quot;m_original&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/d5/b5/d5b53c9d-d6f9-4b33-9790-1d27073e3245.png&quot; width=&quot;981&quot; /&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;D54C&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/3e/75/3e75ab85-e624-47c6-98cc-e62ba9a9e813.png&quot; width=&quot;1037&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;z9Gu&quot;&gt;Facade&lt;/h3&gt;
    &lt;p id=&quot;iC7i&quot;&gt;Provides a simplified interface to a complex subsystem, used to reduce dependency and simplify interactions.&lt;/p&gt;
    &lt;figure id=&quot;doLq&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/bd/38/bd381bc0-ed9b-472a-83c7-70ce65547463.png&quot; width=&quot;918&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;kcRb&quot;&gt;Flyweight (Cache)&lt;/h3&gt;
    &lt;p id=&quot;eDJ2&quot;&gt;Reduces memory usage by sharing common parts of objects, especially useful in systems with large numbers of similar objects.&lt;/p&gt;
    &lt;figure id=&quot;p94X&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/b3/e6/b3e683fe-2ff5-4579-9b71-530803d643bb.png&quot; width=&quot;1033&quot; /&gt;
      &lt;figcaption&gt;Bad&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;qtWn&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img3.teletype.in/files/6c/02/6c0270fc-ba64-4467-8ced-72d8595bc523.png&quot; width=&quot;1004&quot; /&gt;
      &lt;figcaption&gt;Good&lt;/figcaption&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;7qDE&quot; class=&quot;m_original&quot;&gt;
      &lt;img src=&quot;https://img2.teletype.in/files/94/ee/94eebc3e-7d0e-481a-9dc6-a964bf526a36.png&quot; width=&quot;1001&quot; /&gt;
      &lt;figcaption&gt;Perfect&lt;/figcaption&gt;
    &lt;/figure&gt;
  &lt;/section&gt;
  &lt;section style=&quot;background-color:hsl(hsl(34,  84%, var(--autocolor-background-lightness, 95%)), 85%, 85%);&quot;&gt;
    &lt;h3 id=&quot;Lko4&quot;&gt;Proxy&lt;/h3&gt;
    &lt;p id=&quot;o3IO&quot;&gt;&lt;strong&gt;Provides a placeholder&lt;/strong&gt; for another object to control access, manage permissions, or optimize performance.&lt;/p&gt;
    &lt;p id=&quot;EOvJ&quot;&gt;&lt;/p&gt;
    &lt;p id=&quot;ZBWs&quot;&gt;With an &lt;strong&gt;Adapter&lt;/strong&gt;, you access an existing object through a different interface. &lt;br /&gt;With an &lt;strong&gt;Proxy&lt;/strong&gt;, the interface remains unchanged. &lt;br /&gt;With &lt;strong&gt;Decorator&lt;/strong&gt;, you access an object through an extended interface.&lt;/p&gt;
    &lt;figure id=&quot;oR1G&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/77/b8/77b8282c-ff0e-409c-950c-c0e01b2b8c3f.png&quot; width=&quot;1052&quot; /&gt;
    &lt;/figure&gt;
    &lt;figure id=&quot;ffMD&quot; class=&quot;m_column&quot;&gt;
      &lt;img src=&quot;https://img4.teletype.in/files/7b/d4/7bd479bf-dd43-49a5-81d8-e7f7d05b182a.png&quot; width=&quot;983&quot; /&gt;
    &lt;/figure&gt;
  &lt;/section&gt;

</content></entry></feed>