<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Stride Game Engine</title>
    <description>C# Stride Game Engine is a powerful and versatile game development engine that is based on the C# programming language</description>
    <link>https://www.stride3d.net</link>
    <link>https://www.stride3d.net/feed.xml</link>
    <atom:link href="https://www.stride3d.net/feed.xml" rel="self" type="application/rss+xml"/>
    <pubDate>Wed, 24 Dec 2025 00:00:00 +0000</pubDate>
    <lastBuildDate>Wed, 24 Dec 2025 00:00:00 +0000</lastBuildDate>
    <generator>Eleventy 3.0</generator>
    <item>
      <title>Investigating SPIR-V for the shader system - Part 3</title>
      <description>&lt;p&gt;In this blog post, we will focus on how the new SDSL parser has been implemented through writing a prototype expression parser as an example. We will see how this can be possible without sacrificing performance and allocating the least amount of memory possible. And finally see how this improved on the current shader parser system in Stride.&lt;/p&gt;
&lt;p&gt;If you&#39;re interested in the other parts of this blog series :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/&quot;&gt;Part 1&lt;/a&gt; An introduction to the project&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/&quot;&gt;Part 2&lt;/a&gt; we parse and assemble some SPIR-V&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Table of Contents:&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#preface&quot;&gt;Preface&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#why-not-using-a-library-%3F&quot;&gt;Why not using a library ?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#the-3rd-experiment&quot;&gt;The 3rd experiment&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#the-tree&quot;&gt;The tree&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#scanning-code&quot;&gt;Scanning code&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#building-blocks&quot;&gt;Building blocks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#abstractions&quot;&gt;Abstractions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#benchmarks&quot;&gt;Benchmarks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#conclusions&quot;&gt;Conclusions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;p&gt;So many things happened since the &lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/&quot;&gt;the last blog post&lt;/a&gt; but none were written in a blog post format, fortunately for me, with the holidays I have time to tell more about it.&lt;/p&gt;
&lt;h2 id=&quot;preface&quot; tabindex=&quot;-1&quot;&gt;Preface &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#preface&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Last time we went through SPIR-V and how to parse/assemble SPIR-V using C#, this time we&#39;ll see how the new SDSL parser was built from the ground up. I&#39;ll go through the implementation of a small parser to illustrate the design chosen for SDSL.&lt;/p&gt;
&lt;p&gt;We&#39;re also keeping the same principles that this project started with :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fast&lt;/li&gt;
&lt;li&gt;Low heap allocation&lt;/li&gt;
&lt;li&gt;Easy to update/modify&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This post will show much more code, most of it will serve as an example, it won&#39;t always compile and might need some tweeking but can be used as a base to understand how the new SDSL parser works.&lt;/p&gt;
&lt;h2 id=&quot;why-not-using-a-library-%3F&quot; tabindex=&quot;-1&quot;&gt;Why not using a library ? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#why-not-using-a-library-%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Why should we ? 🤔&lt;/p&gt;
&lt;p&gt;SDSL is not going to change much and we&#39;re only maintaining one language so we can write a simple parser that will only work for SDSL.&lt;/p&gt;
&lt;p&gt;Parsing a programming language is easy, the difficult part comes after parsing a language.&lt;/p&gt;
&lt;p&gt;I&#39;ve experimented twice with very powerful libraries, they were easy to use and would have us maintain fewer lines of code by sacrificing on speed and heap allocation.&lt;/p&gt;
&lt;p&gt;The third experiment with parsing SDSL was with a handmade recursive descent parser, it was the easiest and fastest to implement and apparently used in major compiler frontends &lt;a href=&quot;https://discourse.llvm.org/t/where-can-i-download-the-ebnf-syntax-description-document-for-c-syntax-parser-by-clang/87614&quot;&gt;like clang&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;At the time, I hadn&#39;t had the chance of finding a proper (read &lt;em&gt;idiot proof&lt;/em&gt;) explanation of how to implement a recurisve descent parser but I&#39;d like to mention &lt;a href=&quot;https://www.youtube.com/watch?v=ENKT0Z3gldE&quot;&gt;Kay Lack&#39;s video&lt;/a&gt; which is the clearest explanation I could ever found on this subject. I recommend you give a watch to have a better understanding of what will be written.&lt;/p&gt;
&lt;h2 id=&quot;the-3rd-experiment&quot; tabindex=&quot;-1&quot;&gt;The 3rd experiment &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#the-3rd-experiment&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It started as an expression/statement parser to compare with the current parser. In our case statements are what takes the most processing in SDSL, a low hanging fruit that we can reach fast and benchark against our current shader system. It ended up working so well it became the main parser for SDSL !&lt;/p&gt;
&lt;p&gt;To avoid allocation, we will avoid creating classes as much as we can except for the abstract syntax tree (AST).&lt;/p&gt;
&lt;h3 id=&quot;the-tree&quot; tabindex=&quot;-1&quot;&gt;The tree &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#the-tree&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We&#39;ll define some basic nodes for our AST, the first will be an abstract node and we&#39;ll derive everything from it.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// This struct will retain data of which part of text a node in our AST will represent&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;record&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;TextLocation&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;string&lt;/span&gt;&lt;/span&gt; Text&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Range&lt;/span&gt; Range&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Each node will have to store location&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;abstract&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;ASTNode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;TextLocation&lt;/span&gt; location&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token return-type class-name&quot;&gt;TextLocation&lt;/span&gt; Location &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; location&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Expressions are values or a combinations of them with &lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;abstract&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Expression&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;TextLocation&lt;/span&gt; location&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ASTNode&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;location&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Literals will contain the basic values we&#39;ll be dealing with in expressions&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;abstract&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Literal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;TextLocation&lt;/span&gt; location&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Expression&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;location&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// Such as :&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IntegerLiteral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;long&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TextLocation&lt;/span&gt; location&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Literal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;location&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;FloatLiteral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;double&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TextLocation&lt;/span&gt; location&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Literal&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;location&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// And others but this will be enough, I&#39;m also leaving implementation details out for simplicity&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// We&#39;ll first focus on binary operations, but there are unary and ternary operations too&lt;/span&gt;

&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;enum&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Operators&lt;/span&gt; 
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    None&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Multiply&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Divide&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Moderand&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Add&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    Subtract&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    LeftShift&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    RightShift&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;//...&lt;/span&gt;

&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;


&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;BinaryExpression&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Expression&lt;/span&gt; left&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Operator &lt;span class=&quot;token keyword&quot;&gt;operator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Expression&lt;/span&gt; right&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TextLocation&lt;/span&gt; location&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Expression&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;location&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;scanning-code&quot; tabindex=&quot;-1&quot;&gt;Scanning code &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#scanning-code&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;For our parser we need a construct that will keep track of the position of the parser in the text. Then we&#39;ll need to define our rules which, when matched, will advance our position in the text and when not, will reset the position. For that we create a scanner object with two parameters, the code being scanned and the position we&#39;re at.&lt;/p&gt;
&lt;p&gt;Our parser rules will be written as plain function, they don&#39;t need to be abstracted any other ways as functions are reusable enough and we don&#39;t allocate anything on the heap by calling a function.&lt;/p&gt;
&lt;p&gt;We should still be mindful of the limitations of recursion!&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Scanner&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;string&lt;/span&gt;&lt;/span&gt; code&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;string&lt;/span&gt;&lt;/span&gt; Code &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; code&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; Position &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// Sometimes we&#39;d like to peek one or more characters to reject rules early&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Peek&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;Code&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Position&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;ReadOnlySpan&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Peek&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; Code&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;Position&lt;span class=&quot;token range operator&quot;&gt;..&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Position&lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;size&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Match&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;string&lt;/span&gt;&lt;/span&gt; matchString&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; caseSensitive&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// The implementation is fairly straightforward :) &lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;building-blocks&quot; tabindex=&quot;-1&quot;&gt;Building blocks &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#building-blocks&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;For our parser, the rules will be functions returning a boolean, taking as parameters the scanner and an &lt;code&gt;out&lt;/code&gt; reference to a node of the tree.&lt;/p&gt;
&lt;p&gt;Here&#39;s an example for the integer parser :&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// A utility function that checks if the char is a digit with a specific value or in a range&lt;/span&gt;

&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;IsDigitValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;char&lt;/span&gt;&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;IsDigit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;c &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token char&quot;&gt;&#39;0&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;IsDigitRange&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;char&lt;/span&gt;&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Range&lt;/span&gt; range&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;


&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ParseIntegerLiteral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Scanner&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IntegerLiteral&lt;/span&gt; literal&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// We keep track of the position before we match anything&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// We can also create copies of the struct instead by storing it in different variables&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// but I prefer copying the least amount of data possible&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; start &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// If we get a zero, that&#39;s our value :D, integer literals never start with a zero&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;IsDigitValue&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Peek&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        literal &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Peek&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token char&quot;&gt;&#39;0&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Code&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; position&lt;span class=&quot;token range operator&quot;&gt;..&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// We keep scanning until there is no digits&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;IsDigit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Peek&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;IsDigit&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Peek&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        literal &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Parse&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Code&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;position&lt;span class=&quot;token range operator&quot;&gt;..&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Code&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; position&lt;span class=&quot;token range operator&quot;&gt;..&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// If we don&#39;t match any digit then we have to go back in the starting position&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// This is not necessary here so we can omit this line of code&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// In some cases this line of code will prove very relevant&lt;/span&gt;
    scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; start&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// In some cases we never allocate the node in the heap because we haven&#39;t matched our rules&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// This is perfect for reducing allocation in our case&lt;/span&gt;
    literal &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We can derive this integer parser into a float parser quite easily, each language has its own rules of writing floating point numbers and it&#39;s up to the author of the language to decide which one is best.&lt;/p&gt;
&lt;h3 id=&quot;abstractions&quot; tabindex=&quot;-1&quot;&gt;Abstractions &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#abstractions&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;After implementing the floating point parser we can abstract both those parsers into one encompassing everything very simply.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ParseNumberLiteral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Scanner&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;NumberLiteral&lt;/span&gt; number&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; start &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ParseIntegerLiteral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; integerLiteral&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        number &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;NumberLiteral&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;integerLiteral&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ParseFloatLiteral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; floatLiteral&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        number &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;NumberLiteral&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;floatLiteral&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// Same as before :)&lt;/span&gt;
    scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; start&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    number &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We can even go one step higher and use this number parser to create our first binary operation parser :&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;

&lt;span class=&quot;token comment&quot;&gt;// A utility function that resets the position. We can modify it to catch errors&lt;/span&gt;
&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;ExitParser&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;TNode&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Scanner&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TNode&lt;/span&gt; node&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; position&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;where&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;TNode&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;ASTNode&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// A utility function that looks ahead by skipping some white space.&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// Looking ahead is something that happens quite often when parsing SDSL.&lt;/span&gt;

&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;FollowedByAny&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Scanner&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;string&lt;/span&gt;&lt;/span&gt; chars&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;char&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;value&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; withSpaces &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; advance &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;


&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Spaces&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Scanner&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; min &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; start &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;char&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;IsWhiteSpace&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Peek&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; start &lt;span class=&quot;token operator&quot;&gt;&gt;=&lt;/span&gt; min&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; start&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Mul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Scanner&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Expression&lt;/span&gt; expression&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// Mulitplicative expressions can be stringed together, so we should use a loop&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;char&lt;/span&gt;&lt;/span&gt; op &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token char&quot;&gt;&#39;&#92;0&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    expression &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; position &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;Spaces&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// If we have reached an operator and have already parsed a first expression&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;op &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token char&quot;&gt;&#39;&#92;0&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; expression &lt;span class=&quot;token keyword&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;// We nest the multiplications by creating a binary expression containing the binary expression we just finished parsing&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ParseNumberLiteral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; number&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                expression &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;BinaryExpression&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;expression&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; op&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ToOperator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; number&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;position&lt;span class=&quot;token range operator&quot;&gt;..&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ExitParser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; expression&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; position&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token comment&quot;&gt;// In the case we haven&#39;t reached an operator&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;expression &lt;span class=&quot;token keyword&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; op &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token char&quot;&gt;&#39;&#92;0&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;// Our number becomes our result expression&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ParseNumberLiteral&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; number&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                expression &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; number&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ExitParser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; expression&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; position&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// We keep parsing until we don&#39;t see any multiplicative operators&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;FollowedByAny&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;*/%&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; op&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token named-parameter punctuation&quot;&gt;withSpaces&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token named-parameter punctuation&quot;&gt;advance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;expression &lt;span class=&quot;token keyword&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ExitParser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; expression&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; position&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; orError&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We can also write the addition/subtraction parser, following the operator precedence :&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Scanner&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Expression&lt;/span&gt; expression&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;char&lt;/span&gt;&lt;/span&gt; op &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token char&quot;&gt;&#39;&#92;0&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    expression &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;!&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; position &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;do&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token function&quot;&gt;Spaces&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;op &lt;span class=&quot;token operator&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;token char&quot;&gt;&#39;&#92;0&#39;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; expression &lt;span class=&quot;token keyword&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; mul&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                expression &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;BinaryExpression&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;expression&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; op&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;ToOperator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; mul&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;position&lt;span class=&quot;token range operator&quot;&gt;..&lt;/span&gt;scanner&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Position&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ExitParser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; expression&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; position&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;expression &lt;span class=&quot;token keyword&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; op &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token char&quot;&gt;&#39;&#92;0&#39;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Mul&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; prefix&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                expression &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; prefix&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ExitParser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; expression&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; position&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;FollowedByAny&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;+-&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; op&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token named-parameter punctuation&quot;&gt;withSpaces&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token named-parameter punctuation&quot;&gt;advance&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;expression &lt;span class=&quot;token keyword&quot;&gt;is&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;not&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;ExitParser&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; scanner&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; result&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;out&lt;/span&gt; expression&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; position&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; orError&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The sharpest ones will notice I&#39;m not using recursion for everything, i&#39;m using a while loop. This is a small optimisation called &lt;a href=&quot;https://eli.thegreenplace.net/2012/08/02/parsing-expressions-by-precedence-climbing&quot;&gt;precedence climbing&lt;/a&gt; to avoid to many recursions when parsing long and complex expressions.&lt;/p&gt;
&lt;p&gt;And that&#39;s the gist of it! The rest is about adding all the other elements of the language. For SDSL that was about parsing a subset of HLSL, add the SDSL extra features and digging through all of the source code to find any quirks of the language and make sure we can handle them.&lt;/p&gt;
&lt;p&gt;In the future SDSL will be less reliant on HLSL syntax and follow one more similar to C# to avoid any confusion when switching between the two languages.&lt;/p&gt;
&lt;h2 id=&quot;benchmarks&quot; tabindex=&quot;-1&quot;&gt;Benchmarks &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#benchmarks&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It wouldn&#39;t mean anything without benchmarks, so let&#39;s have a typical SDSL shader to benchmark for.&lt;/p&gt;
&lt;pre class=&quot;language-hlsl&quot;&gt;&lt;code class=&quot;language-hlsl&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;namespace&lt;/span&gt; MyNameSpace
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    shader Parent 
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;MyStruct&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        stream &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        stage abstract &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;DoSomething&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Method&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;float4&lt;/span&gt; buffer &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;float4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;float2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;float4x4&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;float4x4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;float4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;float4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;float4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;float4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;4&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;5&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
                    &lt;span class=&quot;token function&quot;&gt;Print&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;i&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
                &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; b &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token operator&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;10&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;/&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;32&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt; streams&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;color&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Normalize&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;a &lt;span class=&quot;token operator&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;2&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After some text crunching we get these numbers!&lt;/p&gt;
&lt;p&gt;DRUM ROLL 🥁 ...&lt;/p&gt;
&lt;pre class=&quot;language-pwsh&quot;&gt;&lt;code class=&quot;language-pwsh&quot;&gt;AMD Ryzen 7 3700X 3.60GHz, 1 CPU, 16 logical and 8 physical cores
.NET SDK 10.0.101
  [Host]     : .NET 10.0.1 (10.0.1, 10.0.125.57005), X64 RyuJIT x86-64-v3
  DefaultJob : .NET 10.0.1 (10.0.1, 10.0.125.57005), X64 RyuJIT x86-64-v3

| Method         | Mean     | Error    | StdDev   | Gen0    | Gen1   | Allocated |
|--------------- |---------:|---------:|---------:|--------:|-------:|----------:|
| ParseShaderOld | 151.3 us | 1.490 us |  1.16 us | 22.2168 | 5.1270 | 183.17 KB |
| ParseShaderNew | 32.28 us | 0.295 us | 0.276 us |  1.6479 |        |  13.78 KB |&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;We run 5 times faster and allocate 20 times less memory than before. Objects allocated are not promotted to Gen1.&lt;/p&gt;
&lt;p&gt;That&#39;s exciting news to me! We could theoritically parse 4 more shaders while in a single core without worrying too much about GC pauses. This will surely improve startup times for the Stride engine!&lt;/p&gt;
&lt;h2 id=&quot;conclusions&quot; tabindex=&quot;-1&quot;&gt;Conclusions &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/#conclusions&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Let&#39;s check our goals again ...&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;✅ Fast&lt;br /&gt;
5x faster allows me to stamp that parser with ✨&lt;em&gt;Blazingly fast&lt;/em&gt;🚀&lt;/li&gt;
&lt;li&gt;✅ Low heap allocation&lt;br /&gt;
20x less allocation is going to help us a lot, especially during runtime compilation&lt;/li&gt;
&lt;li&gt;✅ Easy to update/modify&lt;br /&gt;
Going the functional way has only made it easier to make changes. We also own all our parsing code, nothing is hidden behind API which is great!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I could leave with a very nonchalant &amp;quot;Code speaks for itself&amp;quot; but I have to convince you that writing a handmade parser for your programming language is almost always the best decision you could make, there are many ways to write one but recursive descent parsers can be a very helpful start until you have a very specific need for your language.&lt;/p&gt;
&lt;p&gt;I&#39;m excited to show more of SDSL&#39;s new compiler progress and writing that parser was a huge endeavor, espcially going through two different implementations before settling to what it is now.&lt;/p&gt;
&lt;p&gt;In the next blog post we&#39;ll see how bridging the parser with the SPIR-V assembler was done, hopefully with an example of a working version of the compiler.&lt;/p&gt;
&lt;p&gt;Thanks for reading!&lt;/p&gt;
</description>
      <pubDate>Wed, 24 Dec 2025 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/</guid>
      <enclosure url="https://www.stride3d.net/images/spir.png" type="image/png" length="0" /></item>
    <item>
      <title>Announcing Stride 4.3</title>
      <description>&lt;p&gt;Stride 4.3 brings .NET 10 and C# 14, Bepu Physics, Vulkan compute shaders, custom assets, cross-platform build strides, mesh buffer helpers, Rider/VSCode support, and performance and stability fixes.&lt;/p&gt;
&lt;p&gt;Table of Contents:&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#download-and-upgrade&quot;&gt;Download and Upgrade&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#what&#39;s-new-in-this-release&quot;&gt;What&#39;s new in this release&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#what-has-changed-since-stride-4.2&quot;&gt;What has changed since Stride 4.2&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#bepu-physics-integration&quot;&gt;Bepu physics integration&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#vulkan-compute-shader-support&quot;&gt;Vulkan compute shader support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#user-defined-assets&quot;&gt;User-defined Assets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#ongoing-efforts-to-build-projects-from-linux-and-apple-desktops&quot;&gt;Ongoing efforts to build projects from Linux and Apple desktops&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#efficient-api-to-manipulate-meshes&quot;&gt;Efficient API to manipulate meshes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#open-project-with-rider-and-vscode-from-the-gamestudio&quot;&gt;Open project with Rider and VSCode from the GameStudio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#interface-processor&quot;&gt;Interface processor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#and-more-minor-changes&quot;&gt;And more minor changes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#fixes&quot;&gt;Fixes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#also-good-to-know&quot;&gt;Also good to know&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#funding-and-resource-allocation&quot;&gt;Funding and Resource Allocation&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#call-for-skilled-developers&quot;&gt;Call for Skilled Developers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#join-us-on-this-journey&quot;&gt;Join Us on This Journey&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#links&quot;&gt;Links&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#acknowledgements&quot;&gt;Acknowledgements&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#long-time-stride-supporters&quot;&gt;Long-time Stride supporters&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#gold-striders&quot;&gt;Gold Striders&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;download-and-upgrade&quot; tabindex=&quot;-1&quot;&gt;Download and Upgrade &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#download-and-upgrade&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can &lt;a href=&quot;https://www.stride3d.net/download/&quot;&gt;download the Stride 4.3 Installer&lt;/a&gt; today. Release notes are available &lt;a href=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/ReleaseNotes.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Make sure you read the &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/get-started/update-stride.html&quot;&gt;guide to update Stride and projects properly&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;what&#39;s-new-in-this-release&quot; tabindex=&quot;-1&quot;&gt;What&#39;s new in this release &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#what&#39;s-new-in-this-release&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride 4.3 includes numerous enhancements and improvements. Here’s what to expect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;.NET 10 Integration&lt;/strong&gt;: Stride 4.3 is now fully aligned with .NET 10, harnessing its performance improvements and efficiency gains for game development. This means faster execution times, reduced memory footprint, and access to the latest C# features, making your development smoother and more efficient. &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-10/&quot;&gt;Learn more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;C# 14 Features&lt;/strong&gt;: With C# 14, Stride users can write cleaner, more concise code thanks to new language features. These improvements reduce boilerplate and enhance readability. &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/introducing-csharp-14/&quot;&gt;Introducing C# 14&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-has-changed-since-stride-4.2&quot; tabindex=&quot;-1&quot;&gt;What has changed since Stride 4.2 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#what-has-changed-since-stride-4.2&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;bepu-physics-integration&quot; tabindex=&quot;-1&quot;&gt;Bepu physics integration &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#bepu-physics-integration&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Adding support for &lt;a href=&quot;https://github.com/bepu/bepuphysics2&quot;&gt;Bepu Physics&lt;/a&gt;, a ridiculously fast physics engine written entirely in C#.&lt;/p&gt;
&lt;p&gt;Having both a game and physics engine in the same ecosystem reduces the cost of maintaining and improving it, the overhead that we may incur when communicating between the two APIs, and the barrier to entry for contributors.&lt;/p&gt;
&lt;p&gt;Bullet is still the default physics engine, and we welcome any contribution towards it, but our efforts will be focused on Bepu from now.&lt;/p&gt;
&lt;p&gt;The integration is effectively done, with Bepu&#39;s feature set now being slightly ahead of Bullet&#39;s. Have a look at &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/physics/configuration.html&quot;&gt;this page&lt;/a&gt; if you want to migrate to Bepu.&lt;/p&gt;
&lt;h3 id=&quot;vulkan-compute-shader-support&quot; tabindex=&quot;-1&quot;&gt;Vulkan compute shader support &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#vulkan-compute-shader-support&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The Vulkan graphics backend has been modified to support compute shaders, and the shader compiler has also been modified to support compute shader generation for GLSL.&lt;/p&gt;
&lt;h3 id=&quot;user-defined-assets&quot; tabindex=&quot;-1&quot;&gt;User-defined Assets &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#user-defined-assets&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Introducing &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/scripts/custom-assets.html&quot;&gt;Custom Assets&lt;/a&gt;, a way to define and store data which can be referenced across multiple components, scenes and through other assets.&lt;/p&gt;
&lt;p&gt;The asset compiler also gives you the ability to build more complex systems like custom file importers.&lt;/p&gt;
&lt;h3 id=&quot;ongoing-efforts-to-build-projects-from-linux-and-apple-desktops&quot; tabindex=&quot;-1&quot;&gt;Ongoing efforts to build projects &lt;em&gt;from&lt;/em&gt; Linux and Apple desktops &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#ongoing-efforts-to-build-projects-from-linux-and-apple-desktops&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Stride can build games on Windows targeting the different devices we support, but building directly on those platforms was not supported until now.&lt;/p&gt;
&lt;p&gt;We&#39;ve introduced a couple of changes to improve on that front:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Replacing our custom C++/CLI FBX importer with &lt;a href=&quot;https://github.com/assimp/assimp&quot;&gt;Assimp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fixing the asset compiler to run on all desktop OSes&lt;/li&gt;
&lt;li&gt;Many build-system refactors to move toward fully cross-platform development&lt;/li&gt;
&lt;li&gt;Building VHACD for Linux&lt;/li&gt;
&lt;li&gt;Adjust FreeImage and DirectXTex for all platforms&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Some work is still required on this front, but simpler projects can now be built on those platforms.&lt;/p&gt;
&lt;h3 id=&quot;efficient-api-to-manipulate-meshes&quot; tabindex=&quot;-1&quot;&gt;Efficient API to manipulate meshes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#efficient-api-to-manipulate-meshes&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Vertex buffers do not have a standardized layout, each mesh may have its own specific layout and data type it uses for its vertices. Some have blend weights, or tangents, while others only have positions - they may also use different data types, for example Half4 positions, 4byte color ...&lt;/p&gt;
&lt;p&gt;We added in two helpers in &lt;a href=&quot;https://doc.stride3d.net/latest/en/api/Stride.Graphics.VertexBufferHelper.html&quot;&gt;VertexBufferHelper&lt;/a&gt; and &lt;a href=&quot;https://doc.stride3d.net/latest/en/api/Stride.Graphics.IndexBufferHelper.html&quot;&gt;IndexBufferHelper&lt;/a&gt; to provide a standardized way to read and write to those buffers.&lt;/p&gt;
&lt;h3 id=&quot;open-project-with-rider-and-vscode-from-the-gamestudio&quot; tabindex=&quot;-1&quot;&gt;Open project with Rider and VSCode from the GameStudio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#open-project-with-rider-and-vscode-from-the-gamestudio&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;While any IDE can open and build Stride projects, the editor button to open said project only had special handling for Visual Studio. &lt;a href=&quot;https://github.com/Jklawreszuk&quot;&gt;Jklawreszuk&lt;/a&gt; added support for Rider and VSCode.&lt;/p&gt;
&lt;h3 id=&quot;interface-processor&quot; tabindex=&quot;-1&quot;&gt;Interface processor &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#interface-processor&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Stride has a &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/engine/entity-component-system/usage.html&quot;&gt;component processors&lt;/a&gt;, a user-defined class which can collect and process all components of a given type in the running game. It is also known as the &lt;code&gt;System&lt;/code&gt; part of the &lt;code&gt;ECS&lt;/code&gt; acronym.&lt;/p&gt;
&lt;p&gt;The new &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/engine/entity-component-system/flexible-processing.html&quot;&gt;flexible processing system&lt;/a&gt; provides more type safety, and the ability to process components by their interfaces. You could, for example, implement a custom update callback any component could receive through this API.&lt;/p&gt;
&lt;h3 id=&quot;and-more-minor-changes&quot; tabindex=&quot;-1&quot;&gt;And more minor changes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#and-more-minor-changes&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/2711&quot;&gt;HDR Rendering Support for D3d/Windows&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/scripts/gizmos.html&quot;&gt;User-defined gizmos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/2169&quot;&gt;Haptic feedback integration for VR runtimes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/2141&quot;&gt;API for OpenXR Passthrough&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;fixes&quot; tabindex=&quot;-1&quot;&gt;Fixes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#fixes&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Although there have been &lt;a href=&quot;https://github.com/stride3d/stride/pulls?page=2&amp;amp;q=is%3Apr+merged%3A%3E2023-10-10&quot;&gt;many fixes&lt;/a&gt;, we&#39;d like to point some of them out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Major performance improvements, particularly for graphics and UI&lt;/li&gt;
&lt;li&gt;Multiple fixes improving Vulkan, OpenGL, games under Linux and OpenXR stability&lt;/li&gt;
&lt;li&gt;And fixes for edge cases when reloading assemblies in the game studio&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;also-good-to-know&quot; tabindex=&quot;-1&quot;&gt;Also good to know &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#also-good-to-know&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We are already hard at work on a bunch of ongoing projects for version 4.4 and beyond:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Continuing work to allow for building games &lt;em&gt;from&lt;/em&gt; other platforms&lt;/li&gt;
&lt;li&gt;Converting our Windows-only GameStudio to cross-platform through Avalonia&lt;br /&gt;
We welcome anyone willing to contribute to this project over &lt;a href=&quot;https://github.com/orgs/stride3d/projects/6&quot;&gt;Here&lt;/a&gt; - just have to make sure to add a comment to one of the unassigned issues you want to work on&lt;/li&gt;
&lt;li&gt;Improvements to shader compilation, reducing in-game hangs while building shader permutations. &lt;a href=&quot;https://github.com/stride3d/SDSL&quot;&gt;Here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;More work on D3d12 and Vulkan as we slowly transition away from D3d11&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;funding-and-resource-allocation&quot; tabindex=&quot;-1&quot;&gt;Funding and Resource Allocation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#funding-and-resource-allocation&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;call-for-skilled-developers&quot; tabindex=&quot;-1&quot;&gt;Call for Skilled Developers &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#call-for-skilled-developers&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We are actively seeking skilled developers with experience in C#, the .NET ecosystem, mobile, XR, rendering, and game development. If you have these skills or know someone who does, we encourage you to get involved. There are &lt;a href=&quot;https://opencollective.com/stride3d/projects&quot;&gt;opportunities to contribute&lt;/a&gt; to critical areas of Stride&#39;s development, supported by available funds.&lt;/p&gt;
&lt;h3 id=&quot;join-us-on-this-journey&quot; tabindex=&quot;-1&quot;&gt;Join Us on This Journey &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#join-us-on-this-journey&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We’re always excited to welcome new contributors to the Stride family. Whether it’s through code contributions, spreading the word, or donations, every bit helps us grow stronger. If you’ve got skills in .NET, Android, and iOS development, there’s a special place for you here. &lt;a href=&quot;https://opencollective.com/stride3d&quot;&gt;Support us on OpenCollective&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;links&quot; tabindex=&quot;-1&quot;&gt;Links &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#links&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href=&quot;https://github.com/stride3d/stride&quot;&gt;https://github.com/stride3d/stride&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Website: &lt;a href=&quot;https://stride3d.net/&quot;&gt;https://stride3d.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/&quot;&gt;https://doc.stride3d.net/latest/en/manual/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Twitter: &lt;a href=&quot;https://twitter.com/stridedotnet&quot;&gt;https://twitter.com/stridedotnet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;YouTube: &lt;a href=&quot;https://www.youtube.com/@Stride3D&quot;&gt;https://www.youtube.com/@Stride3D&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Stride Community Toolkit: &lt;a href=&quot;https://stride3d.github.io/stride-community-toolkit/index.html&quot;&gt;https://stride3d.github.io/stride-community-toolkit/index.html&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;acknowledgements&quot; tabindex=&quot;-1&quot;&gt;Acknowledgements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#acknowledgements&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We extend our heartfelt gratitude for all the hard work and donations we have received. Your generous contributions significantly aid in the continuous development and enhancement of the Stride community and projects. Thank you for your support and belief in our collective efforts.&lt;/p&gt;
&lt;p&gt;In particular, we want to thank these donors:&lt;/p&gt;
&lt;h3 id=&quot;long-time-stride-supporters&quot; tabindex=&quot;-1&quot;&gt;Long-time Stride supporters &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#long-time-stride-supporters&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://visualprogramming.net/&quot;&gt;VVVV&lt;/a&gt;🥇&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://visualprogramming.net/&quot;&gt;&lt;img src=&quot;https://images.opencollective.com/vvvv/8ab0acd/logo/256.png?height=72&quot; alt=&quot;vvvv. A visual live-programming environment that takes you from rapid prototyping to final production&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;gold-striders&quot; tabindex=&quot;-1&quot;&gt;Gold Striders &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/#gold-striders&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.happenstancegames.com/&quot;&gt;Happenstance Games&lt;/a&gt;🏆&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vaclavelias.com/&quot;&gt;Vašo ( Vaclav )&lt;/a&gt;🥇&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lucidsilence.org/&quot;&gt;Lucid Silence Games&lt;/a&gt;🥇&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/widowmakes&quot;&gt;WidowMakes&lt;/a&gt;🥇&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/bepu/bepuphysics2&quot;&gt;Norbo&lt;/a&gt;🥇&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/first-hour&quot;&gt;First Hour&lt;/a&gt;🥇&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This article was co-authored by &lt;a href=&quot;https://github.com/Eideren&quot;&gt;Eideren&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Fri, 14 Nov 2025 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/announcing-stride-4-3-in-dotnet-10/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>A Look Inside Distant Worlds 2: Developing with the Stride Engine</title>
      <description>&lt;p&gt;&lt;a href=&quot;https://store.steampowered.com/app/1531540/Distant_Worlds_2/&quot;&gt;Distant Worlds 2&lt;/a&gt;, the sequel to the acclaimed 4X strategy game &lt;a href=&quot;https://store.steampowered.com/app/261470/Distant_Worlds_Universe/&quot;&gt;Distant Worlds: Universe&lt;/a&gt;, was developed by Code Force and published by Slitherine. In this blog post, the developers answer key questions from the Stride community, offering insights into their experience using the Stride engine to bring their ambitious galaxy-spanning strategy game to life.&lt;/p&gt;
&lt;div class=&quot;text-center&quot;&gt;
    &lt;img alt=&quot;Distnat Worlds 2 Intro Image&quot; src=&quot;https://www.stride3d.net/images/blog/2025/distant-worlds-2-intro-image.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2025/distant-worlds-2-intro-image.webp&quot; /&gt;
&lt;/div&gt;
&lt;p&gt;Table of Contents:&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#intro&quot;&gt;Intro&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#engine-and-general-development&quot;&gt;Engine and General Development&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#user-interface&quot;&gt;User Interface&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#artists-and-asset-creation&quot;&gt;Artists and Asset Creation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#level-design-and-prefabs&quot;&gt;Level Design and Prefabs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#dlc-and-content-expansion&quot;&gt;DLC and Content Expansion&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#performance-and-optimization&quot;&gt;Performance and Optimization&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#ai-and-game-systems&quot;&gt;AI and Game Systems&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#future-use-and-recommendations&quot;&gt;Future Use and Recommendations&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#conclusion&quot;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#links&quot;&gt;Links&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;intro&quot; tabindex=&quot;-1&quot;&gt;Intro &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#intro&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Our Stride community has been eager to learn more about the development of &lt;a href=&quot;https://store.steampowered.com/app/1531540/Distant_Worlds_2/&quot;&gt;Distant Worlds 2&lt;/a&gt;. We reached out to the developers at Code Force to hear about their experience using the Stride engine to create this ambitious 4X strategy game.&lt;/p&gt;
&lt;p&gt;We&#39;re incredibly grateful to the team for their generosity with both time and expertise. The depth and breadth of information they&#39;ve shared, spanning everything from engine selection to performance optimization is impressive. Their willingness to provide such comprehensive insights is truly appreciated by the Stride community.&lt;/p&gt;
&lt;p&gt;Some questions were answered by the team collectively, while others were addressed individually by team members: Elliot, the Lead Developer; Kevin, the Lead Artist; and Alex, the 3D Artist.&lt;/p&gt;
&lt;p&gt;Buckle up and enjoy the ride, you&#39;re about to dive into a rich technical deep-dive and maybe learn something new along the way!&lt;/p&gt;
&lt;h2 id=&quot;engine-and-general-development&quot; tabindex=&quot;-1&quot;&gt;Engine and General Development &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#engine-and-general-development&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h4 id=&quot;why-did-you-choose-xenko%2Fstride-over-other-alternatives-for-distant-worlds-2%3F&quot; tabindex=&quot;-1&quot;&gt;Why did you choose Xenko/Stride over other alternatives for Distant Worlds 2? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#why-did-you-choose-xenko%2Fstride-over-other-alternatives-for-distant-worlds-2%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Our requirements for the DW2 game engine were:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Full support for all features of C#/.NET&lt;/li&gt;
&lt;li&gt;High quality rendering, also allowing for the use of custom shaders&lt;/li&gt;
&lt;li&gt;Good asset pipeline support&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stride handles all of these areas very well.&lt;/p&gt;
&lt;p&gt;One of Stride’s major strengths is how it integrates with .NET: it is nearly completely written in C# itself, and it stays up-to-date with .NET version releases.&lt;/p&gt;
&lt;p&gt;You are not locked into any specific approach to writing code. You have full access to all parts of the .NET environment. You don’t have to use scripting tied to a specific custom version of .NET.&lt;/p&gt;
&lt;p&gt;Instead you can simply make your own implementation of the &lt;code&gt;Game&lt;/code&gt; class, overriding the &lt;code&gt;Update&lt;/code&gt; and &lt;code&gt;Draw&lt;/code&gt; methods from the base class. That’s the basic approach we took with DW2. We use Stride in two main ways for DW2:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Rendering engine, using PBR models and materials with the scene/entity system&lt;/li&gt;
&lt;li&gt;Content/Asset bundling, using the Stride &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/game-studio/index.html&quot;&gt;Game Studio&lt;/a&gt; to package assets for loading into the game&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Beyond that we write all of our code as a standard .NET application with classes, structs, etc. We don’t use any scripts.&lt;/p&gt;
&lt;p&gt;Additionally, because Stride is open-source, if you find an issue you can always fix it yourself. You can also figure out how things work by examining the source itself. Then, if required, modify things to work the way you want.&lt;/p&gt;
&lt;p&gt;Stride also has great rendering with PBR materials. And it has a very nice shader model that allows you to write your own custom shaders.&lt;/p&gt;
&lt;h4 id=&quot;how-much-modification-was-needed-to-adapt-the-engine-for-your-needs%3F-how-difficult-was-this-process-for-the-developers-involved%3F&quot; tabindex=&quot;-1&quot;&gt;How much modification was needed to adapt the engine for your needs? How difficult was this process for the developers involved? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#how-much-modification-was-needed-to-adapt-the-engine-for-your-needs%3F-how-difficult-was-this-process-for-the-developers-involved%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;We started experimenting with Stride back when it was called &lt;a href=&quot;https://en.wikipedia.org/wiki/Stride_(game_engine)&quot;&gt;Paradox&lt;/a&gt;, around version 1.2. So there wasn’t much documentation back then. We had to just figure things out by examining the source. &lt;a href=&quot;https://doc.stride3d.net/latest/en/index.html&quot;&gt;Documentation&lt;/a&gt; improved as the engine progressed through the 1.x versions, and became Xenko.&lt;/p&gt;
&lt;p&gt;A key requirement for DW2 was to mix entity-level rendering for units (ships and bases) with custom shaders for the larger galactic environment.&lt;/p&gt;
&lt;p&gt;Most of the DW2 environment uses custom procedural shaders to render things like planet surfaces, stars, nebulae and other items (&lt;a href=&quot;https://www.matrixgames.com/forums/viewtopic.php?p=4881765#p4881765&quot;&gt;see this article for details&lt;/a&gt;).&lt;/p&gt;
&lt;p&gt;However for the unit-level rendering we wanted to use Stride’s PBR materials and the scene/entity system. The artists would build space ship models and materials which we would load into a scene.&lt;/p&gt;
&lt;p&gt;We achieved this by separating out the custom shader rendering into pre- and post-scene rendering in the &lt;code&gt;Game.Draw&lt;/code&gt; cycle. So we built our own rendering classes that inherited from &lt;a href=&quot;https://doc.stride3d.net/latest/en/api/Stride.Rendering.Compositing.SceneRendererBase.html&quot;&gt;&lt;code&gt;SceneRendererBase&lt;/code&gt;&lt;/a&gt; and inserted them into the &lt;a href=&quot;https://doc.stride3d.net/latest/en/api/Stride.Rendering.Compositing.GraphicsCompositor.html&quot;&gt;&lt;code&gt;GraphicsCompositor&lt;/code&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This also allowed us to have rendering layers that excluded the post-processing effects (bloom, lens flare, etc). This was especially useful for the user interface.&lt;/p&gt;
&lt;p&gt;There may be a better way to do all of this in Stride now, but that’s what worked for us.&lt;/p&gt;
&lt;h4 id=&quot;we-noticed-references-to-both-xenko-and-stride-in-the-build.-are-there-specific-reasons-older-files-were-retained-during-the-transition%3F&quot; tabindex=&quot;-1&quot;&gt;We noticed references to both Xenko and Stride in the build. Are there specific reasons older files were retained during the transition? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#we-noticed-references-to-both-xenko-and-stride-in-the-build.-are-there-specific-reasons-older-files-were-retained-during-the-transition%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Any remaining Xenko files are just a holdover from our development history. We should probably remove them 🙂.&lt;/p&gt;
&lt;h4 id=&quot;how-frequently-do-you-update-the-engine-for-your-project%3F&quot; tabindex=&quot;-1&quot;&gt;How frequently do you update the engine for your project? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#how-frequently-do-you-update-the-engine-for-your-project%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Initially we had some small custom changes to better support our pre- and post-scene rendering mentioned above.&lt;/p&gt;
&lt;p&gt;When we went more heavily multi-threaded we made some updates in some areas of Stride to better handle this.&lt;/p&gt;
&lt;p&gt;And whenever we want to move forward in .NET versions we have updated Stride to whatever version we were moving into (5, 6, 7, 8).&lt;/p&gt;
&lt;p&gt;And as Stride itself progressed we have periodically pulled in some of those changes.&lt;br /&gt;
Stride’s approach to .NET has been a big plus. It’s quite amazing that we could move Stride to a new version of .NET ourselves.&lt;/p&gt;
&lt;h4 id=&quot;did-you-create-issues-on-the-stride-github-repository%3F&quot; tabindex=&quot;-1&quot;&gt;Did you create issues on the Stride GitHub repository? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#did-you-create-issues-on-the-stride-github-repository%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;We have not done that. Much of our changes are very specific to Distant Worlds.&lt;/p&gt;
&lt;h4 id=&quot;what-were-some-notable-technical-hurdles-in-using-stride%2C-and-how-did-you-overcome-them%3F&quot; tabindex=&quot;-1&quot;&gt;What were some notable technical hurdles in using Stride, and how did you overcome them? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#what-were-some-notable-technical-hurdles-in-using-stride%2C-and-how-did-you-overcome-them%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Early on, the lack of documentation made progress slower. But this has improved a lot over time.&lt;/p&gt;
&lt;p&gt;We worked quite a bit on getting Stride to handle heavily multi-threaded scenarios. We had to make some areas more robust and defensive, particularly around null-checking and iteration of lists.&lt;/p&gt;
&lt;h2 id=&quot;user-interface&quot; tabindex=&quot;-1&quot;&gt;User Interface &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#user-interface&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;text-center&quot;&gt;
    &lt;img alt=&quot;Distnat Worlds 2 UI&quot; src=&quot;https://www.stride3d.net/images/blog/2025/distant-worlds-2-ui.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2025/distant-worlds-2-ui.webp&quot; /&gt;
&lt;/div&gt;
&lt;h4 id=&quot;which-library-did-you-use-for-ui-elements-in-distant-worlds-2%3F&quot; tabindex=&quot;-1&quot;&gt;Which library did you use for UI elements in Distant Worlds 2? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#which-library-did-you-use-for-ui-elements-in-distant-worlds-2%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;h5 id=&quot;what-led-you-to-choose-the-current-ui-solution-over-others%3F&quot; tabindex=&quot;-1&quot;&gt;What led you to choose the current UI solution over others? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#what-led-you-to-choose-the-current-ui-solution-over-others%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h5&gt;
&lt;h5 id=&quot;were-there-any-features-you-found-lacking-in-stride-for-ui%2C-and-how-did-you-address-these-gaps%3F&quot; tabindex=&quot;-1&quot;&gt;Were there any features you found lacking in Stride for UI, and how did you address these gaps? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#were-there-any-features-you-found-lacking-in-stride-for-ui%2C-and-how-did-you-address-these-gaps%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;We initially tried out the built-in user interface elements of Xenko. But for various reasons we decided to instead build our own user interface system.&lt;/p&gt;
&lt;p&gt;So for UI rendering we took the &lt;code&gt;SpriteBatch&lt;/code&gt; class and built some basic controls: buttons, panels, textboxes, etc.&lt;/p&gt;
&lt;p&gt;The input side is just reading keypresses and mouse actions from the &lt;code&gt;InputManager&lt;/code&gt; class.&lt;/p&gt;
&lt;p&gt;From there we added more functionality as we needed it.&lt;/p&gt;
&lt;p&gt;Near the start of development it’s often hard to know exactly what you’ll need in the user interface. You have to tweak and extend things as you go. So it is important to have deep control over all parts of the user interface. For us that meant writing our own UI system.&lt;/p&gt;
&lt;p&gt;I think this happens quite frequently in games, because they often have very unique and specific UI requirements. So it’s important to have full control over how the UI works, which might mean writing it yourself.&lt;/p&gt;
&lt;p&gt;For DW2 we also had a requirement that the user interface be completely scalable. This was a major weakness of DW1, where the UI was fixed-size. So in DW1, as screen resolution increased, all the text became smaller and harder to read.&lt;/p&gt;
&lt;p&gt;With DW2, building our own UI system allowed us to bake scaling into everything. So you can change UI scale in DW2 from the game settings and everything just automatically resizes and repositions, regardless of resolution.&lt;/p&gt;
&lt;h4 id=&quot;how-is-the-research-screen-(e.g.%2C-item-order%2C-dependencies)-created%3F-are-these-elements-procedurally-generated%2C-or-are-they-manually-crafted%3F&quot; tabindex=&quot;-1&quot;&gt;How is the research screen (e.g., item order, dependencies) created? Are these elements procedurally generated, or are they manually crafted? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#how-is-the-research-screen-(e.g.%2C-item-order%2C-dependencies)-created%3F-are-these-elements-procedurally-generated%2C-or-are-they-manually-crafted%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;h5 id=&quot;how-did-you-create-the-research-graph%2C-including-arrows-and-other-visual-elements%3F&quot; tabindex=&quot;-1&quot;&gt;How did you create the research graph, including arrows and other visual elements? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#how-did-you-create-the-research-graph%2C-including-arrows-and-other-visual-elements%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h5&gt;
&lt;p&gt;The Research screen is custom-rendered. Most of the data in DW2 is heavily moddable, and the tech trees are a big part of this. So the rendering for research projects has to be data-driven.&lt;/p&gt;
&lt;p&gt;We use some &lt;code&gt;SpriteBatch&lt;/code&gt; helper classes to draw the lines and arrows between projects. The projects themselves use some basic textures for the main body.&lt;/p&gt;
&lt;h2 id=&quot;artists-and-asset-creation&quot; tabindex=&quot;-1&quot;&gt;Artists and Asset Creation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#artists-and-asset-creation&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;text-center&quot;&gt;
    &lt;img alt=&quot;Distnat Worlds 2&quot; src=&quot;https://www.stride3d.net/images/blog/2025/distant-worlds-image-2.gif&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2025/distant-worlds-image-2.gif&quot; /&gt;
&lt;/div&gt;
&lt;h4 id=&quot;how-did-the-artists-find-the-asset-creation-process-when-working-with-stride%3F&quot; tabindex=&quot;-1&quot;&gt;How did the artists find the asset creation process when working with Stride? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#how-did-the-artists-find-the-asset-creation-process-when-working-with-stride%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Elliot:&lt;/strong&gt; DW2 uses lots of ship and base models with all of their associated textures. We utilize all the standard material features like Diffuse maps, Normal maps, Metalness maps, Emissive maps, Ambient Occlusion and Gloss maps.&lt;/p&gt;
&lt;p&gt;So the artists use Stride Game Studio to simply bundle all the assets together before handing them over to the development side to use in-game.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kevin:&lt;/strong&gt; It works well and is easy and intuitive. I like that there&#39;s multiple ways to do the same thing (i.e. clicking and dragging or using the &#39;click to add&#39; interface for assigned textures for instance)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alex:&lt;/strong&gt; The workflow is a lot like Unity or Unreal. It’s pretty simple for making PBR 3D models. The material creation is flexible and easy to pick up if you know Unity. It feels smooth and straightforward overall. I found it quick to get started with and the tools don’t get in your way.&lt;/p&gt;
&lt;h4 id=&quot;what-are-their-thoughts-on-the-physically-based-rendering-(pbr)-pipeline-in-stride%3F&quot; tabindex=&quot;-1&quot;&gt;What are their thoughts on the physically-based rendering (PBR) pipeline in Stride? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#what-are-their-thoughts-on-the-physically-based-rendering-(pbr)-pipeline-in-stride%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Elliot:&lt;/strong&gt; It’s very nice and produces great looking scenes. It’s pretty easy to understand.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kevin:&lt;/strong&gt; Works great and again is easy to use. The only issue is there is a marked difference between my editing software (Substance Painter), Stride&#39;s asset preview, and in game. Though at least those last 2 items aren&#39;t the engine&#39;s fault.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alex:&lt;/strong&gt; I’d say the artists thought it was pretty good. It works well and everything looks just fine in the game. There’s not much to add really. No problems to complain about that we know of. It just does the job nicely!&lt;/p&gt;
&lt;h4 id=&quot;did-you-encounter-any-challenges-or-limitations-with-shaders%2C-and-how-did-you-address-them%3F&quot; tabindex=&quot;-1&quot;&gt;Did you encounter any challenges or limitations with shaders, and how did you address them? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#did-you-encounter-any-challenges-or-limitations-with-shaders%2C-and-how-did-you-address-them%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;&lt;strong&gt;Elliot:&lt;/strong&gt; Initially we had to figure out how we were going to mix our custom procedural environment shaders with the Stride PBR material rendering. But once we had settled on our approach to this, most things were pretty smooth.&lt;/p&gt;
&lt;p&gt;Early on, it took a bit of digging into the Stride code to figure out what we needed to do with PipelineStates, EffectInstances and other items. We ended up much as described in the Stride documentation here: &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/graphics/low-level-api/index.html&quot;&gt;Low-level API&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Kevin:&lt;/strong&gt; Plenty. Some of it was learning a new engine and some of it was a lack of certain features. A huge bonus for artists would be to be able to have a node-based editor for shader effects. Right now (at least on our current version) things like animated UVs has to be done manually.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Alex:&lt;/strong&gt; When it comes to challenges or limitations with shaders in Stride, I’d say we didn’t run into much. The default shaders were solid and covered all our project needs so far. We haven’t tried adding custom ones yet though. I did give it a shot once using an example shader but it didn’t go well. The editor crashed and I was left scratching my head. I might revisit it later and hope for better luck. From that one try, it felt like adding a custom shader would take way more effort than you’d expect. Maybe I missed something simple but I wish it was less frustrating to bring a custom one into the project.&lt;/p&gt;
&lt;h2 id=&quot;level-design-and-prefabs&quot; tabindex=&quot;-1&quot;&gt;Level Design and Prefabs &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#level-design-and-prefabs&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;text-center&quot;&gt;
    &lt;img alt=&quot;Distnat Worlds 2 UI&quot; src=&quot;https://www.stride3d.net/images/blog/2025/distant-worlds-2-prefabs.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2025/distant-worlds-2-prefabs.webp&quot; /&gt;
&lt;/div&gt;
&lt;h4 id=&quot;how-was-the-level-creation-process-using-stride-for-your-team%3F&quot; tabindex=&quot;-1&quot;&gt;How was the level creation process using Stride for your team? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#how-was-the-level-creation-process-using-stride-for-your-team%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;DW2 doesn’t use levels in the normal sense. The galaxy is an open-world and is entirely procedurally generated. So we manage view changes and the transition between locations and scenes in code, adding and removing items as needed.&lt;/p&gt;
&lt;h4 id=&quot;was-the-prefab-system-easy-to-use-for-level-designers%2C-and-did-it-meet-your-expectations%3F&quot; tabindex=&quot;-1&quot;&gt;Was the Prefab system easy to use for level designers, and did it meet your expectations? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#was-the-prefab-system-easy-to-use-for-level-designers%2C-and-did-it-meet-your-expectations%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;We use Stride Prefabs mainly for particle effects. We instantiate particle effect Prefabs for various in-game effects, like weapons fire, hyperdrive effects, explosions, etc.&lt;/p&gt;
&lt;p&gt;These work well, allowing our effects artist to create things as he likes them, then package them together as a Prefab in Game Studio.&lt;/p&gt;
&lt;p&gt;In code we can then use these effects pretty easily, supplying their in-game world transform to scale and position them where they need to be.&lt;/p&gt;
&lt;h4 id=&quot;did-the-component-system-in-stride-prove-to-be-intuitive-for-designers%3F&quot; tabindex=&quot;-1&quot;&gt;Did the component system in Stride prove to be intuitive for designers? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#did-the-component-system-in-stride-prove-to-be-intuitive-for-designers%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;DW2 is probably not a typical game, so we only use the scene/entity system inside the game code itself, dynamically creating and updating scenes as needed.&lt;/p&gt;
&lt;p&gt;Stride Game Studio is really just an asset bundling tool for us.&lt;/p&gt;
&lt;h2 id=&quot;dlc-and-content-expansion&quot; tabindex=&quot;-1&quot;&gt;DLC and Content Expansion &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#dlc-and-content-expansion&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;text-center&quot;&gt;
    &lt;img alt=&quot;Distnat Worlds 2 UI&quot; src=&quot;https://www.stride3d.net/images/blog/2025/distant-worlds-2-dlc.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2025/distant-worlds-2-dlc.webp&quot; /&gt;
&lt;/div&gt;
&lt;h4 id=&quot;could-you-briefly-outline-the-steps-involved-in-creating-a-dlc-for-distant-worlds-2%3F&quot; tabindex=&quot;-1&quot;&gt;Could you briefly outline the steps involved in creating a DLC for Distant Worlds 2? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#could-you-briefly-outline-the-steps-involved-in-creating-a-dlc-for-distant-worlds-2%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;DW2 DLCs typically involve adding one or more new alien factions into the game.&lt;/p&gt;
&lt;p&gt;Each faction has new game features unique to them. They likely also have their own unique government type, which also has new features. So there is a lot of code to support this.&lt;/p&gt;
&lt;p&gt;From the art side each new faction involves around 25-30 new ship and base models, each with their own full set of materials and textures.&lt;/p&gt;
&lt;p&gt;Ship models in DW2 are quite detailed, with individual meshes for various parts of the ship, e.g. engines, weapon mounts, hangar bays, sensor dishes, etc.&lt;/p&gt;
&lt;p&gt;So the models are created as super-sets with all of the meshes that might be used. Then the player can design their own ships using the in-game ship editor. As they add or remove components to the ship, the game enables or disables appropriate meshes.&lt;/p&gt;
&lt;p&gt;These models and textures are packaged together into faction-specific Stride bundle files inside Game Studio. We then load these bundles in-game for the new factions and can then show their ships and bases in scenes.&lt;/p&gt;
&lt;p&gt;Additionally we also have animated characters for each new faction. These are implemented as 2D texture atlases that are animated using Spine. In-game we can play appropriate mood-based animations for the characters.&lt;/p&gt;
&lt;h4 id=&quot;how-do-you-detect-whether-a-dlc-is-installed-or-not-for-a-player%3F&quot; tabindex=&quot;-1&quot;&gt;How do you detect whether a DLC is installed or not for a player? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#how-do-you-detect-whether-a-dlc-is-installed-or-not-for-a-player%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Each distribution platform has their own mechanism for this. So whether it’s Steam, GOG or something else, we use their inbuilt features to check this. Then we can load the appropriate bundle files with all of the models and textures for that DLC.&lt;/p&gt;
&lt;h2 id=&quot;performance-and-optimization&quot; tabindex=&quot;-1&quot;&gt;Performance and Optimization &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#performance-and-optimization&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;text-center mb-3&quot;&gt;
    &lt;img alt=&quot;Distnat Worlds 2 UI&quot; src=&quot;https://www.stride3d.net/images/blog/2025/distant-worlds-2-map.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2025/distant-worlds-2-map.webp&quot; /&gt;
    &lt;small&gt;Source: Steam - Distant Worlds 2 - &lt;a rel=&quot;noopener&quot; href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=3421104197&quot; target=&quot;_blank&quot;&gt;Screenshots by Shrikebe&lt;/a&gt;&lt;/small&gt;
&lt;/div&gt;
&lt;h4 id=&quot;the-game-achieves-impressive-performance%2C-especially-during-large-scale-fleet-battles.-how-did-you-manage-to-optimize-for-several-simultaneous-battles%2C-each-with-many-ships-and-fighters%3F&quot; tabindex=&quot;-1&quot;&gt;The game achieves impressive performance, especially during large-scale fleet battles. How did you manage to optimize for several simultaneous battles, each with many ships and fighters? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#the-game-achieves-impressive-performance%2C-especially-during-large-scale-fleet-battles.-how-did-you-manage-to-optimize-for-several-simultaneous-battles%2C-each-with-many-ships-and-fighters%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Performance optimization has been an ongoing consideration throughout development. As we add new game features we periodically need to profile and improve performance in slow areas.&lt;/p&gt;
&lt;p&gt;Large galaxies can have a huge number of individual units and factions, all of which can have extensive logic that needs processing at some minimum level of frequency. We have test games that have more than 250,000 ships, fighters and bases. Individual locations/scenes might have over 3000 units in a single battle.&lt;/p&gt;
&lt;p&gt;Most of DWs performance demands are on the logic side, i.e. we are CPU-bound. So there have been 3 basic approaches we have used to improve logic performance:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Improve specific algorithms, i.e. find faster ways of calculating something&lt;/li&gt;
&lt;li&gt;Cache the outputs of expensive operations as much as possible and only update them periodically&lt;/li&gt;
&lt;li&gt;Use multi-threading to parallelize processing across all CPU cores. This requires very good locking, especially when iterating lists. It also requires a lot of defensive coding to check for null references which would never occur in single-threaded situations.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Rendering in DW2 does not generally encounter performance issues in the same way as the game logic does. However there are some optimizations:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;In large scenes we may exclude drawing for small meshes in models as the view zooms out, thus reducing the total number of draw calls&lt;/li&gt;
&lt;li&gt;We use instancing in a number of areas to handle elements with a high draw count, for example the stars in the galaxy view are drawn using instancing&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;are-there-any-specific-techniques-or-approaches-you&#39;d-recommend-for-simulating-large-scale-scenarios-like-fleet-battles%3F&quot; tabindex=&quot;-1&quot;&gt;Are there any specific techniques or approaches you&#39;d recommend for simulating large-scale scenarios like fleet battles? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#are-there-any-specific-techniques-or-approaches-you&#39;d-recommend-for-simulating-large-scale-scenarios-like-fleet-battles%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Early on we made the decision to optimize the way weapons are rendered to minimize draw calls. So all weapon blasts in a scene are drawn in a single draw call using a custom shader that handles all of the different textures and animations for all the various weapon types.&lt;/p&gt;
&lt;p&gt;The rendering is wrapped into a single vertex buffer with camera-facing billboards for each weapon blast. The shader determines what to draw using a number of texture arrays that allow various rendering features, e.g. flipbook animations, scrolling beams, etc.&lt;/p&gt;
&lt;p&gt;This places some definite constraints on what we can render. We can’t just go crazy with expensive particle effects. But it has huge benefits for performance.&lt;/p&gt;
&lt;p&gt;Weapon trails are handled in a similar way, where a single vertex buffer contains all of the trail particles, and is rendered with a single draw call per frame.&lt;/p&gt;
&lt;h2 id=&quot;ai-and-game-systems&quot; tabindex=&quot;-1&quot;&gt;AI and Game Systems &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#ai-and-game-systems&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;text-center mb-3&quot;&gt;
    &lt;img alt=&quot;Distnat Worlds 2 UI&quot; src=&quot;https://www.stride3d.net/images/blog/2025/distant-worlds-2-settings.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2025/distant-worlds-2-settings.webp&quot; /&gt;
    &lt;small&gt;Source: Steam - Distant Worlds 2 - &lt;a rel=&quot;noopener&quot; href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=3359322910&quot; target=&quot;_blank&quot;&gt;Screenshots by VoiD&lt;/a&gt;&lt;/small&gt;
&lt;/div&gt;
&lt;h4 id=&quot;did-you-require-any-kind-of-editor-extensions%3F-how-did-you-implement-them%3F&quot; tabindex=&quot;-1&quot;&gt;Did you require any kind of editor extensions? How did you implement them? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#did-you-require-any-kind-of-editor-extensions%3F-how-did-you-implement-them%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Our use of the Stride Game Studio is really just as a tool to bundle assets into the game. So we didn’t need this.&lt;/p&gt;
&lt;h4 id=&quot;which-serialization-method-did-you-use-for-saving-games%3F-was-it-a-database%2C-yaml%2C-or-a-mix%3F&quot; tabindex=&quot;-1&quot;&gt;Which serialization method did you use for saving games? Was it a database, YAML, or a mix? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#which-serialization-method-did-you-use-for-saving-games%3F-was-it-a-database%2C-yaml%2C-or-a-mix%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;The static source data for the game entities is mostly just XML files. Things like planet and star definitions, ship components, alien races, government types, research projects, etc.&lt;/p&gt;
&lt;p&gt;We have some internal tools for editing these files. And we also have auto-generated schema for most of these data types.&lt;/p&gt;
&lt;p&gt;For saving and loading games we use low-level binary serialization. So .NET &lt;code&gt;BinaryReader&lt;/code&gt; and &lt;code&gt;BinaryWriter&lt;/code&gt; with streams. This requires hand-coding all of the serialization, but has big payoffs in performance.&lt;/p&gt;
&lt;p&gt;This also allows easier version management as you add new data to the game. You can have conditional loading of new values based on game version.&lt;/p&gt;
&lt;h4 id=&quot;what-ai-libraries-did-you-use%3F-what-techniques-were-used-for-ai%2C-such-as-for-fleet-formations%2C-battle-decisions%2C-or-engage%2Fretreat-behaviors%3F-how-was-diplomacy-handled%3F&quot; tabindex=&quot;-1&quot;&gt;What AI libraries did you use? What techniques were used for AI, such as for fleet formations, battle decisions, or engage/retreat behaviors? How was diplomacy handled? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#what-ai-libraries-did-you-use%3F-what-techniques-were-used-for-ai%2C-such-as-for-fleet-formations%2C-battle-decisions%2C-or-engage%2Fretreat-behaviors%3F-how-was-diplomacy-handled%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;All game logic is custom written for each system. We don’t have any 3rd-party AI libraries.&lt;/p&gt;
&lt;p&gt;Logic happens at 3 main levels:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;galaxy-wide logic that affects everyone&lt;/li&gt;
&lt;li&gt;faction-wide logic where each faction makes high-level plans to explore, expand and conquer&lt;/li&gt;
&lt;li&gt;unit-level logic where each ship decides what mission to select to advance their factions goals&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We try to make each entity have sufficient logic to carry out it’s normal tasks and to also be able to respond to unexpected events in a reasonably intelligent manner. So the units can be given missions from a faction-level AI or manually by the player, but they can also assign themselves missions that make sense for the current situation.&lt;/p&gt;
&lt;p&gt;This kind of logic forms the bulk of the code in the game. So this logic really &lt;strong&gt;IS&lt;/strong&gt; Distant Worlds.&lt;/p&gt;
&lt;p&gt;In addition we have an extensive advisor system that can provide suggestions on what to do next. These advisors are deeply integrated with the faction- and unit-level logic. When you switch an area of the game to ‘advisor-mode’ then you will get periodic suggestions in that area that you can either approve or reject.&lt;/p&gt;
&lt;p&gt;So for Colonization you will get suggestions about which planets to colonize. Approving the advisor suggestion will build a new colony ship and send it off to claim the new planet as a colony for your faction.&lt;/p&gt;
&lt;p&gt;If you instead had the Colonization area fully-automated (no advisor suggestions) then the game logic would simply carry out whatever it thought was best, automatically establishing new colonies.&lt;/p&gt;
&lt;p&gt;You can fine-tune how each area of game logic works, even when it is fully-automated. These policy settings tweak precisely how the automated decisions are made, allowing you better control over things. This ‘intelligent automation’ is a key feature of Distant Worlds that allows it to scale very large while still being manageable for the player.&lt;/p&gt;
&lt;p&gt;The game logic (including the advisors) is constantly being developed and improved. With the very open game style of Distant Worlds, there are endless unexpected situations that can prove challenging for the game logic to handle. So we are always extending the game logic to handle new things.&lt;/p&gt;
&lt;h2 id=&quot;future-use-and-recommendations&quot; tabindex=&quot;-1&quot;&gt;Future Use and Recommendations &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#future-use-and-recommendations&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div align=&quot;center&quot;&gt;
    &lt;img alt=&quot;Distnat Worlds Future&quot; src=&quot;https://www.stride3d.net/images/blog/2025/distant-worlds-future.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2025/distant-worlds-future.webp&quot; /&gt;
&lt;/div&gt;
&lt;h4 id=&quot;what-types-of-projects-do-you-think-the-stride-engine-is-perfectly-suited-for%3F&quot; tabindex=&quot;-1&quot;&gt;What types of projects do you think the Stride engine is perfectly suited for? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#what-types-of-projects-do-you-think-the-stride-engine-is-perfectly-suited-for%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;For us, the key strength of Stride is it’s deep integration with the .NET ecosystem, providing easy access to all of its tools and features. This has meant that we can build a standard .NET executable that simply uses Stride for rendering. That flexibility is great.&lt;/p&gt;
&lt;h4 id=&quot;are-you-planning-to-use-stride-in-the-future%2C-beyond-maintaining-distant-worlds-2%3F&quot; tabindex=&quot;-1&quot;&gt;Are you planning to use Stride in the future, beyond maintaining Distant Worlds 2? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#are-you-planning-to-use-stride-in-the-future%2C-beyond-maintaining-distant-worlds-2%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;We currently have a development roadmap laid out for the next 12-18 months, with no end in sight after that. So Distant Worlds 2 will be keeping us busy for the foreseeable future 🙂. Stride will continue to be a core part of that work.&lt;/p&gt;
&lt;h4 id=&quot;how-can-the-stride-engine-be-improved-to-help-the-modding-community%3F&quot; tabindex=&quot;-1&quot;&gt;How can the Stride engine be improved to help the modding community? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#how-can-the-stride-engine-be-improved-to-help-the-modding-community%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Each game no doubt has its own unique requirements. But Distant Worlds modders mostly encounter Stride when packaging up assets to use in the game. This typically means creating a new Stride project that just contains static art assets (textures, models, etc). The goal is to generate a Stride bundle file that can then be loaded in the game.&lt;/p&gt;
&lt;p&gt;So any improvements to bundle creation and updating are always welcome.&lt;/p&gt;
&lt;p&gt;One small pain-point that still exists is renaming the bundle files.&lt;/p&gt;
&lt;p&gt;In Stride Game Studio, the normal build process generates the bundle with the name “default.bundle”. This is ok if you put all of your assets in a single project. But when your game gets bigger, that is not viable.&lt;/p&gt;
&lt;p&gt;In Distant Worlds we load many different bundles. The models for each faction are contained in their own bundle. We currently have 14 factions, so that means 14 different bundles. We also have other bundles for other parts of the game. Each of these bundles must have different names.&lt;/p&gt;
&lt;p&gt;There is currently no way to change the bundle name directly from within Game Studio (that I know of). Instead you have to hand-edit the YAML in the *.sdpkg files, changing the bundle name and adding the appropriate Selectors.&lt;/p&gt;
&lt;p&gt;That may sound fairly simple, but it can still be an extra hurdle for modders. Having bundle-renaming built into the Game Studio would make this much easier.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#conclusion&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The journey through Distant Worlds 2&#39;s development offers valuable insights into what&#39;s possible with the Stride engine. Code Force&#39;s experience demonstrates how Stride&#39;s deep integration with .NET creates a flexible foundation for ambitious projects, allowing developers to focus on crafting unique gameplay experiences rather than wrestling with engine limitations.&lt;/p&gt;
&lt;p&gt;What stands out most is how the team leveraged Stride&#39;s strengths—particularly its rendering capabilities and open-source nature—while developing custom solutions where needed. Their approach to performance optimization, particularly for large-scale battles involving thousands of units, provides practical lessons for developers working on similarly complex simulations.&lt;/p&gt;
&lt;p&gt;We&#39;d like to extend our sincere thanks to the Code Force team for sharing their expertise and experiences so candidly. Their willingness to detail both successes and challenges offers invaluable knowledge to the Stride community and game developers at large.&lt;/p&gt;
&lt;p&gt;For those inspired by what you&#39;ve seen here, we encourage you to explore Stride for your own projects. Whether you&#39;re developing strategy games like Distant Worlds 2 or something entirely different, Stride&#39;s combination of powerful rendering, C# integration, and flexible architecture provides a solid foundation for bringing your vision to life.&lt;/p&gt;
&lt;p&gt;If you&#39;re already using Stride for your projects, we&#39;d love to hear about your experiences in our &lt;a href=&quot;https://github.com/stride3d/stride/discussions&quot;&gt;GitHub discussion&lt;/a&gt; or on our &lt;a href=&quot;https://discord.gg/f6aerfE&quot;&gt;Discord server&lt;/a&gt;. Your stories and insights help strengthen our growing community of developers.&lt;/p&gt;
&lt;h2 id=&quot;links&quot; tabindex=&quot;-1&quot;&gt;Links &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/#links&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Steam: &lt;a href=&quot;https://store.steampowered.com/app/1531540/Distant_Worlds_2/&quot;&gt;Distant Worlds 2 on Steam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DW2 Forum: &lt;a href=&quot;https://www.matrixgames.com/forums/viewforum.php?f=10151&quot;&gt;Matrix Games Forum&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;DW2 Discord: &lt;a href=&quot;https://discord.gg/U9tnSqMH&quot;&gt;Distant Worlds 2 Discord&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;YouTube: &lt;a href=&quot;https://www.youtube.com/@SlitherineGames/videos&quot;&gt;Slitherine Games on YouTube&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;GitHub Stride DW2 Discussion: &lt;a href=&quot;https://github.com/stride3d/stride/discussions/2484&quot;&gt;GitHub Discussions&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Kevin: You can find him on our &lt;a href=&quot;https://discord.gg/f6aerfE&quot;&gt;Stride Discord&lt;/a&gt; server as @KevinC&lt;/li&gt;
&lt;li&gt;Elliot: You can find him on &lt;a href=&quot;https://discord.gg/U9tnSqMH&quot;&gt;DW2 Discord&lt;/a&gt; server as @elliot_333&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Wed, 09 Apr 2025 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/distant-worlds-2-development-with-stride/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2025/distant-worlds-image.webp" type="image/webp" length="0" /></item>
    <item>
      <title>Investigating SPIR-V for the shader system - Part 2</title>
      <description>&lt;p&gt;In this second part we&#39;re going to dive deeper in how the current SDSL compiler works and how we are improving on it for the SPIR-V compiler. This will be a sort of personal log book of my research on the subject.&lt;/p&gt;
&lt;style&gt;
    .stride-quote {
        padding : 1rem;
        border-radius : 0.25rem;
        border-left : 0.25rem solid lightgray;
        font-style : italic;
        opacity: 0.75;
    }
    img[alt=thinking] {
        max-width: 50dvw;
        max-height: 24rem;
        display: block;
        float: none;
        margin-left: auto;
        margin-right: auto;
    }
    img[alt=creeping2] {
        max-width: 50dvw;
        max-height: 12rem;
        display: block;
        float: none;
        margin-left: auto;
        margin-right: auto;
        opacity : 50%;
    }
    img[alt=onfire] {
        max-width: 50dvw;
        display: block;
        float: none;
        margin-left: auto;
        margin-right: auto;
    }
&lt;/style&gt;
&lt;p&gt;If you&#39;re interested in the other parts of this blog series :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/&quot;&gt;Part 1&lt;/a&gt; An introduction to the project&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/&quot;&gt;Part 3&lt;/a&gt; we write a new parser for SDSL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Table of Contents:&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#preface&quot;&gt;Preface&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#how-it-works-currently&quot;&gt;How it works currently&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#the-idea-for-spir-v&quot;&gt;The idea for SPIR-V&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#implementation&quot;&gt;Implementation&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#the-easy-way&quot;&gt;The easy way&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#%22i-should-rewrite-it-from-scratch...%22&quot;&gt;&amp;quot;I should rewrite it from scratch...&amp;quot;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#buffers-and-instructions&quot;&gt;Buffers and instructions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#generation&quot;&gt;Generation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#extending-spir-v&quot;&gt;Extending SPIR-V&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#the-irony&quot;&gt;The Irony&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#conclusions&quot;&gt;Conclusions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;p&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/&quot;&gt;In the last blog post&lt;/a&gt;, we briefly saw why SPIR-V was an interesting shader format for our new shader compiler. After a year of research on this subject I&#39;m coming back with ideas and implementations!&lt;/p&gt;
&lt;h2 id=&quot;preface&quot; tabindex=&quot;-1&quot;&gt;Preface &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#preface&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Rewriting the shader system is a complicated task in itself. As you may already know, Stride was initially a commercial product that was open-sourced not long ago, and some of the original devs left. This has led to a difficulty gathering information on the inner working of the engine.&lt;/p&gt;
&lt;p&gt;Fortunately we still have some of the original team members helping and answering questions, and the source code is well written and easy to understand, this has helped a lot of contributors to be able to fix issues quite fast.&lt;/p&gt;
&lt;p&gt;As for me, I started this project with no prior knowledge of how compilers worked and a very faint idea of how shaders works. I&#39;ve learned some things and am trying my best, so if you have any ideas, improvements and criticism, I&#39;ll be happy to discuss it on our Discord server or in a GitHub discussion. 😊&lt;/p&gt;
&lt;p&gt;The code related should be available in the &lt;a href=&quot;https://github.com/stride3D/SDSL&quot;&gt;SDSL repository of Stride&lt;/a&gt;. Hopefully it&#39;ll be merged in the Stride repository itself in the future!&lt;/p&gt;
&lt;p&gt;Also credit to Felicia Salomone/&lt;a href=&quot;https://www.instagram.com/phaelicis/&quot;&gt;@phaelicis&lt;/a&gt; for the art!&lt;/p&gt;
&lt;h2 id=&quot;how-it-works-currently&quot; tabindex=&quot;-1&quot;&gt;How it works currently &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#how-it-works-currently&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There are two components to SDSL :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;The effect system&lt;/li&gt;
&lt;li&gt;The shader mixin system&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The effect system sits at a higher level than the shader mixins. It drives the creation of shader permutations through mixin operations of shader mixins.&lt;/p&gt;
&lt;p&gt;A shader mixin is a building block for shaders in Stride, they are mixed and merged together to produce one final shader that will be used in rendering pipelines. Mixins is another way to reuse code without going through an inheritance hierarchy, there are many ways to go about it and SDSL has very specific kind of rules.&lt;/p&gt;
&lt;p&gt;A quick example for this :&lt;/p&gt;
&lt;pre class=&quot;language-hlsl&quot;&gt;&lt;code class=&quot;language-hlsl&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// Let&#39;s define two shader mixins with different fields and simple method&lt;/span&gt;
shader MixinA
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; bar &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
shader MixinB
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;float&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;float&lt;/span&gt; bar2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; b &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.5f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// And one that is going to inherit our two first shaders&lt;/span&gt;
shader MixinC &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MixinA&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; MixinB
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;float&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The inheritance is going to reuse the code present in the mixins and mix them together using a set of rules.&lt;/p&gt;
&lt;p&gt;In this case the MixinC will internally look like :&lt;/p&gt;
&lt;pre class=&quot;language-hlsl&quot;&gt;&lt;code class=&quot;language-hlsl&quot;&gt;shader MixinC &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; MixinA&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; MixinB
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// MixinC fields from MixinA and MixinB are copied as is&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; a&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;float&lt;/span&gt; b&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;float&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
  
    &lt;span class=&quot;token comment&quot;&gt;// Methods are merged together, statements appear in order of apparition of mixins.&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Foo&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt; bar &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; a &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token keyword&quot;&gt;float&lt;/span&gt; bar2 &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; b &lt;span class=&quot;token operator&quot;&gt;*&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.5f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;This system makes it surprisingly easy to add shaders to material parts, say you want to add a shader to compute the emissive component of a material, just create a &lt;code&gt;CustomAwesomeEmissiveMixin&lt;/code&gt;, inherit &lt;code&gt;Texturing, ComputeColor&lt;/code&gt;, implement the &lt;code&gt;float4 ComputeColor()&lt;/code&gt; method, ✨&lt;em&gt;woopdeedoo&lt;/em&gt;✨ Stride will automatically generate a new permutation of our material shader by adding in the emissive mixin!&lt;/p&gt;
&lt;p&gt;The way it&#39;s implemented comes from a very simple idea :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Generate syntax trees representing the SDSL code&lt;/li&gt;
&lt;li&gt;Mix syntax trees together&lt;/li&gt;
&lt;li&gt;Convert tree into HLSL code&lt;/li&gt;
&lt;li&gt;If GLSL is needed, convert HLSL to GLSL&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;But this has some issues regarding performance :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Mixing tree structures together to generate new permutations involves a lot of deep cloning/defensive copies.&lt;/li&gt;
&lt;li&gt;Extracting information from text is slower than extracting it from compact binary data&lt;/li&gt;
&lt;li&gt;The garbage collector is going to be stressed and have some stutters due to allocations needed by cloning/defensive copies and parsing data.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It&#39;s important to note that these issues are only about shader permutation generation so far.&lt;/p&gt;
&lt;h2 id=&quot;the-idea-for-spir-v&quot; tabindex=&quot;-1&quot;&gt;The idea for SPIR-V &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#the-idea-for-spir-v&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Dealing with tree structure is very rarely the fastest option, especially when using programming languages with managed memory. That&#39;s why we want to rewrite Stride&#39;s shader system, remove the need to process trees and instead focus on dealing with buffers since computers are faster at processing them.&lt;/p&gt;
&lt;p&gt;What is SPIR-V? How could it help? 🤔&lt;/p&gt;
&lt;p&gt;Let&#39;s check the official specification as of today, to understand what it is :&lt;/p&gt;
&lt;blockquote class=&quot;stride-quote&quot;&gt;
&lt;p&gt;SPIR-V is a simple binary intermediate language for graphical shaders and compute kernels. A SPIR-V module contains multiple entry points with potentially shared functions in the entry point’s call trees. Each function contains a control-flow graph (CFG) of basic blocks, with optional instructions to express structured control flow. Load/store instructions are used to access declared variables, which includes all input/output (IO). Intermediate results bypassing load/store use static single-assignment (SSA) representation. Data objects are represented logically, with hierarchical type information: There is no flattening of aggregates or assignment to physical register banks, etc. Selectable addressing models establish whether general pointer operations may be used, or if memory access is purely logical.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Okay great, what about the goals for it :&lt;/p&gt;
&lt;blockquote class=&quot;stride-quote&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;SPIR-V has the following goals:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Provide a simple binary intermediate language for all functionality appearing in Khronos shaders/kernels.&lt;/li&gt;
&lt;li&gt;Have a concise, transparent, self-contained specification (sections &lt;a href=&quot;https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#Specification&quot;&gt;Specification&lt;/a&gt; and &lt;a href=&quot;https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#Binary&quot;&gt;Binary Form&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Map easily to other intermediate languages.&lt;/li&gt;
&lt;li&gt;Be the form passed by a client API into a driver to set shaders/kernels.&lt;/li&gt;
&lt;li&gt;Support multiple execution environments, specified by client APIs.&lt;/li&gt;
&lt;li&gt;Can be targeted by new front ends for novel high-level languages.&lt;/li&gt;
&lt;li&gt;Allow the first steps of compilation and reflection to be done offline.&lt;/li&gt;
&lt;li&gt;Be low-level enough to require a reverse-engineering step to reconstruct source code.&lt;/li&gt;
&lt;li&gt;Improve portability by enabling shared tools to generate or operate on it.&lt;/li&gt;
&lt;li&gt;Reduce compile time during application run time. (Eliminating most of the compile time during application run time is not a goal of this intermediate language. Target-specific register allocation and scheduling are still expected to take significant time.)&lt;/li&gt;
&lt;li&gt;Allow some optimizations to be done offline.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;WAIT! But, what if... we could extend the spec...&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.stride3d.net/images/blog/2024-11-10-spirv2/thumbnail_Youness3.png&quot; alt=&quot;thinking&quot; /&gt;&lt;/p&gt;
&lt;blockquote class=&quot;stride-quote&quot;&gt;
&lt;blockquote&gt;
&lt;p&gt;SPIR-V can be extended by multiple vendors or parties simultaneously:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Using the &lt;a href=&quot;https://registry.khronos.org/SPIR-V/specs/unified1/SPIRV.html#OpExtension&quot;&gt;&lt;strong&gt;OpExtension&lt;/strong&gt;&lt;/a&gt; instruction to add semantics, which are described in an extension specification.&lt;/li&gt;
&lt;li&gt;Reserving (registering) ranges of the token values, as described further below.&lt;/li&gt;
&lt;li&gt;Aided by instruction skipping, also further described below.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;
&lt;/blockquote&gt;
&lt;p&gt;WOW! Now we&#39;re cooking! 🍽️&lt;/p&gt;
&lt;p&gt;Here&#39;s the main idea :&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;We extend the SPIR-V specification with our own instruction set, telling Stride how to mix SPIR-V files together&lt;/li&gt;
&lt;li&gt;We produce partial SPIR-V bytecode for those mixins, since mixins only contain partial code&lt;/li&gt;
&lt;li&gt;We mix-in together those partial SPIR-V files at runtime, or offline&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Using SPIR-V is not going to be any faster than using GLSL or HLSL, those languages already have very performant compilers, but for SDSL, it would be a &lt;em&gt;game changer&lt;/em&gt;. The tree structure manipulation we have is suboptimal and .NET is faster at manipulating buffers anyway, but using SPIR-V would make sure we process only binary buffers. Additionally, it allow us to potentially make all shader front-end processing offline, we would effectively skip the whole front-end written in C# at runtime, huge win for us. Now we just need an...&lt;/p&gt;
&lt;h2 id=&quot;implementation&quot; tabindex=&quot;-1&quot;&gt;Implementation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#implementation&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;the-easy-way&quot; tabindex=&quot;-1&quot;&gt;The easy way &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#the-easy-way&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The first instinct I had was to lookup for some libraries to generate SPIR-V bytecode with some constraints :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It should give us the ability to extend SPIR-V to support our mixin system&lt;/li&gt;
&lt;li&gt;It should be easy to integrate in the engine and easy to package with games, the new shader compiler should not add more complexity to the engine&lt;/li&gt;
&lt;li&gt;The libraries should be a native, with which we can easily generate bindings, or written in C#&lt;/li&gt;
&lt;li&gt;If written in C# it should be AOT compatible, for potential future console support.&lt;/li&gt;
&lt;li&gt;It should also run fast, or use the recommended practices for high performance&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The first solution I&#39;ve considered was LLVM, there was an ongoing work to add SPIR-V generation, this seemed like a neat idea but was nowhere near read and not sure if LLVM is fast enough to be used at runtime without creating stutters.&lt;/p&gt;
&lt;p&gt;Shaderc and SPIR-V Tools have some SPIR-V generation capabilities to some degrees but from C# it would be hard to extend the SPIR-V specification. It has great support nonetheless, and our friends over at &lt;a href=&quot;https://github.com/dotnet/Silk.NET&quot;&gt;Silk.NET&lt;/a&gt; have some bindings for these tools.&lt;/p&gt;
&lt;p&gt;Another one was the Nintendo Switch emulator Ryujinx, written in C#, it can generate SPIR-V on the fly to translate/compile the console&#39;s shaders. They have generated C# code based on the SPIR-V headers and specification and are using it to assemble some SPIR-V modules.&lt;/p&gt;
&lt;p&gt;I decided to start from this Ryujinx code and made a little proof of concept by writing a little tool that takes the output of Stride&#39;s parser and convert it into shader modules. It only supported a very tiny subset of SDSL but it was enough to prove the compiler can be made, and to remind me that I do not know SDSL nor SPIR-V that well, and the Ryujinx code was not exactly suited for Stride. But then, the most intrusive thought a dev can have just crept in my mind...&lt;/p&gt;
&lt;img alt=&quot;creeping&quot; src=&quot;https://www.stride3d.net/images/blog/2024-11-10-spirv2/thumbnail_Youness1.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2024-11-10-spirv2/thumbnail_Youness1.png&quot; /&gt;
&lt;h3 id=&quot;%22i-should-rewrite-it-from-scratch...%22&quot; tabindex=&quot;-1&quot;&gt;&amp;quot;I should rewrite it from scratch...&amp;quot; &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#%22i-should-rewrite-it-from-scratch...%22&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;And make sure it fits our needs, the constraints i&#39;ve listed in the previous section.&lt;/p&gt;
&lt;p&gt;I decided to follow some core tenets and make sure I don&#39;t over-engineer anything for the sake of winning a few microseconds. First, as we&#39;re going to read, write and copy a lot, data should then be stored in a compact way using buffers and value types. This would improve enumeration of instructions and possibly garbage collection. We are also going to deal with a lot of small buffers, so  pooling those buffers is going to be important to avoid stressing the garbage collector. Finally we should make sure SPIR-V data is arranged in ways that would benefit the compiler&#39;s performance.&lt;/p&gt;
&lt;p&gt;But most importantly, keep it as simple as possible.&lt;/p&gt;
&lt;h3 id=&quot;buffers-and-instructions&quot; tabindex=&quot;-1&quot;&gt;Buffers and instructions &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#buffers-and-instructions&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;According to the specification, instructions are made out of words/integers, they have a variable size and the size of the instruction is written in the high 16 bits of the first word.&lt;/p&gt;
&lt;p&gt;Instructions would be represented as slices of this buffer and to access those instructions we would need to iterate through this buffer.&lt;/p&gt;
&lt;p&gt;IT&#39;S CODING TIME!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.stride3d.net/images/blog/2024-11-10-spirv2/thumbnail_Youness2.png&quot; alt=&quot;onfire&quot; /&gt;&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// A RefInstruction will hold a Span and some cool methods and tools to extract information from this instruction. &lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// We could also create an Instruction struct containing a Memory&amp;lt;int&gt; and doing the same...&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;RefInstruction&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;Span&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; words&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;Span&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; Words &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; words&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// ...&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// A buffer class to represent our SPIR-V buffer, disposable because we&#39;re using MemoryOwner from the high performance community toolkit&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;SpirvBuffer&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token type-list&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;IDisposable&lt;/span&gt;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// This will represent words and we&#39;ll extract instructions from it by taking Span&amp;lt;int&gt; slices&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;MemoryOwner&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; Words &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
  
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;Enumerator&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;GetEnumerator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;// An enumerator for our instructions&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;struct&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Enumerator&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;SpirvBuffer&lt;/span&gt; buffer&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; position &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;RefInstruction&lt;/span&gt; Current &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Words&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Span&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Slice&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;position&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Words&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Span&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;position&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

        &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;bool&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;MoveNext&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;token comment&quot;&gt;// A simple advance, we read the size in the high bits, and just skip words based on this size.&lt;/span&gt;
            position &lt;span class=&quot;token operator&quot;&gt;+=&lt;/span&gt; buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Words&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Span&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;position&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;&gt;&gt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;16&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
            &lt;span class=&quot;token keyword&quot;&gt;return&lt;/span&gt; position &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&lt;/span&gt; buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Words&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Length&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;

    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;void&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;Dispose&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;=&gt;&lt;/span&gt; Words&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Dispose&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Instructions can have a variable number of operands and each operands can be one or multiple words. The simplest way to extract operand information from this slice is to generate C# source code with information on how to parse each instructions based on its type and size.&lt;/p&gt;
&lt;p&gt;And with just that, we can parse SPIR-V and even write our own SPIR-V disassembly tool!&lt;/p&gt;
&lt;h3 id=&quot;generation&quot; tabindex=&quot;-1&quot;&gt;Generation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#generation&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Now that we can load SPIR-V and parse it, the next step is to be able to write instructions. Fortunately for us, the SPIR-V headers repository provide a C# file containing all the enums and constants needed for instructions operands and some JSON files describing instructions and their operands as well as if the operands are optional or have to be passed as an array of values. With a few more, we can generate methods to add or insert instruction in a buffer!&lt;/p&gt;
&lt;p&gt;Here&#39;s an excerpt from the current unified core grammar of SPIR-V and its corresponding generated C# code :&lt;/p&gt;
&lt;pre class=&quot;language-json&quot;&gt;&lt;code class=&quot;language-json&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
      &lt;span class=&quot;token property&quot;&gt;&quot;opname&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;OpFAdd&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token property&quot;&gt;&quot;class&quot;&lt;/span&gt;  &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;Arithmetic&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token property&quot;&gt;&quot;opcode&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;129&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token property&quot;&gt;&quot;operands&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;kind&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;IdResultType&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;kind&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;IdResult&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;kind&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;IdRef&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;        &lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&#39;Operand 1&#39;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
        &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token property&quot;&gt;&quot;kind&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;IdRef&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;        &lt;span class=&quot;token property&quot;&gt;&quot;name&quot;&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;&#39;Operand 2&#39;&quot;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
      &lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;
      &lt;span class=&quot;token property&quot;&gt;&quot;version&quot;&lt;/span&gt;&lt;span class=&quot;token operator&quot;&gt;:&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;1.0&quot;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;And here&#39;s a function we can generate from it :&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;Instruction&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;AddOpFAdd&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;this&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;SpirvBuffer&lt;/span&gt; buffer&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IdResultType&lt;/span&gt; resultType&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IdRef&lt;/span&gt; operand1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;IdRef&lt;/span&gt; operand2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;// Extend the buffer and put the data needed&lt;/span&gt;
    &lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;/span&gt; size &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;+&lt;/span&gt; ComputeSize&lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;resultType&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; operand1&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; operand2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;
    buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;size &lt;span class=&quot;token operator&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;16&lt;/span&gt; &lt;span class=&quot;token operator&quot;&gt;|&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;Op&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;OpFAdd&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;resultType&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;operand1&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
    buffer&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;operand2&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After going through the core and the glsl grammar, we end up with a library that can both parse and assembler SPIR-V.&lt;/p&gt;
&lt;h3 id=&quot;extending-spir-v&quot; tabindex=&quot;-1&quot;&gt;Extending SPIR-V &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#extending-spir-v&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This one was the easiest step as we&#39;ve already made a source generator that generates the necessary C# code from json files, we just need an additional JSON grammar file made for SDSL and the generator will generate code to add custom instructions, there&#39;s really nothing else to it!&lt;/p&gt;
&lt;p&gt;What was left is creating a little tool that can read those extensions and pre-process many SPIR-V together to generate a valid SPIR-V module that can be consumed by Vulkan, OpenGL, WGPU and soon DirectX 12. I have made a prototype that works quite well but can be improved in the future, it&#39;s not a complicated task, it just takes time and efforts.&lt;/p&gt;
&lt;p&gt;Finally we can make sure we can generate SPIR-V mixins from the AST generated by the current Stride shader system. This should be easy, right? RIGHT?&lt;/p&gt;
&lt;h2 id=&quot;the-irony&quot; tabindex=&quot;-1&quot;&gt;The Irony &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#the-irony&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The current shader parser was made for the specific use case of mixin abstract trees. Modifying the code would be a huge endeavor as I would have to dive into what&#39;s existing and try my best to understand what i can change without breaking anything, worse than that, the parser was written with &lt;a href=&quot;https://github.com/IronyProject/Irony&quot;&gt;Irony&lt;/a&gt;, a very good C# library to help anyone parse things in an LALR fashion, but with a lacking documentation and, in my personal opinion, has an &amp;quot;easy to write, hard to read&amp;quot; kind of API.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/xtravar/CppNet&quot;&gt;CppNet&lt;/a&gt; is another library that Stride uses to preprocess SDSL code. It works like a C/C++ preprocessor, depending values given to the compiler, it will enable or disable some parts of the code. It&#39;s quite useful when you need target specific code, but it defeats the purpose of having a whole mixin system and would invalidate already compiled SPIR-V mixins.&lt;/p&gt;
&lt;p&gt;While it might be smarter and easier to continue using those libraries and just patch our new shiny SPIR-V assembler, rewriting the front-end seems like a necessary step if we want to embrace the newer .NET APIs for better performance. We just need to know how much performance we could squeeze from it... 🤔&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.stride3d.net/images/blog/2024-11-10-spirv2/thumbnail_Youness1.png&quot; alt=&quot;creeping2&quot; /&gt;&lt;/p&gt;
&lt;p&gt;But that&#39;s for another blog post, so much happened since last year and this blog post is getting long. 😀&lt;/p&gt;
&lt;h2 id=&quot;conclusions&quot; tabindex=&quot;-1&quot;&gt;Conclusions &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/#conclusions&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Writing this SPIR-V library was very fun, I&#39;ve learned a lot about SPIR-V and some of the possible use cases for it in the context of Stride. As you might have imagined, this was the easy part of this shader system rewrite. In the next installment we&#39;ll see the little adventure I went through to make the most of our shader front-end!&lt;/p&gt;
&lt;p&gt;Thank you for reading!&lt;/p&gt;
</description>
      <pubDate>Wed, 20 Nov 2024 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/</guid>
      <enclosure url="https://www.stride3d.net/images/spir.png" type="image/png" length="0" /></item>
    <item>
      <title>Open Worlds: An Introduction to Free and Open-Source Game Engines</title>
      <description>&lt;p&gt;With so many free and open-source game engines out there, where do you even start?&lt;/p&gt;
&lt;div align=&quot;center&quot;&gt;
    &lt;img alt=&quot;Girl thinking about game development&quot; src=&quot;https://www.stride3d.net/images/blog/2024-03/foss-engine-girl-banner.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2024-03/foss-engine-girl-banner.webp&quot; /&gt;
&lt;/div&gt;
&lt;p&gt;Table of Contents:&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#introduction&quot;&gt;Introduction&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#before-we-dive-in&quot;&gt;Before we dive in&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#what-is-foss-and-why-should-i-use-a-foss-game-engine%3F&quot;&gt;What is FOSS and why should I use a FOSS game engine?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#what-foss-game-engines-are-available-today%3F&quot;&gt;What FOSS game engines are available today?&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#bevy&quot;&gt;Bevy&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#godot&quot;&gt;Godot&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#open-3d-engine&quot;&gt;Open 3D Engine&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#stride&quot;&gt;Stride&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#what-engine-should-you-pick%3F-and-other-closing-thoughts&quot;&gt;What engine should you pick? And other closing thoughts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#acknowledgments&quot;&gt;Acknowledgments&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;introduction&quot; tabindex=&quot;-1&quot;&gt;Introduction &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#introduction&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The party is over. The era of companies offering their products and services at unsustainably low prices is coming to a close. Growing pressure from shareholders to transition from maximizing growth to maximizing revenue has pushed many commercial software companies to reevaluate their business models. In other words, introduce price increases and new fees. Those dependent on their software must now decide between accepting the increased financial burden or switching to alternatives. The video game industry is no exception to this changing tide as major game engine developers explore new ways to monetize their users. It raises a lot of questions for the community. How will we, as developers, manage these rising costs? Just as importantly, considering the immense impact licensing changes can have on developers, should Epic and Unity continue having a disproportionate influence on the game development landscape? While there is never a good time to wrestle with these questions, the rise of free and open-source game engines over the past decade gives independent game developers an opportunity to evaluate where free and open-source software can have a role in their next project.&lt;/p&gt;
&lt;h2 id=&quot;before-we-dive-in&quot; tabindex=&quot;-1&quot;&gt;Before we dive in &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#before-we-dive-in&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I want to make this clear from the start: I will not be doing a head-to-head comparison of free and open-source game engines. The summaries of each engine discussed will not be exhaustive nor specifically highlight exclusive features. This is a celebration of the hard work of the game development community. I want to use this as a platform to get you excited about free and open-source game development and consider options beyond proprietary engines like Unity, Unreal, and GameMaker.&lt;/p&gt;
&lt;p&gt;If I tried to cover every feature of every modern free and open-source engine, this wouldn’t be a single article but an entire book series. For that reason, I identified notable features and characteristics of some handpicked engines I thought would be worth sharing. While reading this, keep in mind that no engine is one-size-fits-all, and, as I’ll explain later, picking an engine is about choosing the right tool for &lt;em&gt;you&lt;/em&gt;. With that out of the way, let’s start!&lt;/p&gt;
&lt;h2 id=&quot;what-is-foss-and-why-should-i-use-a-foss-game-engine%3F&quot; tabindex=&quot;-1&quot;&gt;What is FOSS and why should I use a FOSS game engine? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#what-is-foss-and-why-should-i-use-a-foss-game-engine%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As the name suggests, free and open-source software (FOSS) includes two notable characteristics: it is free (libre) and its source code is available. You can use free (or libre) software for any purpose at your sole discretion. You will most commonly hear something like: “free as in speech, not free as in beer.” It may be available at no cost, but even more importantly, the user has complete control over the software. The open-source aspect of FOSS describes how everyone has access to the code that makes up the software.&lt;/p&gt;
&lt;p&gt;Using a FOSS game engine provides several advantages. First, no licensing fees. While contributors always appreciate donations, none of the notable FOSS game engines expect or require upfront payment, subscriptions, or ongoing royalties. FOSS engines also provide independence from a single organization. If changes to a FOSS engine’s terms upset the community, the engine’s license allows developers to stick to the version with the most favorable terms and even &lt;a href=&quot;https://en.wikipedia.org/wiki/Fork_(software_development)&quot;&gt;fork off the project&lt;/a&gt; if they choose.&lt;/p&gt;
&lt;p&gt;The community guides the development and growth of their FOSS game engine of choice. Many FOSS game engines have active and passionate communities that share their knowledge, advocate for their engine, and help newcomers. These vibrant and dedicated communities serve as a potent learning resource when working solo or as a small team. Some community members even contribute to their engine, improving it for everyone.&lt;/p&gt;
&lt;p&gt;FOSS game engines allow anyone to modify the engine to fit their needs. For example, if the engine lacks a specific feature, has a persistent bug, or needs quality-of-life improvements, anyone can update it as necessary. They can even take the additional step of contributing the changes to the project for everyone’s benefit. One of the greatest strengths of FOSS game engines lies in their communities and a willingness for everyone to work towards a collective good.&lt;/p&gt;
&lt;h2 id=&quot;what-foss-game-engines-are-available-today%3F&quot; tabindex=&quot;-1&quot;&gt;What FOSS game engines are available today? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#what-foss-game-engines-are-available-today%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Although FOSS game engines have existed for decades, the past several years have seen an explosion in the number of game engines available, as well as contributors, money, and resources dedicated to them. It would be impossible to cover all the FOSS game engines available now. In fact, if you have a passion for a particular language or framework, more likely than not, someone built a game engine with it.&lt;/p&gt;
&lt;p&gt;This post will focus on some of the more notable modern FOSS game engines: Bevy, Godot, Open 3D Engine, and (of course) Stride. However, this is not an exhaustive list. As I mentioned before, &lt;a href=&quot;https://enginesdatabase.com/?software_license=1&quot;&gt;there are more engines out there than I could ever cover in a single blog post&lt;/a&gt;. Many skilled and dedicated folks have put serious time and effort into making game engines and shared them with the world. I encourage you to use this post as a starting point and look at what each community offers.&lt;/p&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;
&lt;img alt=&quot;Bevy Logo&quot; src=&quot;https://www.stride3d.net/images/blog/2024-03/bevy-logo.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2024-03/bevy-logo.webp&quot; /&gt;
&lt;/div&gt;
&lt;h3 id=&quot;bevy&quot; tabindex=&quot;-1&quot;&gt;Bevy &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#bevy&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Written in Rust, Supported Languages: Rust&lt;/li&gt;
&lt;li&gt;Platforms:
&lt;ul&gt;
&lt;li&gt;Development (Code Only): Windows, Mac, Linux&lt;/li&gt;
&lt;li&gt;Build Targets: Windows, Mac, Linux, iOS, Android, Web&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As the most popular Rust-based game engine, &lt;a href=&quot;https://bevyengine.org/&quot;&gt;Bevy&lt;/a&gt; offers a rich code-only development environment (an editor is coming in the future) capable of running on all major operating systems (Windows, Mac, and Linux). At the heart of Bevy’s vision for game development lies the &lt;a href=&quot;https://bevyengine.org/learn/quick-start/getting-started/ecs/&quot;&gt;Entity Component System (ECS)&lt;/a&gt; paradigm. While there are other resources available that can explain the benefits of ECS better, in a nutshell, ECS breaks down the code into three core pillars: entities, components, and systems. Entities are composed of components that can interact with each other using systems. For example, the player character could be an entity with a health component that tracks the player character’s health bar. An enemy character could also use that health component for the same purpose. ECS encourages modularity and reusability by enabling developers to create components applicable to distinct entities. While other game engines can approximate a similar system, Bevy makes this part of its core design ethos.&lt;/p&gt;
&lt;p&gt;As established with Bevy’s use of ECS, the engine’s developers care deeply about modularity. &lt;a href=&quot;https://bevyengine.org/learn/quick-start/getting-started/plugins/&quot;&gt;The engine’s plugin system&lt;/a&gt; accentuates their commitment to that principle in every part of Bevy. Developers can organize the game’s systems into discrete plugins. An example of this is organizing all the UI code into a UI plugin. From there, developers can slot the plugin into the game’s initialization step. The plugin system helps organize the code and encourages modularity by allowing developers to add or remove the plugin based on their needs. This paradigm even applies to the engine’s core features, as they are all organized into plugins. It becomes trivial to activate or deactivate any part of the engine—including rendering, audio playback, and event loops—as the developer sees fit.&lt;/p&gt;
&lt;p&gt;Asset libraries provide a wealth of resources that empower developers to learn the tools quickly and get their game to a playable state. &lt;a href=&quot;https://bevyengine.org/assets/&quot;&gt;The community assembled a library of assets available on the official website for everyone to use and share&lt;/a&gt;. Bevy’s library includes tutorials, plugins, and templates that address subjects like physics, networking, and input management. Even entire games and applications are available in the asset library to either build on or use as a reference while learning the engine. Bevy’s structure encourages developers to use any of the resources from this library freely as part of the building blocks that will make up their game. In conjunction with Rust’s package manager, there is a strong emphasis on modularity at every level of the engine.&lt;/p&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;
&lt;img alt=&quot;Godot Logo&quot; src=&quot;https://www.stride3d.net/images/blog/2024-03/godot-logo.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2024-03/godot-logo.webp&quot; /&gt;
&lt;/div&gt;
&lt;h3 id=&quot;godot&quot; tabindex=&quot;-1&quot;&gt;Godot &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#godot&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Written in C++, Supported Languages: GDScript, C#&lt;/li&gt;
&lt;li&gt;Platforms:
&lt;ul&gt;
&lt;li&gt;Development: Windows, Mac, Linux, Android (Experimental), Web&lt;/li&gt;
&lt;li&gt;Target: Windows, Mac, Linux, iOS, Android, Web&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://godotengine.org/&quot;&gt;Godot&lt;/a&gt; has the largest and most active community among all the modern FOSS game engines available to date. As the drama around Unity has unfolded, you have likely heard mentions of Godot on more than a few occasions. It is not without merit, as Godot encourages developers to shape the engine around their needs. Coming in at only 40 MB, the engine includes a lightweight, multi-platform editor capable of running on any major operating system (Windows, Mac, and Linux). In fact, &lt;a href=&quot;https://editor.godotengine.org/releases/latest/&quot;&gt;you can even use a web-based&lt;/a&gt; or &lt;a href=&quot;https://godotengine.org/download/android/&quot;&gt;Android version&lt;/a&gt; of the editor, albeit with some constraints. Godot can meet developers on whatever platform works best for them.&lt;/p&gt;
&lt;p&gt;GDScript is Godot’s primary programming language. While the prospect of learning an engine-specific language may turn you off at first, don’t fret! It shares a lot of commonalities with Python and Godot provides detailed documentation on how to use the language. Assuming you already have some experience with object-oriented programming, it won’t take long to get going with GDScript. You can even use C# for scripting if that is more up your alley, as it’s the other language officially supported by Godot. That said, if you would still like to write some code in another language entirely, Godot provides the means to use alternative programming languages by way of GDExtension.&lt;/p&gt;
&lt;p&gt;Theoretically, GDExtension supports any programming language that can interact with its C-based API. While Godot officially supports scripting in GDScript and C#, GDExtension allows the community to introduce new language bindings to Godot’s development ecosystem, including &lt;a href=&quot;https://godot-rust.github.io/&quot;&gt;Rust&lt;/a&gt;, &lt;a href=&quot;https://github.com/grow-graphics/gd&quot;&gt;Go&lt;/a&gt;, &lt;a href=&quot;https://github.com/migueldeicaza/SwiftGodot&quot;&gt;Swift&lt;/a&gt;, and &lt;a href=&quot;https://hxgodot.github.io/&quot;&gt;Haxe&lt;/a&gt;. Not all language bindings are feature-complete, but many are in active development. With that in mind, committing to one language for an entire project is unnecessary, as GDExtension languages can work alongside GDScript. This means developers can, for example, even use GDScript with other languages like Rust in the same project.&lt;/p&gt;
&lt;p&gt;Work in an editor long enough and you will probably want to tinker with it. For those interested in creating utilities and tools, as is common practice when using Unity or Unreal Engine, &lt;a href=&quot;https://docs.godotengine.org/en/stable/tutorials/plugins/editor/making_plugins.html&quot;&gt;Godot provides the option to customize the editor to your liking&lt;/a&gt;. You don’t need to write in C++ and re-compile Godot to create plugins. Because the editor runs on Godot itself, it is possible to tune or extend the editor with GDScript, Godot’s scripting language, by simply appending @tool to the top of the file. Writing a plugin becomes as easy as writing code for your game.&lt;/p&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;
&lt;img alt=&quot;Open 3D Engine Logo&quot; src=&quot;https://www.stride3d.net/images/blog/2024-03/o3de-logo.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2024-03/o3de-logo.webp&quot; /&gt;
&lt;/div&gt;
&lt;h3 id=&quot;open-3d-engine&quot; tabindex=&quot;-1&quot;&gt;Open 3D Engine &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#open-3d-engine&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Written in C++, Supported Languages: C++, Lua&lt;/li&gt;
&lt;li&gt;Platforms:
&lt;ul&gt;
&lt;li&gt;Development: Windows, Linux&lt;/li&gt;
&lt;li&gt;Target: Windows, Mac, Linux, iOS, Android&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;a href=&quot;https://o3de.org/&quot;&gt;Open 3D Engine&lt;/a&gt;’s origins trace back to Amazon’s foray into game development. Amazon licensed Crytek’s CryEngine 3 and then used it as the foundation for their own game engine: Amazon Lumberyard. In the following years, Amazon offered Lumberyard for free to the community with specific terms requiring games built with Lumberyard use Amazon Web Services for their online features. By 2021, Amazon overhauled Lumberyard, rewrote 95% of the code, rebranded it as Open 3D Engine (O3DE), and placed it under the supervision of The Linux Foundation. Now, O3DE is available as a free and open-source engine under dual Apache and MIT Licenses for everyone, with no strings attached.&lt;/p&gt;
&lt;p&gt;Only a few game engines offer visual scripting out of the box, and O3DE is one of them. O3DE supports both C++ and Lua for scripting, but for folks less inclined to write code, there is also &lt;a href=&quot;https://docs.o3de.org/docs/user-guide/scripting/script-canvas/&quot;&gt;Script Canvas&lt;/a&gt;, OD3E’s visual scripting environment. Visual scripting provides a way to write game logic without needing to write code in C++ or Lua. It presents programming concepts like functions, variables, and events as nodes that can be strung together in a graph. Script Canvas also allows developers to write custom nodes either in C++ or within Script Canvas itself to better fit their workflow. Fortunately, anything written using O3DE’s visual scripting system will not incur any serious performance hits, as the engine ultimately converts the graphs into Lua scripts.&lt;/p&gt;
&lt;p&gt;O3DE modularizes its engine by breaking down major components into plugins called &lt;a href=&quot;https://www.docs.o3de.org/docs/user-guide/gems/&quot;&gt;Gems&lt;/a&gt;. This is the paradigm through which O3DE manages all its features and plugins. For example, it is possible to swap out features like the physics engine, allowing developers to choose between PhysX 4, PhysX 5, or another solution entirely, custom or commercial. The modularity afforded by O3DE through Gems allows developers to add and remove components of the engine with relative ease–using as many or as few of the features as they want and in whatever combination best fits their needs.&lt;/p&gt;
&lt;p&gt;With the &lt;a href=&quot;https://www.docs.o3de.org/docs/atom-guide/&quot;&gt;Atom Renderer&lt;/a&gt;, the engine’s rendering system, O3DE strives to provide an advanced renderer that is also exceptionally customizable. The Render Pipeline Interface (RPI) and Rendering Hardware Interface (RHI) constitute the primary channels for working with Atom. The RPI provides the tools necessary for customizing the rendering pipeline and implementing higher-level graphical features, such as split screen or additional rendering passes. Meanwhile, the RHI abstracts access to the GPU’s functionality, allowing developers to write lower-level graphics logic without needing to target specific graphics APIs like DirectX or Vulkan. In short, the rendering stack provides incredible flexibility to developers.&lt;/p&gt;
&lt;br /&gt;
&lt;div align=&quot;center&quot;&gt;
    &lt;img alt=&quot;Stride Logo&quot; src=&quot;https://www.stride3d.net/images/blog/2024-03/stride-logo.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2024-03/stride-logo.webp&quot; /&gt;
&lt;/div&gt;
&lt;h3 id=&quot;stride&quot; tabindex=&quot;-1&quot;&gt;Stride &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#stride&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Written in C#, Supported Languages: C#, F#, Visual Basic&lt;/li&gt;
&lt;li&gt;Platforms:
&lt;ul&gt;
&lt;li&gt;Development: Windows&lt;/li&gt;
&lt;li&gt;Target: Windows, Mac, Linux, iOS, Android&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stride began life as Xenko (and before that, Paradox): Silicon Studio’s premium game engine. After several years of providing Stride to the public through a subscription-based model, Silicon Studio released the engine’s source code and editor freely to the community under the MIT license. Among the higher profile FOSS game engines available, it is unique because Silicon Studio completely wrote it in C# from top to bottom. There is no delineation between the language used for the core engine and the language you would write with day-to-day while working on the game. It becomes much easier to override or change any inherent engine behavior when coding in the same language. No need to develop an interop system to interface with the engine’s core logic. With that said, &lt;a href=&quot;https://stride3d.github.io/stride-community-toolkit/manual/code-only/index.html&quot;&gt;the code-only version of Stride&lt;/a&gt; supports any language that is part of the .NET family (C#, F#, and Visual Basic), providing some flexibility in language choice.&lt;/p&gt;
&lt;p&gt;The engine offers a pure .NET experience that includes many of the advantages inherent to the framework, like hot reloading. At the time of writing, Stride runs on .NET 8 (the latest version of the framework) and supports C# 12. Because the engine closely follows the .NET update schedule, you often get the most modern and up-to-date implementation of C#. You can seamlessly incorporate almost any C#-based library or tool available through NuGet, GitHub, and other platforms into Stride, enhancing your workflow. Stride is modular enough that &lt;a href=&quot;https://www.nuget.org/profiles/Stride&quot;&gt;sections of Stride are available as standalone NuGet packages&lt;/a&gt;. The engine provides the ability to tailor-make your game development experience.&lt;/p&gt;
&lt;p&gt;The engine does its best to ensure it does not become a technical bottleneck for your game. A lot of processing within Stride is multithreaded. This means it allows logic to run on multiple threads of execution concurrently. The engine even implements a custom thread pool to maximize engine performance. As a result, Stride takes full advantage of the hardware it is running on, providing players with faster and smoother experiences. All the tools Stride uses to support multi-threading under the hood are also accessible to developers. Nothing is out of reach. An entire library exists within the engine focused on multi-threading that anyone can leverage in their projects. Used with features like the &lt;a href=&quot;https://github.com/stride3d/stride/pull/2131&quot;&gt;upcoming Bepu physics integration&lt;/a&gt;, it becomes possible to have tens of thousands of physics-based objects concurrently in a scene with little effort. Stride provides the space to explore multi-threading and have fun with it.&lt;/p&gt;
&lt;h2 id=&quot;what-engine-should-you-pick%3F-and-other-closing-thoughts&quot; tabindex=&quot;-1&quot;&gt;What engine should you pick? And other closing thoughts &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#what-engine-should-you-pick%3F-and-other-closing-thoughts&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There is no one right answer. Don’t trust anyone claiming otherwise. Here is the truth: the answer lies in whichever you enjoy using the most. Game development is a process. It requires a healthy level of commitment and discipline. Anyone can do it, but you need to put in the effort. The better your tools fit with your way of working and thinking, the more likely you’ll commit to your project and put in your full effort.&lt;/p&gt;
&lt;p&gt;All these engines are free and include active communities ready to help new folks. Pick whichever engines strike your fancy and try them. Maybe one of them has that one specific feature that hits just right. Maybe another has a community you love hanging out with or the engine integrates well with a tool you’re using already. Whatever the case, it’s a matter of taste and what works best for you.&lt;/p&gt;
&lt;p&gt;Wanting to know if an engine can make a specific type of game is asking the wrong question. &lt;a href=&quot;https://www.youtube.com/watch?v=ENoCsY9a10o&quot;&gt;People make games in Excel&lt;/a&gt;. You can make just about any game in any engine. It’s not always a trivial task, but you can do it. Instead, ask yourself which tools you enjoy using the most.&lt;/p&gt;
&lt;p&gt;When you settle on an engine, remember this: your engine is not your identity. Your tools are a means to creating something, not a core pillar of your very being. I cannot stress this enough. Your tools do not define you. This may sound obvious, but I have seen many, many folks make their engine of choice a centerpiece of who they are and become unnecessarily hostile toward other engine communities. Please don’t do that.&lt;/p&gt;
&lt;p&gt;You are not simply a Bevy developer, Godot developer, O3DE developer, Stride developer, or whatever else. You are a game developer. So don’t get hung up on which engine you should pick. Choose the engine that resonates with you the most, and you’ll quickly learn skills you can apply anywhere. Make creating something rewarding in and of itself. If you enjoy working in your environment, you will enjoy the act of development. Once you manage that, creating anything, game or otherwise, will feel immensely satisfying in its own right. Be curious and have fun.&lt;/p&gt;
&lt;h2 id=&quot;acknowledgments&quot; tabindex=&quot;-1&quot;&gt;Acknowledgments &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/#acknowledgments&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This article was only possible with the input of contributors and users involved in these game engines. I appreciate all the folks who were kind and patient enough to fact-check me and provide their feedback, including &lt;a href=&quot;https://github.com/VaclavElias&quot;&gt;Vaclav Elias&lt;/a&gt;, &lt;a href=&quot;https://github.com/IXLLEGACYIXL&quot;&gt;Joreyk&lt;/a&gt;, &lt;a href=&quot;https://github.com/Doprez/&quot;&gt;Doprez&lt;/a&gt;, &lt;a href=&quot;https://www.inconsistent.software/&quot;&gt;Judah Perez&lt;/a&gt;, &lt;a href=&quot;https://github.com/clayjohn&quot;&gt;Clay John&lt;/a&gt;, &lt;a href=&quot;https://github.com/adamscott&quot;&gt;Adam Scott&lt;/a&gt;, &lt;a href=&quot;https://github.com/m4gr3d&quot;&gt;Fredia Huya-Kouadio&lt;/a&gt;, &lt;a href=&quot;https://github.com/bruvzg&quot;&gt;Pāvels Nadtočajevs&lt;/a&gt;, as well as &lt;a href=&quot;https://o3d.foundation/&quot;&gt;the Open 3D Foundation and Open 3D Engine contributors&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Last but not least, thank you to &lt;a href=&quot;https://twitter.com/meltt_ed&quot;&gt;Ed (Meltted)&lt;/a&gt; for creating the featured image.&lt;/p&gt;
</description>
      <pubDate>Thu, 14 Mar 2024 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/open-worlds-intro-to-foss-game-engines/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2024-03/foss-engine-girl.webp" type="image/webp" length="0" /></item>
    <item>
      <title>Announcing Stride 4.2</title>
      <description>&lt;p&gt;Stride contributors are thrilled to announce the release of Stride 4.2, now fully compatible with .NET 8 and leveraging the latest enhancements in C# 12. This release brings significant improvements in performance, stability, and developer experience.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.stride3d.net/images/blog/release-4.2/stride_4_2_fps.webp&quot; title=&quot;Stride 4.2 performance enhancements with .NET 8&quot; class=&quot;mb-3&quot;&gt;&lt;img alt=&quot;Stride 4.2 performance enhancements with .NET 8&quot; src=&quot;https://www.stride3d.net/images/blog/release-4.2/stride_4_2_fps.webp&quot; class=&quot;img-fluid&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-4.2/stride_4_2_fps.webp&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Table of Contents:&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#download-and-upgrade&quot;&gt;Download and Upgrade&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#unity-licensing-model-impact%3A-a-catalyst-for-change&quot;&gt;Unity Licensing Model Impact: A Catalyst for Change&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#stride&#39;s-rising-popularity&quot;&gt;Stride&#39;s Rising Popularity&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#the-heartbeat-of-stride%3A-our-community&quot;&gt;The Heartbeat of Stride: Our Community&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#addressing-the-pace-of-updates-in-stride&quot;&gt;Addressing the Pace of Updates in Stride&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#the-people-behind-stride&quot;&gt;The People Behind Stride&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#facing-the-realities%3A-funding-and-resources&quot;&gt;Facing the Realities: Funding and Resources&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#funding-and-resource-allocation&quot;&gt;Funding and Resource Allocation&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#challenges-in-distribution&quot;&gt;Challenges in Distribution&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#call-for-skilled-developers&quot;&gt;Call for Skilled Developers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#join-us-on-this-journey&quot;&gt;Join Us on This Journey&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#the-impact-of-your-support&quot;&gt;The Impact of Your Support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#looking-ahead&quot;&gt;Looking Ahead&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#what&#39;s-new-in-stride-4.2&quot;&gt;What&#39;s New in Stride 4.2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#fixes&quot;&gt;Fixes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#exciting-development-in-stride-physics&quot;&gt;Exciting Development in Stride Physics&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#introducing-bepu-physics-in-stride&quot;&gt;Introducing Bepu Physics in Stride&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#future-prospects-and-disclaimer&quot;&gt;Future Prospects and Disclaimer&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#also-good-to-know&quot;&gt;Also good to know&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#cross-platform-evolution%3A-the-stride-editor-and-avalonia&quot;&gt;Cross-Platform Evolution: The Stride Editor and Avalonia&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#links&quot;&gt;Links&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#acknowledgements&quot;&gt;Acknowledgements&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#long-time-stride-supporters&quot;&gt;Long time Stride supporters&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#platinum-striders&quot;&gt;Platinum Striders&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#gold-striders&quot;&gt;Gold Striders&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;p&gt;A massive thank you to the open-source Stride community for your dedicated contributions. This release saw over 75 contributions from more than 22 amazing contributors, each playing a crucial role in making Stride 4.2 a reality.&lt;/p&gt;
&lt;h2 id=&quot;download-and-upgrade&quot; tabindex=&quot;-1&quot;&gt;Download and Upgrade &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#download-and-upgrade&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can &lt;a href=&quot;https://www.stride3d.net/download/&quot;&gt;download the Stride 4.2 Installer&lt;/a&gt; today. Release notes are available &lt;a href=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/ReleaseNotes.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Make sure you read the &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/get-started/update-stride.html&quot;&gt;guide to update Stride and projects properly&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;unity-licensing-model-impact%3A-a-catalyst-for-change&quot; tabindex=&quot;-1&quot;&gt;Unity Licensing Model Impact: A Catalyst for Change &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#unity-licensing-model-impact%3A-a-catalyst-for-change&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The game development world has seen quite a stir with recent changes in Unity&#39;s licensing model. These shifts have led many in our community to rethink their choice of development tools. Stride 4.2 steps up in this scenario as a solid, C#-based alternative, offering a familiar yet distinct approach for game developers.&lt;/p&gt;
&lt;h3 id=&quot;stride&#39;s-rising-popularity&quot; tabindex=&quot;-1&quot;&gt;Stride&#39;s Rising Popularity &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#stride&#39;s-rising-popularity&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;It&#39;s been an exciting time for us. We&#39;ve noticed more and more developers giving Stride a try, a trend clearly reflected in our growing user numbers. During the crazy Unity days, we were number 3 in the popularity rankings, just after Godot and Bevy. Also a big shoutout to gamefromscratch for his video &amp;quot;&lt;a href=&quot;https://www.youtube.com/watch?v=u_ksFlHHXYU&quot;&gt;Stride For Unity Developers&lt;/a&gt;&amp;quot;, which definitely helped.&lt;/p&gt;
&lt;h3 id=&quot;the-heartbeat-of-stride%3A-our-community&quot; tabindex=&quot;-1&quot;&gt;The Heartbeat of Stride: Our Community &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#the-heartbeat-of-stride%3A-our-community&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;What really makes Stride tick is you – the community. Your feedback, contributions, and ideas have been the driving force behind Stride 4.2. It’s your hands-on experience and insights that have helped shape this release, making Stride not just a tool but a community achievement.&lt;/p&gt;
&lt;h2 id=&quot;addressing-the-pace-of-updates-in-stride&quot; tabindex=&quot;-1&quot;&gt;Addressing the Pace of Updates in Stride &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#addressing-the-pace-of-updates-in-stride&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Let&#39;s talk about how often Stride gets updated. We know it&#39;s something on your mind, and that is why we want to explain the dynamics that influence it.&lt;/p&gt;
&lt;h3 id=&quot;the-people-behind-stride&quot; tabindex=&quot;-1&quot;&gt;The People Behind Stride &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#the-people-behind-stride&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Stride is maintained by a group of passionate developers, much like yourself, who contribute in their free time. This means our pace might not match that of other engines backed by full-time teams. Luckily we still have the original creator and lead of Stride among us to tackle tricky issues and infrastructure.&lt;/p&gt;
&lt;h3 id=&quot;facing-the-realities%3A-funding-and-resources&quot; tabindex=&quot;-1&quot;&gt;Facing the Realities: Funding and Resources &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#facing-the-realities%3A-funding-and-resources&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Here’s the deal: our funding levels shape how much we can do. We’re grateful for every bit of support we receive, but we’re still on our way to having a full-time development force. This financial reality does affect how fast we can roll out updates. Although we might not be the fastest out there, we focus on making each update meaningful.&lt;/p&gt;
&lt;h2 id=&quot;funding-and-resource-allocation&quot; tabindex=&quot;-1&quot;&gt;Funding and Resource Allocation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#funding-and-resource-allocation&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;challenges-in-distribution&quot; tabindex=&quot;-1&quot;&gt;Challenges in Distribution &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#challenges-in-distribution&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The pace at which we distribute funds is often perceived as slow. However, this is not from a lack of willingness but rather the challenge of finding the right talent for the tasks. Nonetheless, we are actively funding projects at this moment, focusing on enhancements in XR, introducing &lt;a href=&quot;https://github.com/stride3d/stride/pull/2136&quot;&gt;morph target capabilities for 3D models&lt;/a&gt; (aka Blendshapes), and updating the bindings for the Assimp 3D importer to &lt;a href=&quot;https://dotnet.github.io/Silk.NET/&quot;&gt;Silk.NET&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;call-for-skilled-developers&quot; tabindex=&quot;-1&quot;&gt;Call for Skilled Developers &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#call-for-skilled-developers&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We are actively seeking skilled developers with experience in C#, the .NET ecosystem, mobile, XR, rendering, and game development. If you have these skills or know someone who does, we encourage you to get involved. There are &lt;a href=&quot;https://opencollective.com/stride3d/projects&quot;&gt;opportunities to contribute&lt;/a&gt; to critical areas of Stride&#39;s development, supported by available funds.&lt;/p&gt;
&lt;h3 id=&quot;join-us-on-this-journey&quot; tabindex=&quot;-1&quot;&gt;Join Us on This Journey &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#join-us-on-this-journey&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We’re always excited to welcome new contributors to the Stride family. Whether it’s through code contributions, spreading the word, or donations, every bit helps us grow stronger. If you’ve got skills in .NET, Android, and iOS development, there’s a special place for you here. &lt;a href=&quot;https://opencollective.com/stride3d&quot;&gt;Support us on OpenCollective&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;the-impact-of-your-support&quot; tabindex=&quot;-1&quot;&gt;The Impact of Your Support &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#the-impact-of-your-support&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We believe that every donation has a substantial impact, perhaps more so than in some other projects. Why? Because C# as a language offers high productivity, and the Stride codebase has a great architecture. This means that every dime you contribute goes a long way.&lt;/p&gt;
&lt;p&gt;Imagine how much we could do if Stride got as much financial support as other big engines. With C#&#39;s easy productivity and Stride&#39;s well-organized code, your donations could help us improve much faster. It&#39;s not just about keeping the lights on; your support can take Stride to new heights!&lt;/p&gt;
&lt;h3 id=&quot;looking-ahead&quot; tabindex=&quot;-1&quot;&gt;Looking Ahead &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#looking-ahead&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;With your support, we’re optimistic about picking up the pace. Our goal is to bring you new features and improvements more regularly, making Stride even better with each release.&lt;/p&gt;
&lt;h2 id=&quot;what&#39;s-new-in-stride-4.2&quot; tabindex=&quot;-1&quot;&gt;What&#39;s New in Stride 4.2 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#what&#39;s-new-in-stride-4.2&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride 4.2 includes numerous enhancements and improvements. Here’s what to expect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;.NET 8 Integration&lt;/strong&gt;: Stride 4.2 is now fully aligned with .NET 8, harnessing its performance improvements and efficiency gains for game development. This means faster execution times, reduced memory footprint, and access to the latest C# features, making your development smoother and more efficient. &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/&quot;&gt;Learn more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;C# 12 Features&lt;/strong&gt;: With C# 12, Stride users can write cleaner, more concise code thanks to new language features. These improvements reduce boilerplate and enhance readability. &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/announcing-csharp-12/&quot;&gt;Discover C# 12&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Changed Assimp Binding to Silk.Net.Assimp&lt;/strong&gt;: This update transitions the asset compiler&#39;s binding from C++/CLR to Silk.Net.Assimp, a move that not only simplifies the codebase but also paves the way for asset compilation on non-Windows systems, broadening Stride&#39;s accessibility. &lt;a href=&quot;https://github.com/stride3d/stride/pull/1158&quot;&gt;See the pull request&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Migration NET6+ and More gettextnet#2&lt;/strong&gt;: Stride&#39;s commitment to staying current with .NET versions continues, ensuring compatibility and leveraging the stability and features of the latest .NET environment across all aspects of the engine. &lt;a href=&quot;https://github.com/stride3d/gettextnet/pull/2&quot;&gt;Check out the update&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Enable Multiple Profiler Consumers and Add a Timeline/Tracing Profiler&lt;/strong&gt;: This enhancement introduces a profiler with chrome://tracing output format, significantly improving the debugging and performance tuning process by allowing for a more granular analysis of game performance. &lt;a href=&quot;https://github.com/stride3d/stride/pull/1788&quot;&gt;Explore the feature&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Feature: Add Support for F# and VB Project Types&lt;/strong&gt;: Stride now welcomes developers using F# and Visual Basic, offering support for code-only projects in these languages. This opens up Stride to a broader audience. &lt;a href=&quot;https://github.com/stride3d/stride/pull/1821&quot;&gt;Learn about F# and VB support&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Stride Diagnostics Analyzer&lt;/strong&gt;: This new tool provides immediate feedback within your IDE, identifying potential compatibility issues with Stride&#39;s serialization system. It&#39;s about making your development process smoother and helping you catch and resolve issues faster. &lt;a href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/&quot;&gt;Discover how it works&lt;/a&gt;, &lt;a href=&quot;https://doc.stride3d.net/latest/en/diagnostics/index.html&quot;&gt;the docs page&lt;/a&gt; and &lt;a href=&quot;https://github.com/stride3d/stride/pull/1864&quot;&gt;here is the pull request&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;OpenVR Handle Custom Resolution Specified by the User Through VR Settings&lt;/strong&gt;: Enhancing VR development, this update allows developers to specify custom resolutions for VR projects, optimizing performance and visual quality for various VR devices. &lt;a href=&quot;https://github.com/stride3d/stride/pull/2000&quot;&gt;See the details&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Editor Enhancements&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Dynamic Snapping for Selected Objects&lt;/strong&gt;: This feature introduces dynamic snapping while transforming objects, improving precision and workflow efficiency within the Stride Editor. &lt;a href=&quot;https://github.com/stride3d/stride/pull/1801&quot;&gt;Dynamic snapping PR&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Animation Stack Selection for FBX Imports&lt;/strong&gt;: Stride now allows you to select specific animations from a stack when importing FBX files, giving you more control over the assets you bring into your projects. &lt;a href=&quot;https://github.com/stride3d/stride/pull/1977&quot;&gt;Learn more&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Automatic Asset Copying to Resources Directory&lt;/strong&gt;: To streamline asset management, the editor can now automatically copy imported assets to the project&#39;s Resources directory, ensuring your assets are always where they need to be. &lt;a href=&quot;https://github.com/stride3d/stride/pull/1827&quot;&gt;See how it works&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;fixes&quot; tabindex=&quot;-1&quot;&gt;Fixes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#fixes&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Although there have been &lt;a href=&quot;https://github.com/stride3d/stride/pulls?page=2&amp;amp;q=is%3Apr+merged%3A%3E2023-10-10&quot;&gt;many fixes&lt;/a&gt;, we&#39;d like to point some of them out:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/issues/1750&quot;&gt;Runtime rasterized fonts are broken #1750&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/issues/1703&quot;&gt;Game Studio doesn&#39;t reload sub projects after changes #1703&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/1704&quot;&gt;Changing the comparison project related and not UPath related #1704&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/1717&quot;&gt;Translations fix #1717&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/issues/1652&quot;&gt;C# Beginner Tutorial Build Errors #1652&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/issues/1650&quot;&gt;Can not create &amp;quot;C# Beginner&amp;quot; project #1650&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;See the full list in the &lt;a href=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/ReleaseNotes.html&quot;&gt;Release Notes&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;exciting-development-in-stride-physics&quot; tabindex=&quot;-1&quot;&gt;Exciting Development in Stride Physics &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#exciting-development-in-stride-physics&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride 4.2&#39;s release isn&#39;t just about what&#39;s in the box; it&#39;s also about what it enables for the future. A standout development in this context is the integration of a new physics package in Stride.&lt;/p&gt;
&lt;h3 id=&quot;introducing-bepu-physics-in-stride&quot; tabindex=&quot;-1&quot;&gt;Introducing Bepu Physics in Stride &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#introducing-bepu-physics-in-stride&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Our Discord community is buzzing with the news of Bepu physics, a project initiated by our user &lt;a href=&quot;https://github.com/Nicogo1705&quot;&gt;Nicogo1705&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/bepu/bepuphysics2&quot;&gt;BepuPhysics v2&lt;/a&gt; is a high-performance, multi-threaded physics library, written entirely in C#. Its compatibility with Stride&#39;s C# ecosystem offers the perfect alternative to the Bullet 3D physics engine, which relies on C++ Interop.&lt;/p&gt;
&lt;p&gt;With additional support from &lt;a href=&quot;https://github.com/Doprez&quot;&gt;Doprez&lt;/a&gt; and &lt;a href=&quot;https://github.com/Eideren&quot;&gt;Eideren&lt;/a&gt;, the efforts in integrating Bepu physics have already shown impressive results, especially in editor compatibility and performance. As you can see in this video, running on almost 10 year old hardware (yes, cube fountain included):&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/1OqtaVqSP78&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;Nicogo&#39;s YouTube channel features &lt;a href=&quot;https://www.youtube.com/@Nicogo17/videos&quot;&gt;some more demo videos&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;GitHub: &lt;a href=&quot;https://github.com/Nicogo1705/Stride.BepuPhysics&quot;&gt;Nicogo1705/Stride.BepuPhysics&lt;/a&gt;&lt;/p&gt;
&lt;h3 id=&quot;future-prospects-and-disclaimer&quot; tabindex=&quot;-1&quot;&gt;Future Prospects and Disclaimer &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#future-prospects-and-disclaimer&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Currently an independent package, Bepu physics is charting a course towards deeper integration within Stride. While it stands as a potential future replacement for Bullet physics, the package is still evolving. Future updates may necessitate adjustments to projects using its current version. We encourage users to stay updated and adaptable as we continue refining Bepu physics with the community&#39;s support. The pull request can be found here: &lt;a href=&quot;https://github.com/stride3d/stride/pull/2131&quot;&gt;[Physics] Bepu integration&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;also-good-to-know&quot; tabindex=&quot;-1&quot;&gt;Also good to know &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#also-good-to-know&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Although not directly tied to Release 4.2, we have some more big things going on.&lt;/p&gt;
&lt;p&gt;For instance to our website and documentation. We also had another community meeting to address all those new members.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/announcing-website-update/&quot;&gt;Website and documentation revamped and build process updated&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.stride3d.net/latest/en/contributors/index.html&quot;&gt;Contributor section moved to docs&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/&quot;&gt;Community meeting October 2023&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And last but not least:&lt;/p&gt;
&lt;h3 id=&quot;cross-platform-evolution%3A-the-stride-editor-and-avalonia&quot; tabindex=&quot;-1&quot;&gt;Cross-Platform Evolution: The Stride Editor and Avalonia &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#cross-platform-evolution%3A-the-stride-editor-and-avalonia&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;One of the most ambitious projects for Stride to date has started: The porting of the entire Stride Editor from WPF to Avalonia, a cross-platform C# UI library. This significant endeavor, undertaken by &lt;a href=&quot;https://github.com/Kryptos-FR&quot;&gt;Kryptos-FR&lt;/a&gt;, a former Stride developer.&lt;/p&gt;
&lt;p&gt;Currently, the project is in the early stages but it not only anticipates making the editor compatible with Linux and MacOS but also aligns with the long-standing community desire for broader platform support and enhanced editor functionality, including a robust plugin system.&lt;/p&gt;
&lt;p&gt;More details in this pull request: &lt;a href=&quot;https://github.com/stride3d/stride/pull/2034&quot;&gt;Cross-platform editor rewrite - prototype&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;links&quot; tabindex=&quot;-1&quot;&gt;Links &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#links&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;GitHub: &lt;a href=&quot;https://github.com/stride3d/stride&quot;&gt;https://github.com/stride3d/stride&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Website: &lt;a href=&quot;https://stride3d.net/&quot;&gt;https://stride3d.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/&quot;&gt;https://doc.stride3d.net/latest/en/manual/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Twitter: &lt;a href=&quot;https://twitter.com/stridedotnet&quot;&gt;https://twitter.com/stridedotnet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;YouTube: &lt;a href=&quot;https://www.youtube.com/@Stride3D&quot;&gt;https://www.youtube.com/@Stride3D&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;acknowledgements&quot; tabindex=&quot;-1&quot;&gt;Acknowledgements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#acknowledgements&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We extend our heartfelt gratitude for all the hard work and donations we have received. Your generous contributions significantly aid in the continuous development and enhancement of the Stride community and projects. Thank you for your support and belief in our collective efforts.&lt;/p&gt;
&lt;p&gt;In particular we want to thank these donors:&lt;/p&gt;
&lt;h3 id=&quot;long-time-stride-supporters&quot; tabindex=&quot;-1&quot;&gt;Long time Stride supporters &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#long-time-stride-supporters&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://visualprogramming.net/&quot;&gt;VVVV&lt;/a&gt;🥇&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://visualprogramming.net/&quot;&gt;&lt;img src=&quot;https://images.opencollective.com/vvvv/8ab0acd/logo/256.png?height=72&quot; alt=&quot;vvvv. A visual live-programming environment that takes you from rapid prototyping to final production&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;platinum-striders&quot; tabindex=&quot;-1&quot;&gt;Platinum Striders &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#platinum-striders&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.happenstancegames.com/&quot;&gt;Happenstance Games&lt;/a&gt;🏆&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.happenstancegames.com/&quot;&gt;&lt;img width=&quot;64&quot; src=&quot;https://www.stride3d.net/images/sponsors/HappenLogo.webp&quot; alt=&quot;Happenstance games logo&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;gold-striders&quot; tabindex=&quot;-1&quot;&gt;Gold Striders &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/#gold-striders&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vaclavelias.com/&quot;&gt;Vašo ( Vaclav )&lt;/a&gt;🥇&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lucidsilence.org/&quot;&gt;Lucid Silence Games&lt;/a&gt;🥇&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/skidvis&quot;&gt;Skid Vis&lt;/a&gt;🥇&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This article was co-authored by &lt;a href=&quot;https://github.com/Aggror&quot;&gt;Aggror Jorn&lt;/a&gt; and &lt;a href=&quot;https://github.com/tebjan&quot;&gt;Tebjan Halm&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Tue, 06 Feb 2024 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/announcing-stride-4-2-in-dotnet-8/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Investigating SPIR-V for the shader system - Part 1</title>
      <description>&lt;p&gt;In this first part of a new series of blog posts, we will learn more about Stride&#39;s shader system, its limitations and how to make it better thanks to a very useful shader language called SPIR-V. This will be the first step in implementing a new and better shader system.&lt;/p&gt;
&lt;p&gt;If you&#39;re interested in the other parts of this blog series :&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-2/&quot;&gt;Part 2&lt;/a&gt; we parse and assemble some SPIR-V&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system-part-3/&quot;&gt;Part 3&lt;/a&gt; we write a new parser for SDSL&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Table of Contents:&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#what-are-shaders%3F&quot;&gt;What are shaders?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#rendering-in-game-engines&quot;&gt;Rendering in game engines&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#how-does-it-work-in-stride%3F&quot;&gt;How does it work in Stride?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#the-many-problems-shader-systems-are-facing&quot;&gt;The many problems shader systems are facing&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#gpus-are-all-different&quot;&gt;GPUs are all different&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#drivers-are-not-all-the-same&quot;&gt;Drivers are not all the same&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#performance-cost&quot;&gt;Performance Cost&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#why-investigating-spir-v%3F&quot;&gt;Why investigating SPIR-V?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;p&gt;The Stride engine has a powerful shader system, helping users build very complex shaders thanks to its language features like composition and inheritance, and its C# integration through the very powerful material system.&lt;/p&gt;
&lt;h2 id=&quot;what-are-shaders%3F&quot; tabindex=&quot;-1&quot;&gt;What are shaders? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#what-are-shaders%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Simply put, they are typically snippets of code that are run on the GPU, mostly written in C-like languages like GLSL and HLSL.&lt;/p&gt;
&lt;p&gt;When a game has to render on the screen, it starts by preparing the data on the GPU and then sends shaders with commands. The GPU then executes those commands and if everything goes well, the game ends with a lovely picture drawn on the screen. This single call of a GPU is called a &lt;code&gt;draw call&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.stride3d.net/images/blog/2023-11/shaders-explanation.png&quot; title=&quot;Shader Overview&quot; class=&quot;mb-3&quot;&gt;&lt;img alt=&quot;Shader Overview&quot; src=&quot;https://www.stride3d.net/images/blog/2023-11/shaders-explanation.png&quot; class=&quot;img-fluid&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2023-11/shaders-explanation.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;It can be simplified to this view. There is a first stage called &lt;code&gt;Vertex stage&lt;/code&gt; which is meant to compute vertices and make sure they are transformed into data that can be rasterized by your GPU, and a final stage called &lt;code&gt;Pixel stage&lt;/code&gt; or &lt;code&gt;Fragment stage&lt;/code&gt; that takes the rasterized output of the rasterizer and computes color for each pixel on the screen based on which triangles they belong to.&lt;/p&gt;
&lt;p&gt;In both stages, you can provide textures/images and data through buffers, this can help give more details to your rendering, or help you compute more complicated things.&lt;/p&gt;
&lt;h2 id=&quot;rendering-in-game-engines&quot; tabindex=&quot;-1&quot;&gt;Rendering in game engines &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#rendering-in-game-engines&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Drawing a single mesh is simple, one buffer of vertices, maybe some textures, do a draw call and ✨ marvel at the screen ✨. Repeat it many times and you get a video, very useful to make video games 👾.&lt;/p&gt;
&lt;p&gt;In game engines, objects being drawn the same ways are grouped into &lt;code&gt;materials&lt;/code&gt;. A material can be seen as a recipe for drawing a mesh with ingredients like shader code, textures, vertices and other informations.&lt;/p&gt;
&lt;p&gt;Having many different materials implies creating many shader source code, and depending if you use &lt;a href=&quot;https://learnopengl.com/Advanced-Lighting/Deferred-Shading&quot;&gt;forward or deferred shading&lt;/a&gt;, you might need to reuse code from one file to another leading to lots of duplicate code 👩‍💻👨‍💻.&lt;/p&gt;
&lt;p&gt;To solve this problem, all game engines have developed shader systems that help create permutations of shader code depending on the material you&#39;re using. It helps reuse code you&#39;ve already written, which speeds up development and gives you the power to organize your code in more manageable ways.&lt;/p&gt;
&lt;p&gt;A good example of that are &lt;a href=&quot;https://unity.com/features/shader-graph&quot;&gt;shader graphs from Unity&lt;/a&gt; or &lt;a href=&quot;https://docs.unrealengine.com/5.0/en-US/unreal-engine-material-editor-ui/&quot;&gt;the material editor in Unreal&lt;/a&gt;, whenever you add a block/function to the graph, it reuses shader code already written, to create a new permutation.&lt;/p&gt;
&lt;h2 id=&quot;how-does-it-work-in-stride%3F&quot; tabindex=&quot;-1&quot;&gt;How does it work in Stride? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#how-does-it-work-in-stride%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride has its own shader language called SDSL which stands for &lt;strong&gt;S&lt;/strong&gt;tri&lt;strong&gt;D&lt;/strong&gt;e &lt;strong&gt;S&lt;/strong&gt;hader &lt;strong&gt;L&lt;/strong&gt;anguage.&lt;/p&gt;
&lt;p&gt;SDSL uses a very smart system of composition and inheritance, similar to object oriented programming. You can learn more about it &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/graphics/effects-and-shaders/index.html&quot;&gt;through the manual&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;the-many-problems-shader-systems-are-facing&quot; tabindex=&quot;-1&quot;&gt;The many problems shader systems are facing &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#the-many-problems-shader-systems-are-facing&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To create permutations you need to be aware of the many limitations you will face while writing code for GPU.&lt;/p&gt;
&lt;h3 id=&quot;gpus-are-all-different&quot; tabindex=&quot;-1&quot;&gt;GPUs are all different &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#gpus-are-all-different&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;As obvious as it sounds, it needs to be reminded. Whenever you write code for your GPU you have to be aware that it will not work for all other GPUs.&lt;/p&gt;
&lt;p&gt;10 years ago, two languages were the most used for writing shader code: HLSL and GLSL. In the case of OpenGL, GPU vendors would provide you with their own GLSL compilers to work for their GPUs through different drivers. A valid code for one compiler would be a syntax error for another. It was a big mess 💩, but a manageable one!&lt;/p&gt;
&lt;p&gt;Stride was created during this period and it was designed to run on a wide variety of devices 🎮 🕹️ 💻 🖥️.&lt;/p&gt;
&lt;p&gt;The solution chosen for creating code permutations that could work on many different machine was transpilation. Text would be parsed in abstract syntax trees and the text would be translated from one language to another by manipulating those trees. &lt;a href=&quot;https://www.youtube.com/watch?v=cxNlb2GTKIc&amp;amp;list=PLTd6ceoshpreZuklA7RBMubSmhE0OHWh_&amp;amp;pp=iAQB&quot;&gt;To have a better idea of how abstract syntax tree work, this playlist of videos will definitely help&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;drivers-are-not-all-the-same&quot; tabindex=&quot;-1&quot;&gt;Drivers are not all the same &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#drivers-are-not-all-the-same&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Drivers can be seen as a front-end API to use the GPU. They have different paradigm and logic which may result in your shader code needing to be different across different drivers.&lt;/p&gt;
&lt;p&gt;Here&#39;s a table of which language is supported by which machine depending on the driver used. I chose the most used machines for gaming.&lt;/p&gt;
&lt;p&gt;Note that some APIs are tied to the machine you&#39;re developing for, adding more complexity to the shader system, needing to handle GPUs that have very specific features. Vulkan and OpenGL can be used on Mac and iOS but OpenGL is deprecated and Vulkan run on MoltenVK, a Vulkan implementation on top of Metal.&lt;/p&gt;
&lt;div class=&quot;table-responsive&quot;&gt;
&lt;table class=&quot;table table-striped table-sm&quot;&gt;
  &lt;thead&gt;
  &lt;tr&gt;
    &lt;th&gt;&lt;/th&gt;
    &lt;th&gt;Direct3D&lt;/th&gt;
    &lt;th&gt;Vulkan&lt;/th&gt;
    &lt;th&gt;OpenGL&lt;/th&gt;
    &lt;th&gt;Metal&lt;/th&gt;
    &lt;th&gt;PSGL&lt;/th&gt;
    &lt;th&gt;NVN&lt;/th&gt;
  &lt;/tr&gt;&lt;/thead&gt;
  &lt;tr&gt;
    &lt;td&gt;Windows/XBox&lt;/td&gt;
    &lt;td&gt;HLSL&lt;/td&gt;
    &lt;td&gt;HLSL/GLSL&lt;/td&gt;
    &lt;td&gt;GLSL&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Linux&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;HLSL/GLSL&lt;/td&gt;
    &lt;td&gt;GLSL&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Mac/iOS&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;HLSL/GLSL&lt;/td&gt;
    &lt;td&gt;GLSL&lt;/td&gt;
    &lt;td&gt;MSL&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Android&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;HLSL/GLSL&lt;/td&gt;
    &lt;td&gt;GLSL&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Playstation 4/5&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;PSSL&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Nintendo Switch&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;HLSL/GLSL&lt;/td&gt;
    &lt;td&gt;GLSL&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;&lt;/td&gt;
    &lt;td&gt;?&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;h3 id=&quot;performance-cost&quot; tabindex=&quot;-1&quot;&gt;Performance Cost &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#performance-cost&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Managed languages like C# are well known to be slower with string objects since they treat them as immutable. On top of that, tree structures, especially the one used for shader compilation in Stride, tend to perform very slowly and are prone to be slow and work against the GC.&lt;/p&gt;
&lt;h2 id=&quot;why-investigating-spir-v%3F&quot; tabindex=&quot;-1&quot;&gt;Why investigating SPIR-V? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#why-investigating-spir-v%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Three things happened in the past 10 years:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Vulkan was released with a new kind of bytecode shader language called SPIR-V&lt;/li&gt;
&lt;li&gt;.NET Core introduced a new high-performance feature for operating on slices of array (something that C# is way better at than processing string objects), namely &lt;code&gt;Span&amp;lt;T&amp;gt;&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Most importantly, tools like &lt;a href=&quot;https://github.com/KhronosGroup/SPIRV-Cross&quot;&gt;SPIRV-Cross&lt;/a&gt; and &lt;a href=&quot;https://github.com/gfx-rs/wgpu/tree/trunk/naga&quot;&gt;Naga&lt;/a&gt; were created as a means to translate shaders through SPIR-V&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It was clear for everyone that we had to investigate how we could compile SDSL to SPIR-V and use all those very performant tools to transpile SDSL to other languages.&lt;/p&gt;
&lt;p&gt;SDSL is a very peculiar language and shifting from processing tree structures to processing segments of byte code is a great endeavor, especially for an engine.&lt;/p&gt;
&lt;p&gt;The following parts of this series of blog posts will focus on how such a system can be created, thanks to the many new C# and .NET features that came out since the release of .NET Core.&lt;/p&gt;
&lt;h2 id=&quot;summary&quot; tabindex=&quot;-1&quot;&gt;Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/#summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Embracing SPIR-V for Stride&#39;s shader system will hopefully empower us with a better control over the shader language but also improve performance for shader compilation 💪💪.&lt;/p&gt;
&lt;p&gt;Thank you for reading!&lt;/p&gt;
</description>
      <pubDate>Fri, 10 Nov 2023 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/investigating-spirv-for-the-shader-system/</guid>
      <enclosure url="https://www.stride3d.net/images/spir.png" type="image/png" length="0" /></item>
    <item>
      <title>A closer look: Diagnostic Analyzers with Roslyn</title>
      <description>&lt;p&gt;Let&#39;s take a closer look at the &lt;code&gt;DiagnosticAnalyzer&lt;/code&gt; feature added in &lt;code&gt;Stride.Core.CompilerServices&lt;/code&gt;. This feature offers real-time code analysis in your IDE, enhancing your workflow.&lt;/p&gt;
&lt;p&gt;Table of Contents:&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#what-is-a-diagnosticanalyzer%3F&quot;&gt;What is a DiagnosticAnalyzer?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#what-does-it-do%3F&quot;&gt;What does it do?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#example&quot;&gt;Example&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#why-use-it%3F&quot;&gt;Why use it?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#current-state&quot;&gt;Current State&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#for-engine-developers&quot;&gt;For Engine Developers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;p&gt;Stride continues to evolve, adding new utilities and features every week. This blog post will cover the newly added &lt;code&gt;DiagnosticAnalyzer&lt;/code&gt; feature in &lt;code&gt;Stride.Core.CompilerServices&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id=&quot;what-is-a-diagnosticanalyzer%3F&quot; tabindex=&quot;-1&quot;&gt;What is a &lt;code&gt;DiagnosticAnalyzer&lt;/code&gt;? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#what-is-a-diagnosticanalyzer%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A &lt;code&gt;DiagnosticAnalyzer&lt;/code&gt; is a feature from Roslyn that scans your code while you are typing in your IDE. C# also utilizes this feature; every time you see a warning or red squiggly lines in your IDE, a &lt;code&gt;DiagnosticAnalyzer&lt;/code&gt; gets triggered. Analyzers are offline tools used by the compiler to assist programmers. They are not used to collect telemetry on how Stride is being used.&lt;/p&gt;
&lt;h2 id=&quot;what-does-it-do%3F&quot; tabindex=&quot;-1&quot;&gt;What does it do? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#what-does-it-do%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The new &lt;code&gt;Diagnostics&lt;/code&gt; primarily focus on &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/scripts/serialization.html&quot;&gt;Serialization&lt;/a&gt;. These analyzers generate warnings for code that is incompatible with &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/scripts/serialization.html#rule-of-thumb&quot;&gt;Stride&#39;s Serialization Rules of Thumb&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Each error code follows this format: &lt;code&gt;STRDIAGXXX&lt;/code&gt;, where &#39;X&#39; represents a numerical digit. Clicking on these error codes will open a help page that explains in depth why the &lt;code&gt;DiagnosticAnalyzer&lt;/code&gt; was triggered and how to resolve the warning. You can find these error code pages &lt;a href=&quot;https://doc.stride3d.net/latest/en/diagnostics/&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;example&quot; tabindex=&quot;-1&quot;&gt;Example &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#example&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this example, we&#39;ll delve into a common scenario where the &lt;code&gt;DiagnosticAnalyzer&lt;/code&gt; spots issues related to Stride&#39;s serialization rules. We have a &lt;code&gt;Dictionary&lt;/code&gt; property named &lt;code&gt;Name&lt;/code&gt; within a class &lt;code&gt;Example&lt;/code&gt;. We&#39;ve also adorned the &lt;code&gt;Name&lt;/code&gt; property with &lt;code&gt;[DataMember]&lt;/code&gt; and &lt;code&gt;[DataMemberIgnore]&lt;/code&gt; attributes which are contradictory, and this is where the &lt;code&gt;DiagnosticAnalyzer&lt;/code&gt; steps in to provide valuable feedback.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;class&lt;/span&gt; &lt;span class=&quot;token class-name&quot;&gt;Example&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;DataMember&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;DataMemberIgnore&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;Dictionary&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;Example&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;int&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt; Name &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;private&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Upon compiling, the &lt;code&gt;DiagnosticAnalyzer&lt;/code&gt; flags three diagnostic warnings related to the attributes and the property&#39;s accessibility:&lt;/p&gt;
&lt;pre class=&quot;language-yml&quot;&gt;&lt;code class=&quot;language-yml&quot;&gt;&lt;span class=&quot;token key atrule&quot;&gt;STRDIAG000&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; There is an Attribute Contradiction on &#39;Name&#39; Member. &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;DataMemberIgnore&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; Attribute on a &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;DataMember&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; is not supported. Except if it has also &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;DataMemberUpdatable&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; Attribute.
&lt;span class=&quot;token key atrule&quot;&gt;STRDIAG009&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; The member &#39;Name&#39; implements IDictionary&amp;lt;T&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;K&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt; with an unsupported type for the key. Only primitive types ( like int&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;float&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt;.. ) are supported or string or enums as the Dictionary Key in asset serialization. When used in other contexts the warning may not apply and can be suppressed.
&lt;span class=&quot;token key atrule&quot;&gt;STRDIAG004&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;:&lt;/span&gt; The property &#39;Name&#39; with &lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;DataMember&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt; does not have an accessible getter which is required for serialization. A public/internal/internal protected getter is expected.&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The following image demonstrates how these warnings are displayed in Visual Studio:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.stride3d.net/images/blog/2023-10/diagnostics-example.webp&quot; title=&quot;Diagnostics warning in Visual Studio&quot; class=&quot;mb-3&quot;&gt;&lt;img alt=&quot;Diagnostics warning in Visual Studio&quot; src=&quot;https://www.stride3d.net/images/blog/2023-10/diagnostics-example.webp&quot; class=&quot;img-fluid&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2023-10/diagnostics-example.webp&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;These warnings provide immediate feedback, aiding the developer in adhering to Stride&#39;s serialization rules. The &lt;code&gt;DiagnosticAnalyzer&lt;/code&gt; not only pinpoints the issues but also suggests the necessary adjustments to align the code with Stride&#39;s standards. For instance, it suggests the removal of the &lt;code&gt;[DataMemberIgnore]&lt;/code&gt; attribute or the addition of a &lt;code&gt;[DataMemberUpdatable]&lt;/code&gt; attribute to resolve the attribute contradiction on the &lt;code&gt;Name&lt;/code&gt; member. It also highlights the requirement for an accessible getter for serialization, and informs about the supported types for the &lt;code&gt;Dictionary&lt;/code&gt; key in asset serialization.&lt;/p&gt;
&lt;h2 id=&quot;why-use-it%3F&quot; tabindex=&quot;-1&quot;&gt;Why use it? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#why-use-it%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This real-time feedback is invaluable, making the coding process smoother and less error-prone, and ensuring that the codebase remains compliant with Stride&#39;s serialization standards.&lt;/p&gt;
&lt;p&gt;This feature aims to minimize those &amp;quot;Why is my property not showing up in the &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/game-studio/index.html&quot;&gt;Game Studio&lt;/a&gt;?&amp;quot; moments. It&#39;s often unclear why certain properties don&#39;t appear in the editor. These analyzers are designed to clarify such situations, aiding your development process in Stride.&lt;/p&gt;
&lt;h2 id=&quot;current-state&quot; tabindex=&quot;-1&quot;&gt;Current State &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#current-state&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The pull request (PR) to introduce these analyzers has been merged. However, there hasn&#39;t been a release that includes them yet. If you&#39;re eager to test them out, you can build the engine from the source. Otherwise, you&#39;ll have to wait for the next release of Stride&#39;s NuGet packages.&lt;/p&gt;
&lt;h2 id=&quot;for-engine-developers&quot; tabindex=&quot;-1&quot;&gt;For Engine Developers &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#for-engine-developers&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Adding new analyzers to the Stride engine is straightforward. However, be aware that Visual Studio (VS) has a bug caused by .NET, which makes VS load Roslyn only once at startup. To work around this, compile &lt;code&gt;Stride.Core.CompilerServices&lt;/code&gt; and restart VS after adding a new analyzer.&lt;/p&gt;
&lt;h2 id=&quot;summary&quot; tabindex=&quot;-1&quot;&gt;Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/#summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is a new quality-of-life feature that simplifies development in Stride by providing immediate feedback on coding issues.&lt;/p&gt;
&lt;p&gt;Thank you for reading 📖, and happy coding 💻👩‍💻👨‍💻!&lt;/p&gt;
</description>
      <pubDate>Mon, 23 Oct 2023 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/new-diagnostic-analyzers-feature/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2023-10/cs-roslyn-logo.webp" type="image/webp" length="0" /></item>
    <item>
      <title>Community Meeting October 2023</title>
      <description>&lt;p&gt;On October 7th, a community meeting was held addressing new user influx, planning the release of Stride 4.2, contingent on the .NET 8 launch.&lt;/p&gt;
&lt;h2 id=&quot;summary&quot; tabindex=&quot;-1&quot;&gt;Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;During this almost 3 hour long session we talked about the following: improving domain knowledge, access rights, and documentation, transferring the Stride Community Toolkit to the official repository, and community-driven initiatives like a new demo project and extending tutorials. Significant attention was given to a substantial editor rewrite from WPF to Avalonia for enhanced cross-platform support, opening it up for community contributions.&lt;/p&gt;
&lt;p&gt;Table of Contents:&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#short-summary-of-contributor-meeting&quot;&gt;Short summary of Contributor meeting&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#release-of-4.2&quot;&gt;Release of 4.2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#open-collective&quot;&gt;Open Collective&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#new-projects&quot;&gt;New projects&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#new-demo-project&quot;&gt;New Demo project&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#community-toolkit&quot;&gt;Community Toolkit&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#stride-plugins&quot;&gt;Stride Plugins&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#stride-ui-rewrite&quot;&gt;Stride UI Rewrite&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#acknowledgements&quot;&gt;Acknowledgements&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#long-time-stride-supporters&quot;&gt;Long time Stride supporters&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#platinum-striders&quot;&gt;Platinum Striders&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#gold-striders&quot;&gt;Gold Striders&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;short-summary-of-contributor-meeting&quot; tabindex=&quot;-1&quot;&gt;Short summary of Contributor meeting &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#short-summary-of-contributor-meeting&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A few weeks prior to the community meeting, we held a contributor meeting. This was mostly to address the recent instream of many new users. Since we suddenly got an abundance of user feedback we took and planned some steps.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Inventorizing domain knowledge and access rights.
&lt;ul&gt;
&lt;li&gt;This overview will be posted soon on GitHub.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Moving the Stride &lt;a href=&quot;https://github.com/stride3d/stride-community-toolkit&quot;&gt;Community Toolkit&lt;/a&gt; to the &lt;a href=&quot;https://github.com/stride3d&quot;&gt;official Stride repositories&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Investigating nightly/weekly/monthly builds and releases.
&lt;ul&gt;
&lt;li&gt;The idea of having more frequent releases was discussed to provide users with the latest PRs and fixes, whilst also having more publicity.&lt;/li&gt;
&lt;li&gt;Concerns were raised about the potential impact on development velocity and the need for stabilization phases. As soon as the new build system (arranged by Xen) is up and running, we can decide on how often we make an official (minor) release. More on this later this year.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Updating contributors&#39; documentation.
&lt;ul&gt;
&lt;li&gt;Next to the &lt;a href=&quot;https://doc.stride3d.net/&quot;&gt;official documentation/tutorials&lt;/a&gt;, we also have various wiki pages per repository. Especially the documentation for Contributors and building from source, needs some love. Aggror is going to make an initial pull request for this.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Planning and creating videos for contributors.&lt;/li&gt;
&lt;li&gt;Adjusting the strategy with OpenCollective Projects: here we came to the consensus that we required more feedback which we would gather during the community meeting.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;release-of-4.2&quot; tabindex=&quot;-1&quot;&gt;Release of 4.2 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#release-of-4.2&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride 4.2 is around the corner, but when exactly?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;For 4.2 we are waiting for the official release of .NET 8 which is to be release on November 14, 2023.
&lt;ul&gt;
&lt;li&gt;Since we want to release a version for .NET 6 and .NET 8, our goal is to release within a few days after the release of .NET 8.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Prior to the official release we will have a release candidate. This will be announced when it is available.&lt;/li&gt;
&lt;li&gt;At the moment there is 1 open bug and 1 open pull request for a feature. Other than that, the build is locked for features. Only bug fixes would be allowed in&lt;/li&gt;
&lt;li&gt;The open pull request for &lt;a href=&quot;https://github.com/stride3d/stride/pull/1123&quot;&gt;Silk.NET&lt;/a&gt;. will be moved to 4.3 to ensure stability.&lt;/li&gt;
&lt;li&gt;For more info on the &lt;a href=&quot;https://github.com/stride3d/stride/discussions/1699&quot;&gt;final items&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;open-collective&quot; tabindex=&quot;-1&quot;&gt;Open Collective &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#open-collective&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Next we discussed the use of &lt;a href=&quot;http://opencollective.com/stride3d&quot;&gt;Open Collective&lt;/a&gt; for donations and funding specific projects.&lt;br /&gt;
Although not mentioned in the meeting, our current funding is &lt;strong&gt;12,992.34 USD&lt;/strong&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Up until this point it has been quite a challenge finding the right developers for existing Projects. The most recent successfully funded Project was the &lt;a href=&quot;https://opencollective.com/stride3d/projects/bug-bounty-vulkan-fullscreen&quot;&gt;Bug bounty for Vulkan fullscreen&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;There have been several suggestions to make funding more attractive, such as increasing compensation and investing in areas like documentation, marketing, and design next to coding Projects.&lt;/li&gt;
&lt;li&gt;Every project should have a referencing GitHub ticket that contains as much detail as possible for the deliverables.&lt;/li&gt;
&lt;li&gt;There are currently two talks ongoing for specific development. Once we have confirmation we will communicate this with the community.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;new-projects&quot; tabindex=&quot;-1&quot;&gt;New projects &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#new-projects&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We will add several new Projects to the Open Collective. This will give members a clear view on &#39;targets&#39; that we like to see funded.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extending tutorials. Both written and video tutorials
&lt;ul&gt;
&lt;li&gt;New tutorial set for a small 3D (platformer) game&lt;/li&gt;
&lt;li&gt;Contributor tutorials&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Demo scene 2024 (more on this below)&lt;/li&gt;
&lt;li&gt;Stride editor Avalonia (more on this below)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;new-demo-project&quot; tabindex=&quot;-1&quot;&gt;New Demo project &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#new-demo-project&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We want to have a new demo sample project that demonstrates Strides capabilities. Members who want to help out, can add to the discussion &lt;a href=&quot;https://github.com/stride3d/stride/discussions/1800&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;community-toolkit&quot; tabindex=&quot;-1&quot;&gt;Community Toolkit &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#community-toolkit&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There is a new initiative called the &lt;a href=&quot;https://github.com/stride3d/stride-community-toolkit&quot;&gt;Stride Community Toolkit&lt;/a&gt;, aimed at aggregating common features, helpers, and extensions to streamline Stride development. It allows community members to test and enhance tools and propose their integration into the engine. This project has come to fruition with the combined effort of several users, and specifically the repositories off &lt;a href=&quot;https://github.com/dfkeenan/StrideToolkit&quot;&gt;dfkeenan&lt;/a&gt; and &lt;a href=&quot;https://github.com/VaclavElias/&quot;&gt;VaclavElias&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;stride-plugins&quot; tabindex=&quot;-1&quot;&gt;Stride Plugins &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#stride-plugins&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A topic talked about for several years now and it&#39;s quite an important one. Plugins allow you, for one, extend the editor with new functionality without having to build the engine from source. Ideally you want to go to some (NuGet) store and click -&amp;gt; install this awesome extension/plugin for Stride.&lt;/p&gt;
&lt;p&gt;If you want to contribute to the discussion on how to do this technically.&lt;/p&gt;
&lt;p&gt;We can divide plugin support into 2 categories:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Asset plugins: these would be purely models, textures, prefabs, components&lt;br /&gt;
For this &lt;a href=&quot;https://github.com/manio143&quot;&gt;Manio143&lt;/a&gt; is taking the lead.&lt;/li&gt;
&lt;li&gt;Editor plugins: this category currently is not viable because of the dependency to another large topic: the need to rewrite the editor to a new library, replacing WPF.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Since we are short on development time here, we need to take into account that it will be a while before we can see the first results of this.&lt;/p&gt;
&lt;h2 id=&quot;stride-ui-rewrite&quot; tabindex=&quot;-1&quot;&gt;Stride UI Rewrite &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#stride-ui-rewrite&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Stride editor is built with WPF and therefore only works on Windows. WPF isn’t really being developed anymore and on top of that we want to start supporting the editor on Linux. We can only do so by rewriting the editor to another UI framework.&lt;/p&gt;
&lt;p&gt;Just like the Plugin topic, the &lt;a href=&quot;https://github.com/stride3d/stride/discussions/1031&quot;&gt;Editor rewrite&lt;/a&gt; is a big topic. Probably the biggest topic of them all. The editor rewrite has been discussed in great lengths on both Discord and GitHub in the past few years. People have shared their ideas on which framework to use (Avalonia, MAUI, Uno etc), made some prototypes, even ported the Stride launcher. But we never really ‘actively’ made this an official item since it would take a full time developer many months to work on this task.&lt;/p&gt;
&lt;p&gt;Members have been asking if they can help out with the rewrite, but up until this point, there wasn&#39;t really an official starting point. We also don’t want to waste the prototype/knowledge already collected. That is why we will soon have an official GitHub branch in the Stride repository where all Editor UI rewrites are taking place. We are fully aware that this might take a long time and a lot of effort from multiple people, but we have to start somewhere. We also anticipate that we can use some of the OpenCollective funding for this.&lt;/p&gt;
&lt;p&gt;So regardless of time/developer power: we have landed on using the &lt;a href=&quot;https://avaloniaui.net/&quot;&gt;Avalonia UI framework&lt;/a&gt; to rewrite the editor. Aggror will set up a GitHub topic summarizing how people can contribute to this UI rewrite branch and inventorize how we can split this massive task into subtasks.. More details on this will follow later this year.&lt;/p&gt;
&lt;h2 id=&quot;acknowledgements&quot; tabindex=&quot;-1&quot;&gt;Acknowledgements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#acknowledgements&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We extend our heartfelt gratitude for all the recent donations that have been made. Your generous contributions significantly aid in the continuous development and enhancement of the Stride community and projects. Thank you for your support and belief in our collective efforts.&lt;/p&gt;
&lt;p&gt;In particular we want to thanks these donors:&lt;/p&gt;
&lt;h3 id=&quot;long-time-stride-supporters&quot; tabindex=&quot;-1&quot;&gt;Long time Stride supporters &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#long-time-stride-supporters&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://visualprogramming.net/&quot;&gt;VVVV&lt;/a&gt;🥇&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://visualprogramming.net/&quot;&gt;&lt;img src=&quot;https://images.opencollective.com/vvvv/8ab0acd/logo/256.png?height=72&quot; alt=&quot;vvvv. A visual live-programming environment that takes you from rapid prototyping to final production&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;platinum-striders&quot; tabindex=&quot;-1&quot;&gt;Platinum Striders &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#platinum-striders&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href=&quot;https://www.happenstancegames.com/&quot;&gt;Happenstance Games&lt;/a&gt;🏆&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.happenstancegames.com/&quot;&gt;&lt;img width=&quot;64&quot; src=&quot;https://www.stride3d.net/images/sponsors/HappenLogo.webp&quot; alt=&quot;Happenstance games logo&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;gold-striders&quot; tabindex=&quot;-1&quot;&gt;Gold Striders &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2023/#gold-striders&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vaclavelias.com/&quot;&gt;Vašo ( Vaclav )&lt;/a&gt;🥇&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;http://www.lucidsilence.org/&quot;&gt;Lucid Silence Games&lt;/a&gt;🥇&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/skidvis&quot;&gt;Skid Vis&lt;/a&gt;🥇&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Sat, 07 Oct 2023 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/community-meeting-october-2023/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/community-meeting-october-2023/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>A closer look: Setting private members in the editor</title>
      <description>&lt;p&gt;Let&#39;s take a closer look at why currently you can&#39;t set private members of scripts and components in the Stride Editor and explore the options to change that in the future.&lt;/p&gt;
&lt;p&gt;Table of Contents:&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#what-is-public-and-what-is-private&quot;&gt;What is public and what is private&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#design-vs-runtime-access&quot;&gt;Design vs runtime access&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#editor-runs-your-code-directly&quot;&gt;Editor runs your code directly&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#serialization&quot;&gt;Serialization&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#what-about-constructors%3F&quot;&gt;What about constructors?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#what-about-init-properties%3F&quot;&gt;What about init properties?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#unsafeaccessor-in-.net-8&quot;&gt;UnsafeAccessor in .NET 8&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;p&gt;It has been an amazing week for Stride and our Discord is booming with new people who want to &lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/&quot;&gt;learn more about the engine&lt;/a&gt; and maybe port some games from Unity. One of the questions that has been asked a few times was why we can&#39;t set private members on scripts in the editor. I thought it&#39;s a good opportunity to dive a little deeper into the technical reasons and engine architecture to explain the current limitation and explore the options to change it in the future.&lt;/p&gt;
&lt;h2 id=&quot;what-is-public-and-what-is-private&quot; tabindex=&quot;-1&quot;&gt;What is public and what is private &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#what-is-public-and-what-is-private&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Let&#39;s run through a quick reminder. In C# members are annotated with &lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/programming-guide/classes-and-structs/access-modifiers&quot;&gt;access modifiers&lt;/a&gt;&lt;br /&gt;
such as &lt;code&gt;public&lt;/code&gt;, &lt;code&gt;protected&lt;/code&gt; or &lt;code&gt;private&lt;/code&gt;. The modifier describes the access objects of other classes will have when accessing the members. It allows us to control the API surface of an object by hiding away certain aspects of its state to allow the inner implementation to be changed without affecting other parts of code that would only interact with the publicly visible members.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;To understand it better read &lt;a href=&quot;https://cseducators.stackexchange.com/a/1246&quot;&gt;this analogy&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;When designing systems we will often decide to make certain things public (maybe even use an interface to further describe the public API regardless of the class holding the methods) and keep most things private. This allows us to prevent accidental mistakes when another part of the systems makes changes to some delicate state.&lt;/p&gt;
&lt;p&gt;However, with a more Data Oriented approach we can find ourselves creating classes which hold mainly data. In many Entity Component System implementations the components are just data bags that systems read and update. With this kind of approach there&#39;s rarely need for private members, although sometimes the &lt;code&gt;internal&lt;/code&gt; visibility is used for data on a component that is exclusively managed by its default system.&lt;/p&gt;
&lt;p&gt;Moreover, component&#39;s public properties are often not just modified at design time, but also at runtime. Think about the Transform component and how it&#39;s public properties are modified to move the entities around, or how changing the velocity on a Physics component affects how quickly the simulation will move it around on the next step.&lt;/p&gt;
&lt;h2 id=&quot;design-vs-runtime-access&quot; tabindex=&quot;-1&quot;&gt;Design vs runtime access &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#design-vs-runtime-access&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We can talk about components in two contexts: setting the properties during level design in the editor and setting them at runtime while the game is running. We would generally expect in both cases that we can modify the properties of the component and they will be picked up by the processing system.&lt;/p&gt;
&lt;p&gt;With the introduction of &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/scripts/index.html&quot;&gt;Scripts&lt;/a&gt;, however, which are components containing logic, we get into a bit of a pickle. Yes, the script should be able to have private state and a public API for other components to interact with it. What if we want to restrict some data so that it can only be set once during initialization? Ideally the editor would not be constrained to modify the property during design, but once we hit the runtime it should be allowed to change.&lt;/p&gt;
&lt;h2 id=&quot;editor-runs-your-code-directly&quot; tabindex=&quot;-1&quot;&gt;Editor runs your code directly &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#editor-runs-your-code-directly&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In Stride when you create a script in your project and open the project in the editor, the project will be compiled, the DLL loaded into memory of the editor, and when you add the script to an entity it will actually create a new instance of your script class. Same as at runtime.&lt;/p&gt;
&lt;p&gt;It won&#39;t run the script Update method, but if you have any logic in your property getters and setters those will be invoked at design time. This can give you enormous flexibility. But it also means that however you want your script to behave at runtime when it comes to properties the same will be enforced at design time.&lt;/p&gt;
&lt;p&gt;The editor uses reflection to access properties and fields on your script. It technically could modify private fields on the object instance it holds during design. But this needs to survive saving the project to disk.&lt;/p&gt;
&lt;h2 id=&quot;serialization&quot; tabindex=&quot;-1&quot;&gt;Serialization &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#serialization&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride uses YAML for design time serialization of &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/game-studio/assets.html&quot;&gt;Assets&lt;/a&gt;. The assets can have a different form from the actual Content they are compiled to by the AssetCompiler. This is used for example by Audio or Model assets which at design time just hold a reference to your media files, but once compiled actually hold the bits of your media in a format that&#39;s easy to consume by Stride&#39;s runtime.&lt;/p&gt;
&lt;p&gt;For components and scripts rather than having a second class for each component and doing compilation from design to runtime representation, those classes are the same in both scenarios. This simplifies things but it means that serialization constraints need to be applied equally.&lt;/p&gt;
&lt;p&gt;While YAML is very flexible and the serializer currently uses reflection to set the properties, the runtime serialization is done using a custom binary serializer system. When you compile your game project, after C# compiler has done its job, the build system runs the AssemblyProcessor over your code to generate efficient serializer classes that do not use reflection to access members on the objects they deserialize.&lt;/p&gt;
&lt;p&gt;Access modifiers are enforced by the CLR, which means it&#39;s not possible to generate code that accesses private members of another class directly.&lt;/p&gt;
&lt;h3 id=&quot;what-about-constructors%3F&quot; tabindex=&quot;-1&quot;&gt;What about constructors? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#what-about-constructors%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If we have a private field that we want to set once, why don&#39;t we use a constructor to accept a value for it? It&#39;s certainly an option and there are serialization systems which look at constructors to provide deserialization in this way. They may be a bit more complicated but it&#39;s possible to implement them.&lt;/p&gt;
&lt;p&gt;However, in a generic environment that Stride provides it&#39;s a bit difficult. How would the editor create a new instance of your class if it requires data to be passed in the constructor? Will it provide &lt;code&gt;default&lt;/code&gt; values, will it look for a private parameterless constructor?&lt;/p&gt;
&lt;h3 id=&quot;what-about-init-properties%3F&quot; tabindex=&quot;-1&quot;&gt;What about init properties? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#what-about-init-properties%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;C# 9 has introduced &lt;a href=&quot;https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/init&quot;&gt;&lt;code&gt;init&lt;/code&gt;&lt;/a&gt; properties which are only allowed to be set at object construction. Reflection is able to bypass that of course, while at the CLR level a special marker &lt;code&gt;modreq&lt;/code&gt; is placed on the property which asks the compiler to provide &lt;code&gt;modreq&lt;/code&gt; marker on the callsite as well (see &lt;a href=&quot;https://stackoverflow.com/a/64749884&quot;&gt;thread&lt;/a&gt;). Compilers which don&#39;t know about init properties would still prevent you from assigning them. And the CLR is not actually enforcing anything here - only compiler - thus the generated serializers are still able to use those properties.&lt;/p&gt;
&lt;p&gt;But in your code the constraint will be enforced and no runtime modification will occur after the object is initialized.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;public&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;string&lt;/span&gt;&lt;/span&gt; MyProperty &lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;get&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;init&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;unsafeaccessor-in-.net-8&quot; tabindex=&quot;-1&quot;&gt;&lt;code&gt;UnsafeAccessor&lt;/code&gt; in .NET 8 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#unsafeaccessor-in-.net-8&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;As we&#39;re trying to squeeze out more performance and improve the Stride codebase we&#39;re looking at rewriting the AssemblyProcessor from Mono.Cecil and manually emitting IL into a Roslyn C# source generator. This will also mean being restricted to whatever the compiler enforces, such as not setting init properties outside of object construction.&lt;/p&gt;
&lt;p&gt;Luckily in .NET 8 there&#39;s a new performance hack which allows you to access private fields on other classes. You can read about it more in the &lt;a href=&quot;https://github.com/dotnet/runtime/issues/81741&quot;&gt;proposal&lt;/a&gt; and on the &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-8/#networking-primitives&quot;&gt;performance blog&lt;/a&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;token attribute&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;UnsafeAccessor&lt;/span&gt;&lt;span class=&quot;token attribute-arguments&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;UnsafeAccessorKind&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Field&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; Name &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token string&quot;&gt;&quot;_myField&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;]&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;extern&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;static&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;ref&lt;/span&gt; &lt;span class=&quot;token return-type class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;string&lt;/span&gt;&lt;/span&gt; &lt;span class=&quot;token function&quot;&gt;_myField&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token class-name&quot;&gt;MyClass&lt;/span&gt; c&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;summary&quot; tabindex=&quot;-1&quot;&gt;Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/closer-look-private-members/#summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There might be some extra work needed to implement the changes to allow setting private members in the editor. At the moment using &lt;code&gt;init&lt;/code&gt; properties is nice a middle ground.&lt;/p&gt;
&lt;p&gt;While in my opinion designing clear public APIs for components in a data driven approach is the way and it doesn&#39;t need access to private members, there&#39;s many users who see value in being able to use private members to their advantage and it&#39;s on the editor and engine to provide flexibility of choice in how you structure your code.&lt;/p&gt;
&lt;p&gt;Thank you for reading 📖, and happy coding 💻👩‍💻👨‍💻!&lt;/p&gt;
</description>
      <pubDate>Thu, 21 Sep 2023 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/closer-look-private-members/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/closer-look-private-members/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2023-09-21-closer-look-private-members/script-with-secrets.png" type="image/png" length="0" /></item>
    <item>
      <title>Unity&#39;s Licensing Changes: Discovering Stride, a Community-Driven Open Source Engine</title>
      <description>&lt;p&gt;Explore the key differences between Unity and Stride, a C#-based, open-source game engine powered by .NET 6 (soon .NET 8). Learn how Stride&#39;s flexibility and native .NET support offer a unique development experience.&lt;/p&gt;
&lt;p&gt;Table of Contents:&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#introduction-to-stride&quot;&gt;Introduction to Stride&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#difference-between-unity-and-stride&quot;&gt;Difference Between Unity and Stride&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#licensing&quot;&gt;Licensing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#what-games-were-made-using-stride%3F&quot;&gt;What games were made using Stride?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#operating-system-support&quot;&gt;Operating System Support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#ide-support&quot;&gt;IDE Support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#.net-hot-reload-support&quot;&gt;.NET Hot Reload Support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#multiplayer-support&quot;&gt;Multiplayer Support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#unity-assets&quot;&gt;Unity Assets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#screen-capture&quot;&gt;Screen Capture&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#shaders-available&quot;&gt;Shaders Available&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#build-automation&quot;&gt;Build Automation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#add-ons-and-extensions&quot;&gt;Add-ons and Extensions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#transformations&quot;&gt;Transformations&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#rendering&quot;&gt;Rendering&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#gamepads&quot;&gt;Gamepads&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#other-q%26a&quot;&gt;Other Q&amp;amp;A&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#what-is-the-equivalent-of-a-coroutine-in-stride%3F&quot;&gt;What is the Equivalent of a Coroutine in Stride?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#what-is-a-startupscript%3F&quot;&gt;What is a StartupScript?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#using-other-assemblies%2Fprojects-in-stride&quot;&gt;Using Other Assemblies/Projects in Stride&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#is-there-an-asset-store-for-stride%3F&quot;&gt;Is There an Asset Store for Stride?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#null-checking-in-stride-vs-unity&quot;&gt;Null Checking in Stride vs Unity&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#where-to-start&quot;&gt;Where to Start&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#how-to-find-answers&quot;&gt;How to Find Answers&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#%F0%9F%A4%9D-join-us%3A-stride-bug-bounties-and-feature-funding-%F0%9F%9B%A0%EF%B8%8F&quot;&gt;🤝 Join Us: Stride Bug Bounties and Feature Funding 🛠️&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#flappy-bird---stride-engine-demo&quot;&gt;Flappy Bird - Stride Engine Demo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#closing-thoughts-%F0%9F%99%82&quot;&gt;Closing Thoughts 🙂&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;introduction-to-stride&quot; tabindex=&quot;-1&quot;&gt;Introduction to Stride &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#introduction-to-stride&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride is not just another game engine; it&#39;s written entirely in C# and serves as a powerful platform in the .NET ecosystem. This unique focus on C# offers developers the native .NET tooling and functionalities they are already comfortable with. What sets Stride apart is its project structure; Stride projects are standard &lt;code&gt;csproj&lt;/code&gt; files, allowing them to integrate effortlessly into your existing .NET solutions.&lt;/p&gt;
&lt;h2 id=&quot;difference-between-unity-and-stride&quot; tabindex=&quot;-1&quot;&gt;Difference Between Unity and Stride &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#difference-between-unity-and-stride&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Unity is developed by a large team and offers a feature-rich experience. On the other hand, &lt;a href=&quot;https://github.com/stride3d&quot;&gt;Stride&lt;/a&gt; is open-source and built by community contributors.&lt;/p&gt;
&lt;p&gt;This means that Stride might not have all the features that Unity has, simply because there aren&#39;t as many people working on it. However, the open-source nature of Stride allows you to customize it according to your needs and provides a solid foundation for any rendering project.&lt;/p&gt;
&lt;p&gt;Additionally, Stride allows you to utilize any &lt;a href=&quot;https://www.nuget.org/profiles/Stride&quot;&gt;NuGet&lt;/a&gt; package and even provides access to the &lt;code&gt;Main&lt;/code&gt; function of your game. You can also find useful resources such as documentation, community toolkits, and guides for migrating from Unity to Stride.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/stride-for-unity-developers/index.html&quot;&gt;Stride for Unity Developers&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;licensing&quot; tabindex=&quot;-1&quot;&gt;Licensing &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#licensing&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride is released under the &lt;strong&gt;MIT&lt;/strong&gt; license, which is important because it grants you significant freedoms to use, modify, and distribute the engine.&lt;/p&gt;
&lt;h2 id=&quot;what-games-were-made-using-stride%3F&quot; tabindex=&quot;-1&quot;&gt;What games were made using Stride? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#what-games-were-made-using-stride%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For examples of games developed using Stride, check out &lt;a href=&quot;https://github.com/Doprez/Awesome-Stride#made-with-stride&quot;&gt;Made with Stride&lt;/a&gt; section.&lt;/p&gt;
&lt;h2 id=&quot;operating-system-support&quot; tabindex=&quot;-1&quot;&gt;Operating System Support &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#operating-system-support&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Editor: Windows&lt;/li&gt;
&lt;li&gt;Runtime: Windows, Linux, &lt;span class=&quot;text-warning&quot;&gt;macOS&lt;/span&gt;, Android, iOS&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;ide-support&quot; tabindex=&quot;-1&quot;&gt;IDE Support &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#ide-support&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride games are &amp;quot;standard&amp;quot; C# projects, meaning you can use a variety of IDEs:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VS Code&lt;/li&gt;
&lt;li&gt;Visual Studio 2022&lt;/li&gt;
&lt;li&gt;Rider&lt;/li&gt;
&lt;li&gt;Blocknote + MsBuild&lt;/li&gt;
&lt;li&gt;VVVV&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; There&#39;s a Visual Studio extension for syntax highlighting, shader build keys and error checking.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; Another extension offers syntax highlighting only.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;.net-hot-reload-support&quot; tabindex=&quot;-1&quot;&gt;.NET Hot Reload Support &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#.net-hot-reload-support&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride has the capability of using &lt;a href=&quot;https://learn.microsoft.com/en-us/visualstudio/debugger/hot-reload?view=vs-2022&quot;&gt;.NET Hot Reload&lt;/a&gt; for C# scripts, allowing real-time code modifications as your game runs. Importantly, this feature is also available when editing the engine side, giving you even more flexibility. Standard .NET hot reload rules are in effect.&lt;/p&gt;
&lt;p&gt;This feature streamlines development by minimizing the delay between coding and observing results, enhancing both efficiency and ease of use. If you&#39;re familiar with .NET and C#, you&#39;ll find that Hot Reload in Stride feels intuitively familiar.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/NG773m0SxyM&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h2 id=&quot;multiplayer-support&quot; tabindex=&quot;-1&quot;&gt;Multiplayer Support &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#multiplayer-support&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride does not offer built-in multiplayer or Server/Client architecture. However, you can easily integrate any .NET networking library to implement these features. You have the freedom to choose from a variety of libraries and resources. For a curated list, you can check out &lt;a href=&quot;https://github.com/Doprez/Awesome-Stride#networking&quot;&gt;Awesome-Stride&#39;s Networking section&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;unity-assets&quot; tabindex=&quot;-1&quot;&gt;Unity Assets &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#unity-assets&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can import some 3D models from the Unity store into Stride. However, scripts will need modification since the two engines differ.&lt;/p&gt;
&lt;p&gt;These are the basic &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/stride-for-unity-developers/index.html#event-functions-start-update-execute-etc&quot;&gt;Scripting Differences&lt;/a&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;StartupScript&lt;/code&gt; is a MonoBehaviour without the Update method&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SyncScript&lt;/code&gt; is a MonoBehaviour with an Update method that runs every frame&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AsyncScript&lt;/code&gt; is unique and runs asynchronously&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;screen-capture&quot; tabindex=&quot;-1&quot;&gt;Screen Capture &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#screen-capture&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To capture a frame, you can use the following code snippet:&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; commandList &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; GraphicsContext&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;CommandList&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

commandList&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;RenderTarget&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Save&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;commandList&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; stream&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; ImageFileType&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Png&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;shaders-available&quot; tabindex=&quot;-1&quot;&gt;Shaders Available &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#shaders-available&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;SDSL is a shader language written on top of HLSL.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/graphics/effects-and-shaders/shading-language/index.html&quot;&gt;Shading language&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/tebjan/Stride.ShaderExplorer&quot;&gt;ShaderExplorer&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;build-automation&quot; tabindex=&quot;-1&quot;&gt;Build Automation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#build-automation&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Yes, since Stride uses .NET, automating the build process works out-of-the-box.&lt;/p&gt;
&lt;h2 id=&quot;add-ons-and-extensions&quot; tabindex=&quot;-1&quot;&gt;Add-ons and Extensions &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#add-ons-and-extensions&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You cannot extend the editor in the same way as Unity, but you can create custom code extensions as seen in the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/johang88/TR.Stride&quot;&gt;Terrain add-on&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/Basewq/XenkoProofOfConcepts/tree/master/LevelEditorExtensionExample&quot;&gt;Level editor add-on&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;transformations&quot; tabindex=&quot;-1&quot;&gt;Transformations &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#transformations&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;a href=&quot;https://doc.stride3d.net/latest/en/api/Stride.Engine.TransformComponent.html&quot;&gt;&lt;code&gt;TransformComponent&lt;/code&gt;&lt;/a&gt; class in Stride is a fundamental component for representing an entity&#39;s position, rotation, and scale within a 3D scene.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Important Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;LocalMatrix&lt;/code&gt; and &lt;code&gt;WorldMatrix&lt;/code&gt;&lt;/strong&gt;: These matrices manage the transformations of the entity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Position&lt;/code&gt;, &lt;code&gt;Rotation&lt;/code&gt;, and &lt;code&gt;Scale&lt;/code&gt;&lt;/strong&gt;: These properties represent the entity&#39;s position, rotation, and scale in the local coordinate system. The &lt;code&gt;Position&lt;/code&gt; property is a &lt;a href=&quot;https://doc.stride3d.net/latest/en/api/Stride.Core.Mathematics.Vector3.html&quot;&gt;&lt;code&gt;Vector3&lt;/code&gt;&lt;/a&gt;, defining the entity&#39;s position. The &lt;code&gt;Rotation&lt;/code&gt; property uses a &lt;code&gt;Quaternion&lt;/code&gt; to represent the entity&#39;s rotation, and the &lt;code&gt;Scale&lt;/code&gt; property is a &lt;code&gt;Vector3&lt;/code&gt; that sets the scale. You can modify these properties to transform the entity.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;UpdateLocalMatrix()&lt;/code&gt; and &lt;code&gt;UpdateWorldMatrix()&lt;/code&gt;&lt;/strong&gt;: These methods update the local and world matrices, respectively.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;Parent&lt;/code&gt; and &lt;code&gt;Children&lt;/code&gt;&lt;/strong&gt;: These properties allow you to establish parent-child relationships between entities, affecting their transformations accordingly.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;rendering&quot; tabindex=&quot;-1&quot;&gt;Rendering &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#rendering&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride primarily uses &lt;strong&gt;clustered&lt;/strong&gt; forward rendering, with some additional features. Read more in the docs.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/graphics/rendering-pipeline/index.html&quot;&gt;Stride Rendering Pipeline&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/graphics/graphics-compositor/index.html&quot;&gt;Stride Graphics Compositor&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;gamepads&quot; tabindex=&quot;-1&quot;&gt;Gamepads &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#gamepads&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/input/gamepads.html&quot;&gt;Gamepads&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;other-q%26a&quot; tabindex=&quot;-1&quot;&gt;Other Q&amp;amp;A &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#other-q%26a&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;what-is-the-equivalent-of-a-coroutine-in-stride%3F&quot; tabindex=&quot;-1&quot;&gt;What is the Equivalent of a Coroutine in Stride? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#what-is-the-equivalent-of-a-coroutine-in-stride%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Unlike Unity, which uses &lt;code&gt;IEnumerator&lt;/code&gt; for asynchronous code execution, Stride leverages C#&#39;s built-in &lt;code&gt;await&lt;/code&gt; and &lt;code&gt;async&lt;/code&gt; features. This can be accomplished using &lt;code&gt;AsyncScript&lt;/code&gt;, which essentially acts as a &lt;code&gt;SyncScript&lt;/code&gt; (the Stride equivalent of Unity&#39;s MonoBehaviour) but with asynchronous methods. You can use async methods within sync scripts, the same as standard C#.&lt;/p&gt;
&lt;h3 id=&quot;what-is-a-startupscript%3F&quot; tabindex=&quot;-1&quot;&gt;What is a StartupScript? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#what-is-a-startupscript%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A &lt;code&gt;StartupScript&lt;/code&gt; in Stride includes a &lt;code&gt;Start&lt;/code&gt; method that is invoked when it&#39;s added to the scene tree. This is similar to Unity&#39;s &lt;code&gt;Start&lt;/code&gt; or &lt;code&gt;Awake&lt;/code&gt; methods. However, &lt;code&gt;StartupScript&lt;/code&gt; does not contain &lt;code&gt;Update&lt;/code&gt; methods and therefore doesn&#39;t execute code every frame.&lt;/p&gt;
&lt;h3 id=&quot;using-other-assemblies%2Fprojects-in-stride&quot; tabindex=&quot;-1&quot;&gt;Using Other Assemblies/Projects in Stride &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#using-other-assemblies%2Fprojects-in-stride&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In Unity, the packaging system is built on top of a &lt;code&gt;csproj&lt;/code&gt; file, which allows Unity to protect its proprietary source code. Stride, however, grants you full access to your &lt;code&gt;csproj&lt;/code&gt; and &lt;code&gt;sln&lt;/code&gt; (Solution) files. This enables you to include any NuGet packages or other C# projects in the usual way, by adding project references. If you add a new subproject to your main project through the Stride editor, it will be correctly configured by default, including folder location and references to the Stride engine.&lt;/p&gt;
&lt;h3 id=&quot;is-there-an-asset-store-for-stride%3F&quot; tabindex=&quot;-1&quot;&gt;Is There an Asset Store for Stride? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#is-there-an-asset-store-for-stride%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;No, Stride does not have a dedicated Asset Store. However, most additional libraries specially designed for Stride can be found on GitHub or NuGet. For easier discovery, a summary has been made available at &lt;a href=&quot;https://github.com/Doprez/Awesome-Stride&quot;&gt;Awesome-Stride&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;null-checking-in-stride-vs-unity&quot; tabindex=&quot;-1&quot;&gt;Null Checking in Stride vs Unity &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#null-checking-in-stride-vs-unity&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Does &lt;code&gt;is null&lt;/code&gt; and &lt;code&gt;== null&lt;/code&gt; work? Unlike Unity, which has overridden the &lt;code&gt;Equals&lt;/code&gt; operator to be compatible with its C++ engine, Stride allows you to use &lt;code&gt;is null&lt;/code&gt; and &lt;code&gt;== null&lt;/code&gt; to compare the existence of an Entity or Component directly.&lt;/p&gt;
&lt;h2 id=&quot;where-to-start&quot; tabindex=&quot;-1&quot;&gt;Where to Start &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#where-to-start&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Getting started with Stride is easy, thanks to a wealth of resources available. Here are some you shouldn&#39;t miss:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/&quot;&gt;Stride&#39;s Manual&lt;/a&gt;: A comprehensive guide that covers everything from basic setup to advanced features.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://doc.stride3d.net/latest/en/tutorials/&quot;&gt;Stride&#39;s Tutorials&lt;/a&gt;: Step-by-step tutorials to help you get your first project off the ground.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://discord.gg/f6aerfE&quot;&gt;Discord&lt;/a&gt;: Join the community on Discord for real-time discussions and the latest updates.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;how-to-find-answers&quot; tabindex=&quot;-1&quot;&gt;How to Find Answers &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#how-to-find-answers&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Consider checking these platforms where your query may have already been addressed or where you can gain more context:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://discord.gg/f6aerfE&quot;&gt;Discord&lt;/a&gt;: Use the search functionality in our Discord channel to see if your topic has been discussed before.&lt;/li&gt;
&lt;li&gt;GitHub Issues: Navigate to &lt;a href=&quot;https://github.com/stride3d/stride/issues&quot;&gt;Stride&#39;s GitHub Issues&lt;/a&gt; to see if your question is related to a known issue or feature request.&lt;/li&gt;
&lt;li&gt;GitHub Discussion: Participate in &lt;a href=&quot;https://github.com/stride3d/stride/discussions&quot;&gt;Stride&#39;s GitHub Discussions&lt;/a&gt; to engage with the community and explore various topics.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This proactive approach not only helps you get immediate answers but also makes it easier for the community to focus on unresolved or unique queries.&lt;/p&gt;
&lt;h2 id=&quot;%F0%9F%A4%9D-join-us%3A-stride-bug-bounties-and-feature-funding-%F0%9F%9B%A0%EF%B8%8F&quot; tabindex=&quot;-1&quot;&gt;🤝 Join Us: Stride Bug Bounties and Feature Funding 🛠️ &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#%F0%9F%A4%9D-join-us%3A-stride-bug-bounties-and-feature-funding-%F0%9F%9B%A0%EF%B8%8F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We invite talented developers to collaborate with us through our &lt;a href=&quot;https://opencollective.com/stride3d/projects&quot;&gt;Bug and Feature Bounties&lt;/a&gt;. With tasks ranging from Vulkan support to decals and morph targets, there&#39;s something for everyone! Reach out via the specific &lt;a href=&quot;https://github.com/stride3d/stride/labels/bounty&quot;&gt;GitHub Bounty tickets&lt;/a&gt; to get involved.&lt;/p&gt;
&lt;p&gt;📬 For suggestions on new bounties, don&#39;t hesitate to connect with us on our Discord server or directly through GitHub.&lt;/p&gt;
&lt;p&gt;Participating in our bug bounties is a win-win! Not only will you be able to hone your skills, but you&#39;ll also contribute to the expansion and enrichment of the Stride community—and get &lt;strong&gt;compensated&lt;/strong&gt; for your efforts! 💰&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://opencollective.com/stride3d/projects&quot;&gt;Stride&#39;s Open Collective Projects&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;flappy-bird---stride-engine-demo&quot; tabindex=&quot;-1&quot;&gt;Flappy Bird - Stride Engine Demo &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#flappy-bird---stride-engine-demo&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://nedreid.itch.io/&quot;&gt;Ned Reid&lt;/a&gt;, a new member of the Stride community, has created a  &lt;a href=&quot;https://nedreid.itch.io/flappy-bird-stride&quot;&gt;Flappy Bird demo&lt;/a&gt;, while exploring Stride as an alternative to Unity. He shared the following thoughts on his experience:&lt;/p&gt;
&lt;p class=&quot;border-start border-5 ps-3&quot;&gt; I decided a couple of days ago that I would explore engines outside of Unity (for obvious reasons), and wanted to start with something simple. Over a fairly relaxed weekend, I&#39;ve managed to put together a neat little Flappy Bird clone!&lt;/p&gt;
&lt;img alt=&quot;Flappy Bird Stride Demo&quot; src=&quot;https://www.stride3d.net/images/blog/2023-09-14-embracing-open-source/flappy-bird-demo.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2023-09-14-embracing-open-source/flappy-bird-demo.webp&quot; /&gt;
&lt;p&gt;&lt;em&gt;A screenshot of the Flappy Bird demo created by Ned Reid&lt;/em&gt;&lt;/p&gt;
&lt;h2 id=&quot;closing-thoughts-%F0%9F%99%82&quot; tabindex=&quot;-1&quot;&gt;Closing Thoughts 🙂 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/#closing-thoughts-%F0%9F%99%82&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you&#39;ve made it this far, congratulations 🎉! You now have a comprehensive understanding of Stride, its capabilities, and how it compares to Unity. The world of game development is vast and ever-changing 🌍, but the emergence of community-driven, open-source engines like Stride showcases the exciting directions the industry is taking. With its C# focus 🎯, extensive .NET support 💻, and flexible licensing 📜, Stride is a formidable option for both new and experienced developers.&lt;/p&gt;
&lt;p&gt;As the saying goes, the best way to learn is by doing 🛠️. So dive in 🏊, start a project 🚀, and don&#39;t hesitate to participate in the community discussions on Discord or GitHub 👨‍💻👩‍💻. Your journey with Stride is what you make of it, and the resources and community are here to support you every step of the way 🤗.&lt;/p&gt;
&lt;p&gt;Thank you for reading 📖, and happy coding 💻👩‍💻👨‍💻!&lt;/p&gt;
</description>
      <pubDate>Thu, 14 Sep 2023 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/embracing-open-source-stride-as-an-alternative-to-unity/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2023-09-14-embracing-open-source/stride-vs-unity-opening-image-2.webp" type="image/webp" length="0" /></item>
    <item>
      <title>Taking .NET Game Development in Stride</title>
      <description>&lt;p&gt;Just a little reminder that Stride has been presented in a .NET Live! 🎥🎥🎥&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/VaclavElias&quot;&gt;Vaclav&lt;/a&gt;, &lt;a href=&quot;https://github.com/tebjan&quot;&gt;Tebjan&lt;/a&gt; and I participated in a .NET live session to showcase the Stride engine, as well as some work done by users. Many questions were asked, and &lt;a href=&quot;https://github.com/manio143&quot;&gt;Manio&lt;/a&gt; answered many of them in the chat.&lt;/p&gt;
&lt;h2 id=&quot;watch-the-.net-live-right-here&quot; tabindex=&quot;-1&quot;&gt;Watch the .NET Live right here &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/game-development-in-stride/#watch-the-.net-live-right-here&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Content&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;History of the Project&lt;/li&gt;
&lt;li&gt;Roadmap&lt;/li&gt;
&lt;li&gt;What are some of the big game titles that folks would recognize&lt;/li&gt;
&lt;li&gt;The UI&lt;/li&gt;
&lt;li&gt;Add Scripts to Entities&lt;/li&gt;
&lt;li&gt;Integrating Stride into your projects&lt;/li&gt;
&lt;li&gt;Add Interaction&lt;/li&gt;
&lt;li&gt;Shader System of Stride&lt;/li&gt;
&lt;li&gt;Shader Code&lt;/li&gt;
&lt;li&gt;Shader Language&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/J6g5y8m26zs&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h2 id=&quot;the-most-important-questions-answered&quot; tabindex=&quot;-1&quot;&gt;The most important questions answered &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/game-development-in-stride/#the-most-important-questions-answered&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In this live session, we answered the most important questions about the project, including how to use Stride and what it aims to be!&lt;/p&gt;
&lt;p&gt;Tebjan presented a bit about what contributors have done and what users (professionals/hobbyists, artists/developers) have done so far to show off the capabilities of the engine. He also gave a small presentation on how Stride is used with &lt;a href=&quot;https://vvvv.org/&quot;&gt;VVVV&lt;/a&gt; for 3D rendering!&lt;/p&gt;
&lt;h2 id=&quot;a-fun-experimentation&quot; tabindex=&quot;-1&quot;&gt;A fun experimentation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/game-development-in-stride/#a-fun-experimentation&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Vaclav, having dived into Stride with a desire to use Stride without an editor, created an API to experiment and create games using just a NuGet package. He presents his NuGet package, explains how to use it, and how to make games leveraging the power of .NET and hot reloading!&lt;/p&gt;
&lt;h2 id=&quot;shaders&quot; tabindex=&quot;-1&quot;&gt;Shaders &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/game-development-in-stride/#shaders&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I&#39;ve personally become interested in the shader system of Stride and found it refreshingly easy to use. I decided to show more about how to use shaders, update them, and extend the rendering engine of Stride.&lt;/p&gt;
&lt;h2 id=&quot;closing&quot; tabindex=&quot;-1&quot;&gt;Closing &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/game-development-in-stride/#closing&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We strongly recommend watching this live session, as it will help you gain a better understanding of Stride. .NET is becoming more and more relevant for a game engine, as evident with Stride. Don&#39;t hesitate to reach out to our community through the &lt;a href=&quot;https://discord.gg/f6aerfE&quot;&gt;Discord&lt;/a&gt; server!&lt;/p&gt;
</description>
      <pubDate>Thu, 15 Jun 2023 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/game-development-in-stride/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/game-development-in-stride/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2023-06/netlive.webp" type="image/webp" length="0" /></item>
    <item>
      <title>Announcing Refreshed Stride Website</title>
      <description>&lt;p&gt;The Stride team is happy 🙌 to announce the release of our refreshed Stride website. We have been working on this for a while, and we are excited to share these updates with you and hope you enjoy the enhanced browsing experience.&lt;/p&gt;
&lt;h2 id=&quot;the-motivation-for-the-update&quot; tabindex=&quot;-1&quot;&gt;The Motivation for the Update &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-website-update/#the-motivation-for-the-update&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Stride website has been around for some time ⌛. It was originally created using Jekyll. Over the years, we have added more content, but the website has not been updated for quite a while.&lt;/p&gt;
&lt;p&gt;Our main goal was to make the website future-proof and easy to maintain. We also wanted to improve the overall user experience and give it a more modern feel.&lt;/p&gt;
&lt;h2 id=&quot;what&#39;s-new-or-updated&quot; tabindex=&quot;-1&quot;&gt;What&#39;s New or Updated &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-website-update/#what&#39;s-new-or-updated&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Improved consistency across pages, posts, and styling, offering an excellent reading experience&lt;/li&gt;
&lt;li&gt;Enhanced content readability&lt;/li&gt;
&lt;li&gt;Modern and simplified design&lt;/li&gt;
&lt;li&gt;Updated static page generator: Eleventy 2.0 (previously Jekyll)&lt;/li&gt;
&lt;li&gt;Bootstrap 5.3 (previously Bootstrap 3)&lt;/li&gt;
&lt;li&gt;Font Awesome 6 (previously 4.4)&lt;/li&gt;
&lt;li&gt;Removal of old, unnecessary code, such as AddThis, Disqus, JQuery, and JavaScript libraries&lt;/li&gt;
&lt;li&gt;Improved website responsiveness (mobile, tablet, desktop)&lt;/li&gt;
&lt;li&gt;Content review and minor corrections&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/tags/&quot;&gt;Tags&lt;/a&gt; page&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/archive/&quot;&gt;Archive&lt;/a&gt; page&lt;/li&gt;
&lt;li&gt;Every single page was reviewed and updated 🤯&lt;/li&gt;
&lt;li&gt;Dark Theme (Experimental)&lt;/li&gt;
&lt;li&gt;Search functionality now includes our &lt;a href=&quot;https://doc.stride3d.net/latest/en/&quot;&gt;documentation&lt;/a&gt; website&lt;/li&gt;
&lt;li&gt;GitHub Wiki was enabled for content contributors, containing information about the website structure, how to add new content, and how to contribute.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This new update will enable us to share more content with you faster and more easily. We will also be able to add more features and enhance the overall experience.&lt;/p&gt;
&lt;div class=&quot;alert alert-info d-flex&quot;&gt;
    &lt;span class=&quot;me-3 mt-1&quot;&gt;&lt;i class=&quot;fa-solid fa-circle-info fa-lg&quot;&gt;&lt;/i&gt;&lt;/span&gt;
    &lt;div&gt;The Disqus comment widget has been removed from the blog posts, as we would like to encourage our readers to use &lt;a class=&quot;link-info&quot; href=&quot;https://github.com/stride3d/stride/discussions&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;GitHub Discussion&lt;/a&gt; or Discord. We are considering integrating the GitHub Discussions with the blog posts.&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;what&#39;s-next&quot; tabindex=&quot;-1&quot;&gt;What&#39;s next &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-website-update/#what&#39;s-next&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We will continue to improve the website and add more content. Additionally, we will be adding more features and further refining the overall experience.&lt;/p&gt;
&lt;p&gt;Our Stride website &lt;a href=&quot;https://github.com/stride3d/stride-website/issues&quot;&gt;GitHub issue tracker&lt;/a&gt; is open for any suggestions or feedback. We encourage you to collaborate, create issues, and submit pull requests.&lt;/p&gt;
&lt;h2 id=&quot;closing&quot; tabindex=&quot;-1&quot;&gt;Closing &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/announcing-website-update/#closing&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We hope you like the updated website.&lt;/p&gt;
&lt;p&gt;With this new release, we would like to encourage our community to contribute as well. Your experiences, insights, and knowledge are invaluable, and we would love to showcase them on our blog.&lt;/p&gt;
&lt;p&gt;If you have a topic, tutorial, or success story you&#39;d like to share, we invite you to get in touch. By contributing, you&#39;ll not only help others in the community but also gain visibility for your work and expertise.&lt;/p&gt;
&lt;p&gt;Let&#39;s work together to make the Stride community even more vibrant and enriching.&lt;/p&gt;
</description>
      <pubDate>Wed, 14 Jun 2023 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/announcing-website-update/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/announcing-website-update/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2023-04/new-home-page.webp" type="image/webp" length="0" /></item>
    <item>
      <title>Stride 4.1 is Now Live</title>
      <description>&lt;p&gt;Stride contributors are proud to announce a new release now running on .NET 6 supporting the latest C# 10. That means you can now head to the download page and start developing your games using the latest .NET technologies.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#stride-on-.net-live&quot;&gt;Stride On .NET Live&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#improvements-summary&quot;&gt;Improvements Summary&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#improvement-details&quot;&gt;Improvement Details&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#dithered-shadows-for-semi-transparent-materials&quot;&gt;Dithered shadows for semi-transparent materials&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#physics-constraints&quot;&gt;Physics constraints&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#physics-optimizations&quot;&gt;Physics optimizations&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#improved-editor-gizmos&quot;&gt;Improved editor gizmos&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#intermediate-tutorials&quot;&gt;Intermediate tutorials&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#known-issues&quot;&gt;Known Issues&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#integrated-c%23-editor&quot;&gt;Integrated C# Editor&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#a-little-help&quot;&gt;A Little Help&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#contributors&quot;&gt;Contributors&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#financial-contributors&quot;&gt;Financial contributors&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;stride-on-.net-live&quot; tabindex=&quot;-1&quot;&gt;Stride On .NET Live &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#stride-on-.net-live&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We had the pleasure to be on a live stream with the .NET team! We gave an introduction, overview and some live demos:&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/J6g5y8m26zs&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h2 id=&quot;improvements-summary&quot; tabindex=&quot;-1&quot;&gt;Improvements Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#improvements-summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here&#39;s a non-exhaustive list of new improvements:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.NET 6 support and &lt;a href=&quot;https://github.com/stride3d/stride/pull/1221&quot;&gt;VS 2022 plugin&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Stride 4.1 leverages the power of .NET 6&lt;/li&gt;
&lt;li&gt;Support for C# 10&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/1256&quot;&gt;Dithered shadows for semi-transparent materials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/1114&quot;&gt;Physics constraints&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Bullet constraints wrapped around in easy to use functionality&lt;/li&gt;
&lt;li&gt;Editor gizmos for physics constraints&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/1100&quot;&gt;Physics performance optimization&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/1037&quot;&gt;ACES tonemaping&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/1039&quot;&gt;Fog image effect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/1038&quot;&gt;Outline image effect&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/1083&quot;&gt;Improved editor gizmos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/1401&quot;&gt;C# Intermediate tutorials project&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;This Open Collective sub-project was &lt;a href=&quot;https://opencollective.com/stride3d/projects/stride-intermediate-tutorials&quot;&gt;successfully funded&lt;/a&gt; by the community.  All related video recordings are available on Stride&#39;s &lt;a href=&quot;https://www.youtube.com/c/Stride3D&quot;&gt;Youtube channel&lt;/a&gt; and the &lt;a href=&quot;https://doc.stride3d.net/latest/en/tutorials/index.html&quot;&gt;tutorials page&lt;/a&gt; in the documentation will also be update to reflect the new project.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Many more minor fixes and quality of life improvements
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/1217&quot;&gt;Fixed sample game&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/pull/1285&quot;&gt;Simpler Procedural Model creation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;New math signatures (&lt;a href=&quot;https://github.com/stride3d/stride/pull/1122&quot;&gt;1122&lt;/a&gt;, &lt;a href=&quot;https://github.com/stride3d/stride/pull/1121&quot;&gt;1121&lt;/a&gt;, &lt;a href=&quot;https://github.com/stride3d/stride/pull/1090&quot;&gt;1090&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Dispatcher/threadpool improvements&lt;/li&gt;
&lt;li&gt;Ambient Occlusion quality improvement&lt;/li&gt;
&lt;li&gt;And many other fixes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;improvement-details&quot; tabindex=&quot;-1&quot;&gt;Improvement Details &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#improvement-details&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;dithered-shadows-for-semi-transparent-materials&quot; tabindex=&quot;-1&quot;&gt;Dithered shadows for semi-transparent materials &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#dithered-shadows-for-semi-transparent-materials&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Produces semi-transparent shadows by poking more and more holes in the shadow map based on the transparency of the object, shadow map filtering will blur those holes with their neighbor which will result in those partially opaque pixels.&lt;/p&gt;
&lt;img alt=&quot;Dithered shadow settings&quot; src=&quot;https://i.imgur.com/xFzuNbl.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://i.imgur.com/xFzuNbl.png&quot; /&gt;
&lt;img alt=&quot;Dithered shadow effect comparison&quot; src=&quot;https://i.imgur.com/kHvSy8a.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://i.imgur.com/kHvSy8a.png&quot; /&gt;
&lt;h3 id=&quot;physics-constraints&quot; tabindex=&quot;-1&quot;&gt;Physics constraints &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#physics-constraints&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Stride&#39;s physics system Bullet comes with a set of constraints for you to use in your projects. These constraints are now all visible inside the editor, previewing the constraints using various editor gizmo.&lt;/p&gt;
&lt;img alt=&quot;&quot; src=&quot;https://i.imgur.com/qiaBBpm.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://i.imgur.com/qiaBBpm.png&quot; /&gt;
&lt;p&gt;For more information on all the types of constraints, you can read up about them in the &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/physics/constraints.html&quot;&gt;Stride documentation&lt;/a&gt; or watch the video below.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/uMZMYpMD3Wg&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h3 id=&quot;physics-optimizations&quot; tabindex=&quot;-1&quot;&gt;Physics optimizations &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#physics-optimizations&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Retrieving collision and contact information was previously done by re-testing all components for collisions, which, as one might expect, led to awful performance for physics heavy scenes (could take up to and above 90% of the frame).&lt;/p&gt;
&lt;p&gt;Contacts are now lazily evaluated to reduce overhead when nothing ends up reading them. Users can now read and iterate over all collisions through Simulation.CurrentCollisions.&lt;/p&gt;
&lt;h3 id=&quot;improved-editor-gizmos&quot; tabindex=&quot;-1&quot;&gt;Improved editor gizmos &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#improved-editor-gizmos&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The old gizmos weren&#39;t very nice to look at, so this feature makes them look better and more user-friendly. It also changes how the rotation gizmo works and adds scale planes to the scale gizmo.&lt;/p&gt;
&lt;img alt=&quot;New gizmos&quot; src=&quot;https://i.imgur.com/8siM2Lc.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://i.imgur.com/8siM2Lc.png&quot; /&gt;
&lt;p&gt;This feature also updates the text on the CameraOrientationGizmo to be XYZ instead of right/left. Still prefer the old text instead of the XYZ coordinate? Don&#39;t worry, there&#39;s a setting under the viewport settings that swaps it back to the old text.&lt;/p&gt;
&lt;img alt=&quot;Rotation&quot; src=&quot;https://i.imgur.com/W4zIf7J.png=400x160&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://i.imgur.com/W4zIf7J.png=400x160&quot; /&gt;
&lt;h3 id=&quot;intermediate-tutorials&quot; tabindex=&quot;-1&quot;&gt;Intermediate tutorials &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#intermediate-tutorials&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;One of the first Open Collective sub-projects is the &lt;a href=&quot;https://opencollective.com/stride3d/projects/stride-intermediate-tutorials&quot;&gt;intermediate C# tutorials project&lt;/a&gt;. After discussion in community meetings and with various contributors donating directly to this project, the amount for this project to be included in Stride quickly became a realization.&lt;/p&gt;
&lt;img alt=&quot;Intermediate tutorials intro screen&quot; src=&quot;https://i.imgur.com/7GVEiSR.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://i.imgur.com/7GVEiSR.jpg&quot; /&gt;
&lt;p&gt;With Stride 4.1, you will be able to select the C# intermediate tutorials project as a new template project. The template project contains (at the moment of writing) 11 topics that every developer will want to have a look at.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;UI basics&lt;/li&gt;
&lt;li&gt;Collision triggers&lt;/li&gt;
&lt;li&gt;Raycasting&lt;/li&gt;
&lt;li&gt;Projecting and Unprojecting&lt;/li&gt;
&lt;li&gt;Async(hronous) scripts&lt;/li&gt;
&lt;li&gt;Scene loading&lt;/li&gt;
&lt;li&gt;Animation basics&lt;/li&gt;
&lt;li&gt;Audio&lt;/li&gt;
&lt;li&gt;First person camera&lt;/li&gt;
&lt;li&gt;Third person camera&lt;/li&gt;
&lt;li&gt;Navigation&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Each tutorial has a video tutorial accompanying it, which can be found on Stride&#39;s &lt;a href=&quot;https://www.youtube.com/c/Stride3D&quot;&gt;Youtube channel&lt;/a&gt;. Below you can find the full playlist.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/videoseries?list=PLRZx2y7uC8mOE6_L0ZiFxNBE7HmzU2dP7&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h2 id=&quot;known-issues&quot; tabindex=&quot;-1&quot;&gt;Known Issues &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#known-issues&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;integrated-c%23-editor&quot; tabindex=&quot;-1&quot;&gt;Integrated C# Editor &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#integrated-c%23-editor&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The transition to .NET6 unfortunately broke the help tooltips and the code completion of the integrated C# code editor. But we decided to accept it for now, as everyone is using a proper C# editor anyways, such as Visual Studio, Rider or Visual Studio Code.&lt;/p&gt;
&lt;p&gt;The reason for the error is that &lt;a href=&quot;https://github.com/roslynpad/roslynpad&quot;&gt;RoslynPad&lt;/a&gt;, the underlaying library, also needs an update or fix. We&#39;ll address this in one of the upcoming minor version releases.&lt;/p&gt;
&lt;img alt=&quot;Integrated Editor Issue&quot; src=&quot;https://i.imgur.com/Gn2i6Js.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://i.imgur.com/Gn2i6Js.png&quot; /&gt;
&lt;h2 id=&quot;a-little-help&quot; tabindex=&quot;-1&quot;&gt;A Little Help &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#a-little-help&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We, contributors, believe that Stride can help .NET game developers make the games they want with ease using their favorite languages. We want to make sure Stride offers the most comfortable environment for developing games, and this takes time and effort.&lt;/p&gt;
&lt;p&gt;Since the free and open-source release of Stride, the community has been growing slowly, so we have decided to open a fund to reward developers for any contribution they make to Stride. We set up an &lt;a href=&quot;https://opencollective.com/stride3d&quot;&gt;Open Collective page&lt;/a&gt; to manage our funds and allocate money for features that the community would like to see implemented.&lt;/p&gt;
&lt;p&gt;We have various bounties for &lt;a href=&quot;https://opencollective.com/stride3d/projects&quot;&gt;bug fixes and features&lt;/a&gt; (Vulkan support, decals, morph targets, and many others). If you have or know someone with the skills to tackle those bounties, please reach out to us through the &lt;a href=&quot;https://github.com/stride3d/stride/labels/bounty&quot;&gt;respective GitHub tickets&lt;/a&gt;. You can also contact us through our discord server or on GitHub to propose new bounties.&lt;/p&gt;
&lt;h3 id=&quot;contributors&quot; tabindex=&quot;-1&quot;&gt;Contributors &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#contributors&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Many thanks to &lt;a href=&quot;https://github.com/stride3d/stride/graphs/contributors?from=2021-02-01&amp;amp;to=2022-06-10&amp;amp;type=c&quot;&gt;all the contributors&lt;/a&gt; who have donated their time and skill by adding features, fixing bugs, managing the build pipelines, adding documentation, and reviewing PRs.&lt;/p&gt;
&lt;h3 id=&quot;financial-contributors&quot; tabindex=&quot;-1&quot;&gt;Financial contributors &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-1/#financial-contributors&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Also, a huge thanks to the individuals and companies who contributed financially to our &lt;a href=&quot;https://opencollective.com/stride3d&quot;&gt;Open Collective&lt;/a&gt;!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://ore-system.com/&quot;&gt;ORE System&lt;/a&gt; with a diamond sponsorship&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/xen2&quot;&gt;xen2&lt;/a&gt; Core contributor that donated a large portion of the previous Patreon back through Open collective&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://visualprogramming.net/&quot;&gt;vvvv&lt;/a&gt; A visual live-programming environment for easy prototyping and development. It is designed to facilitate the handling of large media environments with physical interfaces, real-time motion graphics, audio and video that can interact with many users simultaneously. vvvv uses Stride&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/vaclav&quot;&gt;Vašo&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/mitchel-albertz&quot;&gt;Mitchel Albertz&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/bill2&quot;&gt;Bill&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/ideonella&quot;&gt;Ideonella&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/soul-rider&quot;&gt;Soul Rider&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/guest-ce7ccb03&quot;&gt;najak3d&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/eideren&quot;&gt;Eideren&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/jorn-theunissen&quot;&gt;Jorn Aggror&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://marian.dziubiak.pl/&quot;&gt;Marian Dziubiak&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/guest-7253cc41&quot;&gt;Youness KAFIA&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.disruptionworks.co.uk/&quot;&gt;David Thunderclown&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/christian-clavet&quot;&gt;Christian Clavet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/fador&quot;&gt;Marko Viitanen&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/guest-2f41a631&quot;&gt;Aaron Disibio&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/z16&quot;&gt;z16&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/guest-5635aca5&quot;&gt;Incognito&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/guest-2170ad46&quot;&gt;Walter Hulsebos&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/thekeyblader&quot;&gt;TheKeyblader&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/james-rinker&quot;&gt;James Rinker&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/guest-6653841d&quot;&gt;ztl&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://brunogarcia.com/&quot;&gt;Bruno Garcia&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/banditrevolver&quot;&gt;BanditRevolver&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/emmx&quot;&gt;EmmX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/seledreams&quot;&gt;SeleDreams&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://vignetteapp.org/&quot;&gt;Vignette&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/guest-a5fa78c8&quot;&gt;Longplay Games&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/guest-3fc8bf91&quot;&gt;Redberd36&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Sat, 16 Jul 2022 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/release-stride-4-1/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/release-stride-4-1/</guid>
      <enclosure url="https://i.imgur.com/7GVEiSR.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Community Meeting February 2022</title>
      <description>&lt;p&gt;The Striders discussed allocating their $4,220.48 USD budget for bug bounties and new features. Funding proposals include fullscreen Vulkan support, UI slowness bug research, Linux runtime support, decal support, morphing target animation support, and embedding Stride into UI frameworks. Release 4.1 is in progress, and an Epic grant proposal is being prepared.&lt;/p&gt;
&lt;h2 id=&quot;summary&quot; tabindex=&quot;-1&quot;&gt;Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On February 16th, we held a whopping 2.5-hour community meeting covering various subjects.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#current-funding&quot;&gt;Current Funding&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#funding-for-bug-bounties&quot;&gt;Funding for bug bounties&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#funding-for-features&quot;&gt;Funding for features&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#release-4.1&quot;&gt;Release 4.1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#additional-task-for-xen2&quot;&gt;Additional task for Xen2&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#work-in-progress&quot;&gt;Work in progress&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#epic-grant&quot;&gt;Epic grant&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;current-funding&quot; tabindex=&quot;-1&quot;&gt;Current Funding &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#current-funding&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;With a budget of &lt;strong&gt;$4,220.48 USD&lt;/strong&gt; at the moment of the community meeting happening, we wanted to decide on whether to allocate money for bugs and new features. So a big thanks to all those who are donating to this project. In particular:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ore-system.com/&quot;&gt;ORE system&lt;/a&gt;💎&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://visualprogramming.net/&quot;&gt;VVVV&lt;/a&gt;🥇&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vaclavelias.com/&quot;&gt;Vašo ( Vaclav )&lt;/a&gt;🥇&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt=&quot;Ore Logo&quot; src=&quot;https://www.stride3d.net/images/sponsors/ore_system-next_gen_nfts_dark.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/sponsors/ore_system-next_gen_nfts_dark.png&quot; /&gt;
&lt;h2 id=&quot;funding-for-bug-bounties&quot; tabindex=&quot;-1&quot;&gt;Funding for bug bounties &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#funding-for-bug-bounties&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fullscreen Vulkan support
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/issues/455&quot;&gt;GitHub ticket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Bounty: $200,- USD&lt;/li&gt;
&lt;li&gt;AggrorJorn will provide the texts for the bounty and once approved by other contributors/developers in the team, this will be updated on the Open Collective project for &lt;a href=&quot;https://opencollective.com/stride3d/projects/bug-bounties&quot;&gt;Bug bounties&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;UI slowness bug
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/issues/455&quot;&gt;GitHub ticket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A smaller $50,- USD bounty for more research on this bug. If it can be pinpointed what exactly is causing this, we can also estimate better whether it is worth spending more money on it.&lt;/li&gt;
&lt;li&gt;Depending on the outcome we might skip this bug and spend time researching/implementing a replacement UI.&lt;/li&gt;
&lt;li&gt;AggrorJorn will provide the texts for the bounty and once approved by other contributors/developers in the team, this will be updated on the Open Collective project for &lt;a href=&quot;https://opencollective.com/stride3d/projects/bug-bounties&quot;&gt;Bug bounties&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;funding-for-features&quot; tabindex=&quot;-1&quot;&gt;Funding for features &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#funding-for-features&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Linux runtime support
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/discussions/1202&quot;&gt;GitHub ticket&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Requires mores fleshed out details and deliverables&lt;/li&gt;
&lt;li&gt;Once that is done, we can decide on funding
&lt;ul&gt;
&lt;li&gt;Either fixed amount or use xx,xx amount per hour with a certain limit.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;New Open collective project &lt;a href=&quot;https://opencollective.com/stride3d/projects/linux-runtime-support&quot;&gt;Linux runtime&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Decal support
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/issues/24&quot;&gt;GitHub discussion&lt;/a&gt; requires more deliverables&lt;/li&gt;
&lt;li&gt;New Open collective project &lt;a href=&quot;https://opencollective.com/stride3d/projects/decals&quot;&gt;Decals&lt;/a&gt; added and will be updated once deliverables are clear:]&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Morphing target animation support
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/issues/339&quot;&gt;GitHub discussion&lt;/a&gt; requires more deliverables&lt;/li&gt;
&lt;li&gt;New Open collective project &lt;a href=&quot;https://opencollective.com/stride3d/projects/morph-targets&quot;&gt;Morhping Target&lt;/a&gt; added and will be updated once deliverables are clear:&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Embed stride into UI frameworks
&lt;ul&gt;
&lt;li&gt;There already is a &lt;a href=&quot;https://github.com/stride3d/stride/pull/1315&quot;&gt;work in progress PR&lt;/a&gt; that allows developers to specify a custom render context.&lt;/li&gt;
&lt;li&gt;New Open collective Project for &lt;a href=&quot;https://opencollective.com/stride3d/projects/embed-stride-ui-frameworks&quot;&gt;Embedding Stride into UI frameworks&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/dotnet/Silk.NET&quot;&gt;Silk.NET&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;New Open collective project &lt;a href=&quot;https://opencollective.com/stride3d/projects/stride3d-silknet&quot;&gt;Silk.NET&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;release-4.1&quot; tabindex=&quot;-1&quot;&gt;Release 4.1 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#release-4.1&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://hackmd.io/McqTXGtyQuSu1-QJz34xKw&quot;&gt;Release notes wip&lt;/a&gt; are prepared by Eideren/Vaso/Yka.&lt;/li&gt;
&lt;li&gt;Final checks by Xen2: VS plugin&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;additional-task-for-xen2&quot; tabindex=&quot;-1&quot;&gt;Additional task for Xen2 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#additional-task-for-xen2&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Documentation needs to auto-release when Release branch is updated&lt;/li&gt;
&lt;li&gt;Ask previous implementer of SPIR-V shader system if he is interested in new work for Stride&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;work-in-progress&quot; tabindex=&quot;-1&quot;&gt;Work in progress &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#work-in-progress&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Code only project: will enter beta phase
&lt;ul&gt;
&lt;li&gt;When merged into Stride 4.2 beta, we will add an Open collective page for additional examples.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;C# Pong game example: finishing touches (sound)&lt;/li&gt;
&lt;li&gt;The following C# intermediate tutorials are written but not yet recorded:
&lt;ul&gt;
&lt;li&gt;UI basics
&lt;ul&gt;
&lt;li&gt;Both via the editor as well as entirely through code&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Scene loading
&lt;ul&gt;
&lt;li&gt;Loading/Unloading&lt;/li&gt;
&lt;li&gt;Reloading scenes&lt;/li&gt;
&lt;li&gt;Child scenes&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Collision triggers&lt;/li&gt;
&lt;li&gt;Raycasting&lt;/li&gt;
&lt;li&gt;Animation basics&lt;/li&gt;
&lt;li&gt;Audio
&lt;ul&gt;
&lt;li&gt;Small tutorial really&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Navigation meshes and pathfinding
&lt;ul&gt;
&lt;li&gt;Both editor as well as code only approaches&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Sync vs Async
&lt;ul&gt;
&lt;li&gt;Difference and 2 examples&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;epic-grant&quot; tabindex=&quot;-1&quot;&gt;Epic grant &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-february-2022/#epic-grant&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Yka and AggrorJorn have a look at Epic grant and make final proposal in the 3rd week of February&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Wed, 16 Feb 2022 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/community-meeting-february-2022/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/community-meeting-february-2022/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Community Meeting November 2021</title>
      <description>&lt;p&gt;After a month on Open Collective, the Stride collective reached $1,984.31 USD and discussed funding for various projects. Plans for requesting an Epic grant are in progress. Ongoing development includes physics constraints, splines, and the upcoming release of version 4.1.&lt;/p&gt;
&lt;h2 id=&quot;summary&quot; tabindex=&quot;-1&quot;&gt;Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-november-2021/#summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;November 29th we had another commmunity meeting. This blog post summarizes the topics we talked about.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-november-2021/#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-november-2021/#sponsors&quot;&gt;Sponsors&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-november-2021/#a-month-of-open-collective&quot;&gt;A Month of Open Collective&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-november-2021/#preparing-request-epic-grant&quot;&gt;Preparing Request Epic Grant&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-november-2021/#other-action-items&quot;&gt;Other Action Items&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-november-2021/#ongoing-development&quot;&gt;Ongoing Development&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;sponsors&quot; tabindex=&quot;-1&quot;&gt;Sponsors &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-november-2021/#sponsors&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Started of with a thank you to all those who donated on the new sponsor platform: &lt;a href=&quot;https://opencollective.com/stride3d&quot;&gt;Open collective&lt;/a&gt;. In particular a big thanks to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://opencollective.com/xen2&quot;&gt;Xen2&lt;/a&gt;, who decided that he wanted to contribute some of the Patreon money back in to the community.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ore-system.com/&quot;&gt;ORE system&lt;/a&gt;💎&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://visualprogramming.net/&quot;&gt;VVVV&lt;/a&gt;🥇&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.vaclavelias.com/&quot;&gt;Vašo ( Vaclav )&lt;/a&gt;🥇&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt=&quot;Ore Logo&quot; src=&quot;https://www.stride3d.net/images/sponsors/ore_system-next_gen_nfts_dark.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/sponsors/ore_system-next_gen_nfts_dark.png&quot; /&gt;
&lt;h2 id=&quot;a-month-of-open-collective&quot; tabindex=&quot;-1&quot;&gt;A Month of Open Collective &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-november-2021/#a-month-of-open-collective&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;After a month using the new sponsor platform, the Stride collective has reached a balance of &lt;strong&gt;$1,984.31&lt;/strong&gt; USD. We started discussing how and where the money should be distributed to. We want to do this with the help of Open collective &#39;Projects&#39;. These projects are listed on Stride&#39;s Open collective page, and have their own tiers, targets and description. Users can sponsor projects directly instead of the main Stride collective if they want to.&lt;/p&gt;
&lt;p&gt;We have come up with several projects that need to be written out in more detail before we will add them to the Open collective page. All tickets below have a Github disscusion for more details.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;OC project: Bug bounties project
&lt;ul&gt;
&lt;li&gt;Before starting on an issue, make it known on Github and Discord that your are willing to tackle the issue. It would be a shame if multiple people try to solve the same issue.&lt;/li&gt;
&lt;li&gt;Any PR to the Stride repo must be reviewed by a contributor and discussed if needed.&lt;/li&gt;
&lt;li&gt;Once a PR is reviewed and merged to the Stride repo, the submitter 60% of the bounty.&lt;/li&gt;
&lt;li&gt;The submitter receives the remaining 40% when stride release happens.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/discussions/1204&quot;&gt;Github Discussion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OC project: .NET 6 platforms support
&lt;ul&gt;
&lt;li&gt;In order for proper support for macOs, we need hardware to test this on. Xen2 will look in to the hardware requirements for this.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/discussions/1206&quot;&gt;Github Discussion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OC project: Shader system
&lt;ul&gt;
&lt;li&gt;Xen2 will gather info and budget requirements&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/discussions/1201&quot;&gt;Github Discussion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;OC project: Linux/macOS support&#39;
&lt;ul&gt;
&lt;li&gt;A rather large topic that require a lot of work is the the support for Linux and/or macOs. When worked out in more detail, it can be used in the plan for requesting an Epic grant. Subtopics to resolve:
&lt;ul&gt;
&lt;li&gt;Runtime/3d&lt;/li&gt;
&lt;li&gt;Build tools (able to msbuild a Stride project and have the asset compiler work on it) requirement:  FBX/Assimp&lt;/li&gt;
&lt;li&gt;Editor&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/discussions/1202&quot;&gt;Github Discussion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;preparing-request-epic-grant&quot; tabindex=&quot;-1&quot;&gt;Preparing Request Epic Grant &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-november-2021/#preparing-request-epic-grant&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For a while now we have been wanting to pursue the option of requesting an Epig grant. In order to do so however, we need to come up with a proper plan. The endgoal is to have a proper document explaining what we want to do, and how we plan to spend any given budget.&lt;/p&gt;
&lt;p&gt;AggrorJorn starts a github ticket where we gather info on the request to Epic. He will contact others for proof read and further info. &lt;a href=&quot;https://github.com/stride3d/stride/discussions/1207&quot;&gt;Github Discussion&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Some of the topics mentioned:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Shader system&lt;/li&gt;
&lt;li&gt;Editor rewrite&lt;/li&gt;
&lt;li&gt;Megascan Integration&lt;/li&gt;
&lt;li&gt;ECS rewrite/Run Update() and Render() in parallel&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;other-action-items&quot; tabindex=&quot;-1&quot;&gt;Other Action Items &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-november-2021/#other-action-items&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;We close forum in December as there is almost no activity there. We want to utilize Discord and Github discussion for this. The forum will be read only but we will no longer refer to it from the website and Github.&lt;/li&gt;
&lt;li&gt;Use a Github project for remaining tasks: &lt;a href=&quot;https://github.com/orgs/stride3d/projects/3/views/1&quot;&gt;Overview&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Github ticket on a simple free community marketplace
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://github.com/stride3d/stride/issues/1197&quot;&gt;Github Discussion&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;A lot of people have made usefull components/utilities/art and other usefull assets for in Stride projects. Right now we don&#39;t have a quick and easy to import such assets in to an existing (editor) project.&lt;/li&gt;
&lt;li&gt;What we can do it is utilise the existing Nuget (tagging) system so that users can quickly add a component to their ongoing project in the editor.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Documentation on the stride source/new comers tutorial
&lt;ul&gt;
&lt;li&gt;YKA, Manio143 and Tebjan collect some info for a tutorial: &lt;a href=&quot;https://github.com/stride3d/stride/discussions/1211&quot;&gt;Github Discussion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;ongoing-development&quot; tabindex=&quot;-1&quot;&gt;Ongoing Development &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-november-2021/#ongoing-development&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Manio143: finishing touches/documentation for Physics constraints&lt;/li&gt;
&lt;li&gt;AggrorJorn: Splines
&lt;ul&gt;
&lt;li&gt;Trying to finish the base splines which could be integrated in to the Stride source. Other Spline based components should be added later, so that we can have a milestone finished.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;Some tricky stuff with custom translation gizmo&#39;s for controlling tangents in the editor are currently holding me back. If this isn&#39;t resolved quickly I will make a PR without this (nice to have) feature&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Release of 4.1 only held back by final .NET 6 related fixes. After that Xen2 will prepare release. AggrorJorn will aid in blogpost release notes&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Mon, 29 Nov 2021 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/community-meeting-november-2021/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/community-meeting-november-2021/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Open Collective</title>
      <description>&lt;p&gt;Stride has been using Patreon and GitHub sponsors for a while now. However, in the recent community meeting of october 1st it became apparent that these donation platforms don&#39;t really suit all of our needs. Both GitHub sponsors and Patreon don&#39;t really show where the money is going.&lt;/p&gt;
&lt;p&gt;To solve this we have been looking at a different platform that allows us to communicate more openly on our expenses and where money will be spent. After some investigation and various registration and other formalities, we can now say goodbye to Patreon, as Stride will from now use the &lt;a href=&quot;https://opencollective.com/stride3d&quot;&gt;Open Collective&lt;/a&gt; platform.&lt;/p&gt;
&lt;h2 id=&quot;summary&quot; tabindex=&quot;-1&quot;&gt;Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-collective/#summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-collective/#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-collective/#open-(source)-collective&quot;&gt;Open (Source) Collective&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-collective/#payments-and-expenses&quot;&gt;Payments and Expenses&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-collective/#projects&quot;&gt;Projects&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/open-collective/#what&#39;s-next%3F&quot;&gt;What&#39;s Next?&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/ufKkAsaJNTM&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h2 id=&quot;open-(source)-collective&quot; tabindex=&quot;-1&quot;&gt;Open (Source) Collective &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-collective/#open-(source)-collective&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;img alt=&quot;Open Collective Logo&quot; src=&quot;https://www.stride3d.net/images/blog/2021-10-31-open-collective/opencollective.svg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-10-31-open-collective/opencollective.svg&quot; /&gt;
&lt;p&gt;Open collective is similar to other sponsor platforms, but sticks out in the way it openly displays payments and expenses. Everything about it is open for everyone to see. Through various Tiers, people can sponsor the Stride game engine. Each tier will have its own reward(s). Some tiers for instance will have the reward that users are shown on the stride website as a thank you. This is being worked on.&lt;/p&gt;
&lt;img alt=&quot;Tiers and rewards&quot; src=&quot;https://www.stride3d.net/images/blog/2021-10-31-open-collective/tiers.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-10-31-open-collective/tiers.jpg&quot; /&gt;
&lt;p&gt;We also needed a good way to deal with payments towards contributors and any tax related activities that come with it. Open collective allows the Stride collective to join a so-called &#39;Fiscal host&#39; which takes care of all of that for us, for a percentage of the money contributed. After some communication and verification on the Stride github repository we are now also officially connected with the &lt;a href=&quot;https://www.oscollective.org/&quot;&gt;Open Source Collective&lt;/a&gt;. The Open Source Collective has various open source projects under its wing: WebPack, VueJs, OBS, Babel, Bootstrap and many more.&lt;/p&gt;
&lt;img alt=&quot;Open Source Collective Logo&quot; src=&quot;https://www.stride3d.net/images/blog/2021-10-31-open-collective/oscollective.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-10-31-open-collective/oscollective.png&quot; /&gt;
&lt;h2 id=&quot;payments-and-expenses&quot; tabindex=&quot;-1&quot;&gt;Payments and Expenses &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-collective/#payments-and-expenses&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Every payment made to a contributor will always show up on the Stride&#39;s open collective. A Stride contributor can submit an invoice: for instance the cost of Google accounts or domain names. These invoices can be approved by the Stride contributors team. These are the same people that are active members of the &lt;a href=&quot;https://github.com/orgs/stride3d/people&quot;&gt;Stride Contributors team&lt;/a&gt; on Github. Submitted invoices can be approved at any given time but allocating money for specific projects is done at the end of each month (or beginning).&lt;/p&gt;
&lt;img alt=&quot;Expenses&quot; src=&quot;https://www.stride3d.net/images/blog/2021-10-31-open-collective/invoice.JPG&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-10-31-open-collective/invoice.JPG&quot; /&gt;
&lt;h2 id=&quot;projects&quot; tabindex=&quot;-1&quot;&gt;Projects &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-collective/#projects&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Stride contributors have the final call where all the collected money will be allocated too. This will be done with the help of Projects. This Open Collective feature acts as a sort of &#39;Ledger&#39; where money can be stored until the time comes to pay the contributor(s) of a project. A project can have its own tiers and goals. Those projects could be all sorts of things: new engine features, research on new technology, high priority bugs or documentation. These kinds of projects will be discussed at community meetings to get the input of the Stride community. Here is an &lt;a href=&quot;https://opencollective.com/stride3d/projects/stride-intermediate-tutorials&quot;&gt;example project&lt;/a&gt;.&lt;/p&gt;
&lt;img alt=&quot;Projects&quot; src=&quot;https://www.stride3d.net/images/blog/2021-10-31-open-collective/projects.JPG&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-10-31-open-collective/projects.JPG&quot; /&gt;
&lt;p&gt;People can also choose to donate to a specific project rather than the Stride collective in general if they want to. So if you only want to see your money being used for a specific cause, you are completely free to do so. You are more than welcome to do both of course. In the image below you can see an example of how money that has been donated to the Stride collective, has been partially allocated to a specific project.&lt;/p&gt;
&lt;img alt=&quot;Allocating budget&quot; src=&quot;https://www.stride3d.net/images/blog/2021-10-31-open-collective/allocate_budget.JPG&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-10-31-open-collective/allocate_budget.JPG&quot; /&gt;
&lt;h2 id=&quot;what&#39;s-next%3F&quot; tabindex=&quot;-1&quot;&gt;What&#39;s Next? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/open-collective/#what&#39;s-next%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We first want to see how this first month of the new platform goes. At the end of November/beginning December we will hold a new community meeting and we will discuss how things went and how we plan on distributing the donations.&lt;/p&gt;
&lt;p&gt;There are also some remaining tasks regarding the Open Collective that will be taken care of in the weeks to come:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Setup webhook to Discord&lt;/li&gt;
&lt;li&gt;Setup webhook to Twitter&lt;/li&gt;
&lt;li&gt;Fully automate the website to show sponsors&lt;/li&gt;
&lt;li&gt;Fully automate the Github &lt;a href=&quot;http://backers.md/&quot;&gt;backers.md&lt;/a&gt; file with sponsors&lt;/li&gt;
&lt;li&gt;Write up blog on the entire process on how we spend money&lt;/li&gt;
&lt;li&gt;Add open collective to sponsors.yaml on github&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Sun, 31 Oct 2021 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/open-collective/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/open-collective/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Community Meeting October 2021</title>
      <description>&lt;p&gt;It has been quite a while since we had a community meeting with the Stride community. On the 1st of October 2021 we had a good 2 hour chat about various topics on the Stride game engine.&lt;/p&gt;
&lt;h2 id=&quot;summary&quot; tabindex=&quot;-1&quot;&gt;Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2021/#summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2021/#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2021/#access-rights&quot;&gt;Access Rights&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2021/#roadmap&quot;&gt;Roadmap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2021/#funding&quot;&gt;Funding&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2021/#stride-4.1&quot;&gt;Stride 4.1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-october-2021/#remaining-topics&quot;&gt;Remaining Topics&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;access-rights&quot; tabindex=&quot;-1&quot;&gt;Access Rights &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2021/#access-rights&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;First topic was about clearing up access rights of the Stride source contributors and how this can be displayed better to the rest of the world.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Github features a teams option, which is now free for open source projects. Xen2 made sure that those contributing to the engine are now part of the team on Github: &lt;a href=&quot;https://github.com/orgs/stride3d/teams/stride-contributors&quot;&gt;https://github.com/orgs/stride3d/teams/stride-contributors&lt;/a&gt;. These contributors can review and approve pull requests in to the various stride projects (engine, website, documentation).
&lt;ul&gt;
&lt;li&gt;When changes are merged into the website project and specifically the &#39;release&#39; branch, an automated process will trigger the website deployment.&lt;/li&gt;
&lt;li&gt;Documentation is updated as well, although this is a manual process that needs to be triggered. Xen2 and Aggror will do some knowledge sharing in private, so that this process does not lie solely with xen2.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Social media access
&lt;ul&gt;
&lt;li&gt;Youtube: xen2 and Aggror&lt;/li&gt;
&lt;li&gt;Facebook: xen2 and M0TH&lt;/li&gt;
&lt;li&gt;Twitter: xen2 and Aggror&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;roadmap&quot; tabindex=&quot;-1&quot;&gt;Roadmap &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2021/#roadmap&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The roadmap on Github hasn&#39;t received an update in quite a while. The reason for this is that there simply is no capacity to pick up these kind of features like terrain editor, visual programming etc.&lt;br /&gt;
What we see in the community is that various contributors work on useful features for their own games, and as a result these kind of features and bug fixes and up being merged in to the Stride repository.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;As a result it has now been decided that we no longer will use the roadmap on Github. At the moment of writing this blog, the roadmap has already been removed. If, in the future, we have more funding and capacity, we can re-introduce it again.&lt;/li&gt;
&lt;li&gt;Aggror will try to put out a blogpost once a month keeping the community up to date on features that community members are working on. This also requires some initiative from the community. So if you have something that you are working on, feel free to send a message to Aggror on Discord. That we can feature your screenshots, videos, PR&#39;s in a blogpost on the stride website.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;funding&quot; tabindex=&quot;-1&quot;&gt;Funding &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2021/#funding&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There were 2 ways to contribute to Stride financially: Patreon and Xen2 sponsorship on his Github account.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Both these donation services didn’t really give a clear overview where the money was being spent on.&lt;/li&gt;
&lt;li&gt;Sponsoring Xen2 on Github would specifically and only go to Xen2. On top of that there is no easy way to use this as a marketing tool.&lt;/li&gt;
&lt;li&gt;Only Xen2 had access to Patreon, making it another responsibility for him to:
&lt;ul&gt;
&lt;li&gt;Post something interesting on Patreon (for which he has no time)&lt;/li&gt;
&lt;li&gt;Do tax related activities and payments.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Because of the above, Stride&#39;s Patreon page will soon close (or already might be at the time of posting blog)&lt;/li&gt;
&lt;li&gt;Aggror will look into setting up a more open way of viewing where money from donations is being spent on. The idea here is to have a look at &lt;a href=&quot;https://opencollective.com/how-it-works&quot;&gt;Open Collective&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;Aggror will present his findings to xen2. Once a decision has been made, the community will be informed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;.NET foundation
&lt;ul&gt;
&lt;li&gt;Stride has joined the .NET foundation. The .NET foundation offers to host various services on their Azure subscriptions. That means that a majority of the costs when it comes to hosting is taken care of for us.&lt;/li&gt;
&lt;li&gt;As a result of this, Xen will move various services from Digital ocean to Azure. This will reduce costs. Money that is gained from donations can be spent on bug bounties, features and documentation. Once we have a new donation mechanism in place, we will have another community meeting on how to distribute money.&lt;/li&gt;
&lt;li&gt;Aggror will also be included in the communication with .Net foundation.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Xen2 gave a nice summary on the operating costs for various (web related)services
&lt;ul&gt;
&lt;li&gt;Azure: used to be $50~$100 per month but now paid by .NET Foundation&lt;/li&gt;
&lt;li&gt;StackPath (CDN): $10 per month, can be moved to Azure&lt;/li&gt;
&lt;li&gt;Google Cloud Service: $5 per month&lt;/li&gt;
&lt;li&gt;DigitalOcean: $30 per month (teamcity and forums server), can be moved to Azure&lt;/li&gt;
&lt;li&gt;GitHub: $40 per month
&lt;ul&gt;
&lt;li&gt;Some demo&#39;s use LFS. If .NET foundation were to cover those costs too, we could add additional demo&#39;s.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;SSL: used to be expensive but now free (auto renew let&#39;s encrypt or Azure)&lt;/li&gt;
&lt;li&gt;Domains: cheap, $10 per year&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Applying for a grant with Epic, Microsoft etc.
&lt;ul&gt;
&lt;li&gt;Although this is something that we want to pursue, we first want to have a new donation service in place. The next community meeting will cover this topic again.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;stride-4.1&quot; tabindex=&quot;-1&quot;&gt;Stride 4.1 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2021/#stride-4.1&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride 4.1 is on its way, but when exactly and what can we expect this year?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stride 4.1 BETA will include the upgrade to .NET 6&lt;/li&gt;
&lt;li&gt;Stride 4.1 targeted around november/december 2021&lt;/li&gt;
&lt;li&gt;Although full Linux support is not possible right now, we will look at having the Linux runtime working again with Stride 4.1&lt;/li&gt;
&lt;li&gt;Aggror will start collect info for the release notes&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;remaining-topics&quot; tabindex=&quot;-1&quot;&gt;Remaining Topics &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-october-2021/#remaining-topics&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For the remaining topics, we ran out of time, so these will be picked up at another community meeting.&lt;/p&gt;
</description>
      <pubDate>Fri, 01 Oct 2021 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/community-meeting-october-2021/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/community-meeting-october-2021/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Stride 4.0 is Now Live</title>
      <description>&lt;p&gt;Stride 4.0 is now out of beta, and the Xenko game engine has been renamed to Stride. This release brings Voxel Cone Tracing GI, .NET 5 support, flexible GPU instancing, Vulkan improvements, and new documentation and tutorials. The Stride team is also welcoming new developers to contribute to the engine&#39;s development.&lt;/p&gt;
&lt;p&gt;Stride 4.0 has been around for a while, but it&#39;s now time to remove the &lt;code&gt;-beta&lt;/code&gt; tag!&lt;/p&gt;
&lt;p&gt;Many thanks to the community and all the contributors who made this release possible!&lt;/p&gt;
&lt;h2 id=&quot;summary&quot; tabindex=&quot;-1&quot;&gt;Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#xenko-is-now-stride!&quot;&gt;Xenko is now Stride!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#voxel-cone-tracing-gi&quot;&gt;Voxel Cone Tracing GI&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#.net-5&quot;&gt;.NET 5&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#flexible-gpu-instancing&quot;&gt;Flexible GPU Instancing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#graphics-api%3A-different-selection-mechanism-%2B-vulkan-improvements&quot;&gt;Graphics API: Different Selection Mechanism + Vulkan Improvements&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#documentation-%26-tutorials&quot;&gt;Documentation &amp;amp; Tutorials&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#new-developers-are-welcome!&quot;&gt;New Developers are Welcome!&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;xenko-is-now-stride!&quot; tabindex=&quot;-1&quot;&gt;Xenko is now Stride! &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#xenko-is-now-stride!&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Xenko game engine has been renamed to Stride. From now on, all source code, blogs, and tutorials will use the name ‘Stride’ instead of ‘Xenko’.&lt;/p&gt;
&lt;p&gt;Here is the new logo:&lt;/p&gt;
&lt;img alt=&quot;Stride Logo&quot; src=&quot;https://www.stride3d.net/images/blog/2021-02-01-release-stride-4-0/stride-logo.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-02-01-release-stride-4-0/stride-logo.png&quot; /&gt;
&lt;p&gt;More details available on the &lt;a href=&quot;https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/&quot;&gt;dedicated blog post&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;voxel-cone-tracing-gi&quot; tabindex=&quot;-1&quot;&gt;Voxel Cone Tracing GI &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#voxel-cone-tracing-gi&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Thanks to a substantial contribution from Sean Boettger and sponsored by David Jeske, Stride now supports Voxel Cone Tracing GI!&lt;/p&gt;
&lt;p&gt;Here it is in action:&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/AZytf15FRks&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;As you can see, there are many customizations and settings available in the editor:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.stride3d.net/images/blog/2021-02-01-release-stride-4-0/voxelgi.jpg&quot; title=&quot;Voxel Cone Tracing GI&quot; class=&quot;mb-3&quot;&gt;&lt;img alt=&quot;Voxel Cone Tracing GI&quot; src=&quot;https://www.stride3d.net/images/blog/2021-02-01-release-stride-4-0/voxelgi.jpg&quot; class=&quot;img-fluid&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-02-01-release-stride-4-0/voxelgi.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;There&#39;s a documentation page explaining &lt;a href=&quot;https://doc.stride3d.net/4.0/en/manual/graphics/lights-and-shadows/voxel-cone-tracing-gi.html&quot;&gt;how to set up the project with Voxel Cone Tracing GI&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Here&#39;s the original &lt;a href=&quot;https://forums.stride3d.net/t/voxel-gi-implementation/1947&quot;&gt;forum post&lt;/a&gt; and &lt;a href=&quot;https://github.com/stride3d/stride/pull/583&quot;&gt;pull request&lt;/a&gt;. Thanks again for this great contribution!&lt;/p&gt;
&lt;h2 id=&quot;.net-5&quot; tabindex=&quot;-1&quot;&gt;.NET 5 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#.net-5&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Stride editor and toolchain is now running with .NET 5! Runtime has been working with .NET Core for a few versions already.&lt;/p&gt;
&lt;p&gt;This allows us to have scripts and custom assets in a project targetting &lt;code&gt;.NET Standard 2.1&lt;/code&gt; or &lt;code&gt;.NET 5&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;If you have scripts or custom assets in a .NET Framework project rather than a .NET Standard project, you can still choose between &lt;code&gt;.NET 5&lt;/code&gt; and &lt;code&gt;.NET Framework&lt;/code&gt; within the launcher:&lt;/p&gt;
&lt;img alt=&quot;Framework selection in launcher&quot; src=&quot;https://www.stride3d.net/images/blog/2021-02-01-release-stride-4-0/launcher-net5.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-02-01-release-stride-4-0/launcher-net5.png&quot; /&gt;
&lt;p&gt;The framework will also be displayed in the Game Studio toolbar for easier identification while both coexist.&lt;/p&gt;
&lt;p&gt;.NET Framework version can be considered deprecated and will likely be removed in a future release (likely 4.1) to allow us to take full advantage of &lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8&quot;&gt;C# 8.0&lt;/a&gt; and soon-to-come &lt;a href=&quot;https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/&quot;&gt;C# 9.0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We also expect dropping .NET Framework and supporting only .NET 5 will greatly simplify our installation process since we won&#39;t depend on specific workloads or packages of Visual Studio being installed anymore. This was a recurring issue with our users.&lt;/p&gt;
&lt;h2 id=&quot;flexible-gpu-instancing&quot; tabindex=&quot;-1&quot;&gt;Flexible GPU Instancing &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#flexible-gpu-instancing&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Aka geometry instancing. Thanks to another big community contribution sponsored by &lt;a href=&quot;https://visualprogramming.net/&quot;&gt;vvvv&lt;/a&gt;, Stride now supports GPU instancing per model.&lt;/p&gt;
&lt;img alt=&quot;Instancing Header&quot; src=&quot;https://www.stride3d.net/images/blog/2021-02-01-release-stride-4-0/instancing-header.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-02-01-release-stride-4-0/instancing-header.jpg&quot; /&gt;
&lt;p&gt;The nice thing about it is, that it plays together with the entity-component system: Simply add an Instancing component to an entity with a model. Then you can choose between 3 ways of how you generate the instances:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;em&gt;EntityTransform&lt;/em&gt;, uses the transformation of other entities with an Instance component. This allows you to add components like physics, audio, etc. to each instance.&lt;/li&gt;
&lt;li&gt;&lt;em&gt;UserArray&lt;/em&gt;, for providing an array of matrices via script&lt;/li&gt;
&lt;li&gt;&lt;em&gt;UserBuffer&lt;/em&gt;, for providing a structured buffer (GPU resource) of matrices via script&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt=&quot;Instancing Types&quot; src=&quot;https://www.stride3d.net/images/blog/2021-02-01-release-stride-4-0/instancing-types.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-02-01-release-stride-4-0/instancing-types.png&quot; /&gt;
&lt;p&gt;&lt;em&gt;UserArray&lt;/em&gt; and &lt;em&gt;UserBuffer&lt;/em&gt; even allow you to specify how the matrix is multiplied with the parent transformation.&lt;/p&gt;
&lt;p&gt;It even works with skinning:&lt;/p&gt;
&lt;img alt=&quot;Instancing Skinning&quot; src=&quot;https://www.stride3d.net/images/blog/2021-02-01-release-stride-4-0/instancing-skinning.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-02-01-release-stride-4-0/instancing-skinning.jpg&quot; /&gt;
&lt;p&gt;Picking individual instances in Game Studio works as well and selects the entity with the respective Instance component.&lt;/p&gt;
&lt;p&gt;There are also two new entity templates for easy setup:&lt;/p&gt;
&lt;img alt=&quot;Instancing Templates&quot; src=&quot;https://www.stride3d.net/images/blog/2021-02-01-release-stride-4-0/instancing-templates.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-02-01-release-stride-4-0/instancing-templates.png&quot; /&gt;
&lt;p&gt;An example project that shows the new features can be found here: &lt;a href=&quot;https://github.com/tebjan/StrideTransformationInstancing&quot;&gt;StrideTransformationInstancing&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;graphics-api%3A-different-selection-mechanism-%2B-vulkan-improvements&quot; tabindex=&quot;-1&quot;&gt;Graphics API: Different Selection Mechanism + Vulkan Improvements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#graphics-api%3A-different-selection-mechanism-%2B-vulkan-improvements&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There&#39;s been a big overhaul on Stride build system to make Graphics API selection work in a more future-proof way.&lt;/p&gt;
&lt;p&gt;It was previously relying on the custom &lt;code&gt;RuntimeIdentifier&lt;/code&gt; being set in the solution. This didn&#39;t work very well because it was completely orthogonal to the existing &lt;code&gt;RuntimeIdentifier&lt;/code&gt;, and sometimes not having good fallbacks.&lt;/p&gt;
&lt;p&gt;From now on, the user project will use &lt;code&gt;StrideGraphicsApi&lt;/code&gt; in the &lt;code&gt;.csproj&lt;/code&gt; project file to specify the graphics API. We hope to expose this in the editor later.&lt;/p&gt;
&lt;p&gt;We also took the opportunity to improve the state of Vulkan renderer (thanks to a switch to &lt;a href=&quot;https://github.com/amerkoleci/Vortice.Vulkan&quot;&gt;Vortice.Vulkan bindings&lt;/a&gt; from &lt;a href=&quot;https://github.com/amerkoleci&quot;&gt;Amer Koleci&lt;/a&gt;) and automatize graphics unit tests, currently running for D3D11 and Vulkan.&lt;/p&gt;
&lt;p&gt;It&#39;s still a work in progress so expect more in future releases.&lt;/p&gt;
&lt;h2 id=&quot;documentation-%26-tutorials&quot; tabindex=&quot;-1&quot;&gt;Documentation &amp;amp; Tutorials &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#documentation-%26-tutorials&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The first 10 C# beginner tutorials are recorded and uploaded to the official Stride Youtube channel. You check out &lt;a href=&quot;https://www.youtube.com/playlist?list=PLRZx2y7uC8mNySUMfOQf-TLNVnnHkLfPi&quot;&gt;the playlist here&lt;/a&gt;.&lt;/p&gt;
&lt;img alt=&quot;Youtube Playlist&quot; src=&quot;https://www.stride3d.net/images/blog/2021-02-01-release-stride-4-0/doc-playlist.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-02-01-release-stride-4-0/doc-playlist.jpg&quot; /&gt;
&lt;p&gt;These videos are the video equivalent of the existing &lt;a href=&quot;https://doc.stride3d.net/latest/en/tutorials/csharpbeginner/index.html&quot;&gt;online documentation&lt;/a&gt; for the C# beginner template tutorials and the &#39;new project&#39; template when creating a new project from the Stride launcher.&lt;/p&gt;
&lt;p&gt;The C# beginner series should be fully recorded by the end of July 2020.&lt;br /&gt;
After those videos are done, Jorn will put his focus on the C# Intermediate project template. Here a is work in progress screenshot on the raycasting tutorial:&lt;/p&gt;
&lt;img alt=&quot;Raycast tutorial&quot; src=&quot;https://www.stride3d.net/images/blog/2021-02-01-release-stride-4-0/doc-raycast-tutorial.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2021-02-01-release-stride-4-0/doc-raycast-tutorial.jpg&quot; /&gt;
&lt;h2 id=&quot;new-developers-are-welcome!&quot; tabindex=&quot;-1&quot;&gt;New Developers are Welcome! &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-stride-4-0/#new-developers-are-welcome!&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Stride GitHub repository has more closed pull requests than open issues. This is a good sign! But in order to move faster and adapt to new technologies, we would be very happy to see more new talents in our friendly and professional developer community.&lt;/p&gt;
&lt;p&gt;There are several good reasons to join us:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Writing engine code in C# is fun and quite productive&lt;/li&gt;
&lt;li&gt;Stride users will work with what you create&lt;/li&gt;
&lt;li&gt;We are happy to help, should you get stuck&lt;/li&gt;
&lt;li&gt;You can learn a lot, the Stride code base is very professional and has high-quality standards&lt;/li&gt;
&lt;li&gt;An open-source contribution is a great addition to your portfolio&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;No matter whether you (or someone you know) can contribute documentation updates, UI improvements, bug fixes, or new rendering technologies, we welcome everyone!&lt;/p&gt;
</description>
      <pubDate>Mon, 01 Feb 2021 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/release-stride-4-0/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/release-stride-4-0/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>VL.Stride Released by vvvv</title>
      <description>&lt;p&gt;We&#39;re excited to announce that vvvv has released a new 3D engine for vvvv, our visual live-programming environment for .NET. Named &amp;quot;VL.Stride,&amp;quot; it is essentially a wrapper around the Stride engine and can be used independently from the Stride Game Studio.&lt;/p&gt;
&lt;p&gt;Read more about the release and its details in this &lt;a href=&quot;https://vvvv.org/blog/vl.stride-for-evvvveryone&quot;&gt;release blog post&lt;/a&gt;.&lt;/p&gt;
&lt;img alt=&quot;VL.Stride&quot; src=&quot;https://www.stride3d.net/images/blog/2020-10-02-vl.stride-announce/vl.stride.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2020-10-02-vl.stride-announce/vl.stride.png&quot; /&gt;
&lt;p&gt;Note that vvvv&#39;s focus is not on creating games but rather on creative coding and interaction design style of applications. But due to its live-programming nature, using a state hot-reload approach, it may still be interesting for you to quickly prototype some functionality for your games. Also vvvv can help you explore all the different parts of the Stride engine and understand how they work together. Being able to touch all parts while they are running, allows to get an overview faster than just going through Stride&#39;s documentation.&lt;/p&gt;
&lt;p&gt;We&#39;d like to invite you to play with it and hear your feedback. vvvv is free for non-commercial use, no strings attached. So please just go ahead, &lt;a href=&quot;http://visualprogramming.net/&quot;&gt;download vvvv gamma 2020.3-preview&lt;/a&gt; and let us know what you think!&lt;/p&gt;
&lt;h2 id=&quot;node20&quot; tabindex=&quot;-1&quot;&gt;NODE20 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/vvvv-releases-VL.Stride/#node20&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;If you&#39;re already convinced and want to learn more about vvvv, join us for &lt;a href=&quot;https://20.nodeforum.org/program/workshops/&quot;&gt;30 online workshops&lt;/a&gt; covering various topics, we&#39;re running during the &lt;a href=&quot;https://20.nodeforum.org/&quot;&gt;NODE20 - Forum for Digital Arts&lt;/a&gt; from October 3rd to 8th.&lt;/p&gt;
&lt;p&gt;To give you an idea, the following workshops will be using VL.Stride:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://20.nodeforum.org/program/?lectureId=Jb1dpKqvOVzARBsfv8h&quot;&gt;Introduction to vvvv, VideoFX &amp;amp; Compositing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://20.nodeforum.org/program/?lectureId=fdmYwsGOetD3L7Vs7Iph&quot;&gt;Realtime graphics with Stride 3D – The Fundamentals&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://20.nodeforum.org/program/?lectureId=fzhQkCecOIp6kU6WsLiO&quot;&gt;Patching Materials&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://20.nodeforum.org/program/?lectureId=nO7aO8hdYv14R1PiBPBp&quot;&gt;Beyond Sound and Visual&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://20.nodeforum.org/program/?lectureId=NNA9Lhd4ICiw6VIzlFAr&quot;&gt;VL.Stride Deepdive&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://20.nodeforum.org/program/?lectureId=N02FO8JjRyk1TbJyw819&quot;&gt;A preview to ShaderFX&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://20.nodeforum.org/program/?lectureId=RVC2tTBN3u4EXgGc8x5W&quot;&gt;Working with the Stride GameStudio&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As you can see, with vvvv we&#39;re quite invested in Stride. We bow before everyone who helped to make it what it is today and want to do our best to contribute our share to give it a bright future.&lt;/p&gt;
&lt;p&gt;Yours, vvvv.&lt;/p&gt;
</description>
      <pubDate>Fri, 02 Oct 2020 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/vvvv-releases-VL.Stride/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/vvvv-releases-VL.Stride/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2020-10-02-vl.stride-announce/vl.stride.png" type="image/png" length="0" /></item>
    <item>
      <title>Community Meeting May 2020</title>
      <description>&lt;p&gt;On May the 8th we held another community meeting in the Discord. Its main goal was to talk about the ongoing work on Stride and its first official release after the rename to Stride.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-3/#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-3/#vvvv-and-vl.stride&quot;&gt;VVVV and VL.Stride&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-3/#sponsoring-and-gold-members&quot;&gt;Sponsoring and gold members&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/community-meeting-3/#links&quot;&gt;Links&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;summary&quot; tabindex=&quot;-1&quot;&gt;Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-3/#summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Official Stride 4.0 release. The plan is to release Stride 4.0 officially within the next 2 weeks. It depends a little on whether .Net 3.1 is going to be part of it. If this can be done within reasonable time than we rather incorporate this into the official release of 4.0
&lt;ul&gt;
&lt;li&gt;The release notes will be written in a more friendly way.&lt;/li&gt;
&lt;li&gt;Aggror will look into making a video regarding the release as well as some of the new key features like VXGI cone tracing.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Xen2 has filled in the application for joining the &lt;a href=&quot;https://dotnetfoundation.org/&quot;&gt;.NET Foundation&lt;/a&gt;, a non-profit organization (NPO). At the moment of writing this blog, no response to this yet.&lt;/li&gt;
&lt;li&gt;Roadmap The GitHub &lt;a href=&quot;https://github.com/stride3d/stride/projects/3&quot;&gt;roadmap&lt;/a&gt; will be updated. From now on it will only contain features that Xen2 or others will actively work on. This means some epics will be removed from the roadmap, and some new ones will be added. The epics that are removed will still be visible as requests in Github issues.&lt;/li&gt;
&lt;li&gt;There is now a &lt;code&gt;stride&lt;/code&gt; tag on gamedev.stackexchange (tag might be changed to &lt;code&gt;stride-engine&lt;/code&gt; soon btw). We can use this site for Q&amp;amp;A and additional &amp;quot;How to? questions. &lt;a href=&quot;https://gamedev.stackexchange.com/questions/tagged/stride&quot;&gt;https://gamedev.stackexchange.com/questions/tagged/stride&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentation
&lt;ul&gt;
&lt;li&gt;Recording of &lt;a href=&quot;https://www.youtube.com/playlist?list=PLRZx2y7uC8mNySUMfOQf-TLNVnnHkLfPi&quot;&gt;C# beginner video tutorials&lt;/a&gt; is ongoing. Videos are listed on the official Stride Youtube account. Basically, every page will have an accompanying video. The playlist is being updated on the go.&lt;/li&gt;
&lt;li&gt;Started making the C# intermediate tutorial section.&lt;/li&gt;
&lt;li&gt;Continuation of the editor video tutorials once the programming tutorials are up to speed again.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Some people showed interest in working on a community showcase demo for Stride. A new discord channel #showcasing-team was created.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;vvvv-and-vl.stride&quot; tabindex=&quot;-1&quot;&gt;VVVV and VL.Stride &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-3/#vvvv-and-vl.stride&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;User Tebjan explained some more about VVVV and VL.Stride.&lt;/p&gt;
&lt;p&gt;Here is a short overview of what we at vvvv are doing and will release somewhen this year:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is vvvv gamma?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;vvvv gamma is a live programming environment for .NET&lt;/li&gt;
&lt;li&gt;VL is our visual programming language that works with every .NET assembly&lt;/li&gt;
&lt;li&gt;Development, compilation and state hot-reload at runtime, we believe this is the future of software development&lt;/li&gt;
&lt;li&gt;You can see the data while you develop&lt;/li&gt;
&lt;li&gt;Can export .NET executables&lt;/li&gt;
&lt;li&gt;More info and download at: &lt;a href=&quot;https://visualprogramming.net/&quot;&gt;visualprogramming.net&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;What is VL.Stride?&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Stride will be our 3d rendering library of choice&lt;/li&gt;
&lt;li&gt;We are working on making the Stride features available as convenient nodes in vvvv gamma&lt;/li&gt;
&lt;li&gt;High-Level nodes for: Mainloop, Windowing, Scene Graph, Materials, Models, Textures, etc.&lt;/li&gt;
&lt;li&gt;Low-Level nodes for: Drawing API, Visual Shaders, Vector Math, etc.&lt;/li&gt;
&lt;li&gt;Load a Stride project at runtime and use all content of it&lt;/li&gt;
&lt;li&gt;You can see dev captures at: &lt;a href=&quot;https://vvvv.org/blog/vl-xenko-3d-engine-update-3&quot;&gt;vl-xenko-3d-engine-update-3&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We actively support the Stride open-source community and financially support the Stride development: &lt;a href=&quot;https://vvvv.org/blog/vvvv-meets-xenko&quot;&gt;vvvv-meets-xenko&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;sponsoring-and-gold-members&quot; tabindex=&quot;-1&quot;&gt;Sponsoring and gold members &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-3/#sponsoring-and-gold-members&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We welcome our new gold sponsor David Jeske. We would also like to thank him for contributing the work on VXGI last year. He is using Stride for one of his projects.&lt;/p&gt;
&lt;p&gt;OUTDATED: As off November 2021, we will use &lt;a href=&quot;https://opencollective.com/stride3d&quot;&gt;Open collective&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Also, a friendly reminder, that if you &lt;a href=&quot;https://github.com/sponsors/xen2&quot;&gt;sponsor Stride through Github&lt;/a&gt;, the reward is doubled by Github.&lt;/p&gt;
&lt;p&gt;&lt;s&gt;You can also still sponsor through &lt;a href=&quot;https://www.patreon.com/stride3d&quot;&gt;Patreon&lt;/a&gt;&lt;/s&gt;.&lt;/p&gt;
&lt;h2 id=&quot;links&quot; tabindex=&quot;-1&quot;&gt;Links &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/community-meeting-3/#links&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;In case you missed them, here are the new links that you should be using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Github: &lt;a href=&quot;https://github.com/stride3d/stride&quot;&gt;https://github.com/stride3d/stride&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Website: &lt;a href=&quot;https://stride3d.net/&quot;&gt;https://stride3d.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/&quot;&gt;https://doc.stride3d.net/latest/en/manual/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Twitter: &lt;a href=&quot;https://twitter.com/stridedotnet&quot;&gt;https://twitter.com/stridedotnet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Youtube: &lt;a href=&quot;https://www.youtube.com/@Stride3D&quot;&gt;https://www.youtube.com/@Stride3D&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you have any further questions, feel free to reach out on Discord or the forum.&lt;/p&gt;
</description>
      <pubDate>Fri, 08 May 2020 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/community-meeting-3/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/community-meeting-3/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko Has Been Renamed to Stride</title>
      <description>&lt;p&gt;The Xenko game engine has been renamed to Stride. From now on, all source code, blogs and tutorials will use the name &#39;Stride&#39; instead of &#39;Xenko&#39;.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/#why-the-name-change%3F&quot;&gt;Why the name change?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/#new-stride-logo&quot;&gt;New Stride Logo&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/#what-does-this-mean-for-you%3F&quot;&gt;What does this mean for you?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/#what&#39;s-next%3F&quot;&gt;What&#39;s next?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/#final-notes&quot;&gt;Final Notes&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;why-the-name-change%3F&quot; tabindex=&quot;-1&quot;&gt;Why the name change? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/#why-the-name-change%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Changing product names always is a lot of work and comes with some downsides. However, we would not do this if there weren&#39;t any good reasons for us to do so. Since 2019, &lt;a href=&quot;https://github.com/xen2&quot;&gt;xen2&lt;/a&gt;, has been trying to affiliate Xenko with the &lt;a href=&quot;https://dotnetfoundation.org/&quot;&gt;.NET Foundation&lt;/a&gt;, a non-profit organization (NPO).&lt;/p&gt;
&lt;p&gt;There are various reasons for this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We wanted to let the community know that Xenko is completely and 100% free and open in its development. This also means that any donations should always be made 100% visible to the public. This also includes what and where the donation money is spent on. Joining the .NET Foundation would aid in visualizing how this money would be spent.&lt;/li&gt;
&lt;li&gt;Being able to tell possible investors/backers/companies that Xenko/Stride can be trusted. This can help with publicity and more funding.&lt;/li&gt;
&lt;li&gt;They also provide help for opensource projects in various areas.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This sounded great, but unfortunately, there was a massive drawback to this: as long as the project kept the name &#39;Xenko&#39; (trademarked by Silicon Studio), it would be difficult to transfer to the .NET Foundation. After a lot of back and forth between Silicon Studio legal department, xen2 and the .NET Foundation, we didn&#39;t get any step closer to achieving our goals.&lt;/p&gt;
&lt;p&gt;After several months without progress, we started to suggest the idea of a rename to the community. In the Discord server, we opened up the name change and logo suggestions to see how people would react and what their suggestions would be.&lt;/p&gt;
&lt;p&gt;About 6 months later, several polls, logo proposal and a lot of brainstorming, we settled for the name: Stride.&lt;/p&gt;
&lt;h2 id=&quot;new-stride-logo&quot; tabindex=&quot;-1&quot;&gt;New Stride Logo &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/#new-stride-logo&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The new Stride logo, designed by &lt;a href=&quot;https://github.com/sebllll&quot;&gt;sebl&lt;/a&gt; (from &lt;a href=&quot;https://schnellebuntebilder.de/&quot;&gt;schnellebuntebilder&lt;/a&gt;), was chosen after a process managed by &lt;a href=&quot;https://github.com/Eideren&quot;&gt;Eideren&lt;/a&gt; consisting of several community votes. Also, &lt;a href=&quot;https://twitter.com/tebjan?lang=en&quot;&gt;tebjan&lt;/a&gt; is the one that came up with the name Stride. Many thanks to them, as well as to all the other people involved!&lt;/p&gt;
&lt;p&gt;Without further ado, here it is:&lt;/p&gt;
&lt;img alt=&quot;Stride Logo&quot; src=&quot;https://www.stride3d.net/images/blog/2020-04-20-xenko-has-been-renamed-to-stride/stride-logo.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2020-04-20-xenko-has-been-renamed-to-stride/stride-logo.png&quot; /&gt;
&lt;p&gt;Game Studio will use a red variant:&lt;/p&gt;
&lt;img alt=&quot;GameStudio Logo&quot; src=&quot;https://www.stride3d.net/images/blog/2020-04-20-xenko-has-been-renamed-to-stride/gamestudio-logo.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2020-04-20-xenko-has-been-renamed-to-stride/gamestudio-logo.png&quot; /&gt;
&lt;h2 id=&quot;what-does-this-mean-for-you%3F&quot; tabindex=&quot;-1&quot;&gt;What does this mean for you? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/#what-does-this-mean-for-you%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The Xenko launcher will ask to install Stride launcher.&lt;/li&gt;
&lt;li&gt;Stride will be available starting from version 4.0 (available shortly). This rename also applies to all websites, social media and documentation. It is possible that the name Xenko or its logo might still be drifting around somewhere in a screenshot here and there, but those will eventually be removed.&lt;/li&gt;
&lt;li&gt;Stride 4.0 can opens Xenko 3.1 projects and convert them automatically. Please don&#39;t forget to properly backup your projects, and report any issues you have during the automatic upgrade process.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what&#39;s-next%3F&quot; tabindex=&quot;-1&quot;&gt;What&#39;s next? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/#what&#39;s-next%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Release Stride 4.0 within the next few days&lt;/li&gt;
&lt;li&gt;A new application to join the .NET Foundation&lt;/li&gt;
&lt;li&gt;A new effort to find new backers&lt;/li&gt;
&lt;li&gt;The new &lt;a href=&quot;https://www.youtube.com/c/Stride3d&quot;&gt;Youtube channel&lt;/a&gt; will be the new hub for video tutorials. We will start with recording videos for the C# beginner section. After that, we will look at new editor video tutorials and extend the C# tutorials.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Here are the new links that you should be using:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Github: &lt;a href=&quot;https://github.com/stride3d/stride&quot;&gt;https://github.com/stride3d/stride&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Website: &lt;a href=&quot;https://stride3d.net/&quot;&gt;https://stride3d.net/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Documentation: &lt;a href=&quot;https://doc.stride3d.net/latest/en/manual/&quot;&gt;https://doc.stride3d.net/latest/en/manual/&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Twitter: &lt;a href=&quot;https://twitter.com/stridedotnet&quot;&gt;https://twitter.com/stridedotnet&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Youtube: &lt;a href=&quot;https://www.youtube.com/@Stride3D&quot;&gt;https://www.youtube.com/@Stride3D&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;final-notes&quot; tabindex=&quot;-1&quot;&gt;Final Notes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/#final-notes&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We would like to thank each and everyone involved in the long process of picking a new name, a new logo and other related media/art. A huge shoutout to xen2 for doing the renaming process.&lt;/p&gt;
</description>
      <pubDate>Mon, 20 Apr 2020 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/xenko-has-been-renamed-to-stride/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Recap January 2020</title>
      <description>&lt;p&gt;Stride is changing its logo due to similarity concerns with substance/adobe&#39;s logo. The community is invited to submit new designs for the Stride logo. Meanwhile, the 3.2 release is approaching, and the engine&#39;s rename to Stride will follow. Check out the community projects BanditRevolver and AggrorJorn for inspiration.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/january-2020-recap/#a-new-logo-for-stride&quot;&gt;A New Logo for Stride&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/january-2020-recap/#3.2-release&quot;&gt;3.2 Release&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/january-2020-recap/#community-picks&quot;&gt;Community Picks&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/january-2020-recap/#project-draco-from-banditrevolver&quot;&gt;Project Draco from BanditRevolver&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/january-2020-recap/#rollerghoaster-from-aggrorjorn&quot;&gt;Rollerghoaster from AggrorJorn&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;a-new-logo-for-stride&quot; tabindex=&quot;-1&quot;&gt;A New Logo for Stride &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/january-2020-recap/#a-new-logo-for-stride&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We decided to contact substance/adobe at the start of January after seeing that many people felt that the most voted community logo for Stride was too close to theirs. We received a reply from their legal team which, of course, told us that we would need to change it. It&#39;s the legal team, playing it safe is part of their job. They also told us that we could get in touch with their design team, we took that opportunity and sent multiple emails but they never got back to us.&lt;/p&gt;
&lt;p&gt;Proposals are open again so if you think you have a logo that would fit with our new name (Stride), please fill in the picture attached below with your design. There’s also the Figma project 6 if you would rather work on that. For more information see the &lt;a href=&quot;https://forums.stride3d.net/t/about-the-new-logo/2075&quot;&gt;forum post&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;3.2-release&quot; tabindex=&quot;-1&quot;&gt;3.2 Release &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/january-2020-recap/#3.2-release&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We are getting close to the 3.2 release. We hope to share some info on that soon. In the mean time we are also getting ready for the rename to Stride. This will happen after the 3.2 release.&lt;/p&gt;
&lt;h2 id=&quot;community-picks&quot; tabindex=&quot;-1&quot;&gt;Community Picks &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/january-2020-recap/#community-picks&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Check out these community projects that people are working on: BanditRevolver and AggrorJorn.&lt;/p&gt;
&lt;h3 id=&quot;project-draco-from-banditrevolver&quot; tabindex=&quot;-1&quot;&gt;Project Draco from BanditRevolver &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/january-2020-recap/#project-draco-from-banditrevolver&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/2020-02-03-january-2020/project-draco.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/2020-02-03-january-2020/project-draco.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;img alt=&quot;Project draco&quot; src=&quot;https://www.stride3d.net/images/blog/2020-02-03-january-2020/project-draco.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2020-02-03-january-2020/project-draco.jpg&quot; /&gt;
&lt;h3 id=&quot;rollerghoaster-from-aggrorjorn&quot; tabindex=&quot;-1&quot;&gt;Rollerghoaster from AggrorJorn &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/january-2020-recap/#rollerghoaster-from-aggrorjorn&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;!-- Broken Link? [Download](https://aggror.com/blog/video-rollerghoaster-0.0.2-demo)--&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/46POw2euUKY&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
      <pubDate>Mon, 03 Feb 2020 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/january-2020-recap/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/january-2020-recap/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2020-02-03-january-2020/thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Recap December 2019</title>
      <description>&lt;p&gt;Happy new year everybody. In this blog we do a quick recap of the final developments of Xenko in 2019 and what the community has been up to.&lt;/p&gt;
&lt;h2 id=&quot;what-is-being-worked-on%3F&quot; tabindex=&quot;-1&quot;&gt;What is being worked on? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/december-2019/#what-is-being-worked-on%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The latest new features are being finished for the release of 3.2. This version should be released near the end of January.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;community-meeting-3&quot; tabindex=&quot;-1&quot;&gt;Community Meeting 3 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/december-2019/#community-meeting-3&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On December 18th we held another community meeting. Check &lt;a href=&quot;https://stride3d.net/blog/community-meeting-3/&quot;&gt;here&lt;/a&gt; for the summary. The most important thing here is that we are getting ready for the rename.&lt;/p&gt;
&lt;h2 id=&quot;stride-logo&quot; tabindex=&quot;-1&quot;&gt;Stride Logo &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/december-2019/#stride-logo&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;With &#39;Stride&#39; being the new name for Xenko in the near future, the #logo-change Discord channel has been seeing a lot of suggestions and even a voting on some of the ideas from the community.&lt;/p&gt;
&lt;h2 id=&quot;community-picks&quot; tabindex=&quot;-1&quot;&gt;Community Picks &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/december-2019/#community-picks&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Check out these awesome projects that community members have been working on:&lt;/p&gt;
&lt;h3 id=&quot;testing-xenko-by-mentalarray&quot; tabindex=&quot;-1&quot;&gt;Testing Xenko by MentalArray &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/december-2019/#testing-xenko-by-mentalarray&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Testing the Xenko game engine took only a week to do this that included learning the scripting system and all model building and texturing was really trying to figure out animations and happy with result&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/lz_sJgYqqDM&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h3 id=&quot;fog-of-war-from-jarmo&quot; tabindex=&quot;-1&quot;&gt;Fog of war from Jarmo &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/december-2019/#fog-of-war-from-jarmo&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This is a fog of war system written for Xenko.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/devjarmo/XenkoFogOfWarPlus&quot;&gt;Github project&lt;/a&gt;&lt;/p&gt;
&lt;img alt=&quot;Fog of war&quot; src=&quot;https://www.stride3d.net/images/blog/2019-12-31-december-2019/fogofwar.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2019-12-31-december-2019/fogofwar.webp&quot; /&gt;</description>
      <pubDate>Tue, 31 Dec 2019 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/december-2019/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/december-2019/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2019-12-31-december-2019/thumb.webp" type="image/webp" length="0" /></item>
    <item>
      <title>Community Meeting December 2019</title>
      <description>&lt;p&gt;On December the 18th we held a community meeting in the Discord. Its main goal was to talk about the logo, roadmap and ongoing work on Stride.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Final Stride logo deadline: 22 december 2019&lt;/li&gt;
&lt;li&gt;With the current amount of developers and resources, larger features like features are simply not possible. Features like cross-platform support, Visual studio Code, rebuilding the editor for Linux, Terrain and vegetation.
&lt;ul&gt;
&lt;li&gt;If you have any programming skills and want to help out, have a look at the &lt;a href=&quot;https://github.com/xenko3d/xenko/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement&quot;&gt;issues&lt;/a&gt; on github.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Roadmap 3.2 - Estimated by end of January 2020
&lt;ul&gt;
&lt;li&gt;New feature: &lt;a href=&quot;https://github.com/xenko3d/xenko/pull/564&quot;&gt;Url Reference&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;New feature: &lt;a href=&quot;https://github.com/xenko3d/xenko/pull/561&quot;&gt;HeightField property&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;(optional) &lt;a href=&quot;https://github.com/xenko3d/xenko/pull/517&quot;&gt;Debug Drawing&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;(optional) &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/37&quot;&gt;LOD script&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Roadmap 4.0
&lt;ul&gt;
&lt;li&gt;This version will cover the rename of Xenko to Stride.&lt;/li&gt;
&lt;li&gt;Activating the first social media accounts.&lt;/li&gt;
&lt;li&gt;Joining the .NET foundation to become an NPO.&lt;/li&gt;
&lt;li&gt;Git/Patreon donations will have to be evaluated depending on NPO requirements.&lt;/li&gt;
&lt;li&gt;Contacting Microsoft/Partners for support/sponsorship.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Wed, 18 Dec 2019 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/community-meeting-december-2019/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/community-meeting-december-2019/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko 3.1 Released</title>
      <description>&lt;p&gt;It took some time to stabilize everything with the new Xenko packages, but we now feel confident enough to release Xenko 3.1!&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#highlights&quot;&gt;Highlights&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#community&quot;&gt;Community&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#xenko-3.1-loves-nuget!&quot;&gt;Xenko 3.1 Loves NuGet!&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#package-layout%3A-following-best-nuget-practices&quot;&gt;Package layout: following best NuGet practices&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#xenko-assets-are-also-distributed-as-part-of-package&quot;&gt;Xenko assets are also distributed as part of package&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#xenko-packages-are-now-distributed-on-nuget.org&quot;&gt;Xenko Packages are now distributed on &lt;a href=&quot;http://nuget.org/&quot;&gt;nuget.org&lt;/a&gt;&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#xenko-tooling-resolves-assemblies-dynamically-using-nuget-api&quot;&gt;Xenko tooling resolves assemblies dynamically using NuGet API&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#future%3A-plugin-support-for-editor&quot;&gt;Future: plugin support for editor&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#full-switch-to-.net-standard&quot;&gt;Full switch to .NET Standard&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#tutorials&quot;&gt;Tutorials&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#bulletsharp-update&quot;&gt;BulletSharp update&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#changelog&quot;&gt;Changelog&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#highlights&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;One of the major change is turning the engine into &lt;strong&gt;modular NuGet packages&lt;/strong&gt;, published on &lt;a href=&quot;https://www.nuget.org/profiles/xenko.com&quot;&gt;NuGet.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Please note that Visual Studio 2017 is not supported anymore, please upgrade to 2019.&lt;/p&gt;
&lt;h2 id=&quot;community&quot; tabindex=&quot;-1&quot;&gt;Community &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#community&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Many thanks to the community and all the contributors who made this release possible: &lt;a href=&quot;https://github.com/aggror&quot;&gt;aggror&lt;/a&gt;, &lt;a href=&quot;https://github.com/Eideren&quot;&gt;Eideren&lt;/a&gt;, &lt;a href=&quot;https://github.com/alexb910&quot;&gt;alexb910&lt;/a&gt;, &lt;a href=&quot;https://github.com/comradekingu&quot;&gt;comradekingu&lt;/a&gt;, &lt;a href=&quot;https://github.com/flabbie&quot;&gt;flabbie&lt;/a&gt;, &lt;a href=&quot;https://github.com/CharlesWoodhill&quot;&gt;CharlesWoodhill&lt;/a&gt;, &lt;a href=&quot;https://github.com/Artaki&quot;&gt;Artaki&lt;/a&gt;, &lt;a href=&quot;https://github.com/indigozero&quot;&gt;indigozero&lt;/a&gt;, &lt;a href=&quot;https://github.com/dfkeenan&quot;&gt;dfkeenan&lt;/a&gt;, &lt;a href=&quot;https://github.com/dominikjancik&quot;&gt;dominikjancik&lt;/a&gt;, &lt;a href=&quot;https://github.com/erictuvesson&quot;&gt;erictuvesson&lt;/a&gt;, &lt;a href=&quot;https://github.com/Hyperpred&quot;&gt;Hyperpred&lt;/a&gt;, &lt;a href=&quot;https://github.com/louies0623&quot;&gt;louies0623&lt;/a&gt;, &lt;a href=&quot;https://github.com/Lucifer2031&quot;&gt;Lucifer2031&lt;/a&gt;, &lt;a href=&quot;https://github.com/Ethereal77&quot;&gt;Ethereal77&lt;/a&gt;, &lt;a href=&quot;https://github.com/mostafa901&quot;&gt;mostafa901&lt;/a&gt;, &lt;a href=&quot;https://github.com/Kryptos-FR&quot;&gt;Kryptos-FR&lt;/a&gt;, &lt;a href=&quot;https://github.com/shinkitsunemaru&quot;&gt;shinkitsunemaru&lt;/a&gt;, &lt;a href=&quot;https://github.com/phr00t&quot;&gt;phr00t&lt;/a&gt;, &lt;a href=&quot;https://github.com/Polymo&quot;&gt;Polymo&lt;/a&gt;, &lt;a href=&quot;https://github.com/profan&quot;&gt;profan&lt;/a&gt;, &lt;a href=&quot;https://github.com/xendez&quot;&gt;xendez&lt;/a&gt;, &lt;a href=&quot;https://github.com/Scorp-121&quot;&gt;Scorp-121&lt;/a&gt;, &lt;a href=&quot;https://github.com/SleepyMode&quot;&gt;SleepyMode&lt;/a&gt;, &lt;a href=&quot;https://github.com/tebjan&quot;&gt;tebjan&lt;/a&gt;, &lt;a href=&quot;https://github.com/xen2&quot;&gt;xen2&lt;/a&gt;, &lt;a href=&quot;https://github.com/WhyPenguins&quot;&gt;WhyPenguins&lt;/a&gt;, &lt;a href=&quot;https://github.com/OoElectron&quot;&gt;OoElectron&lt;/a&gt;, &lt;a href=&quot;https://github.com/joreg&quot;&gt;joreg&lt;/a&gt;, &lt;a href=&quot;https://github.com/meriaizen86&quot;&gt;meriaizen86&lt;/a&gt;, &lt;a href=&quot;https://github.com/rgawry&quot;&gt;rgawry&lt;/a&gt;, &lt;a href=&quot;https://github.com/SantosSi&quot;&gt;SantosSi&lt;/a&gt;, &lt;a href=&quot;https://github.com/xwellingtonx&quot;&gt;xwellingtonx&lt;/a&gt;, &lt;a href=&quot;https://github.com/SilentCLD&quot;&gt;SilentCLD&lt;/a&gt;, &lt;a href=&quot;https://github.com/HoSeCoin&quot;&gt;HoSeCoin&lt;/a&gt;, Swann Martinet, WaldiS and pansan.&lt;/p&gt;
&lt;h2 id=&quot;xenko-3.1-loves-nuget!&quot; tabindex=&quot;-1&quot;&gt;Xenko 3.1 Loves NuGet! &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#xenko-3.1-loves-nuget!&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Xenko was always a big proponent of NuGet: since first version, Xenko was distributed as a NuGet package.&lt;/p&gt;
&lt;p&gt;However, due to limitations (hello packages.config and project.json!), we were leveraging NuGet more as a distribution medium than proper NuGet packages: Xenko 3.0 is still a monolithic single package and it would not work out of the box when referenced from Visual Studio without using Xenko Launcher and Game Studio.&lt;/p&gt;
&lt;p&gt;Xenko 3.0 paved the way by making Xenko compatible with the new project system (game projects were referencing Xenko using a &lt;code&gt;PackageReference&lt;/code&gt;).&lt;/p&gt;
&lt;img alt=&quot;GitHub&quot; src=&quot;https://www.stride3d.net/images/blog/2018-11-13-feature-spotlight-xenko-3-1-and-nuget/xenko-ref-old.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2018-11-13-feature-spotlight-xenko-3-1-and-nuget/xenko-ref-old.png&quot; /&gt;
&lt;p&gt;Today, Xenko 3.1 brings Xenko as a set of smaller NuGet package, each containing one assembly, with proper dependencies:&lt;/p&gt;
&lt;img alt=&quot;GitHub&quot; src=&quot;https://www.stride3d.net/images/blog/2018-11-13-feature-spotlight-xenko-3-1-and-nuget/xenko-ref-new.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2018-11-13-feature-spotlight-xenko-3-1-and-nuget/xenko-ref-new.png&quot; /&gt;
&lt;p&gt;As a result, it is now possible to create a game project that references only the packages you want. Here are a few examples of &amp;quot;core&amp;quot; packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Xenko.Engine&lt;/code&gt;: allows you to use core engine runtime (including its dependencies)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Core.Assets.CompilerApp&lt;/code&gt;: compile assets at build time&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Core.Mathematics&lt;/code&gt; or &lt;code&gt;Xenko.Graphics&lt;/code&gt;: yes, if you want to make a custom project only using Xenko mathematics or graphics API without the full Xenko engine, you can!&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Core.Assets&lt;/code&gt;, &lt;code&gt;Xenko.Presentation&lt;/code&gt; or &lt;code&gt;Xenko.Quantum&lt;/code&gt;: all those piece of tech being used to build Xenko tooling are also available for reuse in other projects. Nothing prevents you from generating assets on the fly too!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, various parts of the engine are distributed as &lt;strong&gt;optional&lt;/strong&gt; packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Xenko.Physics&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Particles&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.UI&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.SpriteStudio&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Video&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you don&#39;t reference those packages, they won&#39;t be packaged with your game either. In many situations, it will result in a smaller packaged game and improved startup time.&lt;/p&gt;
&lt;p&gt;Also, you will be free to replace those functionalities with alternative libraries.&lt;/p&gt;
&lt;h3 id=&quot;package-layout%3A-following-best-nuget-practices&quot; tabindex=&quot;-1&quot;&gt;Package layout: following best NuGet practices &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#package-layout%3A-following-best-nuget-practices&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Previously Xenko references were added to the project using custom targets.&lt;/p&gt;
&lt;p&gt;New packages are now be layout as NuGet/Visual Studio expects them, in folders like &lt;code&gt;lib/net45&lt;/code&gt; and &lt;code&gt;lib/monodroid10&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;We still have a few custom MSBuild targets but reduced them to minimum.&lt;/p&gt;
&lt;h3 id=&quot;xenko-assets-are-also-distributed-as-part-of-package&quot; tabindex=&quot;-1&quot;&gt;Xenko assets are also distributed as part of package &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#xenko-assets-are-also-distributed-as-part-of-package&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;NuGet packages have a &lt;code&gt;xenko&lt;/code&gt; folder containing Xenko assets. As a result, user are able to generate nuget package containing Xenko assets out of the box from Visual Studio and publish them on NuGet for general consumption.&lt;/p&gt;
&lt;h3 id=&quot;xenko-packages-are-now-distributed-on-nuget.org&quot; tabindex=&quot;-1&quot;&gt;Xenko Packages are now distributed on &lt;a href=&quot;http://nuget.org/&quot;&gt;nuget.org&lt;/a&gt; &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#xenko-packages-are-now-distributed-on-nuget.org&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;With all those changes, it makes sense to stop distributing Xenko on our custom nuget server and use &lt;a href=&quot;https://nuget.org/&quot;&gt;nuget.org&lt;/a&gt; instead.&lt;/p&gt;
&lt;p&gt;This will greatly reduce friction to try Xenko (any project would work out of the box in Visual Studio). This might also make our launcher completely optional in the long run.&lt;/p&gt;
&lt;h3 id=&quot;xenko-tooling-resolves-assemblies-dynamically-using-nuget-api&quot; tabindex=&quot;-1&quot;&gt;Xenko tooling resolves assemblies dynamically using NuGet API &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#xenko-tooling-resolves-assemblies-dynamically-using-nuget-api&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tools such as GameStudio or Asset Compiler are distributed as NuGet packages. However, it won&#39;t bundle Xenko Runtime, which will simply be encoded as dependency.&lt;/p&gt;
&lt;p&gt;When running those tools, they are resolving Xenko runtime assemblies directly in the NuGet cache.&lt;/p&gt;
&lt;p&gt;This allows for distributing those tools as very small and easy-to-upgrade packages, avoiding file duplications. This is similar to what &lt;code&gt;dotnet-cli&lt;/code&gt; is doing with deps file.&lt;/p&gt;
&lt;p&gt;This brings lot of technical challenges but should allow us in the future to be more flexible in the future to load the exact runtime and plugins that the user project reference rather than the one hardcoded with the tool.&lt;/p&gt;
&lt;h3 id=&quot;future%3A-plugin-support-for-editor&quot; tabindex=&quot;-1&quot;&gt;Future: plugin support for editor &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#future%3A-plugin-support-for-editor&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Xenko 3.1 editor will still be monolithic: editor support for UI, SpriteStudio, Video and other optional modules will be hardcoded.&lt;/p&gt;
&lt;p&gt;However, the target is to get rid of them as soon as possible, and treat them as what they are: plugins.&lt;/p&gt;
&lt;h2 id=&quot;full-switch-to-.net-standard&quot; tabindex=&quot;-1&quot;&gt;Full switch to .NET Standard &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#full-switch-to-.net-standard&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Xenko supports .NET Standard for most of its runtime assemblies.&lt;/p&gt;
&lt;p&gt;Xenko games can run on .NET Core for both Windows and Linux.&lt;/p&gt;
&lt;h2 id=&quot;tutorials&quot; tabindex=&quot;-1&quot;&gt;Tutorials &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#tutorials&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Xenko now has a &lt;a href=&quot;https://doc.xenko.com/3.1/en/tutorials/index.html&quot;&gt;tutorial section&lt;/a&gt; in the documentation!&lt;/p&gt;
&lt;p&gt;The first project &lt;a href=&quot;https://doc.xenko.com/3.1/en/tutorials/csharpbeginner/index.html&quot;&gt;“C# Beginner”&lt;/a&gt;, demonstrates 12 beginner programming concepts.&lt;/p&gt;
&lt;p&gt;Users will be able to select the tutorial template when creating a new Xenko project to practice and experiment with the code.&lt;/p&gt;
&lt;p&gt;Additionally, the code used in the project is directly referenced by the new documentation section which explains each individual tutorial level.&lt;/p&gt;
&lt;p&gt;The amount of tutorials, as well as intermediate and advanced tutorials, will be extended/added from now on.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/zGFYFhBfxVs&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h2 id=&quot;bulletsharp-update&quot; tabindex=&quot;-1&quot;&gt;BulletSharp update &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#bulletsharp-update&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/eideren&quot;&gt;Eideren&lt;/a&gt; worked on updating our old custom modified version of &lt;a href=&quot;https://github.com/Eideren/BulletSharpPInvoke&quot;&gt;BulletSharp&lt;/a&gt; (the wrapper library we use for our physics engine).&lt;/p&gt;
&lt;p&gt;Things should be much easier to maintain from now on.&lt;/p&gt;
&lt;h2 id=&quot;changelog&quot; tabindex=&quot;-1&quot;&gt;Changelog &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0/#changelog&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This release also contains numerous improvements, bugfixes and new translations.&lt;/p&gt;
&lt;p&gt;Here is the full changelog in all its glory:&lt;/p&gt;
&lt;p&gt;Alex (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed spelling error in Quaternion.cs &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/805453edde1b0bd36fd305086c12d9d064c7eff5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Allan Nordhøy (9):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added translation using Weblate (Norwegian Bokmål) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/bbe53b4a28619dccb9aee04fd5d16631a2ae3ed7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Norwegian Bokmål) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/21144b14ebe24034e669796d0bc6d46d37b20a88&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Norwegian Bokmål) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c2086a20092fa574010a1adfbf01d1a8526a0a14&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Norwegian Bokmål) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/668b190a51dca3918cebc3faad77fbe667a34ff5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Norwegian Bokmål) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2e57bbcf88dd4f29de49c22657b0ab65257ea6d6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Norwegian Bokmål) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/92942e739c064c7197783620b609cdcdb03dd944&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Norwegian Bokmål) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/cc404c5d82bb70b70e21ecce74698e9a389c6d98&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Norwegian Bokmål) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b1931aac98bd53458ddcd349ee1df79418986c5e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Norwegian Bokmål) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a4f10055e7d016967290e5aa6fddca5077065053&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Andrea Aruta (6):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added translation using Weblate (Italian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/77614db7005a057dcd73dc9edeb23287f300adde&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Italian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/aa82b474fc82de456d1ddcf5818213560096a01e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Italian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ec10cfccf42b9e40d90460c9f827a786a391ea75&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Italian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2774ef8c8c005c14df4c9c18fc116b8cf4283459&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Italian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ad91bb34aded698f0b4f6ca8ace7f83f6a45421e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Italian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d61883c048e34325d2d101bff28c8b08001b2599&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Charles Woodhill (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[UI/INPUT] Expose mouseOverElement &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/21399ae559fe078a9e8ff38a8bc04cf71e43506b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Christian Georgiev (2):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added translation using Weblate (Macedonian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/290dcbdeebef5bc54142c8169ac6ab114a123bc2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Macedonian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/de63b27794e6df0e5ed6e68d9364473689f381bb&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Cody Lee (4):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added issue templates for bugs and feature requests (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/327&quot;&gt;#327&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/538f915d81dc8f2fefa45d5f5544c3d4140f51a4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Moved pull_request_template.md to correct location &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/28e8c82df7ddde766e7f181cba36533b0bb0e120&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Removed any pluralization of the word question in the question_request.md for consistency &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7cb857462a35ca758120ac5f302f86a954f0d158&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;http://contributing.md/&quot;&gt;CONTRIBUTING.md&lt;/a&gt; and added a &#39;submitting changes&#39; section &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b8b5fcd814a4d0e528bd16f9177d0bcb8f457083&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Daniel Keenan (2):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Change the ObjectToTypeName value converter to give prettier C# names. (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/400&quot;&gt;#400&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/89e92e45368301f11cd884cc3d365ed0caebf014&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] Improve &amp;quot;Add component&amp;quot; button usability. (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/411&quot;&gt;#411&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a569a2056885092736f745838e147dcb4bb685b6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Dominik Jančík (6):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Initial SDL Finger Multitouch support &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/73dc9ae2f6550de4cc642291f562ae3396e9a74c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Removed lastCtrl field &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/45d3dd684fe76d12e9cd8d5b53996e46b8188f2e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;FingerSDL GUID &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/479dc95727817132721da05481982d3e1c08f811&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;FingerSDL PointerID generator &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/238676ddf8199301d5e1f24823885d76f8a1b1a7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Renamed FingerSDL to PointerSDL &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/581f8d9da4ab6687daecf1e163258d3e1da2a5ac&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;SDL Touch&amp;gt;Mouse synth. disabled when PointerSDL is used &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f94602d4b6b6813506fabc01a24c1de5c7d5808e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Eideren (55):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Include nuget to proj &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6d4eb5a1bf6ecf3967596167646039279aa90571&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Straightforward changes &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/adf536642f7f93cca99e218c7b62c7de5e2dd7cf&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Potentially harmful changes &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fde0242bfd0ee0433b7cf384fd28f9ac5c0d66ae&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Minor proj update &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f8137535c08037539c460bb8a03be9e155de020f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Matrix conversion fix &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/222b70252d1428ac116c60458789f9101a391ba4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Main conversion done, next up the rest of the CharacterComponent &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f23ed4670e18c78469352aec926323c18ceb17b4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Character component, waiting on bullet wrapper for the rest &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/09648564fa4edb98b64ea8d2326ab69f75d91571&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Static mesh base &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/cbcc27dc7848bdd212a1c31e2f679abf88824c69&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Static Mesh: Update shape factories &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5c11f1f2ac1eb34042a7e767085d2f9c47b42e04&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Core] ThreadPool: shutdown idle threads (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/302&quot;&gt;#302&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/993704f60316615c10f6665e2ace830739fa35b0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] Misc camera controller fixes (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/359&quot;&gt;#359&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8b24b276c18797c7ec00d4835d60a2a4d12d5188&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix for &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/422&quot;&gt;#422&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9705f84b085b33014cc375a8769fa0a822b93e29&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Revert nugget &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6e7f70f34a28d97daa2cde8900feebed57aaa34a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Bullet] Update libs &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/06e22b335819f79a05f716ead2c31f30e79ade30&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Bullet] Update projects mapping &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/45a89aa6ef98a3d16c686f20d9c751a5e147d52a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Bullet] Remove bullet refs within mathematics &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9b22e548b339764d1690c617dc83b73a17bfaf66&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge branch &#39;master&#39; into bulletsharp_nuget &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/392c86d1d76740fc9c901ebd20635e7f16ef491a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Bullet] Rely on our bullet for math conversions &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/635d83914320dc3208a966545c3b5a6fcad769fd&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Bullet] Finish height field mappings &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e975e1fcd11cef5fa3b35b712b0d971195862b01&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Remove unused enum and previous namespace import for inlining &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/751b6fccb95b227b40e1935f4815c01791866cb7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Bullet] Update all platforms to latest libs &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/465a52cdee1581c8fef8ffeb6b400f243e0fa9b3&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Reduced physics test allocations (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/443&quot;&gt;#443&lt;/a&gt;), cleaned up Simulation &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0d19b3c6cc63cc0401f918f1e90a4992ac7b68f1&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Implement ignore collision between two specific components &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8a7126ab05910a0cfad48bfc62d56a20f4f6a8f1&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] In-editor static mesh collider &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3a96ee3f0da9c02e5f1221669745316567122e5e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Avoid duplicate allocations for colliders based on models &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b6c9191a0794e317ce9a0aca3ade73f036645e2e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Fix initial collider scaling &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/83c971ce17f037311f51c667f9764d7418b065a2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Misc] Exception prone basic functions &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e024d327a71369fbcc1151ee145dd9ca18799fd7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Transform] Deal with ChildrenCollection todo &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8b0821cbfe3bff90d9be16500e4556a3934542b3&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge branch &#39;master&#39; into bulletsharp_nuget &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3be3ca71a6fd925a7bfeeeb3ec86cd63bcd5f92a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Use asset cloner for shape desc &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0cc07bd85873cbcef0beb087774b5ee3e8cb9d60&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;origin/master&#39; into bulletsharp_nuget &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/755810da258037454076782eb19911c8e5a4b63c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Replace ColliderShapes&#39; TrackingCollection &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/494b235316e61c2a2b43ea0baed5c69a09bc2743&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Replace Rigidbody&#39;s hacky delegate usage &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/28de8941ebccea0e5c33c96e41dd8e4914a6f2e4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Rollback unused serialization workaround &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/79ef2b1bf199f84d73053bbd5fd4de85d92be6e2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Cleanup RigidbodyComponent &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4db7f42f34725e3a4471403ff1fe6bf3dce5ef55&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Clarify comments in StaticMeshColliderShape &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e547ad6b57c7ce58988050a6ef5c394fdd2c2e1e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Fix &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/463&quot;&gt;#463&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0241b1571cfee376429649b2bd03180152a7caf4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Fix very large meshes throwing &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/42f0910775773ca902e2ea393f12dedbe5c3f7af&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Expose Capsule&#39;s readonly data &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a6c8e901b1b7637eadeaed5f82ea07e40f855c71&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Provide read access to collider shape&#39;s data &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0dda0553c3187556a190ac4675806e1c92851886&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Split static mesh collider into new PR &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/05421ae96fb2232e1e94dbc2c4148ea578dc214b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Fix ShapeSweeps output &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c527b174935ebae7eeaf52387d01f7c3f2f6760c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Provide public access to callbacks&#39; recycle and buffer &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ae1f4b4fb5e31cca18741af4d409cbe19f40b998&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Clarify bullet lib&#39;s usage and sources &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a09fa7ee09a6d437c5dee485ddd8336db3e13ea8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Editor] Fix orbit editor camera stutter &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/268a7ed70e93c8433480d68b60e0b638ee913d85&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Editor] Re-order code execution &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0c0ed336b59d558380005b055be85db479f78772&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[SceneManagement] Assign Entity.sceneValue before firing events &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e8f027284e77d33f0e2963156119e32b5f6c09b2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Camera] Fix processor&#39;s cameraSlotsDirty not being reset after process &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5493c91023ed0cce47e73eea745595485b555713&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[SceneManagement] Fix loop skipping items when collection is modified &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/caa44fea8bdbc2cb19f3e9be7161635a4016a644&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Avoid unnecessary alloc &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2612f987c5408e3a845f6ba7186c61f021e58739&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Deal with Add(), sub-optimal implementation &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/50bfc1747870461a05148049ea5462301b75dee7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Threading] ThreadPool refactor, reduce allocation, fix wrong argument &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b6a4833e27e948ad60d131fb7357e574224a87e4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Move PooledDelegateHelper outside lock &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/55371ea340660e34bcfbbd0f6b97f87064fafcee&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Swap task factory &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b7451e4a8867015f70a1bedf142f815f586bb0f2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameSystems] Fix removing systems not clearing it from update and draw &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9b4e65fc505856ef0fe79836ead0c68d259d0633&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Eric Tuvesson (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Assets Compiler Support MSBuild Toolset Version 16.0  (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/421&quot;&gt;#421&lt;/a&gt;) (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/420&quot;&gt;#420&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/60b21cd6d3fe0047b580b54655d186e8e3a42e09&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Félix Dion-Robidoux (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Update &lt;a href=&quot;http://backers.md/&quot;&gt;BACKERS.md&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e32c91fc557fcc0ead3a0aeb04eeb4042a449fa2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Hyperpred (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Remove cast to Game in AudioSystem (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/472&quot;&gt;#472&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0a8d7bad749d2d4b08afe34a4cbea0a5aaf49b5a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Jarrett Robertson (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fixed issue with scene instance using the wrong collection in for loop count &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d30763723936d7c89f8856071ba8a495146b1734&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Louies (10):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added translation using Weblate (Chinese (Traditional)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/14be8bfc7030b7ac427ef50705b0cf2a444136ae&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Chinese (Traditional)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f022a9dc90ef5feabc6c7165bc525be72cf00782&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Chinese (Traditional)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/255b77fb76a1d9e852ebf407792bb037be17f67f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Chinese (Traditional)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3af08fd596bba64308f22bb5e98156fc8607ef45&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Chinese (Traditional)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f34e9d44af47e34b56e4d50047f3e03d65a29aa4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Chinese (Traditional)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2fd9b6a0aa47b4ba943b2c4f359a56dbdc06e7b5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Chinese (Traditional)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/eb1e7343f6cdca9644987faf1e13f937d83d95cf&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Chinese (Traditional)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/443a21b3f38b559dd7cedfe8cdaa44e77ab419b2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Chinese (Traditional)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3c9f7a9605255ce7ede002196f79ceda9551b920&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Chinese (Traditional)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c4e44ac757542aec85363960caa3df7749c2522f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Lucifer (8):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added translation using Weblate (Chinese (Simplified)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/711ee3a82fd382ea0457bb23dfd652dce3bffa23&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Chinese (Simplified)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/bc188d71e3726e834941bff26ec9971d66f3b1e6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Chinese (Simplified)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/da76f54a7d63a3dc6eb767d002e5dfca97627588&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Chinese (Simplified)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a195e1efa884beccc5639b865b3df4be1b76acf7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Chinese (Simplified)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e751244fa78a5e796c8f355cc5e2bcb366eb7f64&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Chinese (Simplified)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f7415607e3b6ba7c037efd29998055d1df2f8c01&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Chinese (Simplified)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6a8045b09d44eba245ed0692738d84069281a764&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Chinese (Simplified)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ac41d0231fdac341edb87b5855bd68c03c888b89&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Mario Guerra (10):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ce95c0fe26e70b4c2f8f589bdef23158a6a45804&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5f23fe46957f043c147497cc9e2b6f219c3e3498&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/56e9efc27f17acb971fcb3ef103900fc1af4bd76&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ba5f6959e4b32c30693ab21ca859a4d67ab4f509&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9c5249c7c73b239024bfa70ec8b832bd6b194c0c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3847b09a47bbae30ac02d4275683eb5a0be5eb2a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/29c5914c4c6c5e8d171782a95a929841beb05885&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/981be7251a5e6f4d2fca4b6a8a3f470709fde000&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/58c8349722a9af4d5520e9dc72614d53ab0b9aeb&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5eb025a71f076b2baab476e4bdddeffd66f5db0c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Moustafa khalil (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Update &lt;a href=&quot;http://readme.md/&quot;&gt;README.md&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/bb504a798f01af82dc3b8205fa4183e1c90e1f2c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Nicolas Musset (10):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[Localization] Update extraction script &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b41748068a2b531254a5a155b4d2cb030f94c22f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Update extracted strings &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2ea6b431611cc2ccb8fcbdc4f8b1a85ae01c404d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Update Japanese &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/96a876107ceee7944a230f1f971858059aaaf633&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Add French &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b3b800cf5a9528e254b02018f2c59855760de240&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Update solution and project &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a35cc79ef82838ce702e000d2cd0f06dde8749f2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Fix build for path containing spaces (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/381&quot;&gt;#381&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7c63ed9989c438f936f3ce018c429e3ec02d3232&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Presentation] Bugfix/int3 editor (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/387&quot;&gt;#387&lt;/a&gt;) (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/383&quot;&gt;#383&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/51451347e309ea39b9bbe8f38ffb5a90baa70f81&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[General] Simplify editor and presentation project files &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/90733ef068b17a90e57de252d87ac35b13c81df1&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[General] Fixup rule for .xaml.cs files &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7b863475ac9a3bb326e3a4cc0f0fc55bff2b168f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update .gitattributes &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c0bad0b4930a1986ea0a6248f933b934b43ba0f9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Oscar Sanchez (9):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ba99df0f648bcc6c4797e6e952e2e3b7fd8b425d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/97cf64ba59189418e6b1f1b4865ad99b9bce279b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/40893b02d4efe19052b4037926983ef49b0214aa&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/27181e881da0804be82a945bbc68f9b98742fa4a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/08cf01d1f6bc9f54f3b123bf1dcff1d093c9f7b6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/af19ac0d49b206a46d7e537538a2986c5dac4412&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/71e4bba482b0ce00aff7fcbda685270162645e76&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/70f01c011af426372ce0ba11d12048a166d4fa41&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8871c1cd1606a91c663e9e35d4381f1ffe3f40ab&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Phr00t (2):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[Graphics] Vulkan: add support for R10G10B10A2_UNorm and R11G11B10_Float &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/11059c059d54e2d201b657cd1ab3d2981aaf7c35&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Input] Fix mouse VirtualButtons &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/27e5a8ad22e95710aa7d0689ea3b85f1188a7098&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Polymo (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Translated using Weblate (German) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5f20b48db9d1a33e8ab04068d5be2de51be367a7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Robin Hübner (2):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[Physics] correct userdoc for convex hull collider parameters. (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/382&quot;&gt;#382&lt;/a&gt;) (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/372&quot;&gt;#372&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f56d4f836098f0c9fd5a39eeebffa2d7ed59a179&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Make SDL window user resizable. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/582915a5b5ade7fcb4ac8b57d0de6f51fd7c978f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Rui Mendes (3):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added translation using Weblate (Portuguese) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a16889306f16c28d56a26a9c61d9ecf5ced71612&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Portuguese (Brazil)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7fa7c670add05f14a9247d4a4930cf465f96a789&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Portuguese) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1b5ad58fb7f2c326b80ccacf71fa4cfe77e9eb9f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scorp-121 (4):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added translation using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f03657e6f32cc449705d647878c72189665e904a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c19fe25619c3b8f595cdfca86433f1564e090a75&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/33b30a5053a9bacc018287aed73d4bc63b4788ef&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/792c5dd20b9352c751a79676898a907c7eb2c0c6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Scorp121 (10):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Translated using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/215f78a6647e8063607de276b365d7a415e655bf&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/601ac16712d758bb4d9488717b112bff5e731165&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9f53f704ce42482a588065b07df628cae50ccbd2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e1906065c2939ef7dcd0db787580bacaefbec1f0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5dbfd2602618ec423e71ccdcb915935b1461c522&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/635d3601e0f8f6d470070e3ea7c46bebd96df3d3&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ef9800de2d4994e379e755cca43773392b262e11&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5b1831e073ac3ae1b4cc469ba0bc32b83fd3c38c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3e847cbd275a5543776e5b83f62f852ece38dbfd&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Russian) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7b267f19b1c665bcbff34a079ec67c15c9aceeab&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;SleepyMode (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[Mathematics] Fixes for Color/ColorRGBA float/byte mismatches (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/258&quot;&gt;#258&lt;/a&gt;) (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/251&quot;&gt;#251&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/81331463843bfaf6975a0e418047a208a23a7fe7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Swann Martinet (2):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Translated using Weblate (French) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/50a59d5f9d1198ac0baa20bc74691b120d87a6e8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (French) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b6770869d8f44be8fac9dd862c7b1c6427998b43&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Tebjan Halm (6):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Quick fix as suggested by @xen2 in chat to avoid crash in shader compiler (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/343&quot;&gt;#343&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d2b09f9259c2991e3aca05122a430ae8e5f0abf5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (German) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5f157d19eb20b94ad179b6cac1b7fa6f97c74a4b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (German) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/20f6a80ac7e503282bfd9297e7c98be9ffed1097&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Resetting shader key scope for multi pass materials (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/456&quot;&gt;#456&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7af2c14ce63e7892d1e87c8b723936a0270eaaa7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;added xenko-community-project to &lt;a href=&quot;http://readme.md/&quot;&gt;README.md&lt;/a&gt; (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/514&quot;&gt;#514&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/89f66473be89e8fd7dccd98ff75002f0309e5ce2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Fix DataBaseFileProvider cast (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/538&quot;&gt;#538&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f678f42443a087cc16d1371a6e8119707abafa0a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Virgile Bello (510):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[Design] VisualStudio.Project doesn&#39;t need a reference to Solution anymore &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a3bbc24653bd5c64146b0cf384672f496db5069a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Package can now also represent a csproj + package (only new game creation is working) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1fd003ca0b7b5953d4a96ceebc50d6094722593d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Removed AssetItem.SourceProject &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ab5281aed164b7438316fdce9f416d1ae093fa0e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Move assets to Assets folder for now &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1653165995c724ad16cf8329bf96ac6e7145b0f7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Fix project loading &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/284cccdd2e351e84ce1000329e1f24162a21b998&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Simplified Package.Profiles into Package.Profile &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9f8f407d4d5796fc3dbf562849ec4f8ea37c1e47&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Removed PackageProfile.ProjectReferences &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/62266f4a62756f5ddaf1fbfba1d6f85b87b3ed6c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Removed &lt;a href=&quot;http://packageprofile.name/&quot;&gt;PackageProfile.Name&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e21932d153708d23c0f8204b9f55734643ce6519&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Allow creation of samples (as long as they don&#39;t use external packages) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c444d02c5ce5a0a8f86147f3e0a74b6bdcb4ea6e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Added the concept of Package container (project or standalone) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/eb15b2caaf37ef0d99c691119fde4345c62f6f81&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Turned Session.Packages into a readonly collection &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b9e915a49cffb02fdf8b70b5be3db3533ebb5074&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Properly process dependency graph using remote info to perform package upgrades before downloading nuget packages &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1d51c472eb7622005881985916c99ab3af0e0a81&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Removed LocalDependencies and fixed TemplateSampleGenerator &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5ec594f7a9b7df1b30d24534abaffef959091bd8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Fix platform update &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0c12372ab203fab5baa22dc78ce88b255b88f4d5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] AssetCompiler now works against .csproj &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7761135c50b7dbe9d864a982c782f8a51e61e242&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Fixed asset compiler get-graphics-platform &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/afae09c147b784785b0abfafa5b01a5d2e5ddba5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Fix view models to allow selection as current project &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0e1ad23e3216247a4d9a0b82c54a360d5786f984&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Properly regenerate platforms for sample templates &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ab92536a9daaf98c8327b1ec42ac91286501bea8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Ignore assets from executable projects (computed automatically) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/64c251e6435eacc476bdb79f744877386ec9ed72&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Templates] Moved template packs assets from Assets/Shared to Assets &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/02488c49f1c948124182322397ce21c1d3c51b27&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] NewGameTemplateGenerator: assets were loaded twice, resulting in issues later with cloned AssetItem (fix asset packs) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/857b8b2e63d0385125927f68dac86eee355485a2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Templates] Simplify platform projects &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c59381347512a9e5327b54e4051ede30a050f72d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Templates] Moved templates packges asset folders from Assets/Shared to Assets and removed intermediate solution folders &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f11fb59e891963c3b154b5a6d1baecc6eb404c47&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Adjust PackageProfile.ResourceFolders during package upgrade &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/42306db7b35351fea49a851a60c4aaabe155dca8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Templates] Sample Templates now works (asset packs are now ProjectReference and their assets are properly copied during template generation) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/24bb053badc62769af951f55246354c1c9768aab&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Properly get namespace from project &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fe22dec3f7176a15ed19c236aee3964e942d35c7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Fix CodeViewModel to use ProjectCodeViewModel &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b894a176aedd55b14afe3b1e5d5f0a0ec8a03e68&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Fix platform updates &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/598f4656f7ca7bf16204b17039f61c95c38db0e8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Rearranged templates for the new xkpkg = csproj change (note: project delete is broken) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/bf975595c09efc63fc0d9514c502cc510a7811ef&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Package.Profile is now properly deserialized by discarding default value &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8f017b48e11b36766c54c25c189caebc00acc7bc&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Removed PackageProfile.Platform &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/68702d5b39b2fc2e94f7a1aa40a00e391b09b465&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Make sure &lt;a href=&quot;http://package.id/&quot;&gt;Package.Id&lt;/a&gt; stays is in sync with .sln one &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0b5ba025c753847d31180f8d1e9307c3a9fcbca0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Removed &lt;a href=&quot;http://package.id/&quot;&gt;Package.Id&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e59316a8d203f8dc97dced255ea631ec99a2cbd5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Removed PackageProfile &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/17d9b2688bb6dc0edbd147c1acc8ef0343031267&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Stop adding default folders in Package ctor &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f7a8e099f4a4476be0d0ad6e63fcbbf33723527d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Reunified ProjectState and PackageState &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c5cd46ae0b7bb4800c731e4d96b92858b6cfcefe&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Moved Package.Save() to PackageContainer.Save() &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7d43032b698149c41d8d581e7291848b53273ee6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Avoid creating .xkpkg for projects without one in the first place (use implicit one instead) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f375ae16cbe3e8ed0f40b3a257d010d585b39197&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Rework package dependencies &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/dc4ef281f38037dd96824b4c63c074a3d93118ea&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Also support loading sln with new csproj Guid &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2f446a3bb1e8f62a1d79ac0eee2c18ffca8253d8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Support Packing and consuming simple NuGet packages with Xenko assets &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/406a74c3f382756e3b3df172504e51b840dc56d9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] New game template: set current project to Windows &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/56b6774374acd67ecf7f01c985524fbdba976161&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Simplified NuGet package restore (only happens during PreLoadPackageDependencies) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2958cf0b1f38489ca2c64885d797e74699d67de6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Update Code library template to match others &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9b1fcf2f7fc4aacdfe60d6520d1f25126cea3d81&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Targets] Stop using XenkoDir.cache file during build &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9eec7ceb0797be38a1bc5491f9c5f3b32f7097c8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Bump to 3.1.0.1 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f933c14fea2aaaea8e98996b753cbf7b8da091f7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Store pendingPackageUpgrades in PackageSession &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/335b65354de2fdb1a331cc61c4e995c142ceaae1&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;origin/master&#39; into onecsproj_onexkpkg2 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f8ca24d1dff7926840acb06f3d0259e02c5eeb4f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge branch &#39;master&#39; into onecsproj_onexkpkg2 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a22b62fae68f67e70fa881372def36194ff7ecb0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Process dependencies for RootAssets in view model &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f608ae5598a32f0d5e9695e2b141c8271706cea0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Made !file and !directory tags mandatory in Yaml for easier dependency analysis &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/49240a819316616a230d9165e6daf1c4a8976397&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Temporary fixes for root assets and default scene opening &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e132f1b6f47e91a92bb36fb4ef6fe575d52e5ab0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Pack assets using actual package data rather than hardcoded rules &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8b0dba7ee7fd412aeea4d3da31d29d02e392661c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Reorganize build system (WIP) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5caacef0dc338a5b93c1124278f316c08b42e79b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] NuGetAssemblyResolver WIP &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d0c771fe450c5849da21d0715b292eba253cfe0a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Engine] Move default assets to individual assemblies rather than global Xenko.xkpkg &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/051a8110383946d86c0d1c708d70d38ba0c33f63&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Compiler: can now properly compile existing projects &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4c6ca70b399fc77bb0439916bbd0f240350e13f8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Fix launcher build &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0869d45085a86d07a7ecf7f8a553c112755a738b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Editor] Temporarily moved game studio shaders to Engine, until we have proper design-time package references &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/34c504ea5cc0e4bca327d60a38890de0984a06c3&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge branch &#39;master-3.0&#39; into onecsproj_onexkpkg2 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3a4e324c89c5574edb23a8a42e6d9853b37f1450&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Use RuntimeIdentifier to separate graphics API runtimes &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/78b6d2d6090f705f2c9c4e9f22a849a9f4bcbc1f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Improved cross compilation &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/29d24fe0cde9fe6be8eb2bced3250220c4bdf22b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Renamed XenkoRuntime into XenkoNETRuntime &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3c71596cf7bca49511eb7d3c7458d7742fe2bbd0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Added XenkoRuntime flag &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/79dedb747716f1860c327a040d9f9b46d20e7d99&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] project.Type evaluation needs to be done after package are restored &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ed826ce2de64990215c51cd5cd84f08193e49120&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Reorganized templates &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1f269ac8b8ccdaeca0d94c8ba2555a83df90a1d7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Fix package upgrader &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6c82ca5e10727a779bc2f5bbe77e7f5948701b3b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[SpriteStudio] Added templates &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a88632d9d361002a36933813b411b9645b5a33b9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Properly find ffmpeg.exe and msdfgen.exe &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b55ab0c7866b655f5ee540c253b0842ee5f36272&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Move VHACD to Assets assembly and properly bundle C&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/&quot;&gt;#&lt;/a&gt; wrapper &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6cb333fe58eefa479bf1070b0ee60f39cbf3e24c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Compiler: use thread-safe version of NuGet (when writing lock file) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b3c6e1205bd324095122a0dd8115ef95ab0c26fe&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Deps] Switched to NuGet version of Xceed.Wpf.Toolkit/Datagrid/AvalonDock &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5bfb575d11a8cfed5aa718c286b7d236f8c541b3&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Bump to .NET 4.7.2 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/bc7ff82141756341ebb03dd238ec37dde763ca6e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Adjust bindings for System libraries with 4.7.2 changes &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3085735c11a809aaa49d26dd6344b1b5efa566fd&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Deps] Xenko.Metrics and Xenko.CrashReport are now packaged with NuGet &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e5071464546d294a2e84fa09027448bb532378d8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Lot of adjustments for new NuGet resolver system (incl ConnectionRouter, VS Package, etc...) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/cee640deef9b3d107f5143875a5762546f25d42b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] Moved samples from Xenko.Assets.Presentation to a dedicated project to have faster rebuild &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/501524287b29a18a84c2a0f9f6e5b4cc76a200a4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Some improvements so that unit tests can compile &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4944a4e454169feb424a1413dc21c496940de720&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Some improvements so that unit tests can compile &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e7084d5bdf39a3ff44707058afab75c07a023160&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Removed XenkoDir environment variable &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b7fc19edab35ea9a479c681684fa9d48d44fd6c0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Fixed templates to have proper assembly names and namespaces &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/63b14a1635b44b5a98c686e4522b1a1160025b26&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Readded support for UWP &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d16b2d23b560bccef44ec9e2aa77bc8e3c09b640&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Readded support for Android &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/52728eb895d08bb05015e487dbc40f2c7cfbecbf&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Readded support for iOS &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8f3e11cdb373b6204b639abe653c330c9563ceca&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Optimized ProjectReferences &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/aab0909e384ee393080177aaea52df929eb70856&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Check Visual C++ Runtime is properly installed as part of build targets &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/47f326f76a4d1cb120f6954c9c134cc393b33544&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Added Xenko.PackageInstaller to Xenko.GameStudio &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/785ba220e7bb651a9d8bcc5d117adec6acd27bc2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Use &amp;quot;XenkoPlatforms&amp;quot; to specify which platforms to build &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/784b9c988f8970feef94e0fcd74098396d4d169a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] Upgrade to 4.9 and use RestoreRunner to have faster noop restore on second run &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9b985d4f134670018726c689638edeb5c0c0fb65&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Tests] Fix build of some test projects &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c4e21cc9beb9adbe5225d5f6b1d10a7311ed0959&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Also deletes .nupkg.metadata on package auto deploy (&lt;a href=&quot;https://github.com/NuGet/Home/wiki/Nupkg-Metadata-File&quot;&gt;https://github.com/NuGet/Home/wiki/Nupkg-Metadata-File&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/99d6bfa23f96c9994b15bf34b15eef9c3bfc6a46&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Make sure user projects are always built so that compiler app is checking assets again (until we feed &amp;quot;fast up to date&amp;quot; with proper inputs/outputs) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/764fe201c9d8ac12546e808a70c67aa79f34965f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Make sure to explicitly include Xenko.Core for its targets until VS2019 enables it by default (&lt;a href=&quot;https://github.com/NuGet/Home/issues/6091%5B#%5D(https://github.com/xenko3d/xenko/issues/)issuecomment-438073285&quot;&gt;https://github.com/NuGet/Home/issues/6091[#](https://github.com/xenko3d/xenko/issues/)issuecomment-438073285&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5f5e668711f4a1af454787445e1991f4bcc3128f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Don&#39;t include package targets when evaluating project files &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/15ea5060978a1c78cef840c999197c164d80cbcf&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Order windows executable project first in solution files (sln) so that VS uses them as startup project by default &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b226444233e0fefec0e8868967e5d1ab4b2f27a4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Added some docs related to new build system &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/50412ba3a7dad76e9f3c3147a183932b3f488e9d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;origin/master&#39; into onecsproj_onexkpkg2 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/be8bb7ddd8fff36c3f2abbb4404f442848f0ea00&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Fix iOS solution &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4740daa7263939fafb428d941843c2348c18192b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Moved PackAssets task in Xenko.Core.Tasks &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/76b3c857a63d5ce5a7a1e237eceec620ac982c90&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Use PackAssets as an exe rather than a Tasks so that MSBuild doesn&#39;t lock the files (annoying when rebuilding) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/aae4951f4dae45192ed079d3b4810c9a34715057&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] Log everything &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8e01c197185fce13f9cde3fe9d55fb48bbdf5d28&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] Restore inside assembly resolver to avoid deadlock and rewrote logging code &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/99397c68e73ddb60fd253d8d3e8bdf2ef9833c83&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Only build default graphics platform when opeining sln unless we explicitly set XenkoGraphicsApiDependentBuildAll &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a4ced9d064ff3bff2b6a3fc069516a9623257a96&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] Perform nuget resolve only for entry assembly &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0280495034930e4f84d55a6ae5945ae4b6d043c7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Better resolution of project platform (needed so that windows project is auto selected) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/025f2fedbe1ebf73927fcf89d641593e9879c0bc&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Fix build when choosing a single graphics API &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/091ddeb2f1de3191058f64381420a7452633d8d2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] Add dev store before trying to restore packets &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/95f15bd884002a4fe3ade0ac34b33e9489c5d1dd&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Removed Xenko.xkpkg &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0032576a4b45e8309304e4d0409783b9db2d7b31&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Moved PackageUpdateVersionTask to a separate assembly to simplify build &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/75ea086465b4821afc20d1d96d759629d3e40ed3&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Unify version management in a single file (except for samples which will be versioned separately) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a3d3173539631d81a91c11e9af5e3af4f561e997&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;origin/master-3.0&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/59290e7e19a24127f3198d5bf036c4aff3940ed6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Added package details &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/be22cdf0eab1b07e1c9ded3dcc59f33e7c0fae58&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Output nupkg in bin&#92;packages &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/aea71ef4fb4f254fe992ae4d274d4820e97f5858&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Xenko.Samples.Templates: add missing dependency &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a92d5b806de8921062e06c739d1be688974ac93c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] If restore failed, try to kill known blocking processes (Connection Router, CompilerApp, etc...) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f0341a72d5ee359b36ffcad8dc18d009689ff232&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] Improve logging if restore failed &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7793e1f757189e811b5692c8ed750ef314548aa5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Remove non-existing files from Xenko.sln &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/881c97faa32e192088e894e22d473d8c3bed2a37&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] Use SourceCacheContext to avoid ArgumentException &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b82520bc82da27d45737b577c64d512e326c2e37&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Sign dll/exe when building package &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f6761691c7a6234d7cc9b216fa2719d174ebad7e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Also sign Launcher executables &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5e7e804b7227d58f6b23dab86734596c84b12032&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Escape/Unescape XenkoPlatforms for properly passing info from Xenko.build to targets &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f3b67810b6c507836eb965497ddea3589ebaea38&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Package build improvements &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/badb44c405fecc63fae347361b69b8e3327b3ba7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Package build improvements (part 2) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/32eb5b3dcadb524f6ace77d6a39a672d73e31888&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Signing tool was mistakently always enabled &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/24799e4e5bc0e48f43f2d8100adbdbf0c27f7d1c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Package build improvements (part 3) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/15a05d9a3d1a55c396605b7c6afaaa3fc3dbdc2f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Setup] Update to Advanced Installer 15.5.1 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7a6b1de0bd20bf295abe2f9bbb4a0586907e7de2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Remove invalid character from Xenko.build &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d46658b539c179ce64fda5d81726c55871d93d9c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Fix Linux Vulkan build &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0703befb94b32162d3bfd7e6c5f686ee936f4890&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Added bin/packages/.gitignore file &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/dfb2deb9e018ed785c8d6d25653ad1a8ca3405b8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Fix restore phase in Xenko.build &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1fcbd1d3f02cd3bd6f5f30fd498a480f1489ff14&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Removed Xenko.SamplesBootstrapper and fixed Xenko.Samples.Tests &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/53ce6d3433cf02c51921e673afd3430177c2bbcc&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] Fixed Xenko.Shaders.Tests &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/28c1b8238b9f8d2f1304690431cda729ef16261b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Use active build configuration rather than forcing Debug &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/51b613f7e84c2e0573c2201467af15fd1ab87b0d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Stop using Bin&#92;Windows for unit tests &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f5b0a52848498fb589e4428d01aef1e09829c362&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] Couldn&#39;t resolve EnvDTE.dll &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/13ba08cc9a453934b9a1e5cca20761b2b8691535&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Don&#39;t try to load vcxproj as package &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/303cf2421482d7b33cd78803e4afecf03532325d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] PhysicsSample: Update for Vector3 Gravity &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/31e2160d495ebb7225482727e9eab5187e28eb7b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Tests] Xenko.Assets.Tests: Don&#39;t compile assets &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9f35d82f7e742f422accfac482983c20396b170b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Tests] Fixed some unit tests &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/404b6d4ea4f6a99776696e3c4759434be699900d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Tests] Fixed folder for gold image &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d386ff3c657d0e86e2d3e609775a3acb2371cdd7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Ignore server-side dev packages &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/df6aae5a00f602febbfb1e64fe4a5bbd22112836&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Fixed TestBasicPackageCreateSaveLoad &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/aa227b3f413ee0f121cfe11fdc6bc3487d5e7323&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Package upgrade is now working for 3.0 projects &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c1904fc846dd801426dc9b07eeada6df3db8ab38&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] Update to NuGet 4.9.1 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5580bf789adf83eda621e1d86f17fd38dbeb3005&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Ignore invalid NuGet sources (404, 401, etc...) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4941fdab8c25374f31af5442b271cc3654c02849&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Fix build of test project &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/109eed72e3f5ce6e495f8f90ca888fc92025c01c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Bump to 3.0.1 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e446678a90fc839feba266043f22bbe09bc21cca&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] User can now create GameSettings freely (need to display warning if nothing matching expected name?) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/16eb04e22cefe62c30f1984b12e602ad9c00617f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[CompilerApp] Removed unused GetGraphicsPlatform code &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d6b6a33fa3174ee1ca29bde3d4167cb28df471e8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Removed obsolete target files &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/90ce1a0f9c8605ade31504cb7c76eb3905ff1eaf&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Xenko.build now properly build Launcher &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8ab5690bc3ae0dddec39d5089a16523f33bd9f83&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Switching unit tests to new targets &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/79740098ab6fe979bb1eeabad8e03a7b095a92a6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Fix Xenko.build targets &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6005e95fdbd5137a18ced5d0b6ed803e8e88c906&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Clean packages before full package build &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b498691b12862d3b467875d530554334c90b32b1&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] Asset editors close button is back &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a006a76566cb00a7579dd592a259cc775c2d4e70&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] Removed PreferredGraphicsPlatform from RenderingSettings &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fa1acae4e5ebc8eae7342d51b0880c1a29409dd4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Fix build when using multiple XenkoPlatforms &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9db1b347eed5b78103a04be024995b3a6bc0fff1&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Adjust package versioning so that NuGetVersion doesn&#39;t contain build metadata &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4bd757dffbf8b128b33366f5270e2912853e9a58&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Native] Explicitly require related Assembly when loading native library (we can&#39;t use GetCallingAssembly as it might be wrong due to optimizations) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f4a5489254dcdf690b3890ad4fcfc256db31565d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Native] PreloadLibrary: Use type rather than assembly (to avoid use of GetTypeInfo() everywhere) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/23bd86129b3730ded7d7d4d62910d0c7da12e4c9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] About page: added markdown files to package &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a47f7f2dc63ff4e55ba9b471cf969b5353bce524&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Few fixes so that launcher properly separate &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2bd13008907d550bcf2a294c301e09719ed201e6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] About page: display version with build metadata &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6a5ce5ad0fd8dbc5bbb3f9bb47207e41ce1c2c74&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Force cross-targeting if there is multiple RuntimeIdentifiers &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c5ed27a84874d885fa2d0b2e60aafe59b81175db&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Stay compatible with Xenko 1.x/2.x &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ec0771e60f4083bd9b4c4791baebfaacac32dd30&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Properly fix how RuntimeIdentifier is used for multi graphics API per platform &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2000eb74fb2a39634b5d3b387556e10a388f0740&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Solution file was generated with empty DefaultVisualStudioVersion &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a8c35f29e5462e969b4daa5d74307efd8f8ee5f6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[OpenTK] Use win7 runtime rather than win &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fa0d1d943fd580d09e1e07899ca558063dbe9f06&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Made DefaultVisualStudioVersion public again &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e6ce005ec91ee47d55342a25f59a348fda11c654&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Properly forward XenkoGraphicsApiDependentBuildAll &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/89424e04065f9f9e5eb140512ea86b51a1e36fff&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Workaround: Remove RuntimeIdentifier from Solution references (&lt;a href=&quot;https://github.com/onovotny/MSBuildSdkExtras/issues/139&quot;&gt;https://github.com/onovotny/MSBuildSdkExtras/issues/139&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/88669a587ceea407551487987dedb4e22b9cd13a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Make sure solution/project path use backslashes &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f6fdfa550d3eed3c12a13874fa9fa616eda5e22f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Particles] Remove ambiguities in data member order &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/053fb654b76e90672406778f9337fdcbb18adf00&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Keep solution folders, just remove package info &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/703ee5724dd9ee79bfb47347f7323d94e8c89b6d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Improve package upgrade when there is no ProjectReference &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0f827539dd1be57298fe85e5d8fd9eec308686c5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] Updated samples &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3d49f37f9f1de1a9a62acddaa1db3f05592c38e9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] Removed Xenko.Navigation where not needed &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/13abf567db8a55d2402bdbb70e0964db5c106412&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] Removed Xenko.Physics where not needed &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/725264bb6a7578e4c7ab26ce702c5080642fc2f2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Make sure implicit packages have IsDirty set to false when loaded &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fb7296bf7131e47d779a2534f57d612de44756c5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Fix asset upgrade &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/bea53b99a317851fca271153514b22225d4cdad9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] Fixed template samples generator to work with updated project format &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/aaf3ce5635dd9e393d9458ef08f886ba4bed3a3a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] Updated with 3.1 (step 2) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/794061c497d034d984fc5cad28608fa292b61de4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] Keep Xenko.Particles for now, until we have better extensibility in Graphics Compositor &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c2b417c8e8998ca1df16ad4101fefae9f0fca44f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Allow some assets to be non-referenceable (asset name collision is allowed in this case because they exist only at compile-time). This is used for scripts, otherwise they can&#39;t have same name as an asset. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/772c37b0ebf0853cc0e121ed2c4538aaeba5ca06&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] PackAssets: skip excluded files &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/98a908be2ee6134879306972ac05608d2bd11f69&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Settings] Remove the !file when serializing setting keys &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/399f5f2b7435777ad909a201372f7d8cd74ee975&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Package necessary WindowsAPICodePack assemblies with Xenko.Core.Presentation.Dialogs &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fbb99ceaed4b06f38886ecc5893be24973161003&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] XenkoPlatform was not properly set for Linux platforms &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/73f6cab9396d7880cf99d9697fa270e9505d3431&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] PackageUpgrader: react to multiple package names (to support renames and/or package splits in multiple parts) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2e0bbe3f005c20779af718c57adab5a09b6efe12&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] Improve default asset selection to match opened asset editors &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/68add353023da54323eaa6ea1fe9de297dc91efd&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Compiler: Move default asset build path to obj&#92;xenko&#92;assetbuild &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/168e038bc76d1ff14198c7c3c3271aa4b1b888fd&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Changed dev/beta versioning to permit upgrading between interleaved dev and beta releases (betaXX.YYYY format with XX = asset version and YYYY = git height) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4ab3006e1a12a986184d89fe9f8762545a51741c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Generate ref folder for all platforms (otherwise Android/iOS/UWP might fallback to ref/netstandard2.0 of Linux) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7e1adcdc5db0a4a218a12a09c677cfe918e78e4b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Fix Android build due to lack of NuGetRuntimeIdentifier &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a2e151a368275f5404919df3e5d95c23c781c68c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Templates] Remove the _Game from sample templates &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5467379f14c53af82f7af9685803f6843c524831&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Adjust PackageVersion for sample templates according to XenkoOfficialBuild rather than XenkoPackageBuild &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/916d0741208acb626e8abfa2e5f27422e295f75b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;http://backers.md/&quot;&gt;BACKERS.md&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2c9e6ebe08e24b74c5b825feb3906b9c3add6ff4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Display source in tooltip for Xenko downloads &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2eba4659510149fee35030269f1b062a617ede05&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Various fixes so that shader highlighting/goto works &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/84bad0265a2a74c350bc01bc8ee27efcdcd94168&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Updated UWP to use uap10.0.16299 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1b076cad683134e9aac8396ff60dff605c28fc91&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[UWP] Simplified some code (can now use Thread and other newer API) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/48dddcf52dbc0734a588868c3fe66eb4d1e3bd86&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Hide Microsoft.NETCore.UniversalWindowsPlatform from references and update build doc &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/93fe58ec04a7c2a7df063aea8ef065ebcca62044&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Fix Xenko.Shaders.Tests name &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a8f09bc21acd2b1b67e359ad448cc97608a336a8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] New Game template was not properly copying asset package files &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7c9e3a3969074bc9aa0e91c7c464464e8e53122f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] Use same build folder for game studio as for actual game build &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3b042d9212954224b2bf54b8d9c4ba808411c0c7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Templates] Fixed Linux template &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/af3c9a957103c2a0fce56460d69d5e64e53a211a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Templates] Fixed UWP template &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/37ffe2ee40e47f665f7b329f06634fa9c48d569c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Use win instead of win7 runtime identifier &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/799442a9778a9431f4eee1aadd5a4a69e1aabab9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Templates] Additional fix for Linux template &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/11f3b066cfc91021ef04eeebf8c87c3edd6a1390&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Templates] Linux: adjust default runtime identifier &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c681063eeca3eefe7c8eac6dfc3032d4d658652b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Various fixes for downloading and error reporting &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6c21e9ac03df9a95352fce6ff489d7d25dc5ced4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Bump to 3.0.4 (3.0.3 was built with incorrect source changes) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e2b7b271707b780830256ead6765b7a94013e56e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Fix NuGet assembly resolve (avoid infinite loop) and handle properly non-Xenko solutions (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/298&quot;&gt;#298&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8e98e23c24e14c41deee8457c811055d6c2dec69&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Editor] Properly report solution load/save exception to log &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1844890dcc1fa6135ed9e91cf256df45387f3f0b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Reflection] Rewrote part of AssemblyContainer to handle deferred loading &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/db83d963a4890e2055445820be23462af234156f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Updated to MSBuild.Sdk.Extras version 1.6.65 (compatible with VS2019) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5a7ed9624b5470c6a32ea319dc99e9a7bfd3d7a4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Use $(RoslynTargetsPath) rather than $(MSBuildBinPath)&#92;Roslyn (which doesn&#39;t work with VS2019) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ee195bacfb8315a170c7a59e59a5bce28fed68d9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Change link+badge for chat from gitter to discord &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6ac74bb680b17c22249f3c0c76b5b36f13328787&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Use netstandard2.0 version of OpenTK &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/363f0aaf3e33737ffabc30e9a94179b7e7a2299f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Switch to netstandard2.0 wherever possible for the runtime &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2213f133744fa821d710e343e59d82ba5622f7d7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Switch game projects to use netstandard2.0 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ad4a6be79bf857e4187b6fb84de06044fe11281e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Fix Windows+Linux build &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1b6cc924336fcf5a60b5c060bf515dad5b61f5ea&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Hide Microsoft.NETCore.UniversalWindowsPlatform from references and update build doc &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/40c54176783fae99fdc045dec81a662009c94ab0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Fixed build of RenderDocPlugin &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/574149f757cc3491e3be5a636ff6d14a194e9fda&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Additional fixes for single 3d graphics API build mode &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b5f8ea2bd99a9c0cff6618e90521974bb2e50e09&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Templates] Patching of TargetFramework section is now forcing netstandard2.0 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e45f1721b3a202463ef821308ebf5221db079ad2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Templating] Switch to latest version of Mono.TextTemplating (t4) and add reference to netstandard &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a9999320f08001c0ae9c6a077411b5c936d8f5cc&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Various fixes for .NET Standard build &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4780b504bdb6f3277744c96632e2862fc8a55dd6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Bump Android SDK version from 5.0 to 8.1 (Google Play recent requirement for new app and .NET Standard 2.0 also requires 8.0+) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8e38e7f907ac32c25846335291e26004b7ea9258&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Force references to be added only for direct and explicit package references &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/be7dcfb571439940cabf8c60fc1590a1bc29b05f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Properly forward XenkoGraphicsApi when building a single graphics platform &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e1384ebe811fe6aa2e7f3d2c8e3aabb4f79e7d97&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Make sure to override RuntimeIdentifiers on UWP otherwise it builds all CPU versions and result in write conflicts &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a86d1de46afa610626e260f8f7c392eb361cb676&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Use &amp;quot;any&amp;quot; instead of &amp;quot;win&amp;quot; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5a8f870e976487be43412d34f7116debaa6286a1&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Make sure &amp;quot;win&amp;quot; is the default when building a netstandard2.0 reference (to make sure a RID-specific project always use RID) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1f69960fa376151974703a9f85e4ff291d1f0481&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Define output path (otherwise using a Platform might override them) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b55b9ec84704c736ba09499aa5bb93afefc9b8ce&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Properly setup RuntimeIdentifier if it was not a Graphics-API-specific one &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1d59bce041a59622862ff201248444eeb41721f6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Pack Xenko assets as part of NuGet packaging &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/23d088ee3aca90a49019ae11b486e57ffc976cbe&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Fix the NuGet publish build file &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3376e62deae026e113e0fc6eb423879ebc061462&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Removed unnecessary solution references &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1bf755e20fd9ba26cabee8fe8d1d8a560be4fd74&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Properly compute &amp;amp; restrict RuntimeIdentifier for ProjectReference &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1bd1525db64ee6956d336f01f3280f62c275c59d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Better detection of default RuntimeIdentifiers &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d6711de18adf9bb06a77a00cc674f66b7b0c1865&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Fix RuntimeIdentifiers detection for graphics API mode &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f25b105a0765c30dcf277a6dfec749b466a8cff7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Adjust RuntimeIdentifier and XenkoPlatform detection &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/855d27e26b109e9884c916beb6ae1ea1a8262989&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Remove custom Http code and decrease concurrency (which might be problematic since our packages are bigger than average) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/affdb7232c8634c23065db2a7beb7b1aa9c73478&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Switch from gitter to discord &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a38afda0ffc7d941ef8d1973b5d49e6087310820&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;http://backers.md/&quot;&gt;BACKERS.md&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/51ff4ead560002119a0d588c659759ef747bf160&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Bump to 3.0.5 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2b9fbe39afcdc70c760d0aa831091c4028f50817&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update Crowdin configuration file &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a9352737ddefbf1ff321a9b6fee25d130052ca98&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update Crowdin configuration file &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a528cff46bf93dbf89d66e8b74d37906f800a83c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Skip unlisted packages, and don&#39;t use cache &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a0459e31eee3c0f649097d812f23c09883169199&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Also use normal output data for error output of PackageInstall.exe &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8608ff091cae91a2f740e5523e09c0d27b7d6476&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Enable PhysicsShapesRenderingService only if there is a IGraphicsDeviceService &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/eba446713da62822a110f9eda5ef3253818233dd&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update &lt;a href=&quot;http://backers.md/&quot;&gt;BACKERS.md&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b6333f3285d891bda4053146a0e32a19feedaae6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;origin/master-3.0&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b54f35afaf7eb520b2897516e64633e4b2c99297&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Add comment for PhysicsShapesRenderingService creation &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/94cb4b1c490ee4fdcce94b29e34f1fc9509dea23&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Added option XenkoPublishSkipSamplesTemplates &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/dffa6ee4d0887db64304615f8a59a43a4ac588b8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Adjust platform detection (broken for multiplatform) and preparations for OSX &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9c3fa42f753a619d12d78c8c9d08b3e67e3fe150&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Additional fixes for computing runtime identifiers &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/dcf310f81ddb356f28f5d219e9cd35cd3eee37ed&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Further fixes for computing runtime identifiers &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6542d92acee67b183d8a92c442e8c769d2cdda4c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Run Visual C++ checks only on .NET Framework MSBuild &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/68bfba4cfce380b4ebc42541dbc70a025716c95e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Additional setup for macOS build &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/33fea75c991f8974854c37fb7e533fa8008882e7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge pull request &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/323&quot;&gt;#323&lt;/a&gt; from Kryptos-FR/feature/l10n &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f719acaecdaf93e52f3e547156ca04158642f7e9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Native: Generate only x64 for macOS (.NET Core only supports x64) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fc6e267cadc795fbb47b961f46696e3134d2f746&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] Update to SDL 2.0.9 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/19f3fdcaec44e2e7a67bc8a4f171ae7a12b9929e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] SDL: Load from proper directory &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ae63fcf683e5ba830ae5318407f5c839c43f07bf&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Shaders] Added macOS glslangValidator &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/76cd37b15b0e87324e73e28b8aa6193ae06152d1&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Shaders] Vulkan: Add &amp;quot;NoSampler&amp;quot; to reflection &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/cd609ad45f10c4e6587ebb87f635d4e6516c6143&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[&lt;a href=&quot;http://core.io/&quot;&gt;Core.IO&lt;/a&gt;] Disable LockFile code from macOS (not supported) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/661bd8513bb2e6aeae4e141c42322bc33568d8d7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Core] Copy native libs for more platforms, and only if CopyLocalLockFileAssemblies is not set to false &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/66ba0cd28404bb4fad91658ae177e119bf820336&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] macOS: Update NativePath to latest version &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6e12e806905dbb43e811688de643e78c6db2c3c7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] Update SharpVulkan (works on OSX and easier to access NativeHandle) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6522836725d9d693634c074969b958f61188442e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] macOS: Added MoltenVK &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/897a5ac1e8ec2d4bf7baef041b4b9cecd800d935&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] Added project template for macOS &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6a096b401f85aa3cb1f322addcf8ce36be57cbcd&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Use $(RoslynTargetsPath) rather than $(MSBuildBinPath)&#92;Roslyn (which doesn&#39;t work with VS2019) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6c1a4cd3c66c66ef9facd201136e252b074e3176&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] Templates: Added Cache to list of ignored folders (can be leftover from build during previous Xenko versions) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d47e8cfa77de1ec6a483f2e2e1a52173106cd227&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] macOS: Updated MoltenVK &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ccc487751a7d5fddad5dda7e2d2a995842d59119&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] PackAssets: Use proper asset path when computing resources relative paths (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/326&quot;&gt;#326&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5109915edbd514e154ebc3e914a49f036f392fee&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Upgrade version to 3.0.3. Add support for VS2019. New release needed since RestoreHelper.cs was updated (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/324&quot;&gt;#324&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5c7159721ebf65b4a9f8107e1380880c9d8cf4d2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update license for 2019 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c21c5da8d2604a8735ea396556fa40cfb4c5063c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update &lt;a href=&quot;http://backers.md/&quot;&gt;BACKERS.md&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/307be228f328f25ead2347f840879ca5654bdb09&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Copy .xml and .pdb from NuGet package references when using new csproj format &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/555b4f433d1392cfc3e964f14696132f4c1eed4c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Run VSIX installer only for VS2017+ (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/332&quot;&gt;#332&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/07438702b7761d95351773c5d1ca56c06da61b1f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Use latest version of Windows 10 SDK &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e675185ef18cc8b34be7903115ee2d8a4e630a59&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Update requirements &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e4fd4f0687df1beedf3402710485798a174582c9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Publish was not properly copying native libs and compiled assets (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/331&quot;&gt;#331&lt;/a&gt; and &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/334&quot;&gt;#334&lt;/a&gt;) -- thanks to jazzay for the initial implementation &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/05e746a920cf41b8fc699426cc1e8550ae28c03a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Make ProjectReference between Commands and Package private so that it doesn&#39;t exist as a NuGet dependency &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/76d05a4ab7190c80d8b8b27f7b75255065f01b1b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Add TODO for restore log &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ad0e048637d229e4cac0931ddbeb38e577f23878&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Native: use vcxproj directly to avoid TRK0005: Failed to locate: &amp;quot;link.exe&amp;quot; or &amp;quot;cl.exe&amp;quot; (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/337&quot;&gt;#337&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2982d61547ff55c555c2d161f921af87faf87b41&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Properly include install-prerequisites.exe next to Xenko.GameStudio packageinstall.exe &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/59c6713145dcacf86ee4f51c62662acc0f09a8e8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Install] Prerequisites installer: improve error reporting and retries (i.e. UAC not clicked) when installing Visual Studio or Build Tools &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3d29a4f0d3b0e9bbda26e81932a8f7c2e7587176&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Install] Prerequisites: Update to VC++ 2017 prerequisites &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b40d2657bd28736b2e0327fdda239ecd13437276&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Install] Prerequisites: Add &amp;quot;.NET Core 2.1 development tools&amp;quot; to list of Visual Studio prerequisites &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fe85d992f7bb4213ab810c6a971520ed751afee3&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Install] Prerequisites: Improve Visual Studio detection/update mechanism &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e435015424568631aabcfbdc9fe409554b1b0fec&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update &lt;a href=&quot;http://backers.md/&quot;&gt;BACKERS.md&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0dde714bbb370c9c1e41596cdc859984fcaf2a14&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] Switch to Roslyn 2.10 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/989469db9e2749ac8e69b8ea8a5bde06451b7c23&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] PackAssets: properly copy RootAssets (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/347&quot;&gt;#347&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7144d61795fa6b908443aad1589b9dfac5e17fc5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Perform null check before upgrading PackageProfile &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c5164c5939a0ec7b1edf79d231b2107cf130f998&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] PackageSession: Properly fallback to AssemblyName if PackageId is not set &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/aad3c7519457dc7aa9a4061af314b8420810074c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Remove asset upgrader code for versions before 3.0 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0521c0d066d005bde496ffe9ab656374e2a51f33&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Explain how CLA is to be signed. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/233d891767dd78148c2ff99a3706f8909cc48f57&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update &lt;a href=&quot;http://backers.md/&quot;&gt;BACKERS.md&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/55092e25f2afc3f4107a57fe8678161c944bda83&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] NuGetVersion reported to TeamCity was wrong &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fd5c4b0eff9ce683ba09b51e0e91c28667514d10&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VR] Fix UWP build (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/213&quot;&gt;#213&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/bdc87cc85e791ef28ab6ea891c531c7a8a6ac1f2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Add XenkoBuildDoc parameter to force TargetFramework even if not specified (seems necessary for older version of Roslyn used in docfx) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/35923fa6f570b812fc29c12fddd51710cc51c68f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] Add missing RoslynPad assemblies in the composition context &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/434741423ad6fcf8359cf24435ebd7e4a394088c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] Allow drag &amp;amp; dropping of read-only assets (as long as they wouldn&#39;t be modified) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f542345bb83b0171e53b0716be3a8fd61b6efb8d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] CodeLibrary projects were not properly initialized (assets couldn&#39;t be created) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b41a90143408fb08b63e5a280a42fbcfa9fce091&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Sign packageinstall.exe &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/48600c088ef0a4d6e29477a78f85582c316ed6c6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Include RoslynPad assemblies with Xenko.Assets.Presentation package &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5470299ed9d8fafb38808cd8f9835f65d180aff4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update &lt;a href=&quot;http://contributorlicenseagreement.md/&quot;&gt;ContributorLicenseAgreement.md&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5d91b9cf56ce416813aff77162f7d6e33a840f52&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Unlocking C&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/&quot;&gt;#&lt;/a&gt; 7.3! &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/04fec1d138689e05c3f25c87f46d7064b2205c98&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Core.Design] AssemblyContainer: Process deps.json files (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/365&quot;&gt;#365&lt;/a&gt;, fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/342&quot;&gt;#342&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0dcbaafc442caa8b5d56a1f235387783b6c98df2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge branch &#39;master-3.0&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2592f84d7b074da875cf0e2350f1a8d592c9d9bd&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Fix ColliderShapeAsset upgraders (was previously enclosed in XENKO_SUPPORT_BETA_UPGRADE) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2a12c6643ff493b25b85b6e9bd309dd78858bc9f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;origin/master-3.0&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/762e95559739055993afcb0fe67bc7c4b98acdee&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;origin/master-3.0&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5f596657e006bfea9ebbf0f04302df5e3f3aed85&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Add option -NoSymbols to nuget push &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/464585288f58c214d302db870d9c38406ae5a70c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] D3D: add support for using typeless textures &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ff28be350deb6dd7492743fe60a208613c4a7a76&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Reflection] AssemblyContainer: return already loaded assemblies if AssemblyName matches rather than loading new one (it seems that assembly is requested several times because we are not loading in the proper load context) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/feb297a828e051e28e83c15e4132c950ebf2f6d9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] runtime.json: fix spacing &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/062066d635210894575fb7f6d7f34c2a2930ca46&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Added new CPU-specific variants to runtime.json (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/370&quot;&gt;#370&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d52b6ac6a4e01968c211f5f95806b530f3b0aedb&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Bumped LLVM to 7.0.1 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/06ee9130144ad4da1e3acaeb608e45243a83fa95&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Render] Decouple RenderParticleEmitter from ECS &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/abfb0060a4405fe5712bcb57e657e2f3715436a5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Render] Decouple RenderUIElement from ECS &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fc805ea6b8528d200906102bba59ae5c35ee2820&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Render] Decouple RenderMesh and others from ECS &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/15ffffd2163468ca4c6540bd3a726fec32ebf4c6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] Remove various dependencies from lighting code to LightComponent &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e7ca9d2c58f45077d13e9ecdd7ad6bd5a794988c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] Removed SceneInstance dependency from rendering code &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/cc4bd9f071536857bfb9eef5644da6f867dd5c97&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] Removed dependency from VisibilityGroup to ShadowMapRenderView &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1cd0f982ac1818fdde11624ad4ceada230c25ec6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] LightSkybox: Removed obsolete comment &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0a519701ce5d1e4ba1e5886b8ccd74d11702db21&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] Moved RenderGroup class to Rendering namespace &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/25ec89f0391aeedc91616a7a6282aee9a135b3bb&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] PostFX: remove dependency to CameraComponent &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ff279b024d5db2a34754ea4d52c83e071d9fce81&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] ShadowMapRenderer: remove unused nested class &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/20c5f2b4dcd821251115c0cdd70d16c9e1aefef7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] ForceAspectRatioSceneRenderer: Made default aspect ratio local to remove dependency to CameraComponent &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/71248f369637397946c9bfb705e6b4bc8e746a8c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Engine] Moved IndexingDictionary to Xenko.Core &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9b116257c66e85c4a62be958e8345c95ae1dc510&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] EffectSystem: Remove dependency to Game class and move EffectCompilationMode in the same namespace &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0cc21349a0c4c172c53a94ad7fc7f69547708b3e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] EffectSystem: Moved CreateEffectCompiler in a separate static class outside of Rendering code &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b07e77909c4d705085a74044453d94d39aacc817&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] Made ForwardLightingRenderFeature not dependent on LightProcessor anymore &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9eceed040ce44d73cf42f16509970a5793ea7250&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] Made LightProbe code not dependent on LightProbeProcessor anymore &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/921dd9d243379f6bd14dfdfe27ab830cd03139ca&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] Made LightShafts independent from LightShaftProcessor &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/034abed5674cc05bc9373833e5abf1f0a554a705&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] Fixed RenderContext.GetCurrentCamera() tag owner &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c855896753530454e6ed8678ff55817b66724639&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Streaming] Removed dependency on Engine.Game &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/500c4e50fc3124534c65bd23d764f5fb559bb0da&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] Splitted most of low-level rendering code into a new Xenko.Rendering assembly &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2cf773e19acabb86d918d0742af9c9e034b4c250&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[SpriteStudio] Fixes for SpriteStudio to work properly again &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c1522239be6e424a3d0362bd726512a3afb69361&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] Make Xenko.Rendering platform-specific &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/50b9525155455e817a07dd834d173e974422a06d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[TextTemplating] T4: use a custom version of Mono.TextTemplating, including &lt;a href=&quot;https://github.com/xen2/t4/commit/0d0b6db3ca3aba82fd7597951be2361265043e5e&quot;&gt;https://github.com/xen2/t4/commit/0d0b6db3ca3aba82fd7597951be2361265043e5e&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4372725f93774bf37f69575deceb910e58b41e74&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Serializaton] Bump format version (Rendering split) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a116d28d45d0bf6d0eb445f3226dc64768b7e803&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Bump to beta02 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/cb233fe3eae5cdf13ac8ce07f5a24b6316502371&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Fix .usrdoc generation and copy (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/377&quot;&gt;#377&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2c3f881b0008fb63dede4664b7b8ba810af3390d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] Remove deleted xenko sources during startup to avoid restore failures (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/338&quot;&gt;#338&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/293d60a2bdc4b6d2773a1da914fd802483828288&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;weblate/master&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/734c49d6d02839603d494cd881662089fd6b804c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Added Russian as a supported language &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/123f45ed89d838b8bf25d5fd53ba84d345b272b8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Added a few missing important translations (which were omitted for ApplicationCommands) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0e9c28fe8b2a681a190169e05aff3ecb4f3ba674&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[CrashReport] Bumped crash report to 1.0.1 (force HTTPS), anonymize reports and make sure it doesn&#39;t conflict with NuGetAssemblyResolver &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/401496a90cfb05ae84b83a5d9b10e6fb61875290&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Updated po files &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8842ed8450c2a051f269fc285c49fc269d83ef71&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Regenerated sln (which were invalid since Xenko.Rendering was added) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8ff58adb66baf2f96cb57af4c23a008e552f5ed2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] Removed reference to RenderContext.SceneInstance (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/386&quot;&gt;#386&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/618f743e1435d59d2a4db6bbc82402d28f278d0a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;weblate/master&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c6ae02074bd28789b6eee45e643cc69d2fe3a08c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;weblate/master&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/30ae84d7a1e87ae51f16a33ff1a933aa9f458996&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Only generated when building Release, and added Russian in Xenko.Editor &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d145c85c123455acac052b2b95912e1cdb33d124&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Added support for German and Spanish &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f1d652d85d39dfb0e971e7a76aa31962872abca6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Rearranged targets so that localization code is unified &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4ef26603cdd8cba96cc1ad9e42dbc824cbc76588&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;weblate/master&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/def9b2dee260333f9380adac91f61878b7efd781&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Added support for Chinese (Simplified) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5edc9a513c6c1128e6817825cc0bc2d113669204&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Setup] Don&#39;t delete top level installation folder if not empty (esp. if it was installed in a root folder containing other programs by mistake!) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2e1f3fe293468ef1def17c64bd319878ef219c1a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Use cache but always refresh it, even when installing. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5a1b80fa2ef620cbb6aef34963ce773a8fcd4f2f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Set LauncherApp as default project &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8f407f5c4e63f24bfa3ed598388f006ad3fc2177&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Bump to 3.0.6 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/65aa83110182a00922982eb125a3dde32f23d98e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Templates] Fix version in reference to Xenko.Samples.Templates package &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8227cfdb4a2f200bbfbb44772958bc8a8011b890&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] Add Sprite to rendering only if it&#39;s enabled &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/559f0c4d802cc6dca204cf2f508248dc607a1646&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Rendering] Properly register Xenko.Rendering in AssemblyRegistry (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/409&quot;&gt;#409&lt;/a&gt; and fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/410&quot;&gt;#410&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7be25ab4aceae0a017f133aa495527afa015bdf3&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update &lt;a href=&quot;http://backers.md/&quot;&gt;BACKERS.md&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ad2c14a852e875628f312c10157dc9c44addf9fa&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;weblate/master&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e6c7966fc3acca5bad012daeba9fc4c1587fb01f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] Fast-reloading for types such as Material and Texture were not working as expected, forcing a full model reload on every edit &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/03ebfc8c098746da5e2844f766ecaf246215d8b6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] Fix for fast-reloading &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5cb22fcf0a056001f7a7fa01190adb190194234e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] Rewrote and simplified code for fast reloading (also support cases such as material layers properly now) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e4bae817dc810d36db68192a9f12292e6abf5b52&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[GameStudio] AvalonDock: Fix a bug in AvalonDock 3.4.0 which sets CanClose to false once a LayoutAnchorable is dragged into a new floating window or a new pane. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9076b1eb951d2fced51103725f517155d823dad2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] CleanContacts was working on previousFrameContacts rather than currentFrameContacts, resulting in warnings &amp;quot;Pair not present&amp;quot;. Thanks @EternalTamago for the fix! (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/88&quot;&gt;#88&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/93c111a179675384a09a6a7c7a43d0a643f63fce&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update &lt;a href=&quot;http://backers.md/&quot;&gt;BACKERS.md&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0029ebee92db0458b69e1d3cb3b58126aaff335a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] D3D11: Begin/End were not reentrant because of how Query were used (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/427&quot;&gt;#427&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/428&quot;&gt;#428&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f60d8bba0c38704361699fd735beb4205230e160&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;origin/master-3.0&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/41f9389825ed6d5c2e0423cb17e3c56c1c6efad8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Audio] Encode little bit longer to compensate for encoding delay (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/350&quot;&gt;#350&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/83e0c19f62b164f23d24866f1b0e587686850a6b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Make sure _XenkoGenerateDependencies runs in all situations (otherwise unit tests won&#39;t work) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5837f9181c885427e35ee6f95276334a26aa801e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Make sure _XenkoGenerateDependencies runs also for C++ projects &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/452af9896e0992e7b35e74b4cbfd58974c6616a8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Readjust _XenkoGenerateDependenciesAfterBuild target/comments &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/643d09572e4b5046767712e9339e3b50f35af382&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Unit tests: use proper xunit.console.exe depending on x86 or x64 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7fa89cadcf9f1088dc1d996ffea648f54e19a142&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Tests] Fix sample games unit tests &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d9660087fe00284b22d500d7566489b505232534&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] Fix Sprite Studio demo (missing reference to SpriteStudio runtime) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/52da39c71844bce88cbf6fbda66b3655270c7dc8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Editor] Preview View Model was not properly removing event handlers (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/438&quot;&gt;#438&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/be47e4ca32d1c4c444f9c05665fed355c50e21cf&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Improve log/error message in an attempt to investigate &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/310&quot;&gt;#310&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/bbb42daa2a7fef9745f1afe27cfad718ef8ecbaf&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] Switch to NuGet 5.0 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d552c9780d83c705efa01257672165c527886efc&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Require VS2019 instead of VS2017 to take advantage of new NuGet buildTransitive feature &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/105bd5cd007eb490f90e8952932c9cff1d971574&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Removed obsolete props files &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/47e10426f1ed56aabd2e69f5544fa0b660c88177&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Update NuGet.exe to 5.0 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/230b1acd91e9d5d597e0f148121be26f5962dc15&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Update build instructions &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c6a35d611ecda67f36d8de52c0049961761fc887&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Update to new AsyncPackage and upgrade/cleanup unecessary PackageReference &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/468faa7de46d2cbdc36aef745f15edacc3f841c0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Bump MSBuild.Sdk.Extras to 2.0.24 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/01c81aed9c92a5637900f73e217b68fc1f6681c9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;origin/master&#39; into vs2019 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e8eb8dd42c88e285f1d560b71c570352fd1e0414&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[AssemblyProcessor] Fix a case where ImportReference was not called for GetTypeFromHandle(). Bumped Cecil to NuGet 0.10.3 rather than custom one. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f1183afecbda122c90f1f3f02bdd15738b4c52db&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Added a new KeepReferences flag to AssetCloner &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2f396b11a5349f695263d65618b4477f47a4279b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Stop detecting Android NDK version using folder name (latest VS2019 uses &amp;quot;ndk-build&amp;quot; folder name without version) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3af4664400c66cc7d4724f516fbc9ab0728fee10&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] VS2019 now understand WindowsTargetPlatformVersion being set to 10.0 rather than a specific version. Also bump PlatformToolset to v142 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1947227e81d36eb23b97af6e4d3d2fd6f1dffa96&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Converted some design-time libraries to .NET Standard 2.0 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4438b73c816ab77fc40660afb868f6297ef06db0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Revert &amp;quot;[AssemblyProcessor] Fix a case where ImportReference was not called for GetTypeFromHandle(). Bumped Cecil to NuGet 0.10.3 rather than custom one.&amp;quot; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f55404586c9fc6db5e6a0473b71d856d99ab30c0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[AssemblyProcessor] Fix a case where ImportReference was not called for GetTypeFromHandle(). &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e2c44d3d229bea7e895d20094356ce5c37aa37aa&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assimp] Added error details if something went wrong (and test if scene is null to avoid NullReferenceException). &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fed4c1c95a2bb5fd8d9055f3010c2baaa722f953&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;weblate/master&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3b9bce0e88c18404483b23707345372a8419d074&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Reorganized targets to more easily choose multiple graphics platforms at once. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c37855a945278d4462bf24a9ed7ab8d29fee94b8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Bumped sln to use VS2019+ &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/dddd4dd3dcfdb1e9d92d0f67a80eb89303575c1a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Revert &amp;quot;[Build] Reorganized targets to more easily choose multiple graphics platforms at once.&amp;quot; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5ebf081c342de88223f28c9618664f2d3c869d59&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Reorganized targets to more easily choose multiple graphics platforms at once. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/50bcd63e40d4df8112f06f51bc8e8dca9ef28662&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Removed deprecated Android armeabi CPU architecture (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/461&quot;&gt;#461&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/09cadb3d143acb56831b0f69c61beb6db7caf5d9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Vulkan] Back buffer: add missing ViewType parameter (2D) when creating back buffer &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/40b92cb2fbcb5ebde2858ee06c5364db7f2c0a4d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Android: Bump TargetSdkVersion to API level 27 (matches VS2019 install and TargetFrameworkVersion set in csproj) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/89936b1e8163062c7136010171f8a42abd10976c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] NuGet: 1 hour timeout instead of 100 seconds as a workaround for &lt;a href=&quot;https://github.com/NuGet/Home/issues/8120&quot;&gt;https://github.com/NuGet/Home/issues/8120&lt;/a&gt; (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/310&quot;&gt;#310&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6723f0cd54feb5e8e786e486da4b8cda16cd5b97&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Bump to 3.0.8 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fa4f92e1795cad839d9b174b0151c6c9826c75bf&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Revert &amp;quot;[Assimp] Updated assimp to official 4.1.0 and updated references in projects (closes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/458&quot;&gt;#458&lt;/a&gt;)&amp;quot; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4f6f3fa1a29a7a5403612c5b42be456e9547ea3c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Removed armeabi libraries to completely fix &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/461&quot;&gt;#461&lt;/a&gt; (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/470&quot;&gt;#470&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/79d7d75895e81890de1945b09e4fe7bd235c27d1&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Android: unify all minSdkVersion to 16 and targetSdkVersion to 27 (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/469&quot;&gt;#469&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d19585fe7afafa3df713f939bb2e338f1c3d8e8c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Bump to 3.0.5 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b2a449162b50bb2cbbf478c5de1f5e7082d66d0f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Renamed NewShapeFromDesc to CreateShape &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d65a7f20d60555a05d42be418f9fbea10e2ce63d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Launcher] Allow to select Xenko version &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f4d406cede1875f23886a110d64e14fef21f0566&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Bumped Cecil to NuGet 0.10.4 rather than custom one. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2079a316301cba76185cbeaf1b53fa2ddcc7b84a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Update &lt;a href=&quot;http://readme.md/&quot;&gt;README.md&lt;/a&gt; with new BulletSharpPInvoke repo location &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/58e4e12d084a2f03beae105efaf806393b85e47f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge pull request &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/289&quot;&gt;#289&lt;/a&gt; from Eideren/bulletsharp_nuget &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5cee86cd3d8807c39446c07d0481348afd7c4131&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Physics] Fix typo in PhysicsEngineFlags.ContinuosCollisionDetection (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/152&quot;&gt;#152&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5bb43aabbc3568e5793928f63903bdccb48907f8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Properly copy back IntDir/OutDir to IntermediateOutputPath/OutputPath for C++ project &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fb6a53c1fb7a512dff5ef2a37ddb66dcea8e5155&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Input] Fix SDL key mapping for 0 and 1 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4ef9581f8d48637542d0c0ae0c8a773d123c4d1c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Updated editorconfig to contain VS2019 default style (which we use in Xenko) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8f5f1b8f4c7d2d234375b3c4cfd4b73ed550891a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] XenkoContent: do not include in NuGet package as Content &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/66d869addaac2feeae11010d93fd8a042d494989&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] Compare InputElements length before comparing elements &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/76dbcc023f8eb9cafd58115ad4c859b5f36d8e9b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] Remove unecessary GraphicsDevice.ThreadCount &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f03a77dae6f340bced56cf71b297f14e65ee6054&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[SDL] AppActivated and AppDeactivated were reverted &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/224035d5a3aad33caebf2ea80cc0b46871d9bc4e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Vulkan] Fix validation for texture upload &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5eef1bc988e22753b728bb0036e50ee67a8e45f0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Vulkan] Update glslang to 7.11.3214 (May 2019) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/04f62331be646cbbdc9cd1d517e8bf2ae4b83d21&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Vulkan] PipelineState: Entry point name could be GC before used &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7f293fad43028ced8ffc01e196ffab57bb53a55b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Vulkan] PipelineState: Properly set PrimitiveRestartEnable &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7c4be8d30a3f760eed82c571b36c2805fa34232d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Revert &amp;quot;[Graphics] Vulkan: add support for R10G10B10A2_UNorm and R11G11B10_Float&amp;quot; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2201148377b079cee72547988bc323b238b75951&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Vulkan] Fixed memory barriers for Clear functions &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4e1bd31226784600412c6bdf89ccb101a26393db&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Vulkan] UpdateSubresource: Fixed memory barrier &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ab96eab76ef8168fe5855938a05d9a18515a1d35&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Vulkan] Fixed mixup between Clear DSV and RT &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f70d74cb15ff731c5e7ddf870e04c0d4979ee576&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Android: Updated to NDK r19 (with proper version check) and remove our custom libc++abi (first step for &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/460&quot;&gt;#460&lt;/a&gt; and &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/379&quot;&gt;#379&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/abe058e2c25e2976bfcc96c379156c3ed1e77554&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Android: Avoid &amp;quot;error MSB4044: The &amp;quot;FilterAssemblies&amp;quot; task was not given a value for the required parameter &amp;quot;DesignTimeBuild&amp;quot;.&amp;quot; with latest Xamarin.Android &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7edf54f3b8dd4c60662663e1b5e060572d0534fb&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Audio] Android: Updated OpenSLES header (which were incompatible with arm64 due to SLuint32 mapping to long instead of int) (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/379&quot;&gt;#379&lt;/a&gt;) (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/460&quot;&gt;#460&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/71e6437e698c65ff5191a803eb9df367edbcd804&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Setup] Upgraded Visual C++ prerequisites to latest VS2019 ones &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b506c73e895a29d0e9a3dfe3d233ecdfbb2cb876&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assimp] Properly copy Xenko.Assimp.*.dll (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/465&quot;&gt;#465&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8ee49829fb530ff23da0f541cbb465fd9cf6a191&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;weblate/master&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/bfc47b2ded670066bfafaf9976d5778d6bc75cac&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Android: Workaround for &lt;a href=&quot;https://github.com/onovotny/MSBuildSdkExtras/issues/174&quot;&gt;https://github.com/onovotny/MSBuildSdkExtras/issues/174&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a91440e963d80edb3679c097924d2896e765fd74&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Transformed Xenko.Core.BuildEngine into a .NET Standard assembly &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/382953c7639a0f767894d5fa72d5d7aa2e0dc06d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] NETStandard: Switch from AssemblyBuilder.DefineDynamicAssembly &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c291dac0ac88fa3d7493599fa312fa3c6ed5680b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] NETStandard: Remove unnecessary using &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a726144a9b0e61fac24a76df3dcb930d076c291d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Quantum] Renamed Index into NodeIndex to avoid clash with future System.Index &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/593754598191c6bc29995478be98962ad959452a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] NETStandard: Remove unnecessary using &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f61d50d1e88f1023121e651f34817703501ec405&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assets] Switch from implicit project to explicit project if necessary (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/442&quot;&gt;#442&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1813edc0e306670f14d8b07ae3381e832ad87144&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Switched to MSBuild.Sdk.Extras version 2.0.41 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0f1ff64ea68fdb8b18b9bed8ce37d0266ef30197&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Doc: Copy .xml file in ref folder &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a4c7c1a748c8a576d5464559c5460b73b3f6ca87&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Revert &amp;quot;[Build] Switched to MSBuild.Sdk.Extras version 2.0.41&amp;quot; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/86344617032260a3935050c00ebcea09684fb1a8&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Moved Microsoft.NETCore.Platforms reference from Xenko.Graphics to Xenko.Core (otherwise scenarios like referencing only Xenko.Core with win-x64 doesn&#39;t work) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e01b748fabe82b11ea8c9ff58cf30fc3832a3fe9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Syntax highlighting service was not properly registered asynchronously (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/651651&quot;&gt;#651651&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/285e1a4fefbd38b5b8345a631baf1ce446b7c9ce&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Fix Xenko detection &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/94d82c3c951f1368fc190171d006e2ba8d87dffe&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Bump version to 3.0.6 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e0b7fc68d60dea8e240f17cb95b0d5c74df420ad&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Replaced &lt;None Include=&quot;..&quot;&gt; to &lt;None Update=&quot;..&quot;&gt; for shaders/effects &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6553d51fbb0455710a56790d6dccf757309bc0e3&quot;&gt;view commit&lt;/a&gt;&lt;/None&gt;&lt;/None&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Add a launchSettings.json with proper parameters for easier debugging &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/40d728016005183cdfda11ca6e69491135b182dc&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Input] SDL: fix OemPlus/Minus mapping (thanks nes) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b431e3d680757f756e64ad545f578f44f28e7dee&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[UI] Fix comment &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/05eba03187cfc18baa674d070abddc82fcb602e2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Vulkan] Fix some memory barriers in CommandList.Copy and CopyRegion &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4249625313e1cd12d67fab6750ce87dbb8f7320b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Vulkan] CommandList: Don&#39;t use ImageView.Null in DescriptorImageInfo &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b5b645029db1b29bedf1ec06d2b78bfbf5820f4c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Streaming] Load a few initial mipmaps for streamed texture (otherwise they start as completely uninitialized: bad for rendering, and causes crash on Vulkan) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1ca201f6f689f954f38b2ce17dfd90534e54d3fb&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Shaders] Fixed precompiled shader code generation &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/76ca6716699a1f95034558d345ed493fbbdf9594&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Shaders] Added ElementType info to reflection for buffers/textures &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/ae24533c7e79d536e73ccf3d0d28e610c1f5d144&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Vulkan] Properly store info if a texel buffer need to be integer or float. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/cb9b3178ed563a9483c9e3cc9e086785825e32c2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Shaders] Make sure NoSampler is added before computing list of resource groups (otherwise it ends up having no location attribute) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f98890115e4c3d0d80e7768eb3c98797151a0151&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Input] Fixed copyrights &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/2e3591546db05cb0faa8f0ca747296cc15eed86a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[VSPackage] Fix Xenko version detection to work not only with nuget packages but also solution projects, so that it works with Xenko solution itself. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/964ef5e68c4fa555d890f94c648e871f7e1bb067&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge remote-tracking branch &#39;weblate/master&#39; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8c97d5d7753185b5111ecb781f45d2b76f05fb90&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Added Italian &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c70f07f449c7e4020a92f16c81f161ea7af7a4b5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Localization] Added info in doc on how to translate and add new language. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/48692b4baee5b586a4ea5e7e391fe5a73587a287&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Remove the -beta02 version suffix &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/8787a1959ff4dcd1ca9219615463a6dba7b14e56&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Shaders] D3D: Properly copy ElementType when duplicating resource binding per stage (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/515&quot;&gt;#515&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4e7826874d4b8d4e12222b21f9d2bcf57768f675&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Samples] Updated to 3.1.0.1 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3f3158783ec94c9f4705e3afd50e671b05b2ed15&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Setup] PackageInstall: check if VS Installer needs an update, and if yes try to do it automatically &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/aa48bc6479c39f8732d11bb84b2960ff1a1cd593&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Temporary workaround for .NET Core 3.0 new runtime identifier system (credits go to Solr for finding this fix) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/4a624c6cd8d6f3af95a5586e7190e431b14d2886&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[NuGet] Rewrote how assembly resolver is ordering assemblies found in nuget packages (there was a bug where it could select net46 instead of net461, resulting in crash) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7ca99e767ab19c2c20fece865c3263706488fc56&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Moved Xenko.Samples.Templates version in a single unified location to simplify future maintenance &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/46bcd063df35ee48dd6edde062ed4b9ac7451da3&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Setup] PackageInstall: Check VS Installer update if any workload needs to be installed (two UAC, but probably better than an error and extra step) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fb99c6a35de199b32b5cd999e64b05740054a7d2&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Bumped MSBuild.Sdk.Extras to 2.0.54 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/339d9e8389b4c44eef0f24bf996235bdb3018397&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Updated codesign certificates &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/006ad132109aefb2c580c938634bd265b2262d27&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Android: Use AssemblyName rather than RootNamespace for Resource class otherwise it might clash between some assemblies (i.e. Xenko and Xenko.Engine) --&amp;gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b6075c7d75407f7d5daf0e52ff0215c9b8d3dbf9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Revert &amp;quot;[Build] Remove the -beta02 version suffix&amp;quot; and bump samples accordingly &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/238a431e3f6fe10f0e7d9900d16c3cfa365fb9df&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Use default RuntimeIdentifier for default GraphicsApi, so that even if our custom RuntimeIdentifier are not merged properly, everything still work. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7d3a9f8a99fd070f90d22300fe3a8f6c424a8e43&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Removed previous workaround for &lt;a href=&quot;https://github.com/NuGet/Home/issues/7351&quot;&gt;https://github.com/NuGet/Home/issues/7351&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1f6216fbbe568686e2511ec884caf96280137e16&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Bump NuGet.exe to 5.3.0 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7ab69c724a11cc904bdf1aecd39e6ee4c45689b7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Improved behavior of XenkoGraphicsApiDependentBuildAll &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/98a2a7aaed83326e495e2cca8eb858746aee5f18&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Merge branch &#39;runtimeid_fixes&#39; into master-3.1 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/297d239cc89ddee88d4cc52448336b35fa93080d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Android: Fix NDB platform versions &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c5c2a6402fc480baf45f06225157c213bf7b927a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] Updated SharpDX to 4.2.0 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d1f18836d6221acc8f79ac38075c95078e53b214&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[UpdateEngine] AssemblyProcessor was generating invalid ldftn for virtual/interface calls (causing crashes with .NET Core 3). Switch to ldvirtftn for those instead. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e42121aec7db46aab6ce64b58f24df96b05ed720&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] Update D3D12 code for SharpDX 4.2.0 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f5bc7a62af343c082bb7c5ce20222d1c7e30f81d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] AssemblyProcessor task need to change identity on each change otherwise we can run into &lt;a href=&quot;https://github.com/microsoft/msbuild/issues/663%5B#%5D(https://github.com/xenko3d/xenko/issues/)issuecomment-310530046&quot;&gt;https://github.com/microsoft/msbuild/issues/663[#](https://github.com/xenko3d/xenko/issues/)issuecomment-310530046&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e2c2eb19fcd6c8f9a2d49945170966cb38a12642&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Graphics] Streamed compressed texture could end up having their initial texture size not multiple of 4, resulting in error at runtime loading. Skip these cases for now. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e8c8e4aff1a2fdd610b9f16929fe4104093fe641&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Fonts] Fix how matrix is computed and compute realVirtualResolutionRatio depending on actual requestedFontSize (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/314&quot;&gt;#314&lt;/a&gt;) (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/364&quot;&gt;#364&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/eafa92f99d5978316b9394f4c3d4e25ae8a1b5d0&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Fonts] Dynamic fonts: use virtual resolution (otherwise real size changes on every camera move and requests new character, esp. if UI is in 3D) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/22271fb90375a28740e99b3900b5325e4934e6c4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Fonts] Do not alter fontSize &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/1a9bfd6e775e3cf4d721cbe060299a8dba84a35c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Fonts] Turned various internal parameters from ref to in (C&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/&quot;&gt;#&lt;/a&gt; 7.2) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f1513b93984b2581c13a8adb35bdfee20d6e3817&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Fonts] Turned various internal parameters from ref to in (C&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/&quot;&gt;#&lt;/a&gt; 7.2) (missing file) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/aaaa975d63bf2014d5ce48fe334f8f6d8636cbff&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Added a trailing slash at the end of PackageOutputPath (maybe necessary since latest VS2019?) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/f63685447a53dc5cc1b91b43d9eae7bbda1ec7e3&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Revert &amp;quot;[Build] Add XenkoBuildDoc parameter to force TargetFramework even if not specified (seems necessary for older version of Roslyn used in docfx)&amp;quot; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6c4dfce0191419e6350e0a21cd3c2b533d561124&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Separated XenkoGraphicsApis into one list per platform (otherwise we can&#39;t really control properly and risk overriding a platform with nothing) (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/544&quot;&gt;#544&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/d1cb7a553857f27b8a5610dfd39cad2b6cb78f41&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Remove GetSolutionConfigurationContents hack (which was necessary for WinStore/WinPhone port) (this allows command line build for Android/iOS &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/543&quot;&gt;#543&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/12094ae9a1e72fcf09bca3e8b121159426cb9d66&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Build] Remove the -beta02 version suffix and bump samples accordingly &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7419012e054d765dc9434f5beb2442a0db25d7b9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Updated &lt;a href=&quot;http://backers.md/&quot;&gt;BACKERS.md&lt;/a&gt; &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/12df753f9549bdf964991d2d4c250d6c11e17630&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;WaldiS (3):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added translation using Weblate (Polish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/6ac1950ec85942ac2fc8f54fcc33d6e290ede4bc&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Polish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/86ab22d454d03da980d5b6f8e0b7244e7e4ec677&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Polish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/89bef757a76aa87c5370f58826a4daf02e31c85a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;WhyPenguins (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Add output merger UAV binding. (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/478&quot;&gt;#478&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a503e9013938388024b26a0efbab2da54a2f73b4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yuuki terumi (5):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Added translation using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/98fe76f78970af70d443398b6d649ce110ece7e9&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/80b0993254e50b73eabf67df6bbe01d2b1a3be82&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a47ecf538fc734b4fac9cb2fcfbbe70a41ace909&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Added translation using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/24ef81b8733766ee28fb98a1e5db57615db739cb&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/679a3e0bab06e9b61470bd40029b6570de569947&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;dfkeenan (5):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allow spaces in TargetDir when building LauncherApp project. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/88811c9cef84073a5fa7a692f57f115673f72350&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update Roadmap url to github projects. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/24ccfd8bdc29d48cbc0f6b02192cb8e930aa629d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add tooltip status text for link buttons. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/aa9577605fa5269c96a2430bf20148d322a9676c&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Add patreon link to launcher. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/70ccdfb760c6cd7324027ea529e019caba7144e4&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Remove AnswerHub link from launcher. &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a29c49d08a6e71602436a22192276d0d800c160e&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ioc (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix broken link to Teamcity Android build in ReadMe &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/c894473a4d45f4fbb474274b47eba4a43dbbec78&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;joreg (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;VR tracker support (&lt;a href=&quot;https://github.com/xenko3d/xenko/issues/213&quot;&gt;#213&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/7e41209357c9abeb45cdba1ff212409e74730d49&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;meriaizen86 (3):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/5568199b1d09ed65ee8fb1c0d89ccbe97cc179ca&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Translated using Weblate (Spanish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/a22fd25eba4dc2c4be834bd65f88ed4a3e7918cd&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Update XenkoDefaultSplashScreen.xktex &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/976fae86f8460472f504a57f13a1bf815cf760e7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;pansan (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Translated using Weblate (Chinese (Simplified)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/98495281053db1686e14fd5285fd24dc9024ef9f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;phr00t (2):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Make alpha optional in Color4 &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/fdad9d838a6c52afb8e3aa6a58c83263d2ebd35a&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[UI] don&#39;t invalidate text UI if we set it to the same thing &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/0c5a67c0b4e36489c01f0014465457ebc12b8074&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;rgawry (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Translated using Weblate (Polish) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b1909383c11e22e4488d9740dc42ce3eaf32b361&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;ssantos (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Translated using Weblate (German) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/b3b1eed9da91cb87a0e05a9d6fccbbbac08be79b&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;tebjan (4):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[Assimp] Updated assimp to official 4.1.0 and updated references in projects (closes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/458&quot;&gt;#458&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/abef0e89ab20628bae8d5411173f9dfe8d032623&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;[Assimp] Updated assimp to official 4.1.0 and updated references in projects (closes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/458&quot;&gt;#458&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/9cdd43c0091991fca36f81842be0fe2259be60e7&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;fixed null pointer exceptions in render features &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e3c698465e6d4c1fd1d6b80fcb5131a877c7b7a5&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;removing a package did not fire an event, so all related assets where still in the dependency manager &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/e822a0411c885af88fcae37727d2d50d741b22e6&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;xwellingtonx (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Fix editor resizing and to insert auto hide minimum size (fixes &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/189&quot;&gt;#189&lt;/a&gt; and &lt;a href=&quot;https://github.com/xenko3d/xenko/issues/190&quot;&gt;#190&lt;/a&gt;) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/3aac63f7e580dc36399936c8ffc393fcd81d5b5d&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;陈宇航 (1):&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Translated using Weblate (Chinese (Simplified)) &lt;a href=&quot;https://github.com/xenko3d/xenko/commit/72700e4fa4f32b4e21844f1eef8141cb0b86b19f&quot;&gt;view commit&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Generated using&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;git shortlog origin/master-3.0..origin/master-3.1 -w0,0,0 --pretty=format:&amp;quot;* %s [view commit](https://github.com/xenko3d/xenko/commit/%H)&amp;quot; | sed -r &amp;quot;s/#([[:digit:]]*)/[#&#92;1](https:&#92;/&#92;/github.com&#92;/xenko3d&#92;/xenko&#92;/issues&#92;/&#92;1)/g&amp;quot;
&lt;/code&gt;&lt;/pre&gt;
</description>
      <pubDate>Mon, 11 Nov 2019 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/release-xenko-3-1-0/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/release-xenko-3-1-0/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Recap October 2019</title>
      <description>&lt;p&gt;Welcome to our October edition. Here&#39;s a quick recap on Xenko development and its community. Official 3.1 Release is in final testing phases. You can now sponsor Xenko through Github sponsors. Possible name change is being discussed. The first tutorial project is almost ready.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/october-2019/#official-3.1-release&quot;&gt;Official 3.1 Release&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/october-2019/#git-sponsorship&quot;&gt;Git Sponsorship&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/october-2019/#possible-name-change&quot;&gt;Possible Name Change&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/october-2019/#documentation&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/october-2019/#community-picks&quot;&gt;Community Picks&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/october-2019/#voxel-cone-tracing-based-global-illumination-from-spike1&quot;&gt;Voxel cone tracing based global illumination from Spike1&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/october-2019/#heightmap-terrain-from-silentcld&quot;&gt;Heightmap Terrain from SilentCLD&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;official-3.1-release&quot; tabindex=&quot;-1&quot;&gt;Official 3.1 Release &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/october-2019/#official-3.1-release&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The 3.1 was originally scheduled for release this month, but some last minute breaking changes prevented the release. The official release is now in its final testing phases and should be released shortly. Once the release is final, we can focus on planning out tasks and the new roadmap for 3.2.&lt;/p&gt;
&lt;h2 id=&quot;git-sponsorship&quot; tabindex=&quot;-1&quot;&gt;Git Sponsorship &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/october-2019/#git-sponsorship&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Next to Patreon you can now also sponsor Xenko development directly through &lt;a href=&quot;https://github.com/sponsors/xen2&quot;&gt;Github sponsors&lt;/a&gt;. GitHub even doubles the money that is donated the first year up to $5000!&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.stride3d.net/images/blog/2019-10-31-october-2019/githubsponsor.png&quot; alt=&quot;Freedcamp project&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;possible-name-change&quot; tabindex=&quot;-1&quot;&gt;Possible Name Change &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/october-2019/#possible-name-change&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For those of you who have missed it: Xenko is looking for a possible rename of the engine. There have been lengthy discussions on Discord about the name we could pick. See the fixed topic in the Discord #name-change channel.&lt;/p&gt;
&lt;h2 id=&quot;documentation&quot; tabindex=&quot;-1&quot;&gt;Documentation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/october-2019/#documentation&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The first tutorial project is almost ready. Users will be able to select tutorial templates from a Tutorial category in the project launcher. The first project “C# Beginner”, demonstrates 12 beginner programming concepts. The amount of tutorials, as well as intermediate and advanced tutorials, will be extended/added once the first release is done.&lt;br /&gt;
Additionally, the code used in the project is directly referenced by the new documentation section which explains each individual tutorial level.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/zGFYFhBfxVs&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h2 id=&quot;community-picks&quot; tabindex=&quot;-1&quot;&gt;Community Picks &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/october-2019/#community-picks&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Check out these awesome community projects that people are working on:&lt;/p&gt;
&lt;h3 id=&quot;voxel-cone-tracing-based-global-illumination-from-spike1&quot; tabindex=&quot;-1&quot;&gt;Voxel cone tracing based global illumination from Spike1 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/october-2019/#voxel-cone-tracing-based-global-illumination-from-spike1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://forums.stride3d.net/t/voxel-gi-implementation/1947/5&quot;&gt;Forum post&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://github.com/WhyPenguins/XenkoVoxelGI&quot;&gt;Github project&lt;/a&gt;&lt;/p&gt;
&lt;img alt=&quot;Voxel global illumination&quot; src=&quot;https://www.stride3d.net/images/blog/2019-10-31-october-2019/voxel-global-illumination.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2019-10-31-october-2019/voxel-global-illumination.webp&quot; /&gt;
&lt;h3 id=&quot;heightmap-terrain-from-silentcld&quot; tabindex=&quot;-1&quot;&gt;Heightmap Terrain from SilentCLD &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/october-2019/#heightmap-terrain-from-silentcld&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/SilentCLD/XenkoHMTerrain&quot;&gt;Github project&lt;/a&gt;&lt;/p&gt;
&lt;img alt=&quot;Heightmap terrain&quot; src=&quot;https://www.stride3d.net/images/blog/2019-10-31-october-2019/heightmap.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2019-10-31-october-2019/heightmap.webp&quot; /&gt;</description>
      <pubDate>Thu, 31 Oct 2019 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/october-2019/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/october-2019/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2019-10-31-october-2019/thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Xenko meets vvvv</title>
      <description>&lt;p&gt;Explore the integration of Xenko and vvvv, a powerful combination that unlocks new possibilities for creating visually stunning and interactive 3D experiences in real-time.&lt;/p&gt;
&lt;h2 id=&quot;xenko-and-vvvv&quot; tabindex=&quot;-1&quot;&gt;Xenko and vvvv &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/xenko-meets-vvvv/#xenko-and-vvvv&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;When Xenko went fully open-source in 2018, one of my intent was to be able to engage directly with some of Xenko&#39;s most enthusiast customers and power users. &lt;a href=&quot;https://vvvv.org/&quot;&gt;vvvv&lt;/a&gt; is definitely a perfect example.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://vvvv.org/&quot;&gt;vvvv&lt;/a&gt; is a hybrid visual/textual live-programming environment for easy prototyping and development.&lt;/p&gt;
&lt;p&gt;vvvv has been using Xenko under the hood for a while, e.g. for the &lt;a href=&quot;https://forums.stride3d.net/t/multi-user-vr-done-with-xenko-we-live-in-an-ocean-of-air/1872&quot;&gt;Ocean of Air&lt;/a&gt; project.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.stride3d.net/images/blog/2019-10-04-xenko-meets-vvvv/vvvv_meets_xenko_s.jpg&quot; title=&quot;Ocean of Air&quot; class=&quot;mb-3&quot;&gt;&lt;img alt=&quot;Ocean of Air&quot; src=&quot;https://www.stride3d.net/images/blog/2019-10-04-xenko-meets-vvvv/vvvv_meets_xenko_s.jpg&quot; class=&quot;img-fluid&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2019-10-04-xenko-meets-vvvv/vvvv_meets_xenko_s.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;They also have various plans to leverage Xenko even further in the future &lt;a href=&quot;https://vvvv.org/blog/vvvv-gamma-2019.1-preview&quot;&gt;gamma version&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;That&#39;s what led me to establish closer contact with them. One things led to another, and in May 2019 I jumped in with both feets and moved to Berlin. They&#39;ve been graciously sponsoring Xenko and allowed me to use their office since then.&lt;/p&gt;
&lt;p&gt;My sincere thanks to them for supporting both Xenko and me!&lt;/p&gt;
&lt;p&gt;Please find vvvv announcement at &lt;a href=&quot;https://vvvv.org/blog/vvvv-meets-xenko&quot;&gt;https://vvvv.org/blog/vvvv-meets-xenko&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;code-signing-certificates&quot; tabindex=&quot;-1&quot;&gt;Code signing certificates &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/xenko-meets-vvvv/#code-signing-certificates&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A few days ago, Xenko code signing certificate expired, leaving the project in a tough situation, where smooth releases were not possible anymore.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://vvvv.org/&quot;&gt;vvvv&lt;/a&gt; graciously offered me to temporarily sign Xenko official releases with their own codesign certificate. So don&#39;t be surprised to see their name popping up next time you upgrade Xenko!&lt;/p&gt;
&lt;p&gt;This is only temporary and we are working to get our own code signing certificate as soon as possible. More to come soon on that front!&lt;/p&gt;
</description>
      <pubDate>Fri, 04 Oct 2019 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/xenko-meets-vvvv/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/xenko-meets-vvvv/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2019-10-04-xenko-meets-vvvv/thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Contributor Meeting October 2019</title>
      <description>&lt;p&gt;Discover highlights from Stride&#39;s first contributor meeting, focusing on project collaboration, development updates, and ways to enhance the game engine together.&lt;/p&gt;
&lt;p&gt;Next to the community meetings were everyone can join in on the discussions, we now also have the contributor meetings. These contributor meetings are for the people who are actively participating in Xenko development. Last weekend we had our first gathering. Another thank you to all who participated!&lt;/p&gt;
&lt;h2 id=&quot;summary&quot; tabindex=&quot;-1&quot;&gt;Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/contributor-meeting-1/#summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Date of meeting: 28 September 2019&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Official release of 3.1
&lt;ul&gt;
&lt;li&gt;The release of 3.1 is imminent. More details on this will be provided soon.&lt;/li&gt;
&lt;li&gt;Nuget package creation is the biggest task to be completed.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;General roadmap
&lt;ul&gt;
&lt;li&gt;The &lt;a href=&quot;https://github.com/xenko3d/xenko/projects/3&quot;&gt;roadmap&lt;/a&gt; currently planned on Github is outdated. It needs to be updated and become more relevant to the capacity we currently have as Xenko contributors/developers.&lt;/li&gt;
&lt;li&gt;New freedcamp tasks will come out of this that can be assigned to contributors. Some areas of contribution:
&lt;ul&gt;
&lt;li&gt;Xenko core (subsystems, frameworks, .Net version etc)&lt;/li&gt;
&lt;li&gt;Editor improvements&lt;/li&gt;
&lt;li&gt;Examples/Tutorials: C# coding, Models/materials setup from Import to Scene, Animation&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Roadmap for 3.2
&lt;ul&gt;
&lt;li&gt;Planning out the next features is a big challenge, because there are so many things wanted/requested. Since Xen is the only full time core developer, we can probably only toggle 1 major feature next.&lt;/li&gt;
&lt;li&gt;After the 3.1 is released the strategy on which core feature should be implemented. This has yet to be decided. The next developer meeting will go deeper in to this.
&lt;ul&gt;
&lt;li&gt;Example on what could be worked on: asset compiling/.NET Core 3&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Release cycles
&lt;ul&gt;
&lt;li&gt;We will try to adapt a more frequent official release strategy. Even if that official release contains few fixes or improvements. We do not want to plan releases on fixed dates, but instead we do want to keep the 3-4 months idea in our mind. This should provide the community more reliability.&lt;/li&gt;
&lt;li&gt;Depending on the amount of fixes/improvements this will major or minor.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Phr00t fork
&lt;ul&gt;
&lt;li&gt;It has proven difficult to merge functionality from phr00t fork to main xenko, but there is ongoing progress!&lt;/li&gt;
&lt;li&gt;2 users (Fdrobidoux and SilectCLD) are currently working on merging code. If you are interested in following the progress have a look at the &lt;a href=&quot;https://freedcamp.com/Xenko_YO2/XenkoManagementT_3sf/todos/27077090/&quot;&gt;task&lt;/a&gt; for this.&lt;/li&gt;
&lt;li&gt;Vulkan improvements will need to be done differently, and some work from xen2 has already landed for this.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Documentation
&lt;ul&gt;
&lt;li&gt;The C# basics tutorials are making progress, but the sample project is not quite there yet.&lt;/li&gt;
&lt;li&gt;Some better screenshots and a base tutorial scene that looks a little bit more appealing could be really useful.&lt;/li&gt;
&lt;li&gt;Release for this is extended by 1 month.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Access rights:
&lt;ul&gt;
&lt;li&gt;We can distribute some access rights among contributors to ofload some of task from Xen.
&lt;ul&gt;
&lt;li&gt;Social media: SyrikZero&lt;/li&gt;
&lt;li&gt;Website deployment Teamcity/Azure: JornAggror&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Name change
&lt;ul&gt;
&lt;li&gt;Let’s take it one step at a time: first let’s see what possible name we can come up with.&lt;/li&gt;
&lt;li&gt;Check the &lt;a href=&quot;https://forums.stride3d.net/t/vote-for-xenkos-new-name/2016&quot;&gt;voting topic&lt;/a&gt; by Eideren for more info.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;General topics:
&lt;ul&gt;
&lt;li&gt;We are aiming to do a contributor meeting every 2 months.&lt;/li&gt;
&lt;li&gt;This meeting was a long sit: 1.5 hours. Next meetings should be 1 hour at max, but preferable shorter.&lt;/li&gt;
&lt;li&gt;Using Discord for the meeting, was not ideal. We will try to see if we can use Google Hangouts for this.&lt;/li&gt;
&lt;li&gt;The timezone planning of the meeting did not go as planned even though Doodle does support this. This will be properly tested for the next meeting.&lt;/li&gt;
&lt;li&gt;Freedcamp will remain as the tool for planning generic tasks. Since most contributors have now joined, new members can only edit tasks if they are invited.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;want-to-join-the-contributors%3F&quot; tabindex=&quot;-1&quot;&gt;Want to join the contributors? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/contributor-meeting-1/#want-to-join-the-contributors%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Whether you are a developer, designer, artist or writer, you are always free to create Pull Requests or add issues to the Xenko github project.&lt;/p&gt;
&lt;p&gt;If you are interested in participating in the contributor meetings and the &lt;a href=&quot;https://freedcamp.com/Xenko_YO2/XenkoManagementT_3sf/todos/&quot;&gt;Xenko Freedcamp project&lt;/a&gt;, please send a private message to &lt;a href=&quot;https://forums.stride3d.net/u/Aggror/&quot;&gt;AggrorJorn&lt;/a&gt; using the Xenko forum. All you need to do is send in your email address and what areas of contributing you are interested in. You will be invited to join the publicly viewable &lt;a href=&quot;https://freedcamp.com/Xenko_YO2/XenkoManagementT_3sf/todos/&quot;&gt;Xenko Freedcamp project&lt;/a&gt; which we use to keep track of all sorts of tasks that people are working on. We can then also have a quick chat to get you up to speed on any tasks.&lt;/p&gt;
</description>
      <pubDate>Tue, 01 Oct 2019 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/contributor-meeting-1/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/contributor-meeting-1/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Recap September 2019</title>
      <description>&lt;p&gt;Welcome to the September blog post of Xenko. In this blog, we will have a quick recap on what&#39;s going on with Xenko development and its community. From now on we will have a monthly recap blog to let the world know what we are up to.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/september-2019/#picking-up-speed&quot;&gt;Picking Up Speed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/september-2019/#new-project-overview&quot;&gt;New Project Overview&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/september-2019/#what-is-being-worked-on&quot;&gt;What is being worked on&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/september-2019/#possible-name-change&quot;&gt;Possible Name Change&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;picking-up-speed&quot; tabindex=&quot;-1&quot;&gt;Picking Up Speed &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/september-2019/#picking-up-speed&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Since the last developer meeting in July, it was made clear that Xenko really needs the help of the community to improve. Part of improving is making sure that the community can help out on various aspects of Xenko. This is not just the development of the Xenko engine itself, but also all the other processes that are involved around it. You can follow the ongoing forum discussion &lt;a href=&quot;https://forums.stride3d.net/t/community-call-for-help/1997&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;new-project-overview&quot; tabindex=&quot;-1&quot;&gt;New Project Overview &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/september-2019/#new-project-overview&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;As part of getting things done quicker, a new public project overview has been set up using Freedcamp. In this here we track of ongoing tasks, who is assigned to it and what possible milestones are. If you want to contribute to this project or just check out the current tasks, have a &lt;a href=&quot;https://freedcamp.com/Xenko_YO2/XenkoManagementT_3sf/todos&quot;&gt;look&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://freedcamp.com/Xenko_YO2/XenkoManagementT_3sf/todos&quot; title=&quot;Freedcamp project&quot; class=&quot;mb-3&quot;&gt;&lt;img alt=&quot;Freedcamp project&quot; src=&quot;https://www.stride3d.net/images/blog/2019-09-23-september-2019/freedcamp.png&quot; class=&quot;img-fluid&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2019-09-23-september-2019/freedcamp.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;what-is-being-worked-on&quot; tabindex=&quot;-1&quot;&gt;What is being worked on &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/september-2019/#what-is-being-worked-on&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here are some of the things that are being worked on:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;New tutorials section for the &lt;a href=&quot;https://doc.stride3d.net/latest/en/index.html&quot;&gt;documentation&lt;/a&gt; website. Starting with a section of C# basics with Xenko, we can start making it easier for people to get the hang of Xenko in no time. Here is a quick &lt;a href=&quot;https://forums.stride3d.net/t/improving-the-api-documentation/1961/18&quot;&gt;peek&lt;/a&gt; at how it is going to look like.&lt;/li&gt;
&lt;li&gt;Phr00t fork merging: The &lt;a href=&quot;https://github.com/phr00t/xenko&quot;&gt;Phr00t fork&lt;/a&gt; contains many features that the main Xenko engine could benefit from. From countless API improvements to bigger features like Vulkan improvements. Right now contributors are looking in which features and functionality to move to the main Xenko repository.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;possible-name-change&quot; tabindex=&quot;-1&quot;&gt;Possible Name Change &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/september-2019/#possible-name-change&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For those of you who have missed it: Xenko is looking for a possible rename of the engine. If you want to know more about the why and why not, have a look at this &lt;a href=&quot;https://forums.stride3d.net/t/xenko-help-us-find-a-new-name-logo-for-the-engine-if-we-have-to-rename/1980&quot;&gt;forum topic&lt;/a&gt;. Regardless of whether the name change will happen, we need to find a suitable candidate. In a few weeks, we will start a poll to narrow down the long list of suggested names. A more detailed blog on this will follow soon. In the meantime, if you have a great idea, feel free to make a suggestion in the topic above or in the Xenko discord channel “Name-change”.&lt;/p&gt;
</description>
      <pubDate>Mon, 23 Sep 2019 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/september-2019/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/september-2019/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2019-09-23-september-2019/thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Community Meeting July 2019</title>
      <description>&lt;p&gt;Get an overview of Stride&#39;s second community meeting, discussing updates, future plans, and addressing questions from developers and users of the game engine.&lt;/p&gt;
&lt;p&gt;Time for our second community meeting.&lt;/p&gt;
&lt;p&gt;Yes, it has been renamed from Developer meeting to Community meeting to better reflect the intended target audience.&lt;/p&gt;
&lt;p&gt;This time, the idea is not only to find where Xenko should head next (I am sure there will be hundreds of ideas, many of them already waiting on GitHub issues!), but also to find more people volunteering to take over some of those tasks!&lt;/p&gt;
&lt;p&gt;Here is a &lt;a href=&quot;https://www.timeanddate.com/worldclock/converted.html?iso=20190724T15&amp;amp;p1=0&amp;amp;p2=37&amp;amp;p3=195&amp;amp;p4=248&amp;amp;p5=224&amp;amp;p6=179&amp;amp;p7=136&quot;&gt;tentative schedule&lt;/a&gt; for this meeting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;UTC (GMT)&lt;/strong&gt; Wednesday, 24 July 2019, 15:00:00	UTC&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Berlin (Germany)&lt;/strong&gt; Wednesday, 24 July 2019, 17:00:00	CEST&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paris (France)&lt;/strong&gt; Wednesday, 24 July 2019, 17:00:00	CEST&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tokyo (Japan)&lt;/strong&gt; Thursday, 25 July 2019, 00:00:00	JST&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;San Francisco (USA - California)&lt;/strong&gt; Wednesday, 24 July 2019, 08:00:00	PDT&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New York (USA - New York)&lt;/strong&gt; Wednesday, 24 July 2019, 11:00:00	EDT&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;London (United Kingdom)&lt;/strong&gt; Wednesday, 24 July 2019, 16:00:00	BST&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It will be held on &lt;a href=&quot;https://discord.gg/f6aerfE&quot;&gt;Discord&lt;/a&gt; in the #dev-meetings channel.&lt;/p&gt;
&lt;p&gt;Please come define the future of Xenko with us!&lt;/p&gt;
</description>
      <pubDate>Fri, 19 Jul 2019 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/community-meeting-2/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/community-meeting-2/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Starbreach Demo</title>
      <description>&lt;p&gt;Explore the impressive Starbreach demo, a testament to Stride&#39;s powerful 3D game development capabilities, featuring stunning visuals, smooth gameplay experiences, and a glimpse into the engine&#39;s potential for creating immersive and engaging gaming worlds.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/xenko3d/Starbreach&quot; title=&quot;Starbreach Demo&quot; class=&quot;mb-3&quot;&gt;&lt;img alt=&quot;Starbreach Demo&quot; src=&quot;https://www.stride3d.net/images/blog/2019-05-31-starbreach-demo/starbreach_poster.webp&quot; class=&quot;img-fluid&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2019-05-31-starbreach-demo/starbreach_poster.webp&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Hi everyone, Silicon Studio agreed to release the Starbreach demo from GDC 2017, along with all associated assets as open source (see license), for the Xenko community to use. Code in the project is released under an MIT license, the assets are released under a attribution-NonCommercial 4.0 International (CC BY-NC 4.0) license.&lt;/p&gt;
&lt;p&gt;Starbreach was originally developed as the Xenko GDC demo for 2016 by Silicon Studio with art support from &lt;a href=&quot;https://www.n-ix.com/&quot;&gt;N-iX production studios&lt;/a&gt;. Virgile Bello (&lt;a href=&quot;https://github.com/xen2&quot;&gt;xen&lt;/a&gt;), Xenko’s lead developer has spent a chunk of time updating the demo and assets to work with the latest release of the Xenko.&lt;/p&gt;
&lt;p&gt;You can find the demo and assets here:&lt;br /&gt;
&lt;a href=&quot;https://github.com/xenko3d/Starbreach&quot;&gt;https://github.com/xenko3d/Starbreach&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;And more on the licensing here: &lt;a href=&quot;https://github.com/xenko3d/Starbreach/blob/master/LICENSE.md&quot;&gt;https://github.com/xenko3d/Starbreach/blob/master/LICENSE.md&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;xenko-now-has-a-great-playable-demo...-can-we-make-it-even-better%3F&quot; tabindex=&quot;-1&quot;&gt;Xenko now has a great playable demo... Can we make it even better? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/starbreach-demo/#xenko-now-has-a-great-playable-demo...-can-we-make-it-even-better%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The community is doing a great job building out the xenko 3.1.0.1 beta release especially filling in gaps, fixing bugs and fulfilling the promise of a community led game engine - so special thanks to &lt;a href=&quot;https://github.com/tebjan&quot;&gt;Tebjan&lt;/a&gt;, &lt;a href=&quot;https://github.com/phr00t&quot;&gt;phr00t&lt;/a&gt;, &lt;a href=&quot;https://github.com/dfkeenan&quot;&gt;dfkeenan&lt;/a&gt;, &lt;a href=&quot;https://github.com/Eideren&quot;&gt;Eideren&lt;/a&gt;, &lt;a href=&quot;https://github.com/venthe&quot;&gt;Venthe&lt;/a&gt;, &lt;a href=&quot;https://github.com/Aggror&quot;&gt;Aggror&lt;/a&gt;, Pred, Jarmo, dio and &lt;a href=&quot;https://github.com/xen2&quot;&gt;xen&lt;/a&gt; to name only a few.&lt;/p&gt;
&lt;p&gt;With the release of Starbreach demo - we now have a great playable demo that shows off Xenko. xen’s thrown the glove down and done his part with getting release permission and updating - but can everyone in the community help make it even better?  Maybe by adding additional AI, improving the game play or adding a new boss character or full levels?  Source is on &lt;a href=&quot;https://github.com/xenko3d/Starbreach&quot;&gt;github&lt;/a&gt; and let’s discuss on &lt;a href=&quot;https://discord.gg/f6aerfE&quot;&gt;Discord&lt;/a&gt; or in the &lt;a href=&quot;https://forums.stride3d.net/&quot;&gt;Forum&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Fri, 31 May 2019 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/starbreach-demo/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/starbreach-demo/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2019-05-31-starbreach-demo/starbreach_thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Welcome TurboPlay as Gold Sponsor</title>
      <description>&lt;p&gt;We&#39;re happy to announce TurboPlay is helping Xenko not only as a Gold Sponsor, but also have further plans to support Xenko in the future.&lt;/p&gt;
&lt;img alt=&quot;TurboPlay&quot; src=&quot;https://www.stride3d.net/images/blog/2019-02-12-turboplay-gold-sponsor/logo_turboplay.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2019-02-12-turboplay-gold-sponsor/logo_turboplay.png&quot; /&gt;
&lt;p&gt;Our respective visions for a more open game engine and decentralized marketplace seem to have a lot in common.&lt;/p&gt;
&lt;p&gt;Thanks TurboPlay for supporting Xenko and its community! This is a very exciting milestone and hopefully the beginning of a new era for Xenko!&lt;/p&gt;
&lt;p&gt;Open the full post for the press release in all its glory.&lt;/p&gt;
&lt;h2 id=&quot;press-release%3A-turboplay-announces-videogame-engine-support-with-xenko&quot; tabindex=&quot;-1&quot;&gt;Press Release: TurboPlay Announces Videogame Engine Support With Xenko &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/turboplay-gold-sponsor/#press-release%3A-turboplay-announces-videogame-engine-support-with-xenko&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;TurboPlay is pleased to announce Gold Sponsorship for the Xenko Game Engine and its Open Source Community.&lt;/p&gt;
&lt;p&gt;“We’re pumped to have the opportunity to support the Xenko development team and work with them to develop amazing new technologies for their community and ours! Xenko is a modern game engine technology developed entirely in C#. Xenko’s technology has incredible potential in today’s gaming market. Through this partnership we can provide direct support to Xenko indie developers,” said Vince McMullin, TurboPlay President and CEO.&lt;/p&gt;
&lt;p&gt;Launching in 2019, TurboPlay is developing a full-fledged marketplace ecosystem by maximizing exposure for unique indie content. TurboPlay is the world’s first ultra-modern, fully-scalable, fault-tolerant, peer-to-peer, videogames marketplace.&lt;/p&gt;
&lt;p&gt;“I&#39;m super excited to work with TurboPlay! We’ll be able to achieve great things together. I believe that both organizations are philosophically aligned, embracing the ideas of permissive open-source, decentralized and distributed architectures to disrupt the status quo in the games industry,” explains Virgile Bello, Lead Engine Developer.&lt;/p&gt;
&lt;p&gt;TurboPlay plans to support Xenko in future endeavors, including their Indie Community, with developer grants supporting game development using both Xenko &amp;amp; TurboPlay technologies.&lt;/p&gt;
&lt;p&gt;For further inquiries regarding this topic, please contact our CMO, Lisa Weeks, by email, &lt;a href=&quot;mailto:lisaw@turboplay.com&quot;&gt;lisaw@turboplay.com&lt;/a&gt;. Thank you.&lt;/p&gt;
&lt;p&gt;LinkedIn&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.linkedin.com/company/turboplay&quot;&gt;https://www.linkedin.com/company/turboplay&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.linkedin.com/company/xenko&quot;&gt;https://www.linkedin.com/company/xenko&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Twitter&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://twitter.com/trbplay&quot;&gt;https://twitter.com/trbplay&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://twitter.com/xenko3d&quot;&gt;https://twitter.com/xenko3d&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Facebook&lt;/p&gt;
&lt;p&gt;​&lt;a href=&quot;https://www.facebook.com/TRBPlay&quot;&gt;https://www.facebook.com/TRBPlay&lt;/a&gt;&lt;br /&gt;
&lt;a href=&quot;https://www.facebook.com/xenko3d&quot;&gt;https://www.facebook.com/xenko3d&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Link to the official press-release:&lt;br /&gt;
&lt;a href=&quot;https://www.newswire.com/news/turboplay-announces-videogame-engine-support-with-xenko-20801982&quot;&gt;https://www.newswire.com/news/turboplay-announces-videogame-engine-support-with-xenko-20801982&lt;/a&gt;&lt;/p&gt;
</description>
      <pubDate>Tue, 12 Feb 2019 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/turboplay-gold-sponsor/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/turboplay-gold-sponsor/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2019-02-12-turboplay-gold-sponsor/logo_turboplay.png" type="image/png" length="0" /></item>
    <item>
      <title>Developer Meeting January 2019</title>
      <description>&lt;p&gt;Get insights from Stride&#39;s first developer meeting, covering project status, development progress, and future plans for this versatile game engine.&lt;/p&gt;
&lt;p&gt;Now that &lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0-beta/&quot;&gt;Xenko 3.1 beta is well underway&lt;/a&gt;, it&#39;s time to prepare for the future.&lt;/p&gt;
&lt;p&gt;As part of this process, I would like to involve our newly formed community.&lt;/p&gt;
&lt;p&gt;The idea is to decide together during a developer meeting what are the next long-term targets for Xenko, and what to put in release 3.2+.&lt;/p&gt;
&lt;p&gt;The first developer meeting will be open to everybody (developers, users and potential future users).&lt;br /&gt;
It&#39;s possible we then evolve toward a more moderated format if needed.&lt;/p&gt;
&lt;p&gt;Here is a &lt;a href=&quot;https://www.timeanddate.com/worldclock/fixedtime.html?msg=Xenko+Developer+Meeting+%231&amp;amp;iso=20190123T01&amp;amp;p1=248&amp;amp;ah=1&quot;&gt;tentative schedule&lt;/a&gt; for this meeting:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Tokyo (Japan)&lt;/strong&gt; Wednesday, 23 January 2019, 01:00:00	JST&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Berlin (Germany)&lt;/strong&gt; Tuesday, 22 January 2019, 17:00:00	CET&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Paris (France)&lt;/strong&gt; Tuesday, 22 January 2019, 17:00:00	CET&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;London (United Kingdom)&lt;/strong&gt; Tuesday, 22 January 2019, 16:00:00	GMT	UTC&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;San Francisco (USA - California)&lt;/strong&gt; Tuesday, 22 January 2019, 08:00:00	PST&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;New York (USA - New York)&lt;/strong&gt; Tuesday, 22 January 2019, 11:00:00	EST&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UTC (GMT)&lt;/strong&gt; Tuesday, 22 January 2019, 16:00:00&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It will be held on &lt;a href=&quot;https://discord.gg/f6aerfE&quot;&gt;Discord&lt;/a&gt; in the #dev-meetings channel.&lt;/p&gt;
&lt;p&gt;Please come define the future of Xenko with us!&lt;/p&gt;
</description>
      <pubDate>Sat, 19 Jan 2019 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/developer-meeting-1/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/developer-meeting-1/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko 3.1 Beta Released</title>
      <description>&lt;p&gt;Explore the Xenko 3.1.0 beta release, featuring exciting new features, enhancements, and improvements in this powerful 3D game engine by Stride.&lt;/p&gt;
&lt;p&gt;Just in time for Christmas, &lt;strong&gt;Xenko 3.1 Beta&lt;/strong&gt; is out now!&lt;/p&gt;
&lt;p&gt;One of the major change is turning the engine into separate NuGet packages, published on &lt;a href=&quot;https://www.nuget.org/profiles/stride3d.net&quot;&gt;NuGet.org&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Merry Christmas and Happy Holidays!&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0-beta/#xenko-3.1-loves-nuget!&quot;&gt;Xenko 3.1 Loves NuGet!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0-beta/#coming-soon&quot;&gt;Coming Soon&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0-beta/#xenko-assets-distribution&quot;&gt;Xenko Assets Distribution&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0-beta/#full-switch-to-.net-standard&quot;&gt;Full Switch to .NET Standard&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;xenko-3.1-loves-nuget!&quot; tabindex=&quot;-1&quot;&gt;Xenko 3.1 Loves NuGet! &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0-beta/#xenko-3.1-loves-nuget!&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Xenko was always a big proponent of NuGet: since first version, Xenko was distributed as a NuGet package.&lt;/p&gt;
&lt;p&gt;However, due to limitations (hello packages.config and project.json!), we were leveraging NuGet more as a distribution medium than proper NuGet packages: Xenko 3.0 is still a monolithic single package and it would not work out of the box when referenced from Visual Studio without using Xenko Launcher and Game Studio.&lt;/p&gt;
&lt;p&gt;Xenko 3.0 paved the way by making Xenko compatible with the new project system (game projects were referencing Xenko using a &lt;code&gt;PackageReference&lt;/code&gt;).&lt;/p&gt;
&lt;img alt=&quot;Xenko Solution&quot; src=&quot;https://www.stride3d.net/images/blog/2018-11-13-feature-spotlight-xenko-3-1-and-nuget/xenko-ref-old.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2018-11-13-feature-spotlight-xenko-3-1-and-nuget/xenko-ref-old.png&quot; /&gt;
&lt;p&gt;Today, Xenko 3.1 brings Xenko as a set of smaller NuGet package, each containing one assembly, with proper dependencies:&lt;/p&gt;
&lt;img alt=&quot;Xenko NuGet references&quot; src=&quot;https://www.stride3d.net/images/blog/2018-11-13-feature-spotlight-xenko-3-1-and-nuget/xenko-ref-new.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2018-11-13-feature-spotlight-xenko-3-1-and-nuget/xenko-ref-new.png&quot; /&gt;
&lt;p&gt;As a result, it is now possible to create a game project that references only the packages you want. Here are a few examples of &amp;quot;core&amp;quot; packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Xenko.Engine&lt;/code&gt;: allows you to use core engine runtime (including its dependencies)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Core.Assets.CompilerApp&lt;/code&gt;: compile assets at build time&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Core.Mathematics&lt;/code&gt; or &lt;code&gt;Xenko.Graphics&lt;/code&gt;: yes, if you want to make a custom project only using Xenko mathematics or graphics API without the full Xenko engine, you can!&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Core.Assets&lt;/code&gt;, &lt;code&gt;Xenko.Presentation&lt;/code&gt; or &lt;code&gt;Xenko.Quantum&lt;/code&gt;: all those piece of tech being used to build Xenko tooling are also available for reuse in other projects. Nothing prevents you from generating assets on the fly too!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, various parts of the engine are distributed as &lt;strong&gt;optional&lt;/strong&gt; packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Xenko.Physics&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Particles&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.UI&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.SpriteStudio&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Video&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you don&#39;t reference those packages, they won&#39;t be packaged with your game either. In many situations, it results in a smaller packaged game and improved startup time.&lt;/p&gt;
&lt;p&gt;Also, you are free to replace those functionalities with alternative libraries.&lt;/p&gt;
&lt;h2 id=&quot;coming-soon&quot; tabindex=&quot;-1&quot;&gt;Coming Soon &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0-beta/#coming-soon&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;xenko-assets-distribution&quot; tabindex=&quot;-1&quot;&gt;Xenko Assets Distribution &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0-beta/#xenko-assets-distribution&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Xenko Assets will be packed and distributed with NuGet automatically.&lt;/p&gt;
&lt;p&gt;Coming soon in next beta, C# projects containing Xenko assets will have those assets automatically NuGet packaged in a &lt;code&gt;xenko&lt;/code&gt; folder.&lt;/p&gt;
&lt;p&gt;As a result, you will soon be able to generate NuGet package containing Xenko assets out of the box from Visual Studio and publish them on &lt;a href=&quot;https://nuget.org/&quot;&gt;NuGet.org&lt;/a&gt; for general consumption for other Xenko users.&lt;/p&gt;
&lt;p&gt;We can&#39;t wait to see what will come up!&lt;/p&gt;
&lt;h2 id=&quot;full-switch-to-.net-standard&quot; tabindex=&quot;-1&quot;&gt;Full Switch to .NET Standard &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-3-1-0-beta/#full-switch-to-.net-standard&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Soon Xenko will support .NET Standard for most of its assemblies.&lt;/p&gt;
&lt;p&gt;Xenko games will be able to run on .NET Core for Windows (Linux is already supported).&lt;/p&gt;
</description>
      <pubDate>Mon, 24 Dec 2018 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/release-xenko-3-1-0-beta/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/release-xenko-3-1-0-beta/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Feature Spotlight: Xenko 3.1 + NuGet</title>
      <description>&lt;p&gt;Discover the powerful features of Xenko 3.1, the latest update to the Stride 3D game engine. Learn how NuGet integration streamlines development and enhances your game creation experience. Dive into our detailed blog post now!&lt;/p&gt;
&lt;p&gt;Today, I would like to highlight some work being done on Xenko.&lt;/p&gt;
&lt;p&gt;Xenko 3.1 will bring some big changes in the way Xenko is packaged, distributed and consumed.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#xenko-3.0%3A-welcome-packagereference!&quot;&gt;Xenko 3.0: Welcome PackageReference!&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#xenko-3.1%3A-enter-modular-xenko&quot;&gt;Xenko 3.1: Enter Modular Xenko&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#one-package-per-assembly&quot;&gt;One Package per Assembly&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#package-layout%3A-following-best-nuget-practices&quot;&gt;Package Layout: Following Best NuGet Practices&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#xenko-assets-are-also-distributed-as-part-of-package&quot;&gt;Xenko assets are also distributed as part of package&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#distribution-platform%3A-time-to-switch-to-nuget.org%3F&quot;&gt;Distribution Platform: time to switch to &lt;a href=&quot;http://nuget.org/&quot;&gt;nuget.org&lt;/a&gt;?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#xenko-tooling-will-resolve-assemblies-dynamically-using-nuget-api&quot;&gt;Xenko tooling will resolve assemblies dynamically using NuGet API&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#future%3A-plugin-support-for-editor&quot;&gt;Future: Plugin Support for Editor&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#conclusion&quot;&gt;Conclusion&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;xenko-3.0%3A-welcome-packagereference!&quot; tabindex=&quot;-1&quot;&gt;Xenko 3.0: Welcome PackageReference! &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#xenko-3.0%3A-welcome-packagereference!&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Xenko was always a big proponent of NuGet: since first version, Xenko was distributed as a NuGet package.&lt;/p&gt;
&lt;p&gt;However, due to limitations (hello packages.config and project.json!) we were leveraging NuGet more as a distribution medium than proper NuGet packages: Xenko up to 3.0 is still a monolithic single package and it would not work out of the box when referenced from Visual Studio without using launcher and Game Studio.&lt;/p&gt;
&lt;p&gt;Xenko 3.0 paved the way by making Xenko compatible with the new project system (game projects were referencing Xenko using a &lt;code&gt;PackageReference&lt;/code&gt;).&lt;/p&gt;
&lt;p&gt;This Xenko &amp;quot;fat&amp;quot; package is still containing everything: Xenko runtime, editor, compilers, samples. Various features of Xenko are forced onto the users: UI, Physics, SpriteStudio, etc...&lt;/p&gt;
&lt;p&gt;Additionally, Xenko assembly references are still manually added through complex target files rather than following package reference layout and see them where they should have been, nested inside the Xenko NuGet reference:&lt;/p&gt;
&lt;img alt=&quot;GitHub&quot; src=&quot;https://www.stride3d.net/images/blog/2018-11-13-feature-spotlight-xenko-3-1-and-nuget/xenko-ref-old.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2018-11-13-feature-spotlight-xenko-3-1-and-nuget/xenko-ref-old.png&quot; /&gt;
&lt;h2 id=&quot;xenko-3.1%3A-enter-modular-xenko&quot; tabindex=&quot;-1&quot;&gt;Xenko 3.1: Enter Modular Xenko &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#xenko-3.1%3A-enter-modular-xenko&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Most of the changes discussed in this section are still in a prototype state, but should hopefully be merged soon in master.&lt;/p&gt;
&lt;h3 id=&quot;one-package-per-assembly&quot; tabindex=&quot;-1&quot;&gt;One Package per Assembly &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#one-package-per-assembly&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Xenko 3.1 will bring Xenko more in line with a more proper way of organizing NuGet package: one package per assembly, with proper dependencies:&lt;/p&gt;
&lt;img alt=&quot;GitHub&quot; src=&quot;https://www.stride3d.net/images/blog/2018-11-13-feature-spotlight-xenko-3-1-and-nuget/xenko-ref-new.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2018-11-13-feature-spotlight-xenko-3-1-and-nuget/xenko-ref-new.png&quot; /&gt;
&lt;p&gt;As a result, it is now possible to create a game project that references only the packages you want. Here are a few examples of &amp;quot;core&amp;quot; packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Xenko.Engine&lt;/code&gt;: allows you to use core engine runtime (including its dependencies)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Core.Assets.CompilerApp&lt;/code&gt;: compile assets at build time&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Core.Mathematics&lt;/code&gt; or &lt;code&gt;Xenko.Graphics&lt;/code&gt;: yes, if you want to make a custom project only using Xenko mathematics or graphics API without the full Xenko engine, you can!&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Core.Assets&lt;/code&gt;, &lt;code&gt;Xenko.Presentation&lt;/code&gt; or &lt;code&gt;Xenko.Quantum&lt;/code&gt;: all those piece of tech being used to build Xenko tooling are also available for reuse in other projects. Nothing prevents you from generating assets on the fly too!&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Then, various parts of the engine will be distributed as &lt;strong&gt;optional&lt;/strong&gt; packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Xenko.Physics&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Particles&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.UI&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.SpriteStudio&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;Xenko.Video&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If you don&#39;t reference those packages, they won&#39;t be packaged with your game either. In many situations, it will result in a smaller packaged game and improved startup time.&lt;/p&gt;
&lt;p&gt;Also, you will be free to replace those functionalities with alternative libraries.&lt;/p&gt;
&lt;h3 id=&quot;package-layout%3A-following-best-nuget-practices&quot; tabindex=&quot;-1&quot;&gt;Package Layout: Following Best NuGet Practices &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#package-layout%3A-following-best-nuget-practices&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Previously Xenko references were added to the project using custom targets.&lt;/p&gt;
&lt;p&gt;New packages will now be layout as NuGet/Visual Studio expects them, in folders like &lt;code&gt;lib/net45&lt;/code&gt; and &lt;code&gt;lib/monodroid10&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;We still have a few custom MSBuild targets but reduced them to minimum.&lt;/p&gt;
&lt;h3 id=&quot;xenko-assets-are-also-distributed-as-part-of-package&quot; tabindex=&quot;-1&quot;&gt;Xenko assets are also distributed as part of package &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#xenko-assets-are-also-distributed-as-part-of-package&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;NuGet packages will have a &lt;code&gt;xenko&lt;/code&gt; folder containing Xenko assets. As a result, user will be able to generate nuget package containing Xenko assets out of the box from Visual Studio and publish them on NuGet for general consumption.&lt;/p&gt;
&lt;h3 id=&quot;distribution-platform%3A-time-to-switch-to-nuget.org%3F&quot; tabindex=&quot;-1&quot;&gt;Distribution Platform: time to switch to &lt;a href=&quot;http://nuget.org/&quot;&gt;nuget.org&lt;/a&gt;? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#distribution-platform%3A-time-to-switch-to-nuget.org%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;This is still something under consideration and it will need some testing, but it now starts to make sense to distribute Xenko packages on &lt;a href=&quot;https://nuget.org/&quot;&gt;nuget.org&lt;/a&gt; rather than our custom NuGet server.&lt;/p&gt;
&lt;p&gt;This will greatly reduce friction to try Xenko (any project would work out of the box in Visual Studio). This might also make our launcher completely optional, if not redundant.&lt;/p&gt;
&lt;h3 id=&quot;xenko-tooling-will-resolve-assemblies-dynamically-using-nuget-api&quot; tabindex=&quot;-1&quot;&gt;Xenko tooling will resolve assemblies dynamically using NuGet API &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#xenko-tooling-will-resolve-assemblies-dynamically-using-nuget-api&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Tools such as GameStudio or Asset Compiler will be distributed as NuGet packages. However, it won&#39;t bundle Xenko Runtime, which will simply be encoded as dependency.&lt;/p&gt;
&lt;p&gt;When running those tools, they will resolve Xenko runtime assemblies directly in the NuGet cache.&lt;/p&gt;
&lt;p&gt;This allows for distributing those tools as very small and easy-to-upgrade packages, avoiding file duplications. This is similar to what &lt;code&gt;dotnet-cli&lt;/code&gt; is doing with deps file.&lt;/p&gt;
&lt;p&gt;This brings lot of technical challenges but should allow us in the future to be more flexible in the future to load the exact runtime and plugins that the user project reference rather than the one hardcoded with the tool.&lt;/p&gt;
&lt;h3 id=&quot;future%3A-plugin-support-for-editor&quot; tabindex=&quot;-1&quot;&gt;Future: Plugin Support for Editor &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#future%3A-plugin-support-for-editor&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Xenko 3.1 editor will still be monolithic: editor support for UI, SpriteStudio, Video and other optional modules will be hardcoded.&lt;/p&gt;
&lt;p&gt;However, the target is to get rid of them as soon as possible, and treat them as what they are: plugins.&lt;/p&gt;
&lt;h2 id=&quot;conclusion&quot; tabindex=&quot;-1&quot;&gt;Conclusion &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/#conclusion&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This is just the beginning, laying out foundations to turn Xenko into a set of reusable libraries. Much more to come soon!&lt;/p&gt;
&lt;p&gt;This is an exciting era for Xenko. Hopefully it will open doors to many new use cases, and bring us lot of new potential users and developers!&lt;/p&gt;
</description>
      <pubDate>Tue, 13 Nov 2018 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/feature-spotlight-xenko-3-1-and-nuget/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Opensourcing Done! What&#39;s Next?</title>
      <description>&lt;p&gt;Explore the future of Stride 3D game engine after going open source. Understand the roadmap, exciting developments, and how the community plays a crucial role in shaping its growth. Read our in-depth blog post to learn more!&lt;/p&gt;
&lt;p&gt;Now that &lt;a href=&quot;https://www.stride3d.net/blog/whats-next-after-opensource/2018-08-02-xenko-opensource-mit.md&quot;&gt;Xenko is opensource under the MIT license&lt;/a&gt; and the dust settled a little bit (took a few weeks of vacations after the opensource release crunch), it&#39;s time to take a step back, think about &lt;strong&gt;what&#39;s next&lt;/strong&gt;, and start &lt;strong&gt;building it together&lt;/strong&gt;!&lt;/p&gt;
&lt;h2 id=&quot;we-need-help!&quot; tabindex=&quot;-1&quot;&gt;We need help! &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/whats-next-after-opensource/#we-need-help!&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;First of all, the main objective will be to &lt;strong&gt;grow our developer and user community&lt;/strong&gt;. Xenko has no chance to succeed if we don&#39;t have enough people contributing on and using it.&lt;/p&gt;
&lt;p&gt;Thanks to its still small but dedicated community of early adopters, within a few weeks, Xenko already had a bunch of &lt;a href=&quot;https://github.com/xenko3d/xenko/pulls?utf8=%E2%9C%93&amp;amp;q=&quot;&gt;pull requests&lt;/a&gt; accepted and &lt;a href=&quot;https://github.com/xenko3d/xenko/issues&quot;&gt;issues&lt;/a&gt; opened during those few days. This has led to new releases including some of the new fixes and features.&lt;/p&gt;
&lt;p&gt;Thanks everybody, your help is very much appreciated! Please keep up the great work!&lt;/p&gt;
&lt;p&gt;Of course, Xenko can&#39;t compete yet against more famous alternatives in terms of features, but I think Xenko is already an &lt;strong&gt;attractive choice&lt;/strong&gt; for several populations, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;people wanting to develop and/or experiment on a game engine&lt;/li&gt;
&lt;li&gt;companies wanting to invest in open technologies, and build freely on top of it&lt;/li&gt;
&lt;li&gt;indie developers&lt;/li&gt;
&lt;li&gt;non-game projects&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We will need your help to find those people: please &lt;strong&gt;spread the word!&lt;/strong&gt; Feel free to &lt;a href=&quot;https://www.stride3d.net/contact&quot;&gt;contact us&lt;/a&gt; if you have any idea (company interested in Xenko, marketing opportunities, etc...).&lt;/p&gt;
&lt;h2 id=&quot;roadmap&quot; tabindex=&quot;-1&quot;&gt;Roadmap &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/whats-next-after-opensource/#roadmap&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;I have started to organize the list of Epic features into a &lt;a href=&quot;https://github.com/xenko3d/xenko/projects/3&quot;&gt;roadmap draft&lt;/a&gt; on GitHub. It&#39;s still an early work in progress so please check regularly. We will also be using &lt;a href=&quot;https://app.zenhub.com/workspace/o/xenko3d/xenko&quot;&gt;ZenHub&lt;/a&gt; to organize issues and epics.&lt;/p&gt;
&lt;p&gt;Feel free to add your own ideas!&lt;/p&gt;
&lt;p&gt;However, I want to stress an important point: this just acts as a &lt;strong&gt;wishlist&lt;/strong&gt; and it should only be taken as a recommendation of what need some work.&lt;/p&gt;
&lt;p&gt;Being an &lt;strong&gt;opensource&lt;/strong&gt; project, I can&#39;t and don&#39;t want to enforce a strict roadmap. People work out of motivation driven by their own interests or needs for their own projects. This is &lt;strong&gt;incompatible with enforcing a roadmap&lt;/strong&gt; and strict deadline. This might change later if we get enough funding to hire full-time people.&lt;/p&gt;
&lt;p&gt;Still, if you are not sure what to help with, starting with the &lt;a href=&quot;https://github.com/xenko3d/xenko/issues&quot;&gt;issues&lt;/a&gt; is probably a good starting point (I will mark some of them with the &lt;a href=&quot;https://github.com/xenko3d/xenko/labels/good%20first%20issue&quot;&gt;good first issue&lt;/a&gt; label). Feel free to stop by &lt;a href=&quot;https://gitter.im/xenko3d/xenko&quot;&gt;gitter&lt;/a&gt; to discuss with the developers.&lt;/p&gt;
&lt;p&gt;Please state your intention to work on something on GitHub issues, and confirm how to do it with other collaborators to make sure it doesn&#39;t conflict and will be accepted smoothly.&lt;/p&gt;
&lt;p&gt;Expect some tweets and blogs posts about what&#39;s being worked on in the coming weeks.&lt;/p&gt;
&lt;h2 id=&quot;donations&quot; tabindex=&quot;-1&quot;&gt;Donations &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/whats-next-after-opensource/#donations&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;OUTDATED: Use &lt;a href=&quot;https://opencollective.com/stride3d&quot;&gt;Open Collective&lt;/a&gt; instead.&lt;br /&gt;
&lt;s&gt;If you want to help Xenko, or if Xenko is helping you or your company, please consider &lt;strong&gt;donating&lt;/strong&gt; on &lt;a href=&quot;https://patreon.com/xenko&quot;&gt;Patreon&lt;/a&gt;.&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;This will help me not having to focus on side projects to secure money, and bring me peace of mind to focus solely on Xenko. Since my plan is to work full-time on it, this will be my main source of income for now.&lt;/p&gt;
&lt;p&gt;I extend my thanks to early donors for supporting the project in its infancy! Your help means a lot.&lt;/p&gt;
&lt;p&gt;And thanks again everybody for your support and time so far, and let&#39;s hope for a &lt;strong&gt;bright future for Xenko&lt;/strong&gt;!&lt;/p&gt;
</description>
      <pubDate>Wed, 22 Aug 2018 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/whats-next-after-opensource/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/whats-next-after-opensource/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko 3.0 is Now Free and Open-Source!</title>
      <description>&lt;p&gt;Unveiling Xenko&#39;s transition to an open-source MIT license, opening doors for developers to access and contribute to the powerful Stride 3D game engine. Learn about the benefits, opportunities, and how to get involved in our comprehensive blog post!&lt;/p&gt;
&lt;p&gt;You read that right. &lt;b&gt;Xenko 3.0&lt;/b&gt; is out now, released under the permissive &lt;b&gt;&lt;a href=&quot;https://opensource.org/licenses/MIT&quot;&gt;MIT license&lt;/a&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;From now on, you can use and modify Xenko completely &lt;b&gt;free&lt;/b&gt; — whether you&#39;re a professional, a student, or just looking for a new hobby. This includes both the runtime and editor.&lt;/p&gt;
&lt;p&gt;Main focus for this release was on the open-source transition, but Xenko 3.0 also includes some new features, such as a switch to the new C# project system, video, hair and skin rendering. Read the full release notes &lt;a href=&quot;https://doc.stride3d.net/3.0/en/ReleaseNotes/ReleaseNotes.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.siliconstudio.co.jp/en&quot;&gt;Silicon Studio&lt;/a&gt; no longer supports Xenko, but members of the Xenko team will continue to work on it independently as part of the community. More specifically, I will personally work on it fulltime for the next few months to see if it picks up some steam as a community project. Kudos to Silicon Studio for starting and supporting the project so far! Turning the project open-source and community-driven is a fantastic achievement.&lt;/p&gt;
&lt;p&gt;This project will live &lt;b&gt;thanks to its community&lt;/b&gt; and will have its own GitHub organization. Want to &lt;b&gt;contribute&lt;/b&gt;? Join us on &lt;a href=&quot;https://github.com/xenko3d/xenko/&quot;&gt;GitHub&lt;/a&gt;!&lt;/p&gt;
&lt;img alt=&quot;GitHub&quot; src=&quot;https://www.stride3d.net/images/blog/2018-06-14-xenko-opensource-mit/github.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2018-06-14-xenko-opensource-mit/github.png&quot; /&gt;
&lt;div class=&quot;alert alert-warning d-flex&quot;&gt;
    &lt;span class=&quot;me-3 mt-1&quot;&gt;&lt;i class=&quot;fa-solid fa-triangle-exclamation fa-lg&quot;&gt;&lt;/i&gt;&lt;/span&gt;
    &lt;div&gt;&lt;strong&gt;Updated:&lt;/strong&gt; Use &lt;a href=&quot;https://opencollective.com/stride3d&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Open Collective&lt;/a&gt; to support further Stride Engine development.&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Outdated:&lt;/strong&gt;&lt;br /&gt;
&lt;s&gt;Also, I have setup a &lt;a href=&quot;https://www.patreon.com/xenko&quot;&gt;Patreon page&lt;/a&gt; for people who want to financially support the effort (servers and me working fulltime).&lt;/s&gt;&lt;/p&gt;
&lt;p&gt;We&#39;re proud of everything we and our users have achieved with Xenko over the last three years. We can&#39;t wait to see what you do with it next!&lt;/p&gt;
</description>
      <pubDate>Thu, 02 Aug 2018 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/xenko-opensource-mit/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/xenko-opensource-mit/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Changes to the Xenko License</title>
      <description>&lt;p&gt;Dive into the significant changes to Xenko&#39;s license and how they impact the Stride 3D game engine community. Understand the new licensing terms, benefits, and opportunities they present for developers. Get all the details in our informative blog post!&lt;/p&gt;
&lt;p&gt;Long time no see!&lt;/p&gt;
&lt;p&gt;The Xenko promotion period has ended, and we&#39;ve made some changes to the license plans.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;As of 1 April 2018, Xenko Pro and Xenko Pro Plus are no longer available.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Xenko Personal is still &lt;strong&gt;free&lt;/strong&gt; for personal use and for businesses of less than $200,000 US in annual revenue. If you don&#39;t meet the Xenko Personal criteria, &lt;a href=&quot;http://stride3d.net/contact&quot;&gt;contact us&lt;/a&gt; for a custom plan.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If your business makes over $200,000 US in annual revenue, and you downloaded Xenko before 1 April 2018, you can continue to use Xenko until 1 April 2019. If you want to use Xenko after that, you need to &lt;a href=&quot;http://stride3d.net/contact&quot;&gt;contact us&lt;/a&gt; to create a custom plan before 1 April 2019.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For more information, see the &lt;a href=&quot;https://stride3d.net/faq/&quot;&gt;FAQ&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Meanwhile, we&#39;re exploring the idea of a version of Xenko run entirely by the community. We also have a bunch of updates we&#39;re excited to show you, which we&#39;ll release once we finish exploring licensing options.&lt;/p&gt;
&lt;p&gt;We know it&#39;s been a long wait for Xenko users. We really appreciate your patience.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.stride3d.net/download&quot;&gt;Get Xenko here.&lt;/a&gt;&lt;/p&gt;
</description>
      <pubDate>Fri, 30 Mar 2018 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/changes-to-the-xenko-license/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/changes-to-the-xenko-license/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko Pro Free until April 2018</title>
      <description>&lt;p&gt;Xenko game engine offered free until April 2018! Learn more about this limited-time opportunity in our brief blog update.&lt;/p&gt;
&lt;p&gt;Nope, that’s not an April Fool’s. We&#39;ve extended the Xenko promotion while we explore different licensing options. We can’t reveal too much right now, but we’re hoping to move to a more permissive license.&lt;/p&gt;
&lt;p&gt;In the meantime, Xenko Pro will remain free for everyone until April 1, 2018, as per the existing terms and conditions. Consider it a Christmas present.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.stride3d.net/download&quot;&gt;Get Xenko here.&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Happy holidays!&lt;/p&gt;
</description>
      <pubDate>Thu, 21 Dec 2017 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/xenko-free-until-april-2018/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/xenko-free-until-april-2018/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2017-12-21-xenko-pro-free-until-april-2018/thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Xenko and 3dRudder</title>
      <description>&lt;p&gt;Discover 3dRudder&#39;s integration with the Stride 3D game engine in our concise blog post. Learn about this unique foot-powered controller and its impact on game development.&lt;/p&gt;
&lt;p&gt;The &lt;a href=&quot;https://www.3drudder.com/&quot;&gt;3dRudder&lt;/a&gt; is an interesting piece of hardware that lets you use your feet to control game movement. It&#39;s one of a number of devices out there exploring different ways to interact with VR.&lt;/p&gt;
&lt;img alt=&quot;3dRudder&quot; src=&quot;https://www.stride3d.net/images/blog/3drudder/3drudder.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/3drudder/3drudder.jpg&quot; /&gt;
&lt;p&gt;A while ago, the team at 3dRudder got in touch to show us a prototype they built in Xenko using the &lt;strong&gt;Virtual reality template&lt;/strong&gt; project. This lets you move around the scene by tilting and rotating the 3dRudder.&lt;/p&gt;
&lt;p&gt;The team has &lt;a href=&quot;https://github.com/3dRudder/XenkoGameStudio&quot;&gt;made their Xenko project available on GitHub&lt;/a&gt; for everyone to try out. You&#39;ll need a 3dRunner device with firmware version 1.3.5.2 or later to work with the project.&lt;/p&gt;
&lt;p&gt;The 3dRudder team also took the time to report a bug that force-enabled the &lt;strong&gt;Ignore camera rotation&lt;/strong&gt; VR option when using OpenVR as the API. The option means players can only change the view position by moving the VR device, and not external controllers, like mice, gamepads, or the 3dRudder. Whoops. That was fixed in a recent release.&lt;/p&gt;
&lt;p&gt;It&#39;s great to see developers out there experimenting with Xenko and their creations. If you&#39;re cooking something up that should be on this blog, &lt;a href=&quot;https://stride3d.net/contact/&quot;&gt;we&#39;d love to hear about it&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For more information about the 3dRudder, see the &lt;a href=&quot;https://www.3drudder.com/&quot;&gt;3dRudder site&lt;/a&gt;. For details about setting up VR in Xenko, check out the &lt;a href=&quot;http://doc.stride3d.net/latest/en/manual/virtual-reality/index.html&quot;&gt;VR documentation&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Sun, 24 Sep 2017 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/3drudder/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/3drudder/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko 2.1 Released</title>
      <description>&lt;p&gt;Learn about Stride version 2.1.0, a significant update packed with new features, enhancements, and bug fixes aimed at streamlining game development and improving user experience.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Xenko 2.1&lt;/strong&gt; is out now! Thanks, as ever, to all our users for your feedback.&lt;/p&gt;
&lt;p&gt;For the full list of changes, see the &lt;a href=&quot;http://doc.stride3d.net/2.1/ReleaseNotes/&quot;&gt;release notes&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;summary&quot; tabindex=&quot;-1&quot;&gt;Summary &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#summary&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#summary&quot;&gt;Summary&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#local-reflections&quot;&gt;Local reflections&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#clear-coat-shading&quot;&gt;Clear coat shading&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#thin-glass-materials&quot;&gt;Thin glass materials&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#improved-light-shafts&quot;&gt;Improved light shafts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#texture-streaming&quot;&gt;Texture streaming&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#render-masks&quot;&gt;Render masks&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#improved-profiler&quot;&gt;Improved profiler&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#debug-text&quot;&gt;Debug text&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#rewritten-input-system&quot;&gt;Rewritten input system&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#improved-direct3d-12-support&quot;&gt;Improved Direct3D 12 support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#improved-environment-fresnel&quot;&gt;Improved environment fresnel&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/version-2-1-0/#japanese-documentation&quot;&gt;Japanese documentation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;local-reflections&quot; tabindex=&quot;-1&quot;&gt;Local reflections &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#local-reflections&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Xenko 2.1 introduces &lt;strong&gt;local reflections&lt;/strong&gt;. We wrote about this feature &lt;a href=&quot;https://stride3d.net/blog/real-time-local-reflections-preview/&quot;&gt;back in March&lt;/a&gt;; it&#39;s been through several revisions since then.&lt;/p&gt;
&lt;img alt=&quot;Local reflections&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/local-reflections.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/local-reflections.webp&quot; /&gt;
&lt;p&gt;You can enable and customize local reflections in the graphics compositor on the &lt;strong&gt;post effects&lt;/strong&gt; properties.&lt;/p&gt;
&lt;img alt=&quot;Enable local reflections&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/enable-local-reflections.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/enable-local-reflections.png&quot; /&gt;
&lt;p&gt;For details, see the &lt;a href=&quot;http://doc.stride3d.net/latest/en/manual/graphics/post-effects/local-reflections.html&quot;&gt;local reflections documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;clear-coat-shading&quot; tabindex=&quot;-1&quot;&gt;Clear coat shading &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#clear-coat-shading&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Xenko 2.1 includes a &lt;strong&gt;clear-coat material&lt;/strong&gt; template that uses physically-based rendering to simulate vehicle paint.&lt;/p&gt;
&lt;img alt=&quot;Clear coat&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/clear-coat-2.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/clear-coat-2.webp&quot; /&gt;
&lt;p&gt;Clear-coat shading has several advantages over creating the effect manually with material layers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;layers are blended based on distance&lt;/li&gt;
&lt;li&gt;increased performance&lt;/li&gt;
&lt;li&gt;improved visualization&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You can add a predefined &lt;strong&gt;clear coat&lt;/strong&gt; material from the &lt;strong&gt;Asset view&lt;/strong&gt; under &lt;strong&gt;Add asset &amp;gt; Material&lt;/strong&gt;.&lt;/p&gt;
&lt;img alt=&quot;Add clear coat&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/add-clear-coat.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/add-clear-coat.webp&quot; /&gt;
&lt;p&gt;For details, see the &lt;a href=&quot;http://doc.stride3d.net/latest/en/manual/graphics/materials/clear-coat-shading.html&quot;&gt;clear coat shading documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;thin-glass-materials&quot; tabindex=&quot;-1&quot;&gt;Thin glass materials &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#thin-glass-materials&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can now render thin glass materials such as windshields. The diffuse color controls the tint of the glass and how much light is blocked (darker colors block more light).&lt;/p&gt;
&lt;img alt=&quot;Thin Glass materials&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/glass-materials.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/glass-materials.webp&quot; /&gt;
&lt;p&gt;You can add a predefined &lt;strong&gt;Glass&lt;/strong&gt; material from the &lt;strong&gt;Asset view&lt;/strong&gt; under &lt;strong&gt;Add asset &amp;gt; Material&lt;/strong&gt;.&lt;/p&gt;
&lt;img alt=&quot;Select thin glass material&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/select-thin-glass-material.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/select-thin-glass-material.webp&quot; /&gt;
&lt;h2 id=&quot;improved-light-shafts&quot; tabindex=&quot;-1&quot;&gt;Improved light shafts &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#improved-light-shafts&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can now use &lt;strong&gt;light shafts&lt;/strong&gt; with any kind of light that casts shadows (ie point lights, directional lights, or spot lights). You can also use them with multiple shadow cascades.&lt;/p&gt;
&lt;p&gt;Additionally, Game Studio now displays light shaft bounding volumes in the scene editor, so you can easily see the areas where light shafts are created. To show or hide navigation light shaft bounding volumes, in the &lt;strong&gt;scene editor toolbar&lt;/strong&gt;, open the &lt;strong&gt;gizmo options&lt;/strong&gt; menu and use the &lt;strong&gt;Light shaft bounding volumes&lt;/strong&gt; checkbox.&lt;/p&gt;
&lt;img alt=&quot;Show light shaft bounding volumes&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/show-or-hide-light-shaft-bounding-volume.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/show-or-hide-light-shaft-bounding-volume.png&quot; /&gt;
&lt;p&gt;The &lt;code&gt;LightShaftComponent&lt;/code&gt; settings have been simplified and now have settings to control quality and performance.&lt;/p&gt;
&lt;p&gt;For details, see the &lt;a href=&quot;http://doc.stride3d.net/latest/en/manual/graphics/lights-and-shadows/light-shafts.html&quot;&gt;light shaft documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;texture-streaming&quot; tabindex=&quot;-1&quot;&gt;Texture streaming &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#texture-streaming&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Xenko now supports streaming for textures. This significantly decreases the time it takes to load a game or scene, uses less memory, and makes your game easier to scale.&lt;/p&gt;
&lt;p&gt;Streaming is enabled for textures by default. You can find the option in the texture properties under &lt;strong&gt;Format&lt;/strong&gt;.&lt;/p&gt;
&lt;img alt=&quot;Enable streaming&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/enable-streaming.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/enable-streaming.png&quot; /&gt;
&lt;p&gt;You can also set the global &lt;strong&gt;Streaming&lt;/strong&gt; settings in &lt;strong&gt;Game settings&lt;/strong&gt;.&lt;/p&gt;
&lt;img alt=&quot;Streaming settings&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/streaming-settings.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/streaming-settings.png&quot; /&gt;
&lt;p&gt;For details, see &lt;a href=&quot;http://doc.stride3d.net/latest/en/manual/graphics/textures/streaming.html&quot;&gt;streaming documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;render-masks&quot; tabindex=&quot;-1&quot;&gt;Render masks &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#render-masks&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can now set which render groups a camera renders under &lt;strong&gt;Graphics Compositor &amp;gt; Entry points &amp;gt; Render masks&lt;/strong&gt;. For example, you can have a model be visible to Camera A but invisible to Camera B.&lt;/p&gt;
&lt;img alt=&quot;Render mask&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/change-render-mask.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/change-render-mask.webp&quot; /&gt;
&lt;p&gt;For details, see the &lt;a href=&quot;http://doc.stride3d.net/latest/en/manual/graphics/graphics-compositor/render-groups-and-masks.html&quot;&gt;Render groups and masks documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;improved-profiler&quot; tabindex=&quot;-1&quot;&gt;Improved profiler &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#improved-profiler&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The &lt;strong&gt;Game Profiler&lt;/strong&gt; script now displays more information and is easier to use.&lt;/p&gt;
&lt;img alt=&quot;Profiler at runtime&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/profiling-profiler-at-runtime.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/profiling-profiler-at-runtime.webp&quot; /&gt;
&lt;p&gt;You can now:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;profile GPU information&lt;/li&gt;
&lt;li&gt;switch between CPU, GPU, and FPS-only results with &lt;strong&gt;F1&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;sort the result pages by &lt;strong&gt;Name&lt;/strong&gt; or &lt;strong&gt;Time&lt;/strong&gt; with &lt;strong&gt;F2&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;change how frequently the profiler gets and displays new results with &lt;strong&gt;- / +&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;jump to a results page with the &lt;strong&gt;number keys&lt;/strong&gt;, or move forward and backwards with &lt;strong&gt;F3&lt;/strong&gt; and &lt;strong&gt;F4&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;set parameters in Game Studio:&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt=&quot;Profiler properties&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/profiler-properties.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/profiler-properties.png&quot; /&gt;
&lt;p&gt;For details, see the &lt;a href=&quot;http://doc.stride3d.net/latest/en/manual/troubleshooting/profiling.html&quot;&gt;Profiling documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;debug-text&quot; tabindex=&quot;-1&quot;&gt;Debug text &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#debug-text&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can now display debug text at runtime. For more information, see the &lt;a href=&quot;http://doc.stride3d.net/latest/en/manual/troubleshooting/debug-text.html&quot;&gt;debug text documentation&lt;/a&gt;.&lt;/p&gt;
&lt;img alt=&quot;Debug text&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/my-debug-text.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/my-debug-text.webp&quot; /&gt;
&lt;h2 id=&quot;rewritten-input-system&quot; tabindex=&quot;-1&quot;&gt;Rewritten input system &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#rewritten-input-system&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The input system has been rewritten to track different input devices and allow for better extensibility.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allows detection of added/removed devices through events on the InputManager&lt;/li&gt;
&lt;li&gt;New device interfaces such as &lt;code&gt;IMouseDevice&lt;/code&gt;, &lt;code&gt;IKeyboardDevice&lt;/code&gt;, &lt;code&gt;IGameController&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;High-level &lt;code&gt;IGamePadDevice&lt;/code&gt; replaces the gamepad functionality, with support for XInput&lt;/li&gt;
&lt;li&gt;Lower-level &lt;code&gt;IGameControllerDevice&lt;/code&gt; allows access to numbered buttons/axes&lt;/li&gt;
&lt;li&gt;Automatic detection of plugged-in/removed controllers&lt;/li&gt;
&lt;li&gt;Support for different keyboard layouts and IME for text input&lt;/li&gt;
&lt;li&gt;Access to resolution and absolute coordinates for mouse/pointer devices&lt;/li&gt;
&lt;li&gt;&lt;code&gt;KeyEvent&lt;/code&gt; now has a &lt;code&gt;RepeatCount&lt;/code&gt; member, indicating how many times the key has been repeated while being held down&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;For details, see the &lt;a href=&quot;http://doc.stride3d.net/latest/en/manual/input/index.html&quot;&gt;Input documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;improved-direct3d-12-support&quot; tabindex=&quot;-1&quot;&gt;Improved Direct3D 12 support &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#improved-direct3d-12-support&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To support graphics functionalities on every platform, we&#39;ve implemented missing features for the DirectX 12 rendering backend:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;compute and tessellation shaders&lt;/li&gt;
&lt;li&gt;unordered access views for textures and buffers&lt;/li&gt;
&lt;li&gt;structured buffers&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;improved-environment-fresnel&quot; tabindex=&quot;-1&quot;&gt;Improved environment fresnel &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#improved-environment-fresnel&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Fresnel describes how light is reflected depending on the angle the material is viewed from. Typically, high angles are more reflective.&lt;/p&gt;
&lt;p&gt;Previously, Xenko used an imprecise polynomial approximation to compute the fresnel for environment lighting (such as cubemaps), resulting in a bigger-than-expected white outline. Xenko now defaults to a precomputed BRDF environment lookup texture that matches our default lighting equations (GGX Schlick). This produces much more accurate rendering.&lt;/p&gt;
&lt;h2 id=&quot;japanese-documentation&quot; tabindex=&quot;-1&quot;&gt;Japanese documentation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/version-2-1-0/#japanese-documentation&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;&lt;a href=&quot;http://doc.stride3d.net/latest/jp/manual/get-started/index.html&quot;&gt;ドキュメントは日本語での表示も可能です&lt;/a&gt;。言語を切り替えるには、右上のLANGUAGEボタンをクリックしてください。&lt;/p&gt;
&lt;p&gt;The Xenko documentation is now &lt;a href=&quot;http://doc.stride3d.net/latest/jp/manual/get-started/index.html&quot;&gt;available in Japanese&lt;/a&gt;. To switch languages, use the &lt;strong&gt;Language&lt;/strong&gt; button in the top-right of the documentation site.&lt;/p&gt;
&lt;img alt=&quot;Switch language&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.1/switch-language.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.1/switch-language.png&quot; /&gt;</description>
      <pubDate>Thu, 14 Sep 2017 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/version-2-1-0/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/version-2-1-0/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-2.1/thumbnail.webp" type="image/webp" length="0" /></item>
    <item>
      <title>Game Spotlight: Children of the Galaxy</title>
      <description>&lt;p&gt;Get a glimpse of &#39;Children of the Galaxy&#39;, an ambitious game project powered by Stride 3D, in our Developer Spotlight series. Learn about the creative minds behind the game, their inspirations, and the challenges they&#39;ve faced. Immerse yourself in the world of game development with our captivating blog post!&lt;/p&gt;
&lt;img alt=&quot;CoG title screen&quot; src=&quot;https://www.stride3d.net/images/blog/children-of-galaxy/cogblogimg.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/children-of-galaxy/cogblogimg.webp&quot; /&gt;
&lt;p&gt;It takes amazing developers to build a game from scratch. To do it with an engine while it was still in beta is a next-level feat. Today, the Xenko team would like to spotlight the first developer to get their game published on Steam while Xenko was in its beta stage.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/LZnYMggCdck&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;Filip Dusek is the creator and engineer of the newly released &lt;a href=&quot;http://store.steampowered.com/app/563390/&quot;&gt;Children of the Galaxy&lt;/a&gt; game. Growing up in the Czech Republic, Filip frequently played 4X strategy games, and especially loved games such as “Civilization™” and “Endless Space™”. After a few years of learning game development at university along with self-study, he worked as a senior programmer at 2K Games working on such titles as &amp;quot;Topspin 4™&amp;quot;, &amp;quot;Mafia 2™&amp;quot; and Mafia 3™&amp;quot;. However, with 4X games still being his favorite genre, Filip decided to set out and create his own game set in space. Unlike any other 4X strategy games, he wanted to put his own spin on the genre by incorporating more tactical elements, enabling users to engage in complex strategies to play with. With that ideal in mind, he set out on his three-year journey to create &lt;strong&gt;Children of the Galaxy&lt;/strong&gt;.&lt;/p&gt;
&lt;img alt=&quot;greenship&quot; src=&quot;https://www.stride3d.net/images/blog/children-of-galaxy/greenshipresized.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/children-of-galaxy/greenshipresized.webp&quot; /&gt;
&lt;p&gt;Development initially began on a different engine. Feeling that the engine was not up to par with his rendering needs, Filip searched for another C#-friendly game engine that would give Children of the Galaxy a polished feel, and that was also easily accessible. Eventually, through some shout-outs on Twitter, he discovered Xenko as a viable option. After some research into the engine and its features, he decided it was his best option to bring to life his vision for a game filled with galactic alien battles in the far reaches of space.&lt;/p&gt;
&lt;img alt=&quot;CoGscreen&quot; src=&quot;https://www.stride3d.net/images/blog/children-of-galaxy/CoGBattleimg.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/children-of-galaxy/CoGBattleimg.webp&quot; /&gt;
&lt;p&gt;In a recent discussion with Filip, he noted, “Using Xenko was pivotal for creating Children of the Galaxy. Its ease of use, nested prefab feature, PBR and how easy it was to import data really gave me the tools I needed to develop my game.”&lt;/p&gt;
&lt;img alt=&quot;blueship&quot; src=&quot;https://www.stride3d.net/images/blog/children-of-galaxy/blueshipresized.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/children-of-galaxy/blueshipresized.webp&quot; /&gt;
&lt;p&gt;Children of the Galaxy is a 4X strategy game where the player is pitted against other alien races in a battle for survival. Carefully choose your tactics in this turn-based strategy game in a war for galactic domination.&lt;/p&gt;
&lt;p&gt;Children of the Galaxy is available now on Steam. Download it  &lt;a href=&quot;http://store.steampowered.com/app/563390/&quot;&gt;here&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;The Xenko team is proud to have such creative and talented developers using Xenko. This is the first in what we hope to be a long repertoire of developer showcases. We&#39;re looking forward to seeing what else our users have in store for us!&lt;/p&gt;
</description>
      <pubDate>Thu, 11 May 2017 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/developer-spotlight/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/developer-spotlight/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/children-of-galaxy/thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Xenko 2.0 Released</title>
      <description>&lt;p&gt;After nearly two years of open beta, we’re proud to announce that &lt;strong&gt;Xenko is now available as a commercial product&lt;/strong&gt;. Xenko 2.0 adds features such as full VR support, a pipeline rendering editor, light probes, and scene streaming management, along with greatly improved stability.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#pricing&quot;&gt;Pricing&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#xenko-pro-is-free-until-december-31st&quot;&gt;Xenko Pro is free until December 31st&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#no-need-to-make-your-game-open-source&quot;&gt;No need to make your game open-source&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#what-about-the-beta-versions%3F&quot;&gt;What about the beta versions?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#what%E2%80%99s-new-in-xenko-2.0%3F&quot;&gt;What’s new in Xenko 2.0?&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#scene-hierarchy-and-scene-streaming&quot;&gt;Scene hierarchy and scene streaming&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#virtual-reality&quot;&gt;Virtual Reality&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#global-illumination-with-light-probes&quot;&gt;Global illumination with light probes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#light-shafts&quot;&gt;Light Shafts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#graphics-compositor&quot;&gt;Graphics Compositor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#improved-visual-studio-experience&quot;&gt;Improved Visual Studio experience&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#faster-%26-lighter&quot;&gt;Faster &amp;amp; Lighter&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;img alt=&quot;Starbreach Image&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.0/starbreach.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.0/starbreach.webp&quot; /&gt;
&lt;p&gt;We’d like to thank all our beta users for their feedback, which helped us improve Xenko immeasurably over the last two years. We couldn’t have done it without you!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.stride3d.net/download&quot;&gt;Get Xenko 2.0&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;pricing&quot; tabindex=&quot;-1&quot;&gt;Pricing &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#pricing&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Xenko remains &lt;strong&gt;free for individual users, small studios&lt;/strong&gt;, and &lt;strong&gt;educational purposes&lt;/strong&gt;. It will be available to larger businesses through a &lt;strong&gt;monthly subscription&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Pricing for Xenko is broken into four tiers:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Xenko Personal&lt;/strong&gt; – Free but limited to small studios, personal use, and students&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xenko Pro&lt;/strong&gt; – Designed for smaller studios at &lt;strong&gt;$75 per&lt;/strong&gt; month per user&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xenko Pro Plus&lt;/strong&gt; – Designed for larger studios at &lt;strong&gt;$150&lt;/strong&gt; per month per user&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Xenko Custom&lt;/strong&gt; – Available for teams with special requirements or large-scale projects&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;While the Xenko &lt;strong&gt;runtime source code remains open to everyone&lt;/strong&gt;, the Game Studio source code is only available in the &lt;strong&gt;Pro Plus&lt;/strong&gt; and &lt;strong&gt;Custom&lt;/strong&gt; tiers. &lt;strong&gt;Personal&lt;/strong&gt; and &lt;strong&gt;Pro&lt;/strong&gt; users will be able to extend Game Studio via a plug-in system available later this year.&lt;/p&gt;
&lt;p&gt;Xenko &lt;strong&gt;Personal&lt;/strong&gt; is not available to non-profit organizations and companies with yearly income above $200k. Additionally, Xenko &lt;strong&gt;Personal&lt;/strong&gt; users must display a “Made with Xenko” splash screen in their applications.&lt;/p&gt;
&lt;p&gt;For more information about the pricing plan, see the official website &lt;a href=&quot;https://www.stride3d.net/download/&quot;&gt;page&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;xenko-pro-is-free-until-december-31st&quot; tabindex=&quot;-1&quot;&gt;Xenko Pro is free until December 31st &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#xenko-pro-is-free-until-december-31st&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To give everybody a chance to check out Xenko 2.0, Xenko &lt;strong&gt;Pro&lt;/strong&gt; is &lt;strong&gt;free until December 31st 2017&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;During this period, you can use Xenko without creating a Xenko account and the &lt;strong&gt;Pro Plus&lt;/strong&gt; version will be available only by contacting the Xenko team.&lt;/p&gt;
&lt;p&gt;The Xenko Store opens on January 1st. From that date, Xenko &lt;strong&gt;Pro&lt;/strong&gt; users must purchase a subscription, or switch to the Xenko &lt;strong&gt;Personal&lt;/strong&gt; subscription if they’re eligible. The Xenko &lt;strong&gt;Pro Plus&lt;/strong&gt; plan will also be available to buy from the online store.&lt;/p&gt;
&lt;p&gt;For more information about the welcome campaign, see the official website &lt;a href=&quot;https://www.stride3d.net/download/&quot;&gt;page&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;no-need-to-make-your-game-open-source&quot; tabindex=&quot;-1&quot;&gt;No need to make your game open-source &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#no-need-to-make-your-game-open-source&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;From Xenko 2.0, all Xenko users (on any tier) can modify the source code and recompile the engine without having to open the codebase of their game. You can also redistribute modified Xenko source code to other Xenko licensees having access to the same plan as you.&lt;/p&gt;
&lt;h2 id=&quot;what-about-the-beta-versions%3F&quot; tabindex=&quot;-1&quot;&gt;What about the beta versions? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#what-about-the-beta-versions%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Beta Xenko versions will remain available for now under the same conditions as before, but will no longer receive updates. We’ll remove the beta versions at some point, so we encourage you to switch to Xenko 2.0. Remember that Xenko is free for individuals and small businesses.&lt;/p&gt;
&lt;h2 id=&quot;what%E2%80%99s-new-in-xenko-2.0%3F&quot; tabindex=&quot;-1&quot;&gt;What’s new in Xenko 2.0? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#what%E2%80%99s-new-in-xenko-2.0%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;scene-hierarchy-and-scene-streaming&quot; tabindex=&quot;-1&quot;&gt;Scene hierarchy and scene streaming &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#scene-hierarchy-and-scene-streaming&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Working with scenes has become more flexible. Instead of a single scene, your game can now use a hierarchy of scenes to organize entities into levels, areas or layers, and let teams collaborate on them more efficiently.&lt;/p&gt;
&lt;p&gt;Game Studio displays child scenes together with their parent. Individual scenes can be loaded, unload, locked and moved around.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/release-2.0/scene_editor_640.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/release-2.0/scene_editor_640.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;When running your game, the &lt;strong&gt;default scene&lt;/strong&gt; set in your &lt;strong&gt;game settings&lt;/strong&gt; is loaded as the &lt;strong&gt;root scene&lt;/strong&gt; and can be used to store persistent entities. More scenes can be dynamically loaded and unloaded from scripts and added as &lt;strong&gt;child scenes&lt;/strong&gt;.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; childScene &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Content&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Load&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;Scene&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token string&quot;&gt;&quot;myChildScene&quot;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
SceneSystem&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;SceneInstance&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;RootScene&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Children&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;childScene&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/release-2.0/scene_streaming_640.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/release-2.0/scene_streaming_640.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;To get started, take a look at the new built-in &lt;code&gt;SceneStreamingScript&lt;/code&gt;. It demonstrates background scene loading when passing through trigger volumes.&lt;/p&gt;
&lt;p&gt;You can now use a scene&#39;s &lt;code&gt;Offset&lt;/code&gt; to move its entities both at design time and runtime.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;ChildSceneComponent&lt;/code&gt; has been removed. We encourage all entities to be managed by a single &lt;strong&gt;entity manager&lt;/strong&gt; and rendered by a single &lt;strong&gt;graphics compositor&lt;/strong&gt;.&lt;/p&gt;
&lt;h3 id=&quot;virtual-reality&quot; tabindex=&quot;-1&quot;&gt;Virtual Reality &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#virtual-reality&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Enabling VR is now as simple as a single click!&lt;/p&gt;
&lt;p&gt;Xenko&#39;s clustered forward rendering, with its multisample anti-aliasing, makes it ideal for VR. Xenko uses a single API for every device, with native support for Oculus and HTV Vive (more devices coming very soon).&lt;/p&gt;
&lt;p&gt;Xenko comes with a VR game sample that shows you how to implement VR gameplay, including environment interaction and teleportation:&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/release-2.0/vr_template_640.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/release-2.0/vr_template_640.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;Save valuable time by visualizing and testing VR directly from the scene editor:&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/release-2.0/vr_editor_640.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/release-2.0/vr_editor_640.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;h3 id=&quot;global-illumination-with-light-probes&quot; tabindex=&quot;-1&quot;&gt;Global illumination with light probes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#global-illumination-with-light-probes&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Light probes capture the lighting at the position you place them. They simulate indirect light, the effect of light bouncing off surfaces and illuminating other surfaces.&lt;/p&gt;
&lt;p&gt;They can make a dramatic difference to the mood and appearance of your scene.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/release-2.0/light_probes_640.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/release-2.0/light_probes_640.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;Light probes can be &lt;strong&gt;placed freely&lt;/strong&gt; and are processed &lt;strong&gt;per pixel&lt;/strong&gt;. This means you can use them not only on small dynamic objects, but also large or static objects (until we have light maps for those!).&lt;/p&gt;
&lt;p&gt;Last but not least, you can now very easily capture a DDS cubemap from current camera position in editor, for use as a diffuse or specular skybox light.&lt;/p&gt;
&lt;h3 id=&quot;light-shafts&quot; tabindex=&quot;-1&quot;&gt;Light Shafts &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#light-shafts&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Xenko now supports shadow map-based light shafts for directional lights.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/release-2.0/lightshaft_CoS_640.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/release-2.0/lightshaft_CoS_640.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;Our implementation uses ray-marching rather than post effects, making the shaft visible and cool-looking even if the light source isn&#39;t visible.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/release-2.0/lightshaft_640.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/release-2.0/lightshaft_640.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;h3 id=&quot;graphics-compositor&quot; tabindex=&quot;-1&quot;&gt;Graphics Compositor &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#graphics-compositor&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The graphics compositor is now a separate asset.&lt;/p&gt;
&lt;p&gt;Rendering parameters (such as VR) and post effect parameters can be tweaked in just a few clicks.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.stride3d.net/images/blog/release-2.0/graphics_compositor.webp&quot; title=&quot;Graphics compositor&quot; class=&quot;mb-3&quot;&gt;&lt;img alt=&quot;Graphics compositor&quot; src=&quot;https://www.stride3d.net/images/blog/release-2.0/graphics_compositor.webp&quot; class=&quot;img-fluid&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-2.0/graphics_compositor.webp&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;This is just the first step towards making the graphics compositor easy to customize and extend. Stay tuned for more changes in future releases!&lt;/p&gt;
&lt;h3 id=&quot;improved-visual-studio-experience&quot; tabindex=&quot;-1&quot;&gt;Improved Visual Studio experience &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#improved-visual-studio-experience&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We now have full support for &lt;strong&gt;Visual Studio 2017&lt;/strong&gt;!&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Xenko Visual Studio extension now supports Visual Studio 2017&lt;/li&gt;
&lt;li&gt;GameStudio recognize Visual Studio 2017.&lt;/li&gt;
&lt;li&gt;Games can use C# 7.0, and our script editor can recognize C# 7.0 and offer C# 7.0 refactoring thanks to Roslyn (you need to make your solution VS2017+ for it to work).&lt;/li&gt;
&lt;li&gt;Our internal &lt;code&gt;AssemblyProcessor&lt;/code&gt; which perform various operations on generated assemblies can now work with portable PDB (as generated by .NET Standard projects)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Programmers working with Xenko often go back and forth between Game Studio and Visual Studio. To make their lives easier, we made a few key improvements to the Xenko Visual Studio extension:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You can now open the current solution in Game Studio directly from Visual Studio.&lt;/li&gt;
&lt;li&gt;Syntax highlighting didn&#39;t behave well when switching theme.&lt;/li&gt;
&lt;li&gt;Previously, when assets are compiling, MSBuild didn&#39;t report any progress until finished. It now displays information, warnings and errors while it compiles.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Also, our whole build infrastructure and script editor is now based on the latest version of MSBuild 2017 and Roslyn. Supporting the new VS2017 Project System with .NET Standard is just a few steps away!&lt;/p&gt;
&lt;h3 id=&quot;faster-%26-lighter&quot; tabindex=&quot;-1&quot;&gt;Faster &amp;amp; Lighter &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/release-xenko-2-0-0/#faster-%26-lighter&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In order to provide a better experience for users, we&#39;ve been working hard on various fronts to make the editor smoother and more responsive. This is still a work in progress and expect regular progress.&lt;/p&gt;
&lt;p&gt;Also, package size has been almost divided by 3, resulting in much faster download and install time.&lt;/p&gt;
&lt;p&gt;For the full release notes, see the dedicated &lt;a href=&quot;http://doc.stride3d.net/2.0/ReleaseNotes/&quot;&gt;page&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Tue, 25 Apr 2017 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/release-xenko-2-0-0/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/release-xenko-2-0-0/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-2.0/thumbnail.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Add Xbox Live Service to Your Xenko Project</title>
      <description>&lt;p&gt;Discover how to integrate Xbox Live services into your Xenko game project with this step-by-step guide, enhancing player experiences and social features.&lt;/p&gt;
&lt;img alt=&quot;Achievement Unlocked&quot; src=&quot;https://www.stride3d.net/images/blog/2017-03-09-xbox-live/achievement-unlocked-with-xenko.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2017-03-09-xbox-live/achievement-unlocked-with-xenko.webp&quot; /&gt;
&lt;p&gt;We have continued to work hard on our support in Xenko for Microsoft&#39;s Universal Windows Platform (UWP). Keeping with this, we&#39;ve been working closely with our Microsoft partners to add official support for the Xbox Live SDK. So, now Xenko developers will have the opportunity to add Xbox live to their games.&lt;/p&gt;
&lt;h2 id=&quot;what-is-the-xbox-live-sdk%3F&quot; tabindex=&quot;-1&quot;&gt;What is the Xbox Live SDK? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/add-xbox-live-service-to-your-xenko-project/#what-is-the-xbox-live-sdk%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Xbox Live SDK is a set of APIs that power all social interactions on Xbox Live including friends, achievements, and multiplayer. Started originally on XBox, the service is now available on multiple other platforms.&lt;/p&gt;
&lt;p&gt;It is available on &lt;a href=&quot;https://www.nuget.org/profiles/XboxLive&quot;&gt;nuget.org&lt;/a&gt; for registered ID@Xbox developers.&lt;/p&gt;
&lt;p&gt;If you haven&#39;t yet joined ID@Xbox you can learn about the program and how to join &lt;a href=&quot;http://www.xbox.com/en-US/developers/id&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Once you have applied to the program and have been accepted as a managed partner with Microsoft, feel free to get started using our newly created Xbox Live sample &lt;a href=&quot;http://doc.stride3d.net/latest/manual/platforms/uwp/xbox-live.html&quot;&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;img alt=&quot;Dev Screenshot&quot; src=&quot;https://www.stride3d.net/images/blog/2017-03-09-xbox-live/xbox-live-dev-screen.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2017-03-09-xbox-live/xbox-live-dev-screen.webp&quot; /&gt;
&lt;p&gt;We hope you will give this a try, and let us know about your project! Feel free to leave any comments or suggestions below on how to improve the experience.&lt;/p&gt;
</description>
      <pubDate>Thu, 09 Mar 2017 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/add-xbox-live-service-to-your-xenko-project/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/add-xbox-live-service-to-your-xenko-project/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2017-03-09-xbox-live/xbox-live-resized.png" type="image/png" length="0" /></item>
    <item>
      <title>Release and Pricing Information</title>
      <description>&lt;p&gt;Explore the latest release details and pricing information for Stride 3D, the versatile game engine designed to power your creative projects.&lt;/p&gt;
&lt;p&gt;We are pleased to announce that Xenko will exit its beta stage on April, 2017 with the first commercial version of the engine!&lt;br /&gt;
As we&#39;re still finalizing last details, the exact pricing model of the engine will be announced on the release day.&lt;br /&gt;
We can let you know that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;We are planning to switch to a monthly subscription model with several tiers (education, indie, etc.)&lt;/li&gt;
&lt;li&gt;The tier intended for indies will be free to use&lt;/li&gt;
&lt;li&gt;The code source of the runtime will remain available for everyone&lt;/li&gt;
&lt;li&gt;The code source of the editor will be accessible only to the upper tiers&lt;/li&gt;
&lt;li&gt;We will move from GPL to a custom license allowing developers to modify the engine without having to open their game sources&lt;/li&gt;
&lt;li&gt;The beta versions will remain available to download for users already developing a game on it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We are thrilled to reach this next big step for Xenko and would like to particularly thank our users that have been working with the beta versions for the past two years.&lt;/p&gt;
&lt;p&gt;We look forward to seeing all of your projects after release!&lt;/p&gt;
</description>
      <pubDate>Fri, 03 Mar 2017 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/release-and-pricing-info/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/release-and-pricing-info/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko Exhibits and Official Release News</title>
      <description>&lt;p&gt;Silicon Studio is planning to announce the first official commercial release of Xenko at GDC! More details will be announced here in our blog in the coming weeks as well, so stay tuned!&lt;/p&gt;
&lt;p&gt;We’re also excited to announce that Xenko will be in two locations at GDC this year! We’ll be in the &lt;strong&gt;Silicon Studio booth&lt;/strong&gt;, #624 in Moscone’s &lt;strong&gt;South Hall&lt;/strong&gt;, and will be official sponsors at the &lt;strong&gt;IGDA Pavilion&lt;/strong&gt; in the &lt;strong&gt;West Hall&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We’ll be showcasing two cool, new demo games from Xenko. We will have our new VR demo, “Cave of Surtr” which will feature interactive gameplay using VR controllers. We’ll also be showcasing our third-person shooter demo game, “Starbreach”. Members from Xenko’s dev and marketing team will be around both of our exhibiting locations, so come and visit; we&#39;ll be happy to answer any of your questions!&lt;/p&gt;
&lt;p&gt;To schedule a meeting, contact us through &lt;a href=&quot;http://stride3d.net/contact/&quot;&gt;our website&lt;/a&gt; or direct message us on twitter &lt;strong&gt;@xenko3d&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We hope to see you soon at GDC 2017 in San Francisco!&lt;/p&gt;
&lt;img alt=&quot;Cave of Surtr Poster&quot; src=&quot;https://www.stride3d.net/images/blog/2017-02-22-gdc-xenko-exhibit-info/CaveofSurtrposter.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2017-02-22-gdc-xenko-exhibit-info/CaveofSurtrposter.webp&quot; /&gt;
&lt;img alt=&quot;Starbreach Poster&quot; src=&quot;https://www.stride3d.net/images/blog/2017-02-22-gdc-xenko-exhibit-info/Starbreach-poster.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2017-02-22-gdc-xenko-exhibit-info/Starbreach-poster.webp&quot; /&gt;</description>
      <pubDate>Wed, 22 Feb 2017 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/gdc-xenko-exhibit-info/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/gdc-xenko-exhibit-info/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Real-Time Local Reflections Preview</title>
      <description>&lt;p&gt;We&#39;re excited to be working on Xenko&#39;s real-time local reflections feature, coming in Xenko&#39;s next release. Real-time local reflections are a great way to visually ground objects in a scene. They give your games richer scenes and increased realism in rendering.&lt;/p&gt;
&lt;img alt=&quot;Without local reflections&quot; src=&quot;https://www.stride3d.net/images/blog/2017-02-09-real-time-local-reflections/ball-and-cube-r-off.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2017-02-09-real-time-local-reflections/ball-and-cube-r-off.png&quot; /&gt;
&lt;p&gt;&lt;i&gt;Without local reflections&lt;/i&gt;&lt;/p&gt;
&lt;img alt=&quot;With local reflections&quot; src=&quot;https://www.stride3d.net/images/blog/2017-02-09-real-time-local-reflections/ball-and-cube-r-on.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2017-02-09-real-time-local-reflections/ball-and-cube-r-on.png&quot; /&gt;
&lt;p&gt;&lt;i&gt;With local reflections&lt;/i&gt;&lt;/p&gt;
&lt;p&gt;Where the local reflections effect is available, it replaces image-based lighting (called environment lighting in Game Studio). This has the useful side effect of darkening surfaces where the object meets other objects, similarly to ambient occlusion.&lt;/p&gt;
&lt;img alt=&quot;Darkened area&quot; src=&quot;https://www.stride3d.net/images/blog/2017-02-09-real-time-local-reflections/darkened-area.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2017-02-09-real-time-local-reflections/darkened-area.png&quot; /&gt;
&lt;p&gt;Local reflections are most obvious when they project bright spots onto other surfaces. The effect looks great in night scenes, which have high contrast, and in rainy conditions with lots of reflective surfaces and highlights. Notice how the vending machine lights are reflected in the ground surface in this screenshot:&lt;/p&gt;
&lt;img alt=&quot;Night reflections&quot; src=&quot;https://www.stride3d.net/images/blog/2017-02-09-real-time-local-reflections/night-reflections.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2017-02-09-real-time-local-reflections/night-reflections.webp&quot; /&gt;
&lt;p&gt;In games without lightmaps or global illumination, objects don&#39;t interact with each other as they do in reality, making them appear as if they have simply been Photoshopped in. With local reflections, objects appear to be part of the world rather than having been placed arbitrarily. It makes scenes feel much more grounded, and gives objects a feeling of weight.&lt;/p&gt;
&lt;p&gt;To create local reflections, Xenko reflects the current rendered frame on itself. The technique employs a &lt;strong&gt;Hi-Z trace&lt;/strong&gt; as described in Yasin Uludag&#39;s essay &amp;quot;Hi-Z Screen-Space Cone-Traced Reflections&amp;quot; in the book, &amp;quot;GPU Pro 5: Advanced Rendering Techniques&amp;quot;.&lt;/p&gt;
&lt;p&gt;Essentially, the effect allows the ray steps during the marching phase to skip large amounts of space. When the ray hits hierarchical depth cells, the algorithm progressively refines the level against which cells are checked until it hits the finest level.&lt;/p&gt;
&lt;img alt=&quot;Local reflections graph&quot; src=&quot;https://www.stride3d.net/images/blog/2017-02-09-real-time-local-reflections/local-reflections-graph.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2017-02-09-real-time-local-reflections/local-reflections-graph.png&quot; /&gt;
&lt;p&gt;&lt;i&gt;(Image courtesy of &lt;a href=&quot;http://www.frostbite.com/2015/08/stochastic-screen-space-reflections/&quot;&gt;Yasin Uludag and Tomasz Stachowiak&#39;s talk on screen space reflections&lt;/a&gt;) &lt;/i&gt;&lt;/p&gt;
&lt;p&gt;A series of later treatments generates blurriness to approximate how reflections behave on rough surfaces. We&#39;ve managed to keep the time per frame relatively low (3ms at 720p on GTX960), but the feature works best on high-end computers.&lt;/p&gt;
&lt;p&gt;Local reflections are a great tool to have in your kit, but aren&#39;t appropriate for every object. It&#39;s a &lt;strong&gt;screenspace effect&lt;/strong&gt;, meaning it only reflects images that are already on the screen; it doesn&#39;t reflect objects that are off-screen or obscured from the player by other objects. Put simply, if the player can&#39;t see an object at that moment, then the object isn&#39;t reflected. This means local reflections work well in enclosed areas such as corridors and rooms, but less well in open spaces. They also work best on bumpy surfaces, whose chaotic properties hide imperfections in the reflection. They work less well on glossy, mirror-like surfaces, because you naturally expect these surfaces to reflect the whole world.&lt;/p&gt;
&lt;p&gt;The local reflections feature will be released in Xenko soon. In the meantime, keep your eyes peeled for more upcoming features!&lt;/p&gt;
</description>
      <pubDate>Thu, 09 Feb 2017 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/real-time-local-reflections-preview/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/real-time-local-reflections-preview/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2017-02-09-real-time-local-reflections/night-reflections.webp" type="image/webp" length="0" /></item>
    <item>
      <title>Some Basic Xenko Facts</title>
      <description>&lt;p&gt;Uncover fascinating insights and essential facts about the Xenko game engine, empowering your creativity and enhancing your game development journey.&lt;/p&gt;
&lt;p&gt;When looking at new game engines or software, it’s easy to get lost in feature details. So we thought we’d step back and take a moment to discuss some Xenko facts. If you are curious about the basics of Xenko, our &lt;strong&gt;in beta, open source, full C# game engine&lt;/strong&gt;, this post will explain some of Xenko’s main characteristics along with system requirements.&lt;/p&gt;
&lt;p&gt;Some of the benefits that Xenko brings users are its high-quality and flexible rendering, advanced C# scripting system, and upcoming VR support. Xenko’s editor, Game Studio, provides users a straightforward layout which allows users to easily start making games.&lt;/p&gt;
&lt;p&gt;Xenko is still a relatively young game engine, and not yet as mammoth (or dare we say &amp;quot;brittle&amp;quot;) as some of the more mature game engines that are commercially available. Being an open-source engine means that it&#39;s &lt;strong&gt;easy to customize&lt;/strong&gt;, allowing users the ability to control almost every aspect of their development. It’s also worth noting that the &lt;strong&gt;Xenko engine itself is implemented in C#&lt;/strong&gt; and  always supporting the latest versions of C# and the .NET Framework. C# is the most widely used programming language among game developers, offering a great user experience when it comes to iterate on games quickly and efficiently.&lt;/p&gt;
&lt;p&gt;With Xenko, you can currently develop games for the &lt;strong&gt;following platforms&lt;/strong&gt; and &lt;strong&gt;graphics backends&lt;/strong&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Windows (Desktop): DirectX / OpenGL / Vulkan&lt;/li&gt;
&lt;li&gt;Linux/Mac: OpenGL / Vulkan&lt;/li&gt;
&lt;li&gt;iOS/android (via Xamarin): OpenGL ES&lt;/li&gt;
&lt;li&gt;UWP &amp;amp; XBox One: DirectX&lt;/li&gt;
&lt;/ul&gt;
&lt;img alt=&quot;Platforms&quot; src=&quot;https://www.stride3d.net/images/blog/2017-02-03-some-basic-xenko-facts/platforms.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2017-02-03-some-basic-xenko-facts/platforms.webp&quot; /&gt;
&lt;p&gt;You can learn more about &lt;a href=&quot;http://doc.stride3d.net/latest/manual/platforms/index.html&quot;&gt;supported platforms&lt;/a&gt;  in our documentation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; since the release of Xenko 1.9β, shared game assemblies are created using .NET Standard rather than PCL (Portable Class Library). You can learn more about why we made that decision in our earlier blog post, &lt;a href=&quot;https://www.stride3d.net/toward-a-better-dotnet/&quot;&gt;Toward a Better .NET!&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;You can currently develop games with Xenko only on Windows. We do not support Xenko game development on Mac yet.&lt;/p&gt;
&lt;p&gt;For the &lt;strong&gt;system requirements&lt;/strong&gt;, the Xenko install takes approximately 5GB and a minimum of 4GB of RAM; however 8GB of RAM is recommended for heavy 3D games or applications development. See Xenko’s &lt;a href=&quot;http://doc.stride3d.net/latest/manual/requirements/index.html&quot;&gt;development requirements&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p&gt;While the Xenko documentation is under way and improving daily, you may also find it beneficial to peruse our blog for each of our earlier beta releases to learn more on which features and techniques are implemented in Xenko. Of course, all of these features are in &lt;a href=&quot;http://doc.stride3d.net/latest/&quot;&gt;our documentation&lt;/a&gt; as well.&lt;/p&gt;
&lt;p&gt;We hope this quick runthrough helped answer some of the fundamental questions we receive often about Xenko. Stick around for more news coming soon!&lt;/p&gt;
</description>
      <pubDate>Fri, 03 Feb 2017 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/some-basic-xenko-facts/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/some-basic-xenko-facts/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-1.4/XenkoLogoTM_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Feature Spotlight: Particle Effects</title>
      <description>&lt;p&gt;Dive into the world of particle effects with Stride3D&#39;s comprehensive guide! Learn how to create mesmerizing visuals in your 3D projects using particles, tips on optimizing performance, and inspiring examples from the industry. Master the art of visual storytelling with Stride3D&lt;/p&gt;
&lt;h2 id=&quot;happy-2017!&quot; tabindex=&quot;-1&quot;&gt;Happy 2017! &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/particle-effects/#happy-2017!&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;For our first post of the year, we&#39;re moving the spotlight back to a cool Xenko feature: particles. Particles are such an important aspect of almost every game and as a follow-up to our particles tutorial, we wanted to share with you a little more info about our particle system.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/2017-01-18-particles/particle-effects-final-compressed.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/2017-01-18-particles/particle-effects-final-compressed.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;With Xenko&#39;s powerful particles system, you can implement effects like rain, explosions fire, smoke, electricity, magic spells, and lots more. Particles are a great way to bring your game worlds to life.&lt;/p&gt;
&lt;p&gt;You can build particle effects completely inside Xenko Game Studio. Just add a Particle System component to your entity. The system is extensible, and any part can be customized in depth. And because Xenko is open-source, you can modify the code as you need.&lt;/p&gt;
&lt;p&gt;Unlike legacy game engines, the Xenko particle system is modular: you add only the options you need, and remove anything you don&#39;t. This means no wasted CPU cycles loading effects you&#39;re not using.&lt;/p&gt;
&lt;p&gt;To demonstrate how you can build particle effects from scratch in Xenko, we&#39;ve put together a &lt;a href=&quot;http://doc.stride3d.net/latest/manual/particles/tutorials/create-a-trail.html&quot;&gt;trail effect tutorial&lt;/a&gt;. Follow the steps to add a trail effect to a sword slash animation.&lt;/p&gt;
&lt;p&gt;And to give you a taste of where you can go after that, here&#39;s a more elaborate trail that combines multiple particle effects:&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/2017-01-18-particles/sword-slash.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/2017-01-18-particles/sword-slash.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;If you&#39;d like to see how this particular effect works, &lt;a href=&quot;http://doc.stride3d.net/latest/manual/particles/tutorials/media/MyTrailEffect.zip&quot;&gt;download the project file&lt;/a&gt; and take a look.&lt;/p&gt;
&lt;p&gt;Don&#39;t forget, Xenko comes with some pre-made particles included as prefabs in the asset packs, too. To check them out, just select the Particles asset pack when you create a project.&lt;/p&gt;
&lt;p&gt;We&#39;re really busy working on some important new features. Stay tuned for more news about what&#39;s to come.&lt;/p&gt;
&lt;p&gt;Happy tinkering!&lt;/p&gt;
</description>
      <pubDate>Wed, 18 Jan 2017 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/particle-effects/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/particle-effects/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2017-01-18-particles/thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Happy Holidays 2016</title>
      <description>&lt;p&gt;Thanks for following us through another action-packed year of development. We think we&#39;ve made some great progress on Xenko this year, and we hope you&#39;ve made some cool stuff with it too.&lt;/p&gt;
&lt;h2 id=&quot;season&#39;s-greetings-from-the-xenko-team!&quot; tabindex=&quot;-1&quot;&gt;Season&#39;s greetings from the Xenko team! &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/happy-holidays-2016/#season&#39;s-greetings-from-the-xenko-team!&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/2016-12-22-happy-holidays-2016/HolidayGreetings.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/2016-12-22-happy-holidays-2016/HolidayGreetings.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;Exciting things are happening for Xenko in 2017, so stay tuned. Until then, have a great holiday season!&lt;/p&gt;
</description>
      <pubDate>Thu, 22 Dec 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/happy-holidays-2016/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/happy-holidays-2016/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2016-12-22-happy-holidays-2016/presents.png" type="image/png" length="0" /></item>
    <item>
      <title>Back to Normals</title>
      <description>&lt;p&gt;Xenko 1.9.2β fixes an important issue with our normal maps. We have recently reviewed our normal map settings and shaders. Unfortunately, a lot of them cover cases that were previously missing or unclear, so automated conversion of the assets is not possible.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/back-to-normals/#tl%3Bdr&quot;&gt;TL;DR&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/back-to-normals/#what-are-normal-maps%3F&quot;&gt;What are normal maps?&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/back-to-normals/#settings&quot;&gt;Settings&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/back-to-normals/#texture-asset&quot;&gt;Texture asset&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/back-to-normals/#material-asset&quot;&gt;Material Asset&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/back-to-normals/#future-plans&quot;&gt;Future Plans&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;tl%3Bdr&quot; tabindex=&quot;-1&quot;&gt;TL;DR &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/back-to-normals/#tl%3Bdr&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Set the &lt;strong&gt;Hint&lt;/strong&gt; of your texture asset to &lt;strong&gt;Normal Map&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;In most cases, check &lt;strong&gt;Scale &amp;amp; Offset&lt;/strong&gt; in your material&lt;/li&gt;
&lt;li&gt;If your texture asset is &lt;strong&gt;Compressed&lt;/strong&gt;, check &lt;strong&gt;Reconstruct Z&lt;/strong&gt; in your material&lt;/li&gt;
&lt;li&gt;If green colors in your normal map should be facing &amp;quot;up&amp;quot;, check &lt;strong&gt;Y is up&lt;/strong&gt; in your material&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;what-are-normal-maps%3F&quot; tabindex=&quot;-1&quot;&gt;What are normal maps? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/back-to-normals/#what-are-normal-maps%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;img alt=&quot;Actual geometry, normal map and shaded quad&quot; src=&quot;https://upload.wikimedia.org/wikipedia/commons/2/2e/Normal_map_example_with_scene_and_result.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://upload.wikimedia.org/wikipedia/commons/2/2e/Normal_map_example_with_scene_and_result.png&quot; /&gt;
&lt;p&gt;(Image courtesy of &lt;a href=&quot;https://julianherzog.com/&quot;&gt;Julian Herzog&lt;/a&gt; shared under &lt;a href=&quot;https://creativecommons.org/licenses/by/4.0/deed.en&quot;&gt;Creative Commons 4.0&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;Normal maps are a way to simulate fine details in the surface of a mesh without relying on high polygon representation. When used in combination with lighting they produce believable image which appears fully 3D even on a flat surface.&lt;/p&gt;
&lt;p&gt;Normal maps usually represent small changes of the normal vector (the vector which points &lt;em&gt;out&lt;/em&gt; of the surface). Xenko Game Studio uses the most common convention, that the X and Y components follow the tangent and the bitangent of the surface, and the Z component follows the normal vector of the surface. This means that a value of (0, 0, 1) will coincide with the normal vector and will represent no change, while a value of (-1, 0, 0) will be strongly tilted to the &amp;quot;left&amp;quot;, (&amp;quot;left&amp;quot; being negative X value in the tangent (local) space).&lt;/p&gt;
&lt;h2 id=&quot;settings&quot; tabindex=&quot;-1&quot;&gt;Settings &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/back-to-normals/#settings&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;texture-asset&quot; tabindex=&quot;-1&quot;&gt;Texture asset &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/back-to-normals/#texture-asset&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In additional to the common texture settings, there are a couple of options you should pay attention to when importing normals.&lt;/p&gt;
&lt;h4 id=&quot;hint&quot; tabindex=&quot;-1&quot;&gt;Hint &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/back-to-normals/#hint&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;If you plan to use a texture as a normal map, this should be set to &lt;strong&gt;Normal Map&lt;/strong&gt;. This makes sure that the texture is assumed to be in &lt;em&gt;linear color space&lt;/em&gt; and gets converted to a format suited for normals.&lt;/p&gt;
&lt;h4 id=&quot;format&quot; tabindex=&quot;-1&quot;&gt;Format &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/back-to-normals/#format&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Compressed&lt;/strong&gt; - Xenko will compress your texture in the most appropriate format for each platform. This will enforce some settings on the material side (see below). The compressed image will be unsigned, even if your input format is signed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;As-Is&lt;/strong&gt; - Xenko will import the texture with the format you have supplied, as long as the target platform supports it.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;material-asset&quot; tabindex=&quot;-1&quot;&gt;Material Asset &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/back-to-normals/#material-asset&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In your Material properties, in the Geometry category, choose &lt;strong&gt;Normap Map&lt;/strong&gt; as a &lt;strong&gt;Surface&lt;/strong&gt; option. There are different input options, the default being texture. Select your texture and confirm the options below are correct.&lt;/p&gt;
&lt;h4 id=&quot;y-is-up&quot; tabindex=&quot;-1&quot;&gt;Y is up &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/back-to-normals/#y-is-up&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Normal maps represent vectors in tangent space. The surface&#39;s tangent is aligned with the horizontal texture direction and its bitangent with vertical direction. Depending on your normal map authoring tool and its settings, the bitangent is assumed to face either &amp;quot;up&amp;quot; or &amp;quot;down&amp;quot; the texture.&lt;/p&gt;
&lt;p&gt;By default, Xenko assumes it is &amp;quot;down&amp;quot;. Therefore, high green values indicate a surface facing &amp;quot;down&amp;quot;. If instead your green values are supposed to make the normals facing &amp;quot;up&amp;quot;, select this option.&lt;/p&gt;
&lt;p&gt;Many tools, such as the &lt;a href=&quot;https://developer.nvidia.com/nvidia-texture-tools-adobe-photoshop&quot;&gt;Nvidia Normal Map Filter&lt;/a&gt; for Photoshop, let you customize the output by flipping some of the vectors. Please confirm which convention your tool uses.&lt;/p&gt;
&lt;h4 id=&quot;reconstruct-z&quot; tabindex=&quot;-1&quot;&gt;Reconstruct Z &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/back-to-normals/#reconstruct-z&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;This option reconstructs the Z component from the X and Y components, assuming that X&lt;sup&gt;2&lt;/sup&gt; + Y&lt;sup&gt;2&lt;/sup&gt; + Z&lt;sup&gt;2&lt;/sup&gt; = 1 and that Z is always positive, so that no normal vector can point to the back side of the surface.&lt;/p&gt;
&lt;p&gt;This is necessary when storing normals in a 2-channel texture, throwing away the Z component.&lt;br /&gt;
Xenko might select such a format when you choose to &lt;strong&gt;Compress&lt;/strong&gt; a normal map, so this option needs to be enabled.&lt;/p&gt;
&lt;p&gt;Please note that this option will likely disappear in the future and be automatically inferred from the texture options and target platforms.&lt;/p&gt;
&lt;h4 id=&quot;scale-%26-offset&quot; tabindex=&quot;-1&quot;&gt;Scale &amp;amp; Offset &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/back-to-normals/#scale-%26-offset&quot;&gt;🔗&lt;/a&gt;&lt;/h4&gt;
&lt;p&gt;Most textures contain unsigned colors, meaning the red, green and blue channels are in the [0..1] range. However, normals require the signed range [-1 .. +1]. If your normal map is stored in an unsigned texture, this option will make sure that the values are properly scaled by x2 and then offset by -1.&lt;/p&gt;
&lt;p&gt;Since normal maps are usually stored in unsigned formats, this option is enabled by default.&lt;br /&gt;
However, if you import your textures with the &lt;strong&gt;AsIs&lt;/strong&gt; option and your input texture is signed, clear this option.&lt;/p&gt;
&lt;h2 id=&quot;future-plans&quot; tabindex=&quot;-1&quot;&gt;Future Plans &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/back-to-normals/#future-plans&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Some of the options, such as &lt;strong&gt;Scale &amp;amp; Offset&lt;/strong&gt; and &lt;strong&gt;Reconstruct Z&lt;/strong&gt;, can be automatically inferred from the texture format so they will likely disappear. &lt;strong&gt;Y is up&lt;/strong&gt; will become an option of your texture asset.&lt;/p&gt;
</description>
      <pubDate>Tue, 13 Dec 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/back-to-normals/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/back-to-normals/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/normals/Normal_map_example_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Feature Spotlight: Archetypes, Prefabs, and Nested Prefabs</title>
      <description>&lt;p&gt;We released two really cool features, archetypes and prefabs, back in Xenko 1.6β. Open the post to see how these save our developers time.&lt;/p&gt;
&lt;p&gt;Finding yourself constantly duplicating or updating the elements for your game? In Xenko 1.6β, we introduced &lt;strong&gt;archetypes&lt;/strong&gt; and &lt;strong&gt;prefabs&lt;/strong&gt;. These let you share properties between assets and elements of your games. Create reference assets and modular blocks for your scenes, embed them together, let Game Studio automatically update them when needed and &lt;strong&gt;save tons of time&lt;/strong&gt;!&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-archetypes-prefabs-and-nested-prefabs/#archetypes&quot;&gt;Archetypes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-archetypes-prefabs-and-nested-prefabs/#prefabs&quot;&gt;Prefabs&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-archetypes-prefabs-and-nested-prefabs/#override-prefab-properties&quot;&gt;Override Prefab Properties&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-archetypes-prefabs-and-nested-prefabs/#nested-prefabs&quot;&gt;Nested Prefabs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/feature-spotlight-archetypes-prefabs-and-nested-prefabs/#improve-performance-with-prefab-models&quot;&gt;Improve Performance With Prefab Models&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;archetypes&quot; tabindex=&quot;-1&quot;&gt;Archetypes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-archetypes-prefabs-and-nested-prefabs/#archetypes&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;With archetypes, you can take an asset and derive a new asset from it. The new asset uses the original asset as the archetype, which means it shares its properties. If you modify the archetype, the derived asset also changes. This means that instead of editing each asset individually, you can edit the archetype and Game Studio automatically updates every derivative asset at the same time.&lt;/p&gt;
&lt;p&gt;You can also override specific properties in the derived asset. These properties become specific to the derived asset. They aren&#39;t affected by further changes to the value in the archetype, but all other properties stay synchronized. This lets you create different versions of an asset that still share a common base.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.stride3d.net/images/blog/2016-12-07-prefabs/archetypes_pic.webp&quot; title=&quot;Stride Archetypes&quot; class=&quot;mb-3&quot;&gt;&lt;img alt=&quot;Stride Archetypes&quot; src=&quot;https://www.stride3d.net/images/blog/2016-12-07-prefabs/archetypes_pic.webp&quot; class=&quot;img-fluid&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2016-12-07-prefabs/archetypes_pic.webp&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id=&quot;prefabs&quot; tabindex=&quot;-1&quot;&gt;Prefabs &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-archetypes-prefabs-and-nested-prefabs/#prefabs&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Prefabs are an extension of the archetype feature. A prefab is a bunch of entities organized hierarchically with components like models, collider shapes, lights, scripts, and so on. Then you add instances of that prefab to your scene, just as you would with a model or other asset. This creates a copy of each entity in the prefab, with the same hierarchy, and links them to the corresponding entity in the prefab. Any change you make to an entity in the prefab is automatically applied to all your instances. Game Studio updates entities in &lt;strong&gt;real time&lt;/strong&gt;, so you can see every change immediately.&lt;/p&gt;
&lt;p&gt;The most common use for prefabs is to create a small piece of your world - like a car, a rock, a piece of furniture, an NPC, or whatever - and duplicate it as many times as you need. When you need to modify that object - for example, if you want to add a light or particle effect, or add or move its entities - you can do it in one place and Game Studio applies the change automatically everywhere at once.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/2016-12-07-prefabs/prefab1.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/2016-12-07-prefabs/prefab1.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;You can change the entity hierarchy on the instance side without breaking the link to the original prefab. When you add an entity to the prefab, Game Studio adds it to the same parent or after the same sibling. If you delete the parent entity in the instance, Game Studio discards the entity. This means you can easily instantiate simple prefab subsets.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/2016-12-07-prefabs/prefab2.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/2016-12-07-prefabs/prefab2.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;h3 id=&quot;override-prefab-properties&quot; tabindex=&quot;-1&quot;&gt;Override Prefab Properties &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-archetypes-prefabs-and-nested-prefabs/#override-prefab-properties&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Of course, you can override prefab properties, just like with archetypes. Change any prefab instance and the change remains in that instance even if you then edit the original prefab.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/2016-12-07-prefabs/prefab3.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/2016-12-07-prefabs/prefab3.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;h3 id=&quot;nested-prefabs&quot; tabindex=&quot;-1&quot;&gt;Nested Prefabs &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-archetypes-prefabs-and-nested-prefabs/#nested-prefabs&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You can also nest prefabs inside other prefabs. This means you can build your project in a modular way. For example, you can create a room prefab, then use that to create a house prefab, then use that to create a village. Change something in the room prefab - like a piece of furniture - and the change appears in every house and every village where the room is used. Or you could create a basic prefab for every NPC, attach a script, then create variations to implement different NPCs: animals, monsters, AI companions, soldiers - whatever you need. There&#39;s no limit to the amount of prefabs you can nest.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/2016-12-07-prefabs/prefab4.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/2016-12-07-prefabs/prefab4.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;h3 id=&quot;improve-performance-with-prefab-models&quot; tabindex=&quot;-1&quot;&gt;Improve Performance With Prefab Models &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/feature-spotlight-archetypes-prefabs-and-nested-prefabs/#improve-performance-with-prefab-models&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If building everything at a detailed level with prefabs is affecting performance, Xenko has an experimental feature that lets you generate 3D models from prefabs. Just create a &lt;strong&gt;Prefab Model&lt;/strong&gt; asset and drag your prefab into it. When you modify the prefab, every prefab model instance updates with the changes. We&#39;re extending the feature to physics colliders, and improving the workflow so you can group entities more easily. We’ll talk about that in a future blog post.&lt;/p&gt;
&lt;p&gt;In the meantime, have fun with prefabs! They make managing your project a whole lot easier.&lt;/p&gt;
</description>
      <pubDate>Wed, 07 Dec 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/feature-spotlight-archetypes-prefabs-and-nested-prefabs/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/feature-spotlight-archetypes-prefabs-and-nested-prefabs/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Newly Added Game Templates</title>
      <description>&lt;p&gt;With Xenko 1.9β, we’ve released our brand spanking new Game Templates! Super fun stuff, so open the blog post to see more!&lt;/p&gt;
&lt;p&gt;Templates were designed to help bring your game ideas to life faster. With &lt;strong&gt;Xenko 1.9β&lt;/strong&gt; you can now create a project more efficiently with our new templates, which will help kickstart your game development efforts!&lt;/p&gt;
&lt;p&gt;We’ve started transitioning from small individual samples to more complete game templates and asset libraries to help you get the most out of Xenko. In the spirit of transitioning Xenko to an overall-game-dev-solution-provider, we’ve implemented templates for three popular game design genres - which you can now use as a starting point for your game.&lt;/p&gt;
&lt;p&gt;The three templates we’ve added are:&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/game-templates/#first-person-shooter&quot;&gt;First-Person Shooter&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/game-templates/#third-person-platformer&quot;&gt;Third-Person Platformer&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/game-templates/#top-down-camera-rpg&quot;&gt;Top-Down Camera RPG&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/game-templates/#new-game-template&quot;&gt;New Game Template&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;first-person-shooter&quot; tabindex=&quot;-1&quot;&gt;First-Person Shooter &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/game-templates/#first-person-shooter&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Arguably one of the most popular game genres today. Xenko’s FPS template helps our developers put together a game with a pre-set, first-person camera where you can shoot at the Xenko crates. The controls support both controllers and mouse/keyboard input. The crates come with physics&#39; collider bodies and are fully interactive. The template also shows how to spawn particle effects alternating between bullet impact effect and a smoke trail depending on if you shoot a wall or a crate. Production quality model and animation assets make it easy to learn about controlling and switching animations.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/2016-12-01-game-templates/templateFPS.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/2016-12-01-game-templates/templateFPS.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;h2 id=&quot;third-person-platformer&quot; tabindex=&quot;-1&quot;&gt;Third-Person Platformer &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/game-templates/#third-person-platformer&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This template is a great starting point for ever-popular platformer games. While the template is set in 3D it can be easily tweaked to become a 2D platformer. Just disable camera rotation in your 3D game to transform your game into a 2D platformer. Additionally, we’ve implemented a few techniques which we hope will be useful to you. Controls will now support both controllers and mouse/keyboard style input. The animation controller seamlessly blends the idle, walk and run animations providing striking visual feedback.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/2016-12-01-game-templates/templateTPP.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/2016-12-01-game-templates/templateTPP.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;h2 id=&quot;top-down-camera-rpg&quot; tabindex=&quot;-1&quot;&gt;Top-Down Camera RPG &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/game-templates/#top-down-camera-rpg&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This template positions the camera at a fixed angle above the character and enables touch screen controls as well as mouse point-and-click, similar to many traditional RPGs. It also uses the Navigation Mesh feature so your character won’t get stuck in bad pathfinding or hit walls. On the game logic side, the template shows several kinds of interactions with game objects, like collecting coins and loot and attacking and breaking objects.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/navmeshes/NoOutlineAE.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/navmeshes/NoOutlineAE.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;h2 id=&quot;new-game-template&quot; tabindex=&quot;-1&quot;&gt;New Game Template &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/game-templates/#new-game-template&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;img alt=&quot;New Game Template&quot; src=&quot;https://www.stride3d.net/images/blog/2016-12-01-game-templates/new_game_template.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/2016-12-01-game-templates/new_game_template.png&quot; /&gt;
&lt;p&gt;Our New Game template has access to existing production quality assets we used to create our templates! We have particle effects, physically-based materials, lots of animations for our new Xenko mannequin model and building blocks with physics ready for your rapid level prototyping. Unlike the templates, which are kept concise, the extra packages contain many more assets. You’ll even find some props which are not in the templates (swords for example!).&lt;/p&gt;
&lt;p&gt;As always, we are committed to offering you best-in-class game dev solutions directly in Xenko’s Game Studio.&lt;/p&gt;
&lt;p&gt;Additionally, we are looking to be able to give our users the opportunity to make their own templates that you will be able to share with other Xenko users. Of course, we’re planning on offering more templates as well. Keeping in line with our goal to become one of the best game engines for VR, we are also planning on adding a VR template in the not very distant future.&lt;/p&gt;
&lt;p&gt;Do you have a template that you’d like to see on our Roadmap? Let us know in the comments!&lt;/p&gt;
</description>
      <pubDate>Thu, 01 Dec 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/game-templates/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/game-templates/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/2016-12-01-game-templates/template_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko 1.9 Beta Released</title>
      <description>&lt;p&gt;Xenko release 1.9 Beta introduces several major new features along with several relevant enhancements to existing features. We are excited to offer three new game templates to speed up your game design time, a brand new script editor as well as expanded copy-paste functionality and the last major new feature is our new Navigation Mesh system.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#highlights&quot;&gt;Highlights&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#game-templates&quot;&gt;Game Templates&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#script-editor&quot;&gt;Script Editor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#navigation-meshes&quot;&gt;Navigation Meshes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#copy-%26-paste-functionality-expanded&quot;&gt;Copy &amp;amp; Paste Functionality Expanded&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#.net-standard&quot;&gt;.NET Standard&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#assembly-reloading&quot;&gt;Assembly Reloading&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#breaking-changes&quot;&gt;Breaking changes&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#windows-phone-and-windows-store-removed&quot;&gt;Windows Phone and Windows Store Removed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#.net-standard-1&quot;&gt;.NET Standard&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#asset-serialization&quot;&gt;Asset Serialization&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#dropping-support-for-windows-store-8.1-and-windows-phone-8.1&quot;&gt;Dropping Support for Windows Store 8.1 and Windows Phone 8.1&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#changelog-version-1.9.0-beta&quot;&gt;Changelog Version 1.9.0-beta&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#enhancements&quot;&gt;Enhancements&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#general&quot;&gt;General&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#game-studio&quot;&gt;Game Studio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#assets&quot;&gt;Assets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#engine&quot;&gt;Engine&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#audio&quot;&gt;Audio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#materials&quot;&gt;Materials&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#particles&quot;&gt;Particles&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#physics&quot;&gt;Physics&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#issues-fixed&quot;&gt;Issues Fixed&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#general-1&quot;&gt;General&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#game-studio-1&quot;&gt;Game Studio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#assets-1&quot;&gt;Assets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#engine-1&quot;&gt;Engine&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#animation&quot;&gt;Animation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#known-issues&quot;&gt;Known Issues&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#highlights&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;game-templates&quot; tabindex=&quot;-1&quot;&gt;Game Templates &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#game-templates&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We have added several templates packed with a lot of functionality to help you kickstart your games. Choose from:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;First Person Shooter&lt;/li&gt;
&lt;li&gt;Third Person Platformer&lt;/li&gt;
&lt;li&gt;Top-View RPG&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/release-1.9/game_templates.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/release-1.9/game_templates.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;All of them come with basic camera and player functionality found in most games of their respective genres. They also have many production-quality assets so you can easily try different features on your own.&lt;/p&gt;
&lt;p&gt;In addition to the game templates, the &lt;strong&gt;New Game&lt;/strong&gt; project now includes optional packages with all the assets we used to build the samples. Unlike the game templates which are trimmed down, the optional packages include ALL assets, including some which are not used by any Xenko sample.&lt;/p&gt;
&lt;h3 id=&quot;script-editor&quot; tabindex=&quot;-1&quot;&gt;Script Editor &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#script-editor&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To ease friction from switching back and forth between the Game Studio and your IDE, we’ve built a new Script Editor.  Relying fully on Visual Studio is no longer necessary because you can now edit your code directly within the Game Studio itself. You’ll get full syntax highlighting, auto-completion, live diagnostics and even the ability to auto-reload C# files and projects that changed on your hard drive due to changes in your external editor (e.g., Visual Studio).&lt;/p&gt;
&lt;p&gt;In fact, expect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Highlight, auto-completion and live diagnostics is available in the Xenko API, your own game code and libraries that you use&lt;/li&gt;
&lt;li&gt;Auto-reload C# scripts and C# project changes that happened in the background&lt;/li&gt;
&lt;li&gt;A Visual Studio like experience for all your code editing!&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/script_editor/code_completion.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/script_editor/code_completion.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;We had some help from Microsoft’s .NET compiler, &lt;a href=&quot;https://github.com/dotnet/roslyn&quot;&gt;Roslyn&lt;/a&gt;, so Xenko users will also receive the full benefit of all the latest features of .NET. Adding a Rosyln-based Script Editor makes it easier to keep up with the latest C# updates.&lt;/p&gt;
&lt;p&gt;Using the Xenko Script Editor is fairly straightforward. Just follow these steps:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Create a new project/game in Game Studio&lt;/li&gt;
&lt;li&gt;Add a script in Game Studio&lt;/li&gt;
&lt;li&gt;Edit the script in Game Studio&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/script_editor/create_script_gamestudio.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/script_editor/create_script_gamestudio.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;C# scripts saved on Visual Studio side (or any text editor, for that matter) will automatically be updated in Game Studio without reloading. Same goes for project changes (.csproj): new scripts will appear automatically upon saving. GameStudio will automatically listen for file changes on the hard drive and update them live, or ask you what to do in case of conflicts.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/script_editor/external_changes.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/script_editor/external_changes.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;Under the hood, &lt;a href=&quot;https://github.com/dotnet/roslyn&quot;&gt;Rosyln&lt;/a&gt; is the underlying technology that can process your Xenko source code. But we didn’t stop there! We were fortunate to find &lt;a href=&quot;http://avalonedit.net/&quot;&gt;AvalonEdit&lt;/a&gt;, which provided us what we wanted for the visual appearance of the UI aspect of the Xenko script editor. We also integrated &lt;a href=&quot;https://roslynpad.net/&quot;&gt;RoslynPad&lt;/a&gt;, which connects Roslyn and AvalonEdit together.&lt;/p&gt;
&lt;h3 id=&quot;navigation-meshes&quot; tabindex=&quot;-1&quot;&gt;Navigation Meshes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#navigation-meshes&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In Xenko 1.9 Beta, you can create a &lt;strong&gt;navigation mesh&lt;/strong&gt; powered by &lt;a href=&quot;https://github.com/recastnavigation/recastnavigation&quot;&gt;Recast and Detour&lt;/a&gt; with &lt;strong&gt;real-time feedback&lt;/strong&gt; directly in the &lt;strong&gt;Xenko GameStudio!&lt;/strong&gt; The navigation mesh is especially useful for RPGs or top-down strategy games, as you can use it to &lt;strong&gt;guide characters through complex scenes&lt;/strong&gt;. The real-time feedback makes it easy to adjust and conveniently customize AI movement and the dimensions of the navigation mesh itself. The green outline of Xenko’s Navigation Mesh shows where the AI comes into play and where the colliders are set.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/navmeshes/withOutlineAE.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/navmeshes/withOutlineAE.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;In the videos, you can see how the AI navigates the level using the logic within the navigation mesh, and how the colliders will automatically be set in real-time. Of course, you can script AI movement manually, too.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/navmeshes/NoOutlineAE.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/navmeshes/NoOutlineAE.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;h3 id=&quot;copy-%26-paste-functionality-expanded&quot; tabindex=&quot;-1&quot;&gt;Copy &amp;amp; Paste Functionality Expanded &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#copy-%26-paste-functionality-expanded&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In the past we only supported copy and pasting of assets, but now you can &lt;strong&gt;copy-paste pretty much anything&lt;/strong&gt; in the Game Studio.&lt;/p&gt;
&lt;p&gt;Any entities in a scene are now copyable, as well as any sprites of a sprite sheet, UI elements, or even a single property in the property grid! For instance, you can copy a list and perform any of the following operations.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Insert it into another list at various positions, for example:&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_InsertIntoList.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_InsertIntoList.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Copy and insert into the list (by pasting at a list item level).*&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_AppendToList.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_AppendToList.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Copy and append to a list, for example, append it to the end of the list.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_ReplaceList.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_ReplaceList.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;Copy and replace the whole list.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;A bit more difficult to explain, but perhaps easier to show than write about is &lt;strong&gt;copy and replace at an item level&lt;/strong&gt;. This action (shown in the video below) will remove the item (at its position in the list) and insert the copied ones starting at the same position of the item in the list. In our example below, the copy replace starts from Item 2 in List 2:&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_ReplaceIntoList.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_ReplaceIntoList.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;Some information about copying entities and prefabs:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An entire hierarchy of entities can be copied from one scene or prefab to another scene or prefab&lt;/strong&gt;. Prefab instance will keep their reference to the source prefab as illustrated in the following example:&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/copy_paste/CopyPaste_BetweenScenes2.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/copy_paste/CopyPaste_BetweenScenes2.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;The prefab &amp;quot;MyHero&amp;quot; is copied into the scene. Links to the prefab are maintained.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It is also possible to &lt;strong&gt;copy a component from an entity and paste it into another entity&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Any property that can be serialized can be copied&lt;/strong&gt;. You can copy something from one scene to another scene, from a sub-element in one scene to another scene and even from a scene to a text file, back and forth as needed. You can also copy simple values in the property grid (e.g., primitives such as int, vector3, string…) between separate Game Studio instances if that is something you find practical and useful.&lt;/p&gt;
&lt;p&gt;Here’s an example of copying between scripts and transform entities in the GameStudio Property Grid:&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/copy_paste/CopyPaste_PropertyGrid.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/copy_paste/CopyPaste_PropertyGrid.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;h2 id=&quot;.net-standard&quot; tabindex=&quot;-1&quot;&gt;.NET Standard &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#.net-standard&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Starting with Xenko 1.9, shared Game assemblies will be created using &lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/articles/standard/library&quot;&gt;.NET Standard&lt;/a&gt; rather than PCL.&lt;/p&gt;
&lt;p&gt;It offers &lt;a href=&quot;https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/&quot;&gt;many advantages&lt;/a&gt;: much better API surface for the developer, improved forward and backward compatibility, reduced fragmentation, finer-grained modularity of the framework, easier to write cross-platform apps, more frequent updates, etc.&lt;/p&gt;
&lt;p&gt;Newly created applications will target .NET Standard 1.4, but users are of course free to target a different version. Also, your existing PCL projects will still work as is, but we recommend you to update your projects to .NET Standard!&lt;/p&gt;
&lt;h3 id=&quot;assembly-reloading&quot; tabindex=&quot;-1&quot;&gt;Assembly Reloading &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#assembly-reloading&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Iterating on code is very important. So far, Xenko was supporting changes in scripts: as soon as you saved any C# file, Game Studio was offering to recompile and reload the assembly with the updated scripts. If there is an error loading the type, you can still edit other part of the asset, save it back while preserving the parts that could not be loaded.&lt;/p&gt;
&lt;p&gt;In this version, we generalized the approach so that any type embedded in your assets can be reloaded! As a result, you can now implement your own classes for anything you want directly in your game or plugin assemblies, and keep editing them without restarting the Game Studio.&lt;/p&gt;
&lt;p&gt;This includes renderers, material features, and will soon be extensively used in new assets.&lt;/p&gt;
&lt;h2 id=&quot;breaking-changes&quot; tabindex=&quot;-1&quot;&gt;Breaking changes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#breaking-changes&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;windows-phone-and-windows-store-removed&quot; tabindex=&quot;-1&quot;&gt;Windows Phone and Windows Store Removed &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#windows-phone-and-windows-store-removed&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Windows Phone and Windows Store platforms are both removed.&lt;br /&gt;
Please use the newer &lt;code&gt;Universal Windows Apps (UWP)&lt;/code&gt; instead. This platform was previously known as &lt;code&gt;Windows 10&lt;/code&gt;.&lt;br /&gt;
Projects will be automatically upgraded to reflect this change.&lt;/p&gt;
&lt;p&gt;Also, we renamed preprocessor definition &lt;code&gt;SILICONSTUDIO_PLATFORM_WINDOWS_RUNTIME&lt;/code&gt; into &lt;code&gt;SILICONSTUDIO_PLATFORM_UWP&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;.net-standard-1&quot; tabindex=&quot;-1&quot;&gt;.NET Standard &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#.net-standard-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The switch to .NET Standard for newly created projects implies that:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Runtime .NET framework requirement when distributing your projects is bumped from .NET 4.5 to .NET 4.6.1.&lt;/li&gt;
&lt;li&gt;You need Visual Studio 2015 to open and compile newly created projects&lt;/li&gt;
&lt;li&gt;You can upgrade older projects to use .NET Standard using Visual Studio 2015 Update 3 (in project properties)&lt;/li&gt;
&lt;li&gt;From version 1.9, we don&#39;t install prerequisites to compile PCL projects anymore. If you have somebody in your team still working on a project created with a previous version of Xenko on a fresh PC, please make them install Xenko 1.8 so that it installs the proper prerequisites (even if the project has been updated to a newer version of Xenko).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;asset-serialization&quot; tabindex=&quot;-1&quot;&gt;Asset Serialization &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#asset-serialization&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We changed how we serialize asset in YAML. We introduced new concepts that improve how we can track overrides between an archetype or a prefab and assets/entities inheriting from it. Although everything happens &amp;quot;under the hood&amp;quot;, this is a actually a heavy change that might impact the upgrading of your project.&lt;/p&gt;
&lt;p&gt;We removed asset upgrading for projects made with version 1.3 and below (released more than a year ago). It is possible that you experience some issues when upgrading a project made with versions 1.4 to 1.7, but you should properly be able to upgrade any project that uses version 1.8. However a few cases are not supported:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Dependency Properties of UI elements that are overridden from an UI library will be reset during upgrade. Therefore, properties such as Grid Column and Row will have to be manually restored.&lt;/li&gt;
&lt;li&gt;Some case of overriden materials in the material list of ModelComponent might be improperly upgraded.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;dropping-support-for-windows-store-8.1-and-windows-phone-8.1&quot; tabindex=&quot;-1&quot;&gt;Dropping Support for Windows Store 8.1 and Windows Phone 8.1 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#dropping-support-for-windows-store-8.1-and-windows-phone-8.1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;To properly support the .NET Standard 1.4 and offer our developers a more up-to-date and robust API, we decided to drop support for Windows Store 8.1 and Windows Phone 8.1 platforms.&lt;/p&gt;
&lt;p&gt;As Microsoft seems to be focusing on Universal Windows Platform (UWP), we’ve also decided it was best to refocus on more pertinent and relevant platforms for Xenko users. UWP was introduced with Windows 10, and a whole range of devices already support it.&lt;/p&gt;
&lt;p&gt;Of course, you are free to stick with Xenko 1.8 in case you have a project targeting one of those two platforms -- we know this is a big change, and we will make every effort to help our developers with this transition. We apologize for the inconvenience, and aim to bring you a top-notch .NET user experience!&lt;/p&gt;
&lt;p&gt;Just as a reminder, we already support Universal Windows Platform (UWP) on x86, x64 and ARM as of Xenko 1.8, which means games and apps developed with Xenko can be deployed on a whole range of Microsoft devices, including &lt;a href=&quot;https://msdn.microsoft.com/en-us/windows/uwp/xbox-apps/index&quot;&gt;Xbox One&lt;/a&gt;. Until 1.9, this platform was named Windows10 in Xenko, but we took the liberty to rename it UWP to better match the official naming.&lt;/p&gt;
&lt;h2 id=&quot;changelog-version-1.9.0-beta&quot; tabindex=&quot;-1&quot;&gt;Changelog Version 1.9.0-beta &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#changelog-version-1.9.0-beta&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Release date 2016/11/24&lt;/p&gt;
&lt;h3 id=&quot;enhancements&quot; tabindex=&quot;-1&quot;&gt;Enhancements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#enhancements&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;h3 id=&quot;general&quot; tabindex=&quot;-1&quot;&gt;General &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#general&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;From now on, new projects are created as .NET Standard projects rather than PCL projects.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;NuGet restore&lt;/code&gt; is automatically run on projects having a &lt;code&gt;project.json&lt;/code&gt; file&lt;/li&gt;
&lt;li&gt;Bumped FBX SDK to 2017.0.1&lt;/li&gt;
&lt;li&gt;Mesh importing now supports &lt;em&gt;ByEdge&lt;/em&gt; smoothing which was previously ignored. If you notice any difference with vertex normals for your models please check your FBX export settings.&lt;/li&gt;
&lt;li&gt;Prerequisites installer will ask for UAC once instead of many times, and perform a silent installation for all of the prerequisites.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;game-studio&quot; tabindex=&quot;-1&quot;&gt;Game Studio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#game-studio&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Previously, when an &lt;code&gt;EntityComponent&lt;/code&gt; (i.e. script) couldn&#39;t be loaded because game or plugin assembly didn&#39;t compile properly, we kept a Yaml representation of it so that it could be saved or reloaded after a code fix. Now we allow it to happen anywhere, so that you can use and/or implement custom classes for any type of the engine in your game/plugin.&lt;/li&gt;
&lt;li&gt;Improve asset logs and errors to properly display failure/warning icon on all assets, including the one with icon-style thumbnails.&lt;/li&gt;
&lt;li&gt;Improve loading/refreshing of assets in the scene editor.&lt;/li&gt;
&lt;li&gt;Asset editors will display a * in the tab name when an asset is dirty.&lt;/li&gt;
&lt;li&gt;Add editor for C# source code.&lt;/li&gt;
&lt;li&gt;C# files and .csproj files are automatically reloaded as they are modified on hard drive (using a Yes, Yes to All, No, No to All dialog).&lt;/li&gt;
&lt;li&gt;C# files have their own undo/redo stack&lt;/li&gt;
&lt;li&gt;Add a Save All button that saves both assets and source code files.&lt;/li&gt;
&lt;li&gt;The Game Studio now uses &lt;em&gt;AvalonDock&lt;/em&gt; as docking system&lt;/li&gt;
&lt;li&gt;Improve DPI support (&lt;a href=&quot;https://github.com/SiliconStudio/xenko/issues/454&quot;&gt;#454&lt;/a&gt; and &lt;a href=&quot;https://github.com/SiliconStudio/xenko/issues/470&quot;&gt;#470&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;assets&quot; tabindex=&quot;-1&quot;&gt;Assets &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#assets&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Asset YAML serialization has been changed to handle overrides in collection in a better way. More scenario of overrides are now supported.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SharpYaml&lt;/code&gt; has been integrated into our codebase as &lt;code&gt;SiliconStudio.Core.Yaml&lt;/code&gt;. Most of the duplicated types have been merged back in the &lt;code&gt;SiliconStudio.Core.Reflection&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Assets don&#39;t use a ~Base section nor a ~BasePart.&lt;/li&gt;
&lt;li&gt;Change &lt;code&gt;Asset.Id&lt;/code&gt; to be of an &lt;code&gt;AssetId&lt;/code&gt; type rather than &lt;code&gt;Guid&lt;/code&gt;, to avoid invalid comparisons with other kind of ids.&lt;/li&gt;
&lt;li&gt;Remove the &lt;code&gt;Properties&lt;/code&gt; member of Package.&lt;/li&gt;
&lt;li&gt;Introduce a new assembly Assets.Quantum&lt;/li&gt;
&lt;li&gt;Overrides of properties is now handled using &lt;em&gt;Quantum&lt;/em&gt; instead of &lt;code&gt;ShadowObject&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Remove the asset diff/merge classes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;engine&quot; tabindex=&quot;-1&quot;&gt;Engine &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#engine&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;DataSerializers are now generated in a file with .pdb information, so that the user can debug them.&lt;/li&gt;
&lt;li&gt;Add Local offsets to procedural models.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;EntityComponent&lt;/code&gt; now implements &lt;code&gt;IIdentifiable&lt;/code&gt; and has an &lt;code&gt;Id&lt;/code&gt; property.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;audio&quot; tabindex=&quot;-1&quot;&gt;Audio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#audio&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Add &lt;code&gt;SetRange&lt;/code&gt; support to &lt;code&gt;AudioEmitterSoundController&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Improve compilation speed of audio files&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;materials&quot; tabindex=&quot;-1&quot;&gt;Materials &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#materials&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Normal maps now have the option to &lt;code&gt;Invert Y&lt;/code&gt;, supporting both textures where the green component is facing up or down&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;particles&quot; tabindex=&quot;-1&quot;&gt;Particles &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#particles&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Minor optimizations around vertex buffer building&lt;/li&gt;
&lt;li&gt;Add StopEmitters() method to the particle system, which prevents new particles from spawning without pausing the entire system&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;physics&quot; tabindex=&quot;-1&quot;&gt;Physics &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#physics&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Add Cone collider shape.&lt;/li&gt;
&lt;li&gt;Replace float with &lt;code&gt;AngleSingle&lt;/code&gt; for &lt;code&gt;MaxSlope&lt;/code&gt; of character controllers.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;issues-fixed&quot; tabindex=&quot;-1&quot;&gt;Issues Fixed &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#issues-fixed&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;general-1&quot; tabindex=&quot;-1&quot;&gt;General &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#general-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;UWP platform now uses UniversalWindowsPlatform 5.2.2 (was previously 5.0.0).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;game-studio-1&quot; tabindex=&quot;-1&quot;&gt;Game Studio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#game-studio-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fix many issues with property overrides.&lt;/li&gt;
&lt;li&gt;Fix many issues when setting/overriding materials in ModelComponent.&lt;/li&gt;
&lt;li&gt;Asset logs were not properly sent forward to editor, resulting in an empty log for all assets.&lt;/li&gt;
&lt;li&gt;Sometimes there was a deadlock when compiling effects due to the way we were using the thread pool and task continuations.&lt;/li&gt;
&lt;li&gt;Fix performance issue that could occur when duplicating entities with the same name many times.&lt;/li&gt;
&lt;li&gt;Fix &#39;Rename&#39; menu entry when right-clicking a folder of the scene editor.&lt;/li&gt;
&lt;li&gt;Fix crashes in the UI editor that could occur when deleting or moving an element.&lt;/li&gt;
&lt;li&gt;Fix crashes in sprite sheet editor that could occur when deleting, duplicating or moving sprites.&lt;/li&gt;
&lt;li&gt;Fix sort order of assets in the asset view.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;assets-1&quot; tabindex=&quot;-1&quot;&gt;Assets &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#assets-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fix tangents of imported meshes, when transforms are negative along some axes&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;engine-1&quot; tabindex=&quot;-1&quot;&gt;Engine &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#engine-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Several issues with spot lights were fixed, including shadow maps&lt;/li&gt;
&lt;li&gt;Fix flickering of some materials when no ambient light is present&lt;/li&gt;
&lt;li&gt;Fix an issue on OpenGL that caused low frame rates when using post effects, due to blocking GPU-readback&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;animation&quot; tabindex=&quot;-1&quot;&gt;Animation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#animation&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fix a bug where an empty animation clip caused a crash&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;known-issues&quot; tabindex=&quot;-1&quot;&gt;Known Issues &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-9-0/#known-issues&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On Linux, when switching the underlying Graphics Platform, rendering will not occur or fail. Delete the cache, local and roaming folder on the Linux host and restarting the game should fix the issue.&lt;/li&gt;
&lt;li&gt;Performance issues on mobile (being worked on)&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Thu, 24 Nov 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/new-version-1-9-0/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/new-version-1-9-0/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-1.9/thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Script Editor Preview</title>
      <description>&lt;p&gt;Switching back and forth between your game development editor and your IDE for small changes starting to wear on you? Well, you can look forward to losing many of those unnecessary steps because Xenko is bringing you our new Script Editor feature - available soon in &lt;strong&gt;Xenko 1.9 Beta&lt;/strong&gt;. Open the blog post for the full details!&lt;/p&gt;
&lt;p&gt;Feeling the pain of switching back and forth between the &lt;strong&gt;Game Studio&lt;/strong&gt; and your &lt;strong&gt;IDE&lt;/strong&gt;? We hear ya! We know how annoying it can be, so that’s why we think we’ll save you some time and frustration with Xenko’s Script Editor!&lt;/p&gt;
&lt;p&gt;With our new &lt;strong&gt;Script Editor&lt;/strong&gt;, relying fully on Visual Studio is no longer necessary, because now you can edit your code directly within the Game Studio itself! You’ll get full &lt;strong&gt;syntax highlighting&lt;/strong&gt;, &lt;strong&gt;auto-completion&lt;/strong&gt;, &lt;strong&gt;live diagnostics&lt;/strong&gt; and even the ability to &lt;strong&gt;auto-reload C# files and projects&lt;/strong&gt; that changed on your hard drive due to changes in your external editor (e.g., Visual Studio).&lt;/p&gt;
&lt;p&gt;In fact, expect:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Highlight, auto-completion and live diagnostics is available in the Xenko API, your own game code and libraries that you use&lt;/li&gt;
&lt;li&gt;Auto-reload C# scripts and C# project changes that happened in the background&lt;/li&gt;
&lt;li&gt;A Visual Studio like experience for all your code editing!&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/script_editor/code_completion.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/script_editor/code_completion.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;We had some help from Microsoft’s .NET compiler, &lt;a href=&quot;https://github.com/dotnet/roslyn&quot;&gt;Rosyln&lt;/a&gt;, so Xenko users will also receive the full benefit of all the latest features of .NET. Adding a Rosyln-based Script Editor makes it easier to keep up with the latest C# updates.&lt;/p&gt;
&lt;p&gt;Okay, so let’s get back to the important stuff, like how to use the Xenko Script Editor, which is fairly straightforward.&lt;/p&gt;
&lt;p&gt;Just follow these steps:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Create a new project/game in Game Studio&lt;/li&gt;
&lt;li&gt;Add a script in Game Studio&lt;/li&gt;
&lt;li&gt;Edit the script in Game Studio&lt;/li&gt;
&lt;li&gt;(Optional) Click “Reload assembly” when you’re ready&lt;/li&gt;
&lt;/ol&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/script_editor/create_script_gamestudio.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/script_editor/create_script_gamestudio.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;C# scripts saved on Visual Studio side (or any text editor, for that matter) will automatically be updated in Game Studio without reloading. Same goes for project changes (.csproj): new scripts will appear automatically upon saving. GameStudio will automatically listen for file changes on the hard drive and update them live, or ask you what to do in case of conflicts.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/script_editor/external_changes.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/script_editor/external_changes.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;Under the hood, &lt;a href=&quot;https://github.com/dotnet/roslyn&quot;&gt;Rosyln&lt;/a&gt; is the underlying technology that can process your Xenko source code. But we didn’t stop there! We were fortunate to find &lt;a href=&quot;http://avalonedit.net/&quot;&gt;AvalonEdit&lt;/a&gt;, which provided us what we wanted for the visual appearance of the UI aspect of the Xenko script editor. We also integrated &lt;a href=&quot;https://roslynpad.net/&quot;&gt;RoslynPad&lt;/a&gt;, which connects Roslyn and AvalonEdit together. We were lucky to be able to take advantage of these great Roslyn related efforts, and appreciate all the hard work the developers and contributors have put into RoslynPad and AvalonEdit, further strengthening the .NET ecosystem.&lt;/p&gt;
&lt;p&gt;Overall, we were extremely pleased with these libraries; thus the C# Script Editor was much easier than expected to build. And, since Roslyn is now integrated into our code codebase, it will allow us to do more cool stuff in the future, such as:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Code upgrades (i.e. if we rename members or refactor some classes, we could automatically update the code of your older projects)&lt;/li&gt;
&lt;li&gt;Better code analysis&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;With Roslyn now integrated into our codebase, soon we’ll be able to share with you a pretty awesome surprise we have coming, so stay tuned for more info in the next few months!&lt;/p&gt;
</description>
      <pubDate>Fri, 18 Nov 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/script-editor/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/script-editor/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/script_editor/thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Navigation Mesh Preview</title>
      <description>&lt;p&gt;In Xenko 1.9 Beta, you can create a &lt;strong&gt;navigation mesh&lt;/strong&gt; powered by &lt;a href=&quot;https://github.com/recastnavigation/recastnavigation&quot;&gt;Recast and Detour&lt;/a&gt; with &lt;strong&gt;real-time feedback&lt;/strong&gt; directly in the &lt;strong&gt;Xenko GameStudio!&lt;/strong&gt; The navigation mesh is especially useful for RPGs or top-down strategy games, as you can use it to &lt;strong&gt;guide characters through complex scenes&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;The real-time feedback makes it easy to adjust and conveniently customize AI movement and the dimensions of the navigation mesh itself. The green outline of Xenko’s Navigation Mesh shows where the AI comes into play and where the colliders are set.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/navmeshes/withOutlineAE.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/navmeshes/withOutlineAE.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;In the videos, you can see how the AI navigates the level using the logic within the navigation mesh, and how the colliders will automatically be set in real-time. Of course, you can script AI movement manually, too.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/navmeshes/NoOutlineAE.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/navmeshes/NoOutlineAE.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;</description>
      <pubDate>Fri, 11 Nov 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/navigation-mesh/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/navigation-mesh/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/navmeshes/thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Toward a Better .NET!</title>
      <description>&lt;p&gt;We’d like to announce some of our plans for the coming months, and also notify our users of some big changes that will be coming with release 1.9. Namely, we’ll be dropping support for Windows Store 8.1 and Windows Phone 8.1.&lt;/p&gt;
&lt;h2 id=&quot;switch-to-.net-standard&quot; tabindex=&quot;-1&quot;&gt;Switch to .NET Standard &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/toward-a-better-dotnet/#switch-to-.net-standard&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Starting with Xenko 1.9, shared Game assemblies will be created using &lt;a href=&quot;https://docs.microsoft.com/en-us/dotnet/articles/standard/library&quot;&gt;.NET Standard&lt;/a&gt; rather than PCL.&lt;/p&gt;
&lt;p&gt;It offers &lt;a href=&quot;https://blogs.msdn.microsoft.com/dotnet/2016/09/26/introducing-net-standard/&quot;&gt;many advantages&lt;/a&gt;: much better API surface for the developer, improved forward and backward compatibility, reduced fragmentation, finer-grained modularity of the framework, easier to write cross-platform apps, more frequent updates, etc.&lt;/p&gt;
&lt;p&gt;Newly created applications will target .NET Standard 1.4, but users are of course free to target a different version. Also, your existing PCL projects will still work as is, but we recommend you to update your projects to .NET Standard!&lt;/p&gt;
&lt;h2 id=&quot;what%E2%80%99s-next%3F&quot; tabindex=&quot;-1&quot;&gt;What’s next? &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/toward-a-better-dotnet/#what%E2%80%99s-next%3F&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Microsoft also &lt;a href=&quot;https://blogs.msdn.microsoft.com/dotnet/2016/10/19/net-core-tooling-in-visual-studio-15/&quot;&gt;announced many improvements to come in Visual Studio 15&lt;/a&gt;. Once it is released, we will also follow the trend by moving project.json information to .csproj.&lt;/p&gt;
&lt;p&gt;We will probably change any newly created project to target .NET Standard 2.0, and the Xenko runtime itself will probably switch to the .NET Standard for easier portability.&lt;/p&gt;
&lt;p&gt;Additionally, we plan to support C# 7.0 as soon as possible, and plan to offer CoreCLR/CoreRT runtime on more platforms as those two runtimes mature.&lt;/p&gt;
&lt;p&gt;C# 7.0 and future versions focus not only on language usability but also on tackling some performances issues (&lt;a href=&quot;https://github.com/dotnet/roslyn/issues/118&quot;&gt;ref locals&lt;/a&gt;, &lt;a href=&quot;https://github.com/dotnet/coreclr/commit/37798423fb035625192b4fac90a329e17b90d562&quot;&gt;stack allocation&lt;/a&gt;, etc.), and since we’re making a game engine, we couldn’t be more happy!&lt;/p&gt;
&lt;p&gt;Overall we are very excited with how dynamic the new .NET ecosystem is becoming, and we plan to consistently provide you with the latest .NET changes so that you can enjoy coding faster and better!&lt;/p&gt;
&lt;p&gt;.NET future looks very bright, so kudos to Microsoft!&lt;/p&gt;
&lt;h2 id=&quot;bye-windows-store-8.1-and-windows-phone-8.1%2C-long-live-universal-windows-platform-(uwp)!&quot; tabindex=&quot;-1&quot;&gt;Bye Windows Store 8.1 and Windows Phone 8.1, long live Universal Windows Platform (UWP)! &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/toward-a-better-dotnet/#bye-windows-store-8.1-and-windows-phone-8.1%2C-long-live-universal-windows-platform-(uwp)!&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;To properly support the .NET Standard 1.4 and offer our developers a more up-to-date and robust API, we decided to drop support for Windows Store 8.1 and Windows Phone 8.1 platforms.&lt;/p&gt;
&lt;p&gt;As Microsoft seems to be focusing on Universal Windows Platform (UWP), we’ve also decided it was best to refocus on more pertinent and relevant platforms for Xenko users. UWP was introduced with Windows 10, and a whole range of devices already support it.&lt;/p&gt;
&lt;p&gt;Of course, you are free to stick with Xenko 1.8 in case you have a project targeting one of those two platforms -- we know this is a big change, and we will make every effort to help our developers with this transition. We apologize for the inconvenience, and aim to bring you a top-notch .NET user experience!&lt;/p&gt;
&lt;p&gt;Just as a reminder, we already support Universal Windows Platform (UWP) on x86, x64 and ARM as of Xenko 1.8, which means games and apps developed with Xenko can be deployed on a whole range of Microsoft devices, including &lt;a href=&quot;https://msdn.microsoft.com/en-us/windows/uwp/xbox-apps/index&quot;&gt;Xbox One&lt;/a&gt;. Until 1.9, this platform was named Windows10 in Xenko, but we took the liberty to rename it UWP to better match the official naming.&lt;/p&gt;
</description>
      <pubDate>Wed, 02 Nov 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/toward-a-better-dotnet/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/toward-a-better-dotnet/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/microsoft_.net.png" type="image/png" length="0" /></item>
    <item>
      <title>Copy-Paste Improvements Coming Soon</title>
      <description>&lt;p&gt;Discover the groundbreaking Copy-Paste feature in Xenko, designed to streamline your game development process. Learn how this innovative tool simplifies asset management, accelerates workflow, and inspires creativity in your projects.&lt;/p&gt;
&lt;p&gt;We are working hard to add some important new features to our next release and we’re pretty sure you’ll be pleased with our improvements to the cut, copy and paste interactions, for one. Our development team is excited to offer you &lt;strong&gt;one of the most advanced clipboard support systems&lt;/strong&gt; found in other game engines today. In the past we only supported copy and pasting of assets, but now you can &lt;strong&gt;copy-paste pretty much anything.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Any entities in a scene are now copyable, as well as any sprites of a sprite sheet, UI elements, or even a single property in the property grid! For instance, in our implementation of Copy-Paste, you can copy a list (assuming the type of values are compatible) and perform any of the following operations:&lt;/p&gt;
&lt;p&gt;Insert it into another list at various positions, for example:&lt;/p&gt;
&lt;p&gt;&lt;video class=&quot;mb-3 img-fluid&quot; autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_InsertIntoList.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_InsertIntoList.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Copy and insert into the list (by pasting at a list item level).&lt;/p&gt;
&lt;p&gt;&lt;video class=&quot;mb-3 img-fluid&quot; autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_AppendToList.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_AppendToList.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Copy and append to a list, for example, append it to the end of the list.&lt;/p&gt;
&lt;p&gt;&lt;video class=&quot;mb-3 img-fluid&quot; autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_ReplaceList.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_ReplaceList.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Copy and replace the whole list.&lt;/p&gt;
&lt;p&gt;A bit more difficult to explain, but perhaps easier to show than write about is &lt;strong&gt;copy and replace at an item level&lt;/strong&gt;. This action (shown in the video below) will remove the item (at its position in the list) and insert the copied ones starting at the same position of the item in the list. In our example below, the copy replace starts from Item 2 in List 2:&lt;/p&gt;
&lt;p&gt;&lt;video class=&quot;mb-3 img-fluid&quot; autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_ReplaceIntoList.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/copy_paste/Copy_ReplaceIntoList.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Some information about copying entities and prefabs:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;An entire hierarchy of entities can be copied from one scene or prefab to another scene or prefab&lt;/strong&gt;. Prefab instance will keep their reference to the source prefab as illustrated in the following example:&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;video autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/copy_paste/CopyPaste_BetweenScenes2.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/copy_paste/CopyPaste_BetweenScenes2.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/div&gt;
&lt;p&gt;&lt;em&gt;The prefab “MyHero” is copied into the scene. Links to the prefab are maintained.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It is also possible to &lt;strong&gt;copy a component from an entity and paste it into another entity&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;In fact, &lt;strong&gt;absolutely any property that can be serialized can be copied&lt;/strong&gt;. You can copy something from one scene to another scene, from a sub-element in one scene to another scene and even from a scene to a text file, back and forth as needed. You can also copy simple values in the property grid (e.g., primitives such as int, vector3, string…) between separate Game Studio instances if that is something you find practical and useful.&lt;/p&gt;
&lt;p&gt;Here’s an example of copying between scripts and transform entities in the GameStudio Property Grid:&lt;/p&gt;
&lt;p&gt;&lt;video class=&quot;mb-3 img-fluid&quot; autoplay=&quot;&quot; controls=&quot;&quot; loop=&quot;&quot; preload=&quot;none&quot; poster=&quot;https://www.stride3d.net/images/blog/copy_paste/CopyPaste_PropertyGrid.jpg&quot;&gt;&lt;source src=&quot;https://www.stride3d.net/images/blog/copy_paste/CopyPaste_PropertyGrid.mp4&quot; type=&quot;video/mp4&quot; /&gt;&lt;/video&gt;&lt;/p&gt;
&lt;p&gt;Look for this feature in our forthcoming &lt;strong&gt;beta release 1.9, coming soon.&lt;/strong&gt; As always, we are committed to offering you best-in-class game dev solutions directly in GameStudio.&lt;/p&gt;
</description>
      <pubDate>Thu, 27 Oct 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/copy-paste/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/copy-paste/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/copy_paste/thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Run, Don&#39;t Walk</title>
      <description>&lt;p&gt;Embrace the power of efficient movement in game development with the &amp;quot;Run, Don&#39;t Walk&amp;quot; blog post. Explore tips, tricks, and strategies to enhance your workflow and optimize your project&#39;s performance using Stride 3D&#39;s innovative tools and features.&lt;/p&gt;
&lt;p&gt;Not so long ago, I heard some advice about supporting new features in a game engine that I hear often: &lt;em&gt;Walk, don’t run&lt;/em&gt;. Makes sense, doesn’t it? Developers and artists need the basics to make any game, namely, a stable, state-of-the-art rendering system with things like support for PBR, efficient use of lighting technology, a decent physics engine, a functional U.I. system,  pipeline optimizing shortcuts, a way to handle coding frameworks efficiently and much more. However, even for a game engine that needs to accommodate traditional game deployment platforms such as PCs, console and mobile devices, game industry software tool development teams rarely follow any kind of linear or waterfall product management techniques. Agile methods have allowed product managers and teams to sprint to support certain higher priority features as needed, some market driven, some purely technically driven. Not surprisingly, this is the way the Xenko game engine effort is handled at Silicon Studio, which allows us to react quickly to industry trends. Such has been the case with virtual reality (VR).&lt;/p&gt;
&lt;p&gt;The largest disruption to the whole &lt;em&gt;walk, don’t run&lt;/em&gt; philosophy we’ve seen the last two years has to be, without a doubt, the race to prepare game engines to support development for VR. Staying current and reacting to key trends in both the end-user market and in game development has always been a part of Silicon Studio Corporation’s strategy. We’ve spoken with many game industry leaders, notable game developers, and attended key industry conferences, all the while - listening and learning. Most every commercial game engine (and even most non-commercial games) have decided to change direction and embrace VR because of the VR market’s rapid growth. We, as well, must be prepared for the next generation of gaming and interactive experiences.&lt;/p&gt;
&lt;p&gt;We want to make it easy for you to follow this new trend in gaming with us, by offering you a truly VR-friendly game development tool. We know there are many new and improved features game engines need to be useful for developing games and apps in VR. Therefore, we have decided to change course somewhat for our Xenko game engine plans - before we even release version 2.0, while we are still young, nimble and in beta. We realize VR is disrupting the work of some (most?) developers, but we haven’t forget those folks not interested in VR. We’ll keep improving the engine for our non-VR game developers as well. This said, we think - in the not very long run - you will be pleased with how well Xenko supports your VR development.  For one, we know it’s necessary to make our rendering pipeline more flexible - to meet the demanding needs of VR. Also, thanks to the rapidly increasing popularity of VR content creation and experiences, expect cool new features as well to help you get started creating VR content.&lt;/p&gt;
&lt;p&gt;Therefore, we are now 100% on track to support VR in Xenko. So, what does this mean? First of all, the technology hints were in place before the decision was made in July. Important rendering, lighting, and audio features were already in place or planned to soon to be in place. For instance, Forward Clustered rendering, touted as the best rendering for VR, is now supported, our support for Oculus Rift is in place, our performant multithreading and back-end support of next generation APIs such as Vulkan smooths the way for AAA style VR games needing the best possible performance, and last but not least, we are working on adding &lt;a href=&quot;http://www.bitoutsidethebox.com/shabda/hrtf-info/&quot;&gt;HRTF&lt;/a&gt; support to our audio system to accommodate a sense called proprioception, necessary for a true VR audio experience.&lt;/p&gt;
&lt;p&gt;In conclusion, let’s not bury the lead here: the game industry disruption caused by this race to widely support VR, trough of disappointment or not, is the reason why Xenko is now on track to become the first built-from-scratch comprehensive VR engine for game developers.&lt;/p&gt;
</description>
      <pubDate>Fri, 21 Oct 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/run-dont-walk/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/run-dont-walk/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/run-dont-walk/thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Xenko 1.8 Beta Released</title>
      <description>&lt;p&gt;Xenko release 1.8 introduces three major new features along with several relevant enhancements to existing features. We are proud to be able to offer you our new &lt;strong&gt;UI Editor&lt;/strong&gt;, enhanced performance via our newly &lt;strong&gt;multithreaded engine&lt;/strong&gt; with Vulkan support and our new &lt;strong&gt;Prefab Model&lt;/strong&gt;. Also, for your cutting edge rendering needs, we now support &lt;strong&gt;SSAO&lt;/strong&gt; and &lt;strong&gt;cel (toon) shading&lt;/strong&gt;!&lt;/p&gt;
&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#highlights&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#highlights&quot;&gt;Highlights&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#ui-editor&quot;&gt;UI Editor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#performance&quot;&gt;Performance&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#multithreading&quot;&gt;Multithreading&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#prefab-model&quot;&gt;Prefab Model&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#rendering&quot;&gt;Rendering&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#ssao&quot;&gt;SSAO&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#cel-shading&quot;&gt;Cel Shading&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#how-to-upgrade&quot;&gt;How To Upgrade&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#ui&quot;&gt;UI&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#changelog-version-1.8.0-beta&quot;&gt;Changelog Version 1.8.0-Beta&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#enhancements&quot;&gt;Enhancements&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#general&quot;&gt;General&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#assets&quot;&gt;Assets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#audio&quot;&gt;Audio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#graphics&quot;&gt;Graphics&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#game-studio&quot;&gt;Game Studio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#input&quot;&gt;Input&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#particles&quot;&gt;Particles&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#samples&quot;&gt;Samples&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#issues-fixed&quot;&gt;Issues fixed&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#physics&quot;&gt;Physics&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#game-studio-1&quot;&gt;Game Studio&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#breaking-changes&quot;&gt;Breaking changes&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#ui-1&quot;&gt;UI&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#audio-1&quot;&gt;Audio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#physics-1&quot;&gt;Physics&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#vr&quot;&gt;VR&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#known-issues&quot;&gt;Known Issues&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;ui-editor&quot; tabindex=&quot;-1&quot;&gt;UI Editor &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#ui-editor&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;This release introduces new UI assets along with a brand-new UI editor, so that you can create amazing UI directly from the Game Studio!&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/YlCViinxviI&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;The UI editor provides a full WYSIWYG experience. You can author the whole visual tree of your UI, edit the properties of each UI element (such as layout, background color, etc.) and preview its rendering.&lt;/p&gt;
&lt;p&gt;Two new assets are available:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;UI Page asset&lt;/strong&gt;: represents a typical tree of UI elements that can assigned to the UI Component of an entity in the scene or prefab editor.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;UI Library asset&lt;/strong&gt;: represents a collection of UI trees (similar to prefabs) that can be reused by other UI Pages.&lt;/li&gt;
&lt;li&gt;Both have runtime equivalents. UIComponent now expects a UI Page. A UI Library is useful to create or edit UI at runtime.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;And since it is built on the same system as archetypes and prefabs, you can easily create shared UI parts, override some properties and have changes propagating automatically.&lt;/p&gt;
&lt;h2 id=&quot;performance&quot; tabindex=&quot;-1&quot;&gt;Performance &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#performance&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;multithreading&quot; tabindex=&quot;-1&quot;&gt;Multithreading &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#multithreading&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Many computationally intensive systems have been multithreaded. Expect a major increase in performance and better scaling to correspond with the size of your game! We have observed up to 6 times higher frame rates for heavily CPU bound scenes so far (on a typical 4-core CPU).&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/sJ2p982cZFc&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;Parallelized code includes many &lt;code&gt;EntityProcessors&lt;/code&gt; and almost every part of our recently rewritten &lt;strong&gt;rendering pipeline&lt;/strong&gt;. On &lt;strong&gt;Vulkan&lt;/strong&gt; and &lt;strong&gt;Direct3D12&lt;/strong&gt; this includes also recording of drawing command lists, giving them an edge over the other APIs.&lt;/p&gt;
&lt;img alt=&quot;Multithreading&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.8/multithreading.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.8/multithreading.jpg&quot; /&gt;
&lt;p&gt;Developers can find classes and utilities for concurrent programming in the &lt;code&gt;SiliconStudio.Core.Threading&lt;/code&gt; namespace, e.g. &lt;code&gt;Dispatcher.For()&lt;/code&gt;, which resemble the Task Parallel Library, but are more lightweight and tailored for work performed every frame in a game&#39;s update loop.&lt;/p&gt;
&lt;p&gt;Over time, we will look into multithreading more parts of the engine, including independent subsystems, such as different phases of the &lt;code&gt;RenderSystem&lt;/code&gt; and &lt;code&gt;Scripts&lt;/code&gt;.&lt;/p&gt;
&lt;h3 id=&quot;prefab-model&quot; tabindex=&quot;-1&quot;&gt;Prefab Model &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#prefab-model&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The Prefab Model is a new type of Model asset that generates an optimized baked and merged single model from a prefab.&lt;/p&gt;
&lt;p&gt;It merges meshes together by material and vertex layout. You can easily go from thousands of draw calls to one or two draw calls.&lt;/p&gt;
&lt;p&gt;To use it, just create a new Prefab Model asset from the Game Studio and assign a prefab to it.&lt;br /&gt;
Make sure that the base prefab is just containing static entities as only &lt;code&gt;ModelComponent&lt;/code&gt; types are merged.&lt;/p&gt;
&lt;h2 id=&quot;rendering&quot; tabindex=&quot;-1&quot;&gt;Rendering &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#rendering&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;ssao&quot; tabindex=&quot;-1&quot;&gt;SSAO &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#ssao&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Ambient Occlusion was added to the list of post-processing effects. The current technique implements &lt;a href=&quot;https://graphics.cs.williams.edu/papers/SAOHPG12/&quot;&gt;Scalable Ambient Obscurance&lt;/a&gt;. It exposes a variety of options, including number of tap samples, intensity, tap radius and back buffer size.&lt;/p&gt;
&lt;img alt=&quot;SAO comparison shots&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.8/SAO.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.8/SAO.jpg&quot; /&gt;
&lt;p&gt;It is currently part of the post-effect pipeline, but will later move to the lighting pipeline for more realistic rendering.&lt;/p&gt;
&lt;h3 id=&quot;cel-shading&quot; tabindex=&quot;-1&quot;&gt;Cel Shading &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#cel-shading&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Cel shading (or Toon shading) is now available as a rendering model with both Diffuse and Specular rendering options. The default implementation limits the light product to binary or 3-cuts discrete levels. You can also reference a ramp texture for better artistic control.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/RJDrG1QR3Uo&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;h2 id=&quot;how-to-upgrade&quot; tabindex=&quot;-1&quot;&gt;How To Upgrade &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#how-to-upgrade&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;ui&quot; tabindex=&quot;-1&quot;&gt;UI &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#ui&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The UIComponent &lt;code&gt;RootElement&lt;/code&gt;  property has been replaced with the &lt;code&gt;Page&lt;/code&gt; property. It now expects an instance of the &lt;code&gt;UIPage&lt;/code&gt; type. Scripts that were setting the &lt;code&gt;RootElement&lt;/code&gt; property need to be updated:&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;// previous code (will not compile)&lt;/span&gt;
&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; grid &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;Grid&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; component &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Entity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Get&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;UIComponent&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
component&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;RootElement &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; grid&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token comment&quot;&gt;// new code&lt;/span&gt;
&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; grid &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;Grid&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; component &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; Entity&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token generic-method&quot;&gt;&lt;span class=&quot;token function&quot;&gt;Get&lt;/span&gt;&lt;span class=&quot;token generic class-name&quot;&gt;&lt;span class=&quot;token punctuation&quot;&gt;&amp;lt;&lt;/span&gt;UIComponent&lt;span class=&quot;token punctuation&quot;&gt;&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
component&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Page &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;UIPage&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    RootElement &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; grid
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Due to the slight API and behavior changes made to UI system, you might have to adapt some other part of your code. For example:&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; text &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;TextBlock&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; canvas &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;Canvas&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
canvas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;Children&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Add&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;text&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;token class-name&quot;&gt;&lt;span class=&quot;token keyword&quot;&gt;var&lt;/span&gt;&lt;/span&gt; position &lt;span class=&quot;token operator&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;token keyword&quot;&gt;new&lt;/span&gt; &lt;span class=&quot;token constructor-invocation class-name&quot;&gt;Vector3&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token number&quot;&gt;0.0f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;1.0f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token number&quot;&gt;0.0f&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// previously setting this attached property will also set Canvas.UseAbsolutePositionPropertyKey to false automatically&lt;/span&gt;
text&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DependencyProperties&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Canvas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;RelativePositionPropertyKey&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; position&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// now you need to set it explicitly&lt;/span&gt;
text&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;DependencyProperties&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;Set&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Canvas&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;UseAbsolutePositionPropertyKey&lt;span class=&quot;token punctuation&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;token boolean&quot;&gt;false&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token comment&quot;&gt;// note that using extension methods is the recommended way, and does all of that in a more concise way:&lt;/span&gt;
text&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;SetCanvasRelativePosition&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;position&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;changelog-version-1.8.0-beta&quot; tabindex=&quot;-1&quot;&gt;Changelog Version 1.8.0-Beta &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#changelog-version-1.8.0-beta&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Release date: 2016/08/31&lt;/p&gt;
&lt;h2 id=&quot;enhancements&quot; tabindex=&quot;-1&quot;&gt;Enhancements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#enhancements&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;general&quot; tabindex=&quot;-1&quot;&gt;General &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#general&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added a &lt;code&gt;DebugConsoleSystem&lt;/code&gt; to be able to print basic debug information in game.&lt;/li&gt;
&lt;li&gt;Added Utility methods &lt;code&gt;FindChild&lt;/code&gt; and &lt;code&gt;FindRoot&lt;/code&gt; to &lt;code&gt;Entity&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Animation blend trees can now be created in script. The &lt;code&gt;AnimationBlend&lt;/code&gt; pre-built script shows how to do it easily&lt;/li&gt;
&lt;li&gt;Updated Roslyn to 1.3.2&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;assets&quot; tabindex=&quot;-1&quot;&gt;Assets &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#assets&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Yaml scene files now encode entity and component references in a much more compact way&lt;/li&gt;
&lt;li&gt;Yaml serialization order is now following class declaration order&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;audio&quot; tabindex=&quot;-1&quot;&gt;Audio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#audio&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Game studio side: added hard limits in Compression ratio, also now it is using a slider.&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;SetRange&lt;/code&gt; in &lt;code&gt;SoundInstance&lt;/code&gt; to be able to set play range, it also enables seeking.&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;Position&lt;/code&gt; property in &lt;code&gt;SoundInstance&lt;/code&gt; to be able to know the position in time of your playing instance.&lt;/li&gt;
&lt;li&gt;Added &lt;code&gt;PlayAndForget&lt;/code&gt; to &lt;code&gt;AudioEmitterSoundController&lt;/code&gt; to play many instances of the same sound rapidly.&lt;/li&gt;
&lt;li&gt;Added RequestedAudioDevice in AudioSystem to allow game code to select audio devices (Windows only for now).&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AudioEmitterComponent&lt;/code&gt; now contains a dictionary of sounds that can be used from the emitter, those can be set from the Game Studio directly!&lt;/li&gt;
&lt;li&gt;Game Studio sound preview now uses the internal engine, this means that you can directly preview the compression rate!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;graphics&quot; tabindex=&quot;-1&quot;&gt;Graphics &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#graphics&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;CommandList can now compiled and executed&lt;/li&gt;
&lt;li&gt;Constant Buffers are now uploaded in a single GPU Buffer and set with offsets on platform/API that support this mode&lt;/li&gt;
&lt;li&gt;D3D12: reduced number of API calls&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;game-studio&quot; tabindex=&quot;-1&quot;&gt;Game Studio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#game-studio&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;About Page accessible from Menu--&amp;gt;Help--&amp;gt;About.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;input&quot; tabindex=&quot;-1&quot;&gt;Input &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#input&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added preliminary controller vibration support with &lt;code&gt;Input.SetGamePadVibration&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;particles&quot; tabindex=&quot;-1&quot;&gt;Particles &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#particles&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Particle rendering now uses the improved multithreaded pipeline, significantly speeding up the vertex buffer building.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;samples&quot; tabindex=&quot;-1&quot;&gt;Samples &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#samples&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Several samples have been removed. Particles and Physics samples have been greatly reduced and merged into only two, which allows the user to check more features with a single sample.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;issues-fixed&quot; tabindex=&quot;-1&quot;&gt;Issues fixed &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#issues-fixed&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;physics&quot; tabindex=&quot;-1&quot;&gt;Physics &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#physics&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Procedural models can now be used as a source to generate convex hull shapes.&lt;/li&gt;
&lt;li&gt;We are now using the github version of Bullet Physics and actively cooperating with the project.&lt;/li&gt;
&lt;li&gt;Fixed ColliderShape cached matrices computation.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;game-studio-1&quot; tabindex=&quot;-1&quot;&gt;Game Studio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#game-studio-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Credential dialog will now save the credential settings when closing.&lt;/li&gt;
&lt;li&gt;Credential dialog will not appear if you checked &amp;quot;Do not ask again&amp;quot;.&lt;/li&gt;
&lt;li&gt;Fixed hang when launching a Linux game remotely.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;breaking-changes&quot; tabindex=&quot;-1&quot;&gt;Breaking changes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#breaking-changes&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;ui-1&quot; tabindex=&quot;-1&quot;&gt;UI &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#ui-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The UIComponent expect a UI Page in place of the previous Root Element property.&lt;/li&gt;
&lt;li&gt;Most dependency properties were changed into regular C# properties, except the ones that are attached properties (such as the Column and Row attached property of a Grid).&lt;/li&gt;
&lt;li&gt;In desktop, TouchMove event is also raised when no mouse button are pressed.&lt;/li&gt;
&lt;li&gt;Default style of the UI has been removed.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;audio-1&quot; tabindex=&quot;-1&quot;&gt;Audio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#audio-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Removed Play with boolean argument from &lt;code&gt;SoundInstance&lt;/code&gt;, instead the same behavior will be achieved by using PlayExtended or Play.&lt;/li&gt;
&lt;li&gt;Renamed &lt;code&gt;IsLooped&lt;/code&gt; into &lt;code&gt;IsLooping&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Deprecated: &lt;code&gt;GetSoundController&lt;/code&gt;, &lt;code&gt;AttachSound&lt;/code&gt;, &lt;code&gt;AttachSounds&lt;/code&gt;, &lt;code&gt;DetachSound&lt;/code&gt;, &lt;code&gt;DetachSounds&lt;/code&gt;. Please add sounds now from the &lt;code&gt;AudioEmitterComponent&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;physics-1&quot; tabindex=&quot;-1&quot;&gt;Physics &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#physics-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;Collision.Contacts&lt;/code&gt; is now an &lt;code&gt;HashSet&lt;/code&gt; so access by index is not possible anymore, please use &lt;code&gt;foreach&lt;/code&gt; or iterate them instead.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;vr&quot; tabindex=&quot;-1&quot;&gt;VR &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#vr&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added audio, status and re-center support for Oculus Rift.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;known-issues&quot; tabindex=&quot;-1&quot;&gt;Known Issues &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-8-0/#known-issues&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;On Linux, when switching the underlying Graphics Platform, rendering will not occur. Delete the cache, local and roaming folder on the Linux host and restarting the game should fix the issue.&lt;/li&gt;
&lt;li&gt;Linux Mono has some issue with the new effect compiler (since 1.7.5-Beta). Please use the &amp;quot;remote compiler&amp;quot; in the &amp;quot;package properties&amp;quot; (right-click on the package in solution explorer), or use Linux CoreCLR in the meantime.&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Wed, 31 Aug 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/new-version-1-8-0/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/new-version-1-8-0/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-1.8/thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Help Improve Xenko By Taking Short Survey! (Closed Now)</title>
      <description>&lt;p&gt;We’ve created a short, new survey, so that we can hear your thoughts and opinions about Xenko.&lt;/p&gt;
&lt;p&gt;Link to new survey here: &lt;a href=&quot;http://goo.gl/forms/2K33S9hg6rtuTRyu2&quot;&gt;http://goo.gl/forms/2K33S9hg6rtuTRyu2&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;We are dedicated to continually improve Xenko, and eventually shape it into one of the best game engines to pick from for our awesome users. We will use your feedback to make Xenko a game engine that we hope you enjoy and find easy to use.&lt;/p&gt;
&lt;p&gt;As always, thanks for your help and we look forward to hearing from you!&lt;/p&gt;
</description>
      <pubDate>Mon, 25 Jul 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/survey-july-2016/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/survey-july-2016/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/survey.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko 1.7 Beta Released</title>
      <description>&lt;p&gt;We’ve got some big changes including Forward+, Vulkan, Linux, Audio and many GameStudio improvements! Unfortunately, UI editor and streaming couldn&#39;t make it in this release. We prefer to take little bit more time to polish them.&lt;/p&gt;
&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#highlights&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#highlights&quot;&gt;Highlights&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#rendering&quot;&gt;Rendering&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#forward%2B&quot;&gt;Forward+&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#vulkan&quot;&gt;Vulkan&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#gamestudio-improvements&quot;&gt;GameStudio Improvements&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#simplified-asset-creation&quot;&gt;Simplified Asset Creation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#camera-preview&quot;&gt;Camera Preview&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#drag-%26-drop-assets-into-the-property-grid&quot;&gt;Drag &amp;amp; Drop Assets into the Property Grid&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#drag-%26-drop-scripts&quot;&gt;Drag &amp;amp; Drop scripts&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#linux&quot;&gt;Linux&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#audio&quot;&gt;Audio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#release-notes&quot;&gt;Release notes&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;rendering&quot; tabindex=&quot;-1&quot;&gt;Rendering &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#rendering&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;forward%2B&quot; tabindex=&quot;-1&quot;&gt;Forward+ &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#forward%2B&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Xenko now features &lt;a href=&quot;http://www.humus.name/Articles/PracticalClusteredShading.pdf&quot;&gt;Practical Clustered Shading&lt;/a&gt;, a technique similar to Forward+ rendering.&lt;/p&gt;
&lt;p&gt;It allows you to use many point and spot lights at the same time.&lt;br /&gt;
You will gain more control over the lighting of your scene by adding lights wherever they are needed.&lt;br /&gt;
It also works with transparent objects out of the box, just like ordinary forward rendering does.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/QWZqNT9xD5Q&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;
&lt;p&gt;If your game requires Direct3D10+ (or equivalent OpenGL), this will be the default setting - no changes needed! As a bonus, you&#39;ll see a decrease in compilation times and the number of shader permutations.&lt;/p&gt;
&lt;p&gt;We also took this opportunity to rewrite most of our lighting code for improved performance and extensibility.&lt;/p&gt;
&lt;h3 id=&quot;vulkan&quot; tabindex=&quot;-1&quot;&gt;Vulkan &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#vulkan&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://www.khronos.org/vulkan/&quot;&gt;Vulkan&lt;/a&gt; joins our happy family of graphics platforms!&lt;br /&gt;
Experimental support has also been added for Windows and Linux. Android will follow soon.&lt;/p&gt;
&lt;img alt=&quot;Vulkan&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/Vulkan.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/Vulkan.png&quot; /&gt;
&lt;p&gt;Together with Direct3D12 and the recent overhaul of our rendering pipeline, this is another step toward preparing Xenko for the next generation of graphics. Stay tuned for performance improvements and hard numbers in the near future.&lt;/p&gt;
&lt;p&gt;Try running your project on Vulkan by selecting it as the &lt;strong&gt;Preferred Graphics Platform&lt;/strong&gt; in the &lt;strong&gt;Rendering Settings&lt;/strong&gt; of your &lt;strong&gt;Game Settings&lt;/strong&gt; asset.&lt;/p&gt;
&lt;h2 id=&quot;gamestudio-improvements&quot; tabindex=&quot;-1&quot;&gt;GameStudio Improvements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#gamestudio-improvements&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;simplified-asset-creation&quot; tabindex=&quot;-1&quot;&gt;Simplified Asset Creation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#simplified-asset-creation&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The workflow to create assets has been simplified! The new menu for asset creation contains multiple templates for each type of asset. You can now import assets from files more directly. With Xenko&#39;s efficient search function, creating assets should be faster and easier than ever!&lt;/p&gt;
&lt;img alt=&quot;New add asset menu&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/NewAddAsset.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/NewAddAsset.png&quot; /&gt;
&lt;h3 id=&quot;camera-preview&quot; tabindex=&quot;-1&quot;&gt;Camera Preview &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#camera-preview&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We&#39;ve updated GameStudio&#39;s camera preview to now display only the camera currently selected. It also now displays the borders and the camera&#39;s name making it easier to see the camera and it&#39;s settings.&lt;/p&gt;
&lt;img alt=&quot;Camera preview&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/CameraPreview.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/CameraPreview.png&quot; /&gt;
&lt;h3 id=&quot;drag-%26-drop-assets-into-the-property-grid&quot; tabindex=&quot;-1&quot;&gt;Drag &amp;amp; Drop Assets into the Property Grid &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#drag-%26-drop-assets-into-the-property-grid&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;So far, you could drag &amp;amp; drop assets into your scene or the tree view.&lt;/p&gt;
&lt;p&gt;New in this release, components can now be added to entities just by dragging &amp;amp; dropping matching assets into the property grid.&lt;/p&gt;
&lt;img alt=&quot;Drag &amp; Drop into the Property Grid&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/dragdrop_scripts.gif&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/dragdrop_scripts.gif&quot; /&gt;
&lt;h3 id=&quot;drag-%26-drop-scripts&quot; tabindex=&quot;-1&quot;&gt;Drag &amp;amp; Drop scripts &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#drag-%26-drop-scripts&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You can also drag &amp;amp; drop scripts directly into the scene, tree view and property view:&lt;/p&gt;
&lt;img alt=&quot;Drag &amp; Drop Scripts&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/dragdrop_scripts.gif&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/dragdrop_scripts.gif&quot; /&gt;
&lt;h2 id=&quot;linux&quot; tabindex=&quot;-1&quot;&gt;Linux &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#linux&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Linux users rejoice! Linux is now a supported platform of Xenko among Windows, Android, iOS, and more! All you need is a PC running Linux Ubuntu 16.04 x64 or equivalent with a video card supporting OpenGL 4.2 or Vulkan 1.0. Mono or .NET Core (which need to be installed separately) will be powering your game.&lt;/p&gt;
&lt;p&gt;In order to use the &lt;strong&gt;Linux&lt;/strong&gt; platform, check &lt;strong&gt;Linux&lt;/strong&gt; from the list of platforms in the GameStudio then compile.&lt;/p&gt;
&lt;img alt=&quot;Select Platforms Dialog&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/linux2.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/linux2.png&quot; /&gt;
&lt;p&gt;Deployment to a remote Linux box is done via SSH when running your project from GameStudio.&lt;/p&gt;
&lt;img alt=&quot;Platform Selector&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/Platform_selector.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.7/Platform_selector.png&quot; /&gt;
&lt;p&gt;To know more about our Linux support, read the &lt;a href=&quot;https://doc.stride3d.net/3.0/en/manual/platforms/linux/index.html&quot;&gt;Linux documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id=&quot;audio&quot; tabindex=&quot;-1&quot;&gt;Audio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#audio&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We&#39;ve rewritten our Audio engine. While most changes are internal, the public API has improved, and we are still working to make it great.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;SoundEffect&lt;/code&gt; and &lt;code&gt;SoundMusic&lt;/code&gt; classes have been consolidated into &lt;code&gt;Sound&lt;/code&gt;, also &lt;code&gt;SoundEffectInstance&lt;/code&gt; is now &lt;code&gt;SoundInstance&lt;/code&gt;. Sound formats are now converted using &lt;a href=&quot;https://ffmpeg.org/&quot;&gt;FFmpeg&lt;/a&gt;. Because of these updates, the range of supported formats has also improved.&lt;/p&gt;
&lt;p&gt;Under the hood, the &lt;a href=&quot;http://celt-codec.org/&quot;&gt;CELT&lt;/a&gt; codec (part of &lt;a href=&quot;https://www.opus-codec.org/&quot;&gt;Opus&lt;/a&gt;) is now being used. We&#39;re delighted to say that performance has since skyrocketed! Music can now be mixed and crossfaded while streaming and decompressing directly from disk.&lt;/p&gt;
&lt;p&gt;Xenko&#39;s API now builds on OpenAL for Linux/macOS/iOS, on OpenSLES for Android and on XAudio2 for Windows platforms.&lt;/p&gt;
&lt;h2 id=&quot;release-notes&quot; tabindex=&quot;-1&quot;&gt;Release notes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-7-0/#release-notes&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Have a look at the full &lt;a href=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/ReleaseNotes-1.7.html&quot;&gt;Release Notes&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Fri, 01 Jul 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/new-version-1-7-0/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/new-version-1-7-0/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-1.7/thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Xenko 1.6 Beta Released</title>
      <description>&lt;p&gt;Xenko 1.6.0-beta is now available, just in time for GDC 2016.&lt;/p&gt;
&lt;p&gt;This release is a great step forward towards making the engine better to build awesome games.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prefabs&lt;/strong&gt; allow you to reuse assets and build game more efficiently. &lt;strong&gt;Particles&lt;/strong&gt; are a critical requirement for many immersive games, and are now part of the engine with full editor support.&lt;/p&gt;
&lt;p&gt;Lastly, we have done a full rewrite of our &lt;strong&gt;graphics engine&lt;/strong&gt;, paving the road for better performance and scalability. We can’t wait to add many new rendering features on top of it! As a bonus, we included our experimental &lt;strong&gt;Direct3D 12&lt;/strong&gt; renderer.&lt;/p&gt;
&lt;p&gt;This release consists of 2425 commits, with 135208 lines changed!&lt;/p&gt;
&lt;h2 id=&quot;new-features-highlights&quot; tabindex=&quot;-1&quot;&gt;New Features Highlights &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#new-features-highlights&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#new-features-highlights&quot;&gt;New Features Highlights&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#prefabs&quot;&gt;Prefabs&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#archetypes&quot;&gt;Archetypes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#particles&quot;&gt;Particles&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#features&quot;&gt;Features&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#modular-system&quot;&gt;Modular system&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#curve-editor&quot;&gt;Curve Editor&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#new-graphics-engine&quot;&gt;New Graphics Engine&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#direct3d-12&quot;&gt;Direct3D 12&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#better-opengl-support&quot;&gt;Better OpenGL support&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#scripts-are-now-components&quot;&gt;Scripts are now components&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#event-system&quot;&gt;Event system&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#game-settings-overrides&quot;&gt;Game Settings overrides&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#version-1.6.0-beta&quot;&gt;Version 1.6.0-beta&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#how-to-upgrade&quot;&gt;How to upgrade&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#enhancements&quot;&gt;Enhancements&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#assets&quot;&gt;Assets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#engine&quot;&gt;Engine&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#game-studio&quot;&gt;Game Studio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#graphics&quot;&gt;Graphics&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#input&quot;&gt;Input&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#issues-fixed&quot;&gt;Issues fixed&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#game-studio-1&quot;&gt;Game Studio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#graphics-1&quot;&gt;Graphics&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#physics&quot;&gt;Physics&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#breaking-changes&quot;&gt;Breaking changes&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#graphics-2&quot;&gt;Graphics&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#physics-1&quot;&gt;Physics&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#known-issues&quot;&gt;Known Issues&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;prefabs&quot; tabindex=&quot;-1&quot;&gt;Prefabs &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#prefabs&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Prefabs allow you to assemble entities into building blocks and easily reuse them in any of your scenes. Changes to your prefabs will be reflected on all instances (as long as properties are not overridden).&lt;/p&gt;
&lt;p&gt;We even took the concept one step further to empower our users, by having prefabs within prefabs, as well as the possibility to use only part of a prefab when you instantiate it. And of course, removing or rearranging a few entities won’t break your prefab synchronization!&lt;/p&gt;
&lt;img alt=&quot;Prefabs&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.6/prefabs.gif&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.6/prefabs.gif&quot; /&gt;
&lt;h2 id=&quot;archetypes&quot; tabindex=&quot;-1&quot;&gt;Archetypes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#archetypes&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can now use any asset as an archetype for another asset. When you change a property of the archetype, the new value will be automatically propagated to all the derived assets, unless you specifically override them. Archetypes can be used with most asset types.&lt;/p&gt;
&lt;img alt=&quot;Archetypes&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.6/assset-templating.gif&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.6/assset-templating.gif&quot; /&gt;
&lt;h2 id=&quot;particles&quot; tabindex=&quot;-1&quot;&gt;Particles &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#particles&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;You can now create and edit particle systems directly in the Xenko Game Studio. Particles are deeply integrated in the game engine and leverage the powerful effect system and its high level of customization.&lt;/p&gt;
&lt;p&gt;While there are still several features on the roadmap, the current implementation is sufficient for most games. The ability to customize almost all aspects of the particle engine allows you to add features tailored to your game’s specific needs.&lt;/p&gt;
&lt;img alt=&quot;Particles&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.6/particle1.gif&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.6/particle1.gif&quot; /&gt;
&lt;p&gt;Feel free to visit our &lt;a href=&quot;http://doc.stride3d.net/1.6/manual/particles/index.html&quot;&gt;particle documentation&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id=&quot;features&quot; tabindex=&quot;-1&quot;&gt;Features &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#features&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The particle engine supports many features out of the box:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Render particles as different shapes like billboards, 3D oriented quads or your own custom implementation&lt;/li&gt;
&lt;li&gt;Powerful force fields which offer more control than simple attractors and repulsors&lt;/li&gt;
&lt;li&gt;Collisions&lt;/li&gt;
&lt;li&gt;Animated attributes such as size, color, rotation&lt;/li&gt;
&lt;li&gt;Flipbooks, UV animation and support for the Xenko Shading Language&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;modular-system&quot; tabindex=&quot;-1&quot;&gt;Modular system &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#modular-system&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;All aspects of particle systems are broken down into individuals modules like spawners, initializers and updaters, and each of these modules is easily tweakable and customizable. Check out the samples and the Xenko documentation for a detailed walkthrough.&lt;/p&gt;
&lt;h3 id=&quot;curve-editor&quot; tabindex=&quot;-1&quot;&gt;Curve Editor &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#curve-editor&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The Game Studio now also comes with a built-in curve editor. For now only the particle engine uses curve animation. In the future, it will also power our property animation system and our storyboard system.&lt;/p&gt;
&lt;img alt=&quot;Curve Editor&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.6/particle2.gif&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.6/particle2.gif&quot; /&gt;
&lt;h2 id=&quot;new-graphics-engine&quot; tabindex=&quot;-1&quot;&gt;New Graphics Engine &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#new-graphics-engine&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Most of our graphics pipeline, both low-, medium- and high-level, has been almost completely rewritten, and should be ready for the future.&lt;/p&gt;
&lt;p&gt;The low-level API has been changed to more closely resemble DirectX 12 and Vulkan. For a list of breaking changes, please see below.&lt;/p&gt;
&lt;p&gt;The high-level pipeline has been completely reworked, to achieve the following goals, most of which we will tackle in the upcoming releases:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Introduce a clean and extensible architecture to easily build new graphics features on (hoping to soon add a Forward+ renderer, IBL lightprobes, RLR, etc.)&lt;/li&gt;
&lt;li&gt;New medium-level layer: lightweight RenderFeature, RenderStage, RenderObject, etc.&lt;/li&gt;
&lt;li&gt;Easy for users to write small customizations (by implementing RenderFeatures)&lt;/li&gt;
&lt;li&gt;Allow multi-threading of all parts of the pipeline&lt;/li&gt;
&lt;li&gt;Make optimal use of next-gen graphics APIs&lt;/li&gt;
&lt;li&gt;Reduce the amount of &amp;quot;magic&amp;quot; done by the effect system to increase performance&lt;/li&gt;
&lt;li&gt;Minimize work by taking better advantage of different update frequencies (PerView, PerMaterial, PerLighting, etc.)&lt;/li&gt;
&lt;li&gt;Take advantage of new API (first class support for Pipeline State Objects, Descriptor Sets, etc.)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Stay tuned for technical details and performance evaluation in the near future!&lt;/p&gt;
&lt;h2 id=&quot;direct3d-12&quot; tabindex=&quot;-1&quot;&gt;Direct3D 12 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#direct3d-12&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Direct3D 12 has been added as a new build target. While still experimental, it already supports all parts of our rendering pipeline.&lt;/p&gt;
&lt;p&gt;You can try it by changing the ‘Preferred Graphics Platform’ in the ‘Rendering Settings’ of your ‘Game Settings’ asset.&lt;/p&gt;
&lt;h2 id=&quot;better-opengl-support&quot; tabindex=&quot;-1&quot;&gt;Better OpenGL support &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#better-opengl-support&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Our OpenGL renderer has been improved and should behave much better (shadows, PBR, etc.). Also, we now deliver OpenGL and OpenGL ES on Windows as build targets.&lt;/p&gt;
&lt;p&gt;You can also try them by changing the ‘Preferred Graphics Platform’ in the ‘Rendering Settings’ of your ‘Game Settings’ asset.&lt;/p&gt;
&lt;h2 id=&quot;scripts-are-now-components&quot; tabindex=&quot;-1&quot;&gt;Scripts are now components &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#scripts-are-now-components&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So far, there could only be one component per type on an Entity. This was quite cumbersome, especially for scripts, which had to be stored inside the &lt;code&gt;ScriptComponent.Scripts&lt;/code&gt; list. It also resulted in many special cases to make them work in the editor (i.e. references between scripts, assembly reloading, etc.).&lt;/p&gt;
&lt;p&gt;Now multiple components of a type are allowed. This affects scripts and physics components, and can be used for custom components for which more than one instance is sensible.&lt;/p&gt;
&lt;p&gt;We hope this makes your life easier!&lt;/p&gt;
&lt;h2 id=&quot;event-system&quot; tabindex=&quot;-1&quot;&gt;Event system &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#event-system&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We added a simple event system that will allow your script to easily communicate with each other.&lt;br /&gt;
Check out the &lt;code&gt;EventKey&amp;lt;&amp;gt;&lt;/code&gt; and &lt;code&gt;EventReceiver&amp;lt;&amp;gt;&lt;/code&gt; classes.&lt;br /&gt;
You can create an EventKey from your sender scripts and consume events using &lt;code&gt;EventReceiver&lt;/code&gt; from other scripts.&lt;/p&gt;
&lt;h2 id=&quot;game-settings-overrides&quot; tabindex=&quot;-1&quot;&gt;Game Settings overrides &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#game-settings-overrides&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Game Settings asset has been improved: You can now have different settings depending on the platform or GPU.&lt;/p&gt;
&lt;p&gt;For example, you might want to set different off-screen resolutions for your game on Android depending on the GPU model. Or you could use one of our new Direct3D12, OpenGL or OpenGL ES renderers on Windows.&lt;/p&gt;
&lt;h2 id=&quot;version-1.6.0-beta&quot; tabindex=&quot;-1&quot;&gt;Version 1.6.0-beta &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#version-1.6.0-beta&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Release date: 2016/03/15&lt;/p&gt;
&lt;h3 id=&quot;how-to-upgrade&quot; tabindex=&quot;-1&quot;&gt;How to upgrade &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#how-to-upgrade&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Simply open your older projects with new version of GameStudio. It will probably fail to compile your assemblies since API changed little bit, but you can still continue.&lt;/p&gt;
&lt;p&gt;Then, save back your project in GameStudio. You now can open your project with VIsual Studio and try to fix your game code with latest API changes.&lt;/p&gt;
&lt;h2 id=&quot;enhancements&quot; tabindex=&quot;-1&quot;&gt;Enhancements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#enhancements&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;assets&quot; tabindex=&quot;-1&quot;&gt;Assets &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#assets&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;h3 id=&quot;engine&quot; tabindex=&quot;-1&quot;&gt;Engine &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#engine&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;The KeyedSortedList now implements ICollection&lt;T&gt; instead of IList&lt;T&gt; annd is more consistent with CollectionDescriptor.&lt;/T&gt;&lt;/T&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;game-studio&quot; tabindex=&quot;-1&quot;&gt;Game Studio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#game-studio&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Support for prefabs, add a prefab editor&lt;/li&gt;
&lt;li&gt;Create derived assets and support property inheritance&lt;/li&gt;
&lt;li&gt;Added a curve editor to edit animation curve&lt;/li&gt;
&lt;li&gt;Layout is saved on a solution basis. When reloading a project, Game Studio will try to present the same layout and reopen all assets that were edited (this include scenes, prefabs and sprite sheets).&lt;/li&gt;
&lt;li&gt;Add a confirmation dialog to enable saving newly created script automatically.&lt;/li&gt;
&lt;li&gt;Add a confirmation dialog to enable reloading modified assemblies automatically. This is necessary for the script to appear in the list of components that can be added to an entity.&lt;/li&gt;
&lt;li&gt;Physics gizmos are shown by default.&lt;/li&gt;
&lt;li&gt;Preview of an asset can be displayed even if this asset is being edited.&lt;/li&gt;
&lt;li&gt;Project folder can be opened in Windows explorer from the launcher with right-clicking.&lt;/li&gt;
&lt;li&gt;Properties of derived asset are displayed in gray, unless they are overridden. In this case they are displayed in bold.&lt;/li&gt;
&lt;li&gt;Rework scene initialization in the scene editor: the scene will be available almost immediately, and content (model, etc.) will be streamed in as soon as they are (asynchronously) loaded.&lt;/li&gt;
&lt;li&gt;The entity fixup wizard has been removed. Now when an entity is deleted, all references to it or to one of its component is reset to null.&lt;/li&gt;
&lt;li&gt;The gizmo and camera menus are now displayed in the top-right corner.&lt;/li&gt;
&lt;li&gt;Entity hierarchy is synchronized (automatically expanded) with the selected entity in the scene.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;graphics&quot; tabindex=&quot;-1&quot;&gt;Graphics &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#graphics&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;New D3D12 renderer (experimental)&lt;/li&gt;
&lt;li&gt;New Windows OpenGL and OpenGL ES renderers (experimental)&lt;/li&gt;
&lt;li&gt;Rewrote most of the low- and high-level graphics code to have better performance and better take advantage of new graphics APIs&lt;/li&gt;
&lt;li&gt;Properly separated rendering in 4 phases: Collect (collect &amp;amp; cull), Extract (copy data from scene to renderers), Prepare (prepare cbuffer data &amp;amp; heavy computations), Draw (emit draw calls)&lt;/li&gt;
&lt;li&gt;Introduced concepts of RenderFeature (entry point for extending rendering), RenderStage (effect selection), RenderView and RenderObject&lt;/li&gt;
&lt;li&gt;Render sorting logic can now be customized (culling will be soon too)&lt;/li&gt;
&lt;li&gt;Low-level API has been rewritten to match better new API: CommandList, DescriptorSet, DescriptorHeap, PipelineState, etc.&lt;/li&gt;
&lt;li&gt;Introduced concept of RendererProcessor which are responsible for pushing component data to rendering&lt;/li&gt;
&lt;li&gt;Many other changes, that will soon be covered in documentation&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;input&quot; tabindex=&quot;-1&quot;&gt;Input &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#input&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Improved GamePad event management to resemble the keyboard API.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;issues-fixed&quot; tabindex=&quot;-1&quot;&gt;Issues fixed &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#issues-fixed&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;game-studio-1&quot; tabindex=&quot;-1&quot;&gt;Game Studio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#game-studio-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fix Scripts thumbnail generation during project launch.&lt;/li&gt;
&lt;li&gt;Fix Settings window sharing columns layout with property grid (&lt;a href=&quot;https://github.com/SiliconStudio/xenko/issues/341&quot;&gt;#341&lt;/a&gt;).&lt;/li&gt;
&lt;li&gt;Fix default IDE settings incorrectly reset to null.&lt;/li&gt;
&lt;li&gt;Fix a crash occurring when duplicating an object quickly after selecting it.&lt;/li&gt;
&lt;li&gt;Fix an issue with the message box incorrectly resizing.&lt;/li&gt;
&lt;li&gt;Tooltips are always visible even if the control (menu, button…) is disabled.&lt;/li&gt;
&lt;li&gt;Fix several issues with undo/redo.&lt;/li&gt;
&lt;li&gt;Fix drag and drop of components into properties&lt;/li&gt;
&lt;li&gt;Sometimes the Game Studio was not asking to save when closed with some changes in a project.&lt;/li&gt;
&lt;li&gt;Fix some issues related to folders in scene editor.&lt;/li&gt;
&lt;li&gt;Redo does not re-open asset picker anymore.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;graphics-1&quot; tabindex=&quot;-1&quot;&gt;Graphics &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#graphics-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Tangents generation was invalid and might have resulted in various swaps&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;physics&quot; tabindex=&quot;-1&quot;&gt;Physics &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#physics&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Improved collision detection reliability&lt;/li&gt;
&lt;li&gt;Fixed collision filter groups&lt;/li&gt;
&lt;li&gt;Fixed enable/disable component behavior&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;breaking-changes&quot; tabindex=&quot;-1&quot;&gt;Breaking changes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#breaking-changes&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;graphics-2&quot; tabindex=&quot;-1&quot;&gt;Graphics &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#graphics-2&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Extending rendering is quite different from before. Please check SpaceEscape and other samples to have a better idea while we prepare documentation.&lt;/li&gt;
&lt;li&gt;Many methods of GraphicsDevice have been split off into a second class: CommandList&lt;/li&gt;
&lt;li&gt;Added objects such as PipelineState, DescriptorSet and DescriptorHeap to better match new graphics API&lt;/li&gt;
&lt;li&gt;Game now contains a GraphicsContext which gives access to the current CommandList&lt;/li&gt;
&lt;li&gt;GraphicsDevice.BackBuffer and GraphicsDevice.DepthStencilBuffer are gone. Use GraphicsDevice.Presenter.BackBuffer to access the actual backbuffer.&lt;/li&gt;
&lt;li&gt;In addition to RenderContext, there is now a RenderDrawContext. Some methods have been changed to expect the latter.&lt;/li&gt;
&lt;li&gt;ParameterCollection has been rewritten to be much more memory and performance efficient (data is now stored directly in buffers).&lt;/li&gt;
&lt;li&gt;Transferring values from application to shaders and computation of effect permutations used to be done through various inefficient ParameterCollection overrides. This should now be done using RenderFeatures.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;physics-1&quot; tabindex=&quot;-1&quot;&gt;Physics &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#physics-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;PhysicsComponents are now split into 3 different types (Rigidbody, Character, StaticCollider) which can be added multiple times in an entity.&lt;/li&gt;
&lt;li&gt;PhysicsElements are now removed, including the Collider, Rigidbody and Character classes. They now are merged into the new components.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;known-issues&quot; tabindex=&quot;-1&quot;&gt;Known Issues &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-6-0/#known-issues&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;iOS on ARM64 iPhones encounters crashes after a few second. We are currently investigating this.&lt;/li&gt;
&lt;li&gt;Sometimes duplicate contacts are detected by the physics engine&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Thu, 17 Mar 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/new-version-1-6-0/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/new-version-1-6-0/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-1.6/thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>First Fix Update of 2016!</title>
      <description>&lt;p&gt;Happy New Year&#39;s! We resolved to keep updating Xenko to give our users a polished, easy-to-use engine.&lt;/p&gt;
&lt;p&gt;So for the beginning of this year, we are focusing on smoothing out some major issues reported by the community. As always, we really appreciate your input.&lt;/p&gt;
&lt;h2 id=&quot;async-debugging&quot; tabindex=&quot;-1&quot;&gt;Async Debugging &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-2-beta/#async-debugging&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;There were some problems debugging async functions due to a problem in Mono.Cecil. We fixed that!&lt;/p&gt;
&lt;p&gt;Now, you&#39;ll be able to look at local variables of any async functions. Also, the usage of the namespace in the watch panel is implicit and you can step over any await calls just normally.&lt;/p&gt;
&lt;h2 id=&quot;windows-10-certification&quot; tabindex=&quot;-1&quot;&gt;Windows 10 Certification &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-2-beta/#windows-10-certification&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We fixed several small issues preventing Windows 10 apps created with Xenko from being compatible with Store certification.&lt;/p&gt;
&lt;p&gt;Now you can submit your awesome apps/games to the Windows Store. Can&#39;t wait to see your creations!&lt;/p&gt;
&lt;h2 id=&quot;skybox-compilation&quot; tabindex=&quot;-1&quot;&gt;Skybox Compilation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-2-beta/#skybox-compilation&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Skybox compilation required a DX11 GPU (compute shaders) preventing some of you from using it.&lt;/p&gt;
&lt;p&gt;We moved to a pixel shader version to ensure GameStudio works fine with older GPUs as well.&lt;/p&gt;
&lt;h2 id=&quot;list-of-other-improvements-made&quot; tabindex=&quot;-1&quot;&gt;List of other improvements made &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-2-beta/#list-of-other-improvements-made&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Fixed issues with displayed values of rotations changing after validation&lt;/li&gt;
&lt;li&gt;You are now able to easily edit the 3 components of a vector simultaneously using the lock icon.&lt;/li&gt;
&lt;li&gt;The convex hull generation is now working along with the new Skeleton Asset.&lt;/li&gt;
&lt;li&gt;The Connection Router iOS script required to compile shaders on iOS devices has been fixed.&lt;/li&gt;
&lt;li&gt;Added support for proper resizing in Windows Universal Apps.&lt;/li&gt;
&lt;li&gt;Added support for OpenGLES devices that do not support packed depth-stencil-formats&lt;/li&gt;
&lt;li&gt;Added the missing XenkoDefaultFont required by the profiler system.&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Fri, 15 Jan 2016 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/new-version-1-5-2-beta/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/new-version-1-5-2-beta/</guid><enclosure url="https://www.stride3d.net/images/blog/default_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko 1.5 Beta Released</title>
      <description>&lt;p&gt;As promised in our last blog post, we have released some exciting new features for Xenko. This includes a new animations system, support of fbx cameras, a new search bar for the assets view, physics collider shapes at run-time, a simple performance profiler and much more.&lt;/p&gt;
&lt;h2 id=&quot;new-features-highlights&quot; tabindex=&quot;-1&quot;&gt;New Features Highlights &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#new-features-highlights&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#new-features-highlights&quot;&gt;New Features Highlights&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#skeleton-asset&quot;&gt;Skeleton asset&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#root-motion-support-for-models%2C-cameras%2C-lights%2C-etc.&quot;&gt;Root motion support for models, cameras, lights, etc.&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#new-animation-update-system&quot;&gt;New animation update system&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#simple-profiling-system&quot;&gt;Simple Profiling system&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#physic-debug-shapes-at-runtime&quot;&gt;Physic debug shapes at runtime&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#asset-view&quot;&gt;Asset View&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#new-%E2%80%98view-options%E2%80%99-menu&quot;&gt;New ‘view options’ menu&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#new-asset-filter-bar&quot;&gt;New asset filter bar&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#folder-support-in-asset-view&quot;&gt;Folder support in asset view&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#copy-paste-assets-with-their-dependencies&quot;&gt;Copy-paste assets with their dependencies&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#border-and-center-support-in-sprite-sheet-editor&quot;&gt;Border and Center support in sprite sheet editor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#new-built-in-scripts&quot;&gt;New built-in scripts&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#precompiled-sprite-fonts&quot;&gt;Precompiled Sprite Fonts&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;skeleton-asset&quot; tabindex=&quot;-1&quot;&gt;Skeleton asset &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#skeleton-asset&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;A new Skeleton asset (*.xkskel) has been introduced. Both models and animations now hold a reference to a skeleton. This allows to reuse the same skeleton definition in multiple assets and to retarget models and animations to different skeletons.&lt;/p&gt;
&lt;p&gt;Skeletons can be created alongside other assets, when importing an FBX file or other model format.&lt;/p&gt;
&lt;img alt=&quot;Skeleton Thumbnail&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/SkeletonThumbnail.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/SkeletonThumbnail.png&quot; /&gt;
&lt;h2 id=&quot;root-motion-support-for-models%2C-cameras%2C-lights%2C-etc.&quot; tabindex=&quot;-1&quot;&gt;Root motion support for models, cameras, lights, etc. &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#root-motion-support-for-models%2C-cameras%2C-lights%2C-etc.&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Animations now apply root motion if they have no skeleton, or the ‘Root Motion’ property is enabled on the animation asset. The animation will then move the entity itself, instead of the skeleton’s root bone.&lt;br /&gt;
This is especially useful to import animations of lights, cameras or unskinned models, without the need to bind them to the bones of a skeleton.&lt;/p&gt;
&lt;p&gt;The FBX importer will now also import animations of various camera parameters (near-plane, far-plane, field of view) and apply them to the CameraComponent of the animated entity. More properties may be supported in the future.&lt;/p&gt;
&lt;img alt=&quot;Root Motion Property&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/RootMotionProperty.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/RootMotionProperty.png&quot; /&gt;
&lt;h2 id=&quot;new-animation-update-system&quot; tabindex=&quot;-1&quot;&gt;New animation update system &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#new-animation-update-system&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The animation system now internally uses a new UpdateEngine to update objects. This allows us to animate arbitrary properties of entities, while accessing them in a highly efficient way.&lt;br /&gt;
It will be the foundation for a future animation curve editor inside the GameStudio.&lt;/p&gt;
&lt;p&gt;The new ‘Animated Properties’ sample demonstrates how to create animations of any property from a script.&lt;/p&gt;
&lt;h2 id=&quot;simple-profiling-system&quot; tabindex=&quot;-1&quot;&gt;Simple Profiling system &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#simple-profiling-system&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It is now possible to visualize profiling information of all the game systems and custom profilers directly within your running games.&lt;br /&gt;
To get started, use the Game Profiler built-in script, attach it to an entity and when the game is running press LCtrl-LShift-P.&lt;/p&gt;
&lt;img alt=&quot;Simple Profiling system&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/profiler.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/profiler.webp&quot; /&gt;
&lt;h2 id=&quot;physic-debug-shapes-at-runtime&quot; tabindex=&quot;-1&quot;&gt;Physic debug shapes at runtime &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#physic-debug-shapes-at-runtime&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;It is now possible to enable the rendering of physics collider shapes during runtime.&lt;br /&gt;
The debug shapes are normal entities and they must be enabled for each physics shape that requires it.&lt;br /&gt;
The best way to start with this feature is to use the Physics Shapes Render built-in script and attach the script to any entity that has a Physics Component and when the game is running press LCtrl-LShift-P.&lt;/p&gt;
&lt;img alt=&quot;Physic debug shapes&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/phys-debug.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/phys-debug.webp&quot; /&gt;
&lt;h2 id=&quot;asset-view&quot; tabindex=&quot;-1&quot;&gt;Asset View &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#asset-view&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;The Asset view has been improved to help you better organize and manage your assets.&lt;/p&gt;
&lt;h3 id=&quot;new-%E2%80%98view-options%E2%80%99-menu&quot; tabindex=&quot;-1&quot;&gt;New ‘view options’ menu &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#new-%E2%80%98view-options%E2%80%99-menu&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The view options are gathered in a single menu accessible from the asset view toolbar.&lt;/p&gt;
&lt;img alt=&quot;Asset View Options&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/AssetViewOptions.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/AssetViewOptions.png&quot; /&gt;
&lt;p&gt;You can display all the assets in the current folder only, in the current folder and its sub-folder. The third option let you display the assets and the sub folders.&lt;/p&gt;
&lt;p&gt;You can also sort your assets by name, order, type or modification date.&lt;/p&gt;
&lt;h3 id=&quot;new-asset-filter-bar&quot; tabindex=&quot;-1&quot;&gt;New asset filter bar &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#new-asset-filter-bar&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;With the new asset filter bar, you can filter your assets by name, tag, type or a combination of those. Each ‘filter tag’ can be disabled by a single click or removed from the active filters.&lt;/p&gt;
&lt;img alt=&quot;Asset Filter Bar&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/AssetFilterBar.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/AssetFilterBar.png&quot; /&gt;
&lt;p&gt;To add a filter, type in the filter bar and matching filters will be displayed. Click on the one you want to add it to the list of active filters.&lt;/p&gt;
&lt;img alt=&quot;Adding Asset Filter&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/AddingAssetFilter.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/AddingAssetFilter.png&quot; /&gt;
&lt;p&gt;Only the assets matching the active filters will be displayed in the asset view. Note that type filters are inclusive, while name and tag filters are exclusive.&lt;/p&gt;
&lt;h3 id=&quot;folder-support-in-asset-view&quot; tabindex=&quot;-1&quot;&gt;Folder support in asset view &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#folder-support-in-asset-view&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;If the ‘Assets and folder in selected folder’ options is selected, the first level of sub-folder will be displayed in the asset view. You can drag and drop assets inside them. You can also copy/paste complete folder structure.&lt;/p&gt;
&lt;img alt=&quot;Folder Support&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/FolderSupport.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/FolderSupport.png&quot; /&gt;
&lt;h3 id=&quot;copy-paste-assets-with-their-dependencies&quot; tabindex=&quot;-1&quot;&gt;Copy-paste assets with their dependencies &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#copy-paste-assets-with-their-dependencies&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You have now the ability to copy assets with their dependencies. To do that use the new entry ‘Copy with dependencies’ from the asset view context menu, or press Ctrl+Shift+C.&lt;/p&gt;
&lt;img alt=&quot;Copy Asset With Dependencies&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/CopyAssetWithDependencies.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/CopyAssetWithDependencies.png&quot; /&gt;
&lt;p&gt;For example, if you copy/paste a model with its dependencies, you will get a copy of this model along with a copy of all its dependencies (skeleton, materials, textures)&lt;/p&gt;
&lt;h3 id=&quot;border-and-center-support-in-sprite-sheet-editor&quot; tabindex=&quot;-1&quot;&gt;Border and Center support in sprite sheet editor &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#border-and-center-support-in-sprite-sheet-editor&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;For ‘Sprite2D’ sprites, you can move the position of the center by selecting the &lt;img src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/SpriteCenterIcon.png&quot; style=&quot;display: inline&quot; /&gt; icon in the toolbar of the sprite editor. Grab and move the cross to the desired position.&lt;/p&gt;
&lt;p&gt;For ‘UI’ sprites, you can change the borders by selecting the &lt;img src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/SpriteBorderIcon.png&quot; style=&quot;display: inline&quot; /&gt; icon in the toolbar of the sprite editor. You can then resize each border (left, top, right and bottom) separately in the same way as the texture region, by grabbing and moving one of them. Note that the &lt;img src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/SpriteBorderLockIcon.png&quot; style=&quot;display: inline&quot; /&gt; icon lets you ‘lock’or ‘unlock’ the sprite borders while resizing the texture region.&lt;/p&gt;
&lt;h3 id=&quot;new-built-in-scripts&quot; tabindex=&quot;-1&quot;&gt;New built-in scripts &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#new-built-in-scripts&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We added a few more built-in scripts with this release such as an FPS camera script and First player controller script. To use them, just click on “New Asset”, “Script source code”, select the desired script and attach it to an adequate entity.&lt;/p&gt;
&lt;img alt=&quot;Build in Scripts&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/built-in_Scripts.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/built-in_Scripts.png&quot; /&gt;
&lt;h3 id=&quot;precompiled-sprite-fonts&quot; tabindex=&quot;-1&quot;&gt;Precompiled Sprite Fonts &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-5-0-beta/#precompiled-sprite-fonts&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Font rights are quite restrictive and it is quite common that only some persons of the project have access to the font files. This was preventing some people to build the game.&lt;br /&gt;
To solve this problem, we created a new type of asset, the precompiled sprite fonts. It is an asset taking as input an image and containing all the glyph information required to render the set of character specified. Inside your games you can used it exactly like a standard sprite font.&lt;br /&gt;
To generate a precompiled sprite font, the owner of the original font file just have to right click on an existing static font and choose “Generate Precompiled Font”.&lt;/p&gt;
&lt;img alt=&quot;Precompiled Sprite Font&quot; src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/PrecompiledSpriteFont.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;https://doc.stride3d.net/latest/en/ReleaseNotes/media/ReleaseNotes-1.5/PrecompiledSpriteFont.png&quot; /&gt;
&lt;p&gt;That’s all for us this year, folks! Have a great holiday season, and we will be back early next year for the next updates on Xenko!&lt;/p&gt;
&lt;p&gt;Note: For more details about the changes, see our &lt;a href=&quot;http://doc.stride3d.net/1.5/ReleaseNotes.html&quot;&gt;Release Notes&lt;/a&gt;.&lt;/p&gt;
</description>
      <pubDate>Thu, 17 Dec 2015 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/new-version-1-5-0-beta/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/new-version-1-5-0-beta/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-1.5/thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Huge Update! Paradox Name Change!</title>
      <description>&lt;p&gt;With the end of the year upon us, we are starting to get excited for Paradox’s official release for next year. With a new year comes a fresh start, so we’ve decided to update the Paradox name to more fully encompass what we think is great about our game engine and what direction we want to move toward.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-name-xenko/#new-name%3A-xenko&quot;&gt;New Name: Xenko&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-name-xenko/#new-features-with-this-release&quot;&gt;New Features With This Release&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-name-xenko/#users-can-now-edit-documentation&quot;&gt;Users Can Now Edit Documentation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-name-xenko/#automatic-symbols-and-source-code-download&quot;&gt;Automatic Symbols and Source Code Download&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-name-xenko/#coming-later-december&quot;&gt;Coming Later December&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-name-xenko/#new-animation-system&quot;&gt;New Animation System&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-name-xenko/#simple%2C-in-game-profiler&quot;&gt;Simple, In-Game Profiler&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-name-xenko/#debug-physics-collision-shapes-at-run-time&quot;&gt;Debug Physics Collision Shapes At Run-Time&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-name-xenko/#built-in-scripts&quot;&gt;Built-In Scripts&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;new-name%3A-xenko&quot; tabindex=&quot;-1&quot;&gt;New Name: Xenko &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-name-xenko/#new-name%3A-xenko&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;So, on to the big news! Paradox is officially changing its name to &lt;em&gt;Xenko&lt;/em&gt;.&lt;br /&gt;
We wanted to show our roots a bit more since we are one of the few Japanese-based gaming engines.&lt;/p&gt;
&lt;img alt=&quot;Xenko&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.4/XenkoLogoTM.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.4/XenkoLogoTM.png&quot; /&gt;
&lt;p&gt;&lt;em&gt;Xenko&lt;/em&gt; was inspired by the Japanese word, &lt;em&gt;Zenko&lt;/em&gt; 善光. The Japanese characters signify perfection and light. Sticking with the Xenko theme, we will strive to improve your experience with the Xenko engine (ah, feels good to say the new name).&lt;/p&gt;
&lt;p&gt;We know this is a big change, and we truly appreciate your patience as we have been honing in on this transition.&lt;br /&gt;
Please note that support and download access to any previous Paradox releases will end on &lt;strong&gt;&lt;u&gt;December, 25th, 2015&lt;/u&gt;&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;We will also be releasing a new version that reflects the transition to the Xenko name. We invite you to download it here.&lt;/p&gt;
&lt;p&gt;And before you ask, yes, this new release can be used without affecting the old Paradox releases and contains migration tools so you can continue to work on your Paradox projects with Xenko. The newest update is a transitional release, so it will be mostly similar to the latest version of Paradox (1.3.4) in terms of features.&lt;/p&gt;
&lt;h2 id=&quot;new-features-with-this-release&quot; tabindex=&quot;-1&quot;&gt;New Features With This Release &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-name-xenko/#new-features-with-this-release&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;users-can-now-edit-documentation&quot; tabindex=&quot;-1&quot;&gt;Users Can Now Edit Documentation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-name-xenko/#users-can-now-edit-documentation&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We&#39;re so glad to have added this feature that allows users to share information about how to best use Xenko. We know our documentation is not entirely complete yet, so we are really looking forward to hearing and sharing information through the community.&lt;/p&gt;
&lt;p&gt;The process for adding to Xenko documentation is real simple. ‘Improve this Doc’ in the top right hand corner and you will be able to edit our documentation. If the user-submitted information passes the verification process, we will add it to the documentation.&lt;/p&gt;
&lt;img alt=&quot;Edit documentation on GitHub&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.4/EditDocOnGithub.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.4/EditDocOnGithub.png&quot; /&gt;
&lt;h3 id=&quot;automatic-symbols-and-source-code-download&quot; tabindex=&quot;-1&quot;&gt;Automatic Symbols and Source Code Download &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-name-xenko/#automatic-symbols-and-source-code-download&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Being open source is great, but only if you can find the sources matching the binary version you are using. From now on, Xenko will download the right sources and symbols for an optimal debug and programming experience so you don’t have to worry about doing it yourself.&lt;/p&gt;
&lt;p&gt;The process is simple. All you need to do is open Visual Studio options, go to Debugging &amp;gt; General, and check “Enable Source Server Support”:&lt;/p&gt;
&lt;img alt=&quot;Enable PDB&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.4/EnablePDB.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.4/EnablePDB.png&quot; /&gt;
&lt;h2 id=&quot;coming-later-december&quot; tabindex=&quot;-1&quot;&gt;Coming Later December &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-name-xenko/#coming-later-december&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We currently are planning to release updates for the following features later this December:&lt;/p&gt;
&lt;h3 id=&quot;new-animation-system&quot; tabindex=&quot;-1&quot;&gt;New Animation System &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-name-xenko/#new-animation-system&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We&#39;ve added a new animation system that allows you to animate any game property throughout the engine. Animating models is great but why limit animation only to the models? With the newest version of the engine, you will be able to animate material color, UI transparency, and generally any property of your game!&lt;/p&gt;
&lt;h3 id=&quot;simple%2C-in-game-profiler&quot; tabindex=&quot;-1&quot;&gt;Simple, In-Game Profiler &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-name-xenko/#simple%2C-in-game-profiler&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;As good as a game engine can get, at some point, you&#39;re always going to be limited by the hardware&#39;s performance. To help with this, we&#39;ve added a built-in profiler so that you will easily be able to identify problems and bottlenecks in your game. Even better, you will be able to turn on the built-in profiler at any point during the process of making your game.&lt;/p&gt;
&lt;h3 id=&quot;debug-physics-collision-shapes-at-run-time&quot; tabindex=&quot;-1&quot;&gt;Debug Physics Collision Shapes At Run-Time &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-name-xenko/#debug-physics-collision-shapes-at-run-time&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Debugging physics is never easy. To streamline this, you will be able to display all the physics collision shapes at any time in your game.&lt;/p&gt;
&lt;h3 id=&quot;built-in-scripts&quot; tabindex=&quot;-1&quot;&gt;Built-In Scripts &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-name-xenko/#built-in-scripts&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Writing scripts takes time and is not necessarily accessible to everyone. To improve on this, we added some built-in scripts to the engine so that users will be able to do basic operations with ease. Things like animating the camera, displaying physics debug shapes, and adding profiling information can be done in just a few clicks.&lt;/p&gt;
</description>
      <pubDate>Tue, 01 Dec 2015 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/new-name-xenko/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/new-name-xenko/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-1.4/XenkoLogoTM_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko 1.3 Beta Released</title>
      <description>&lt;p&gt;We are proud to announce the release of a new version of Xenko, bringing lots of usage enhancements and many bug fixes - over 1000 commits since previous version! We have been working hard to bring to you most of the feature listed on our &lt;a href=&quot;https://trello.com/b/FwbjOjjB/paradox-roadmap&quot;&gt;roadmap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Also, if you haven&#39;t participate to our &lt;a href=&quot;https://www.stride3d.net/blog/roadmap-and-survery/&quot;&gt;survey&lt;/a&gt;, please take the time to help us prioritize the features you need for your projects!&lt;/p&gt;
&lt;img alt=&quot;Rescue Robot Tech Demo&quot; src=&quot;https://www.stride3d.net/images/backgrounds/rescue-robot-tech-demo.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/backgrounds/rescue-robot-tech-demo.webp&quot; /&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#assets&quot;&gt;Assets&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#faster-compiler&quot;&gt;Faster compiler&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#game-settings&quot;&gt;Game Settings&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#compilation-control&quot;&gt;Compilation control&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#raw-assets&quot;&gt;Raw assets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#assets-consolidation&quot;&gt;Assets consolidation&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#rendering&quot;&gt;Rendering&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#integration-of-spritestudio-(optix)&quot;&gt;Integration of SpriteStudio (OPTIX)&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#materials%3A-vertex-stream%2C-shader-nodes%E2%80%A6&quot;&gt;Materials: Vertex stream, Shader nodes…&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#gamma-vs.-linear-and-improved-support-for-hdr&quot;&gt;Gamma vs. Linear and improved support for HDR&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#sprites&quot;&gt;Sprites&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#atlas-generation&quot;&gt;Atlas generation&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#alpha-detection&quot;&gt;Alpha detection&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#sprite-editor-improvements&quot;&gt;Sprite editor improvements&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#scene-editor&quot;&gt;Scene editor&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#physics-improvements&quot;&gt;Physics improvements&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#element-types&quot;&gt;Element types&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#linking-to-bones&quot;&gt;Linking to bones&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#async-scripting-for-collision-handling&quot;&gt;Async scripting for collision handling&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#collider-shapes&quot;&gt;Collider shapes&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#manage-code-and-scripts-from-game-studio&quot;&gt;Manage code and scripts from Game Studio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#scripting&quot;&gt;Scripting&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#script-priorities&quot;&gt;Script Priorities&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#live-scripting-improvements&quot;&gt;Live Scripting improvements&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#model-node-link-improvements&quot;&gt;Model Node Link improvements&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#breaking-changes&quot;&gt;Breaking changes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#version-1.3.0-beta&quot;&gt;Version 1.3.0-beta&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#enhancements&quot;&gt;Enhancements&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#general&quot;&gt;General&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#game-studio&quot;&gt;Game Studio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#assets-1&quot;&gt;Assets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#engine&quot;&gt;Engine&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#input&quot;&gt;Input&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#rendering-1&quot;&gt;Rendering&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#issues-fixed&quot;&gt;Issues fixed&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#assets-2&quot;&gt;Assets&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#build&quot;&gt;Build&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#engine-1&quot;&gt;Engine&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#game-studio-1&quot;&gt;Game Studio&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#input-1&quot;&gt;Input&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#rendering-2&quot;&gt;Rendering&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#shaders&quot;&gt;Shaders&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#samples&quot;&gt;Samples&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#known-issues&quot;&gt;Known Issues&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;assets&quot; tabindex=&quot;-1&quot;&gt;Assets &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#assets&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We have been improving many parts to smooth the management of assets in your project.&lt;/p&gt;
&lt;h3 id=&quot;faster-compiler&quot; tabindex=&quot;-1&quot;&gt;Faster compiler &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#faster-compiler&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In the previous version, asset compilation could take 5 seconds or more, even if nothing needed to be recompiled. Most of the time was taken by the JIT compilation and initialization of some types in the asset compiler. We have introduced a new compiler process that stays on flight and is able to respond faster to compilation requests. This process shuts down automatically after not being used for a while. This optimization is reducing the total time to recompile a project to less than 1 second, when nothing was changed. We are still looking to improve this compilation step a lot more in a future release!&lt;/p&gt;
&lt;h3 id=&quot;game-settings&quot; tabindex=&quot;-1&quot;&gt;Game Settings &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#game-settings&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;A new mandatory &amp;quot;GameSettings&amp;quot; asset allows you to define the main properties of your game:&lt;br /&gt;
Default Startup Scene&lt;br /&gt;
Resolution&lt;br /&gt;
Graphics Profile (DX9, 10 or 11)&lt;br /&gt;
HDR or LDR mode&lt;br /&gt;
Color Space: Gamma or Linear (more details below)&lt;/p&gt;
&lt;img alt=&quot;Game Settings&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/GameSettings13.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/GameSettings13.png&quot; /&gt;
&lt;p&gt;It will automatically be created when opening an old project with version 1.3.&lt;/p&gt;
&lt;p&gt;We plan to add many more options to this asset from now on.&lt;/p&gt;
&lt;h3 id=&quot;compilation-control&quot; tabindex=&quot;-1&quot;&gt;Compilation control &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#compilation-control&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Until now, all assets of a game package and its dependencies were compiled as part of your game.&lt;/p&gt;
&lt;p&gt;Starting with version 1.3, we compile only assets required by your game. This makes game compilation much faster (especially if you have lots of unused assets).&lt;/p&gt;
&lt;p&gt;Don’t worry, most of it is done automatically for you! We do this by collecting dependencies from the new Game Settings asset. Since it references the Default Scene, we can easily detect all the required asset references (Models, Materials, Asset referenced by your scripts and so on).&lt;/p&gt;
&lt;img alt=&quot;Assets Control&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/AssetControlExample.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/AssetControlExample.png&quot; /&gt;
&lt;p&gt;In case you were loading anything in your script using &lt;code&gt;Asset.Load&lt;/code&gt;, you can still tag those assets specifically with &amp;quot;Mark as Root&amp;quot; in the editor.&lt;/p&gt;
&lt;p&gt;However, we now recommend to instead create a field in your script and fill it directly in the editor. All the samples have been updated to this new practice, so please check them out.&lt;/p&gt;
&lt;h3 id=&quot;raw-assets&quot; tabindex=&quot;-1&quot;&gt;Raw assets &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#raw-assets&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We have added support for raw assets. You can now easily add your own config/xml files or load proprietary file formats. Raw assets are imported as-is in the game and can be accessed at runtime using the &lt;code&gt;Assets.OpenStream(...)&lt;/code&gt; method.&lt;/p&gt;
&lt;h3 id=&quot;assets-consolidation&quot; tabindex=&quot;-1&quot;&gt;Assets consolidation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#assets-consolidation&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We encourage users to organize their raw assets (such as FBX, PNG, JPG files) in a specific subfolder (just like the samples are doing it).&lt;/p&gt;
&lt;p&gt;However, if you prefer to have your raw assets copied side by side with Xenko assets, it is now possible by checking &amp;quot;Keep Source Side by Side&amp;quot; on assets.&lt;/p&gt;
&lt;p&gt;When doing so, source assets will be copied alongside the Xenko asset with the same name. Those changes happen when saving the project. In case some irreversible changes happen (i.e. delete or overwrite an existing file), a confirmation will be required by the user.&lt;/p&gt;
&lt;p&gt;This option is still off by default when importing new assets, but we plan to make it a project setting if you want to manage project that way for your whole team.&lt;/p&gt;
&lt;img alt=&quot;Asset Consolidation&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/AssetConsolidation.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/AssetConsolidation.png&quot; /&gt;
&lt;p&gt;Don’t forget to save new versions of your raw assets at the new location.&lt;/p&gt;
&lt;h2 id=&quot;rendering&quot; tabindex=&quot;-1&quot;&gt;Rendering &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#rendering&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;integration-of-spritestudio-(optix)&quot; tabindex=&quot;-1&quot;&gt;Integration of SpriteStudio (OPTIX) &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#integration-of-spritestudio-(optix)&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We added preliminary support for &lt;a href=&quot;http://www.webtech.co.jp/eng/spritestudio/&quot;&gt;SpriteStudio&lt;/a&gt; animations and sprite sheet importing. At this point only few animation keys are supported.&lt;/p&gt;
&lt;p&gt;Animation pipeline is very similar to a 3D model with smooth interpolations.&lt;/p&gt;
&lt;p&gt;Check out our new Sprite Studio Demo in the samples:&lt;/p&gt;
&lt;img alt=&quot;Sprite Studio Demo&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/SpriteStudioDemo.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/SpriteStudioDemo.jpg&quot; /&gt;
&lt;h3 id=&quot;materials%3A-vertex-stream%2C-shader-nodes%E2%80%A6&quot; tabindex=&quot;-1&quot;&gt;Materials: Vertex stream, Shader nodes… &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#materials%3A-vertex-stream%2C-shader-nodes%E2%80%A6&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In addition to the current color providers supported by materials (texture, scalar, ...), we have added support for 2 new ones:&lt;/p&gt;
&lt;p&gt;You can now use a color/values coming from &lt;strong&gt;vertex attributes/stream&lt;/strong&gt; and use them directly in material color providers:&lt;/p&gt;
&lt;img alt=&quot;Rendering Materials Vertex Stream&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/RenderingMaterialsVertexStream.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/RenderingMaterialsVertexStream.png&quot; /&gt;
&lt;p&gt;This allows for example to blend two textures in a diffuse material, based on the value of a color coming from the vertex buffer.&lt;/p&gt;
&lt;p&gt;Also, you can use a shader directly as a color provider (inheriting from &lt;code&gt;ComputeColor&lt;/code&gt;), allowing you to display procedural textures. For now, the list of shaders is not filtered so many shaders are not compatible with the material input. This is something that we are going to improve in a future release. Have a look at the &lt;code&gt;Custom Material Shader&lt;/code&gt; sample to check, how this can be used in practice in your project.&lt;/p&gt;
&lt;h3 id=&quot;gamma-vs.-linear-and-improved-support-for-hdr&quot; tabindex=&quot;-1&quot;&gt;Gamma vs. Linear and improved support for HDR &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#gamma-vs.-linear-and-improved-support-for-hdr&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;In the previous version, the rendering of all thumbnails and previews were neither HDR nor gamma correct. Also, working in linear space required to manually check sRGB mode on all textures of your project, which was quite cumbersome. There were also many places where the engine was not correctly distinguishing between gamma and linear space.&lt;/p&gt;
&lt;p&gt;In this version, the engine is now able to fully support pipelines that are HDR and gamma correct. You can still switch to a LDR and/or linear color pipeline, if your game requires legacy color handling. Thumbnails and preview should now match the settings of your game (HDR/LDR and Gamma/Linear). At runtime, if a platform doesn’t support SRgb textures/rendertargets (used for gamma correct rendering), the game will switch transparently to gamma colorspace. On these platforms, the rendering will not be gamma correct.&lt;/p&gt;
&lt;p&gt;By default, all new games are now created with &lt;code&gt;Linear&lt;/code&gt; colorspace. This setting can be changed in the GameSettings:&lt;/p&gt;
&lt;img alt=&quot;Game Settings Color Space&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/GameSettingsColorSpace.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/GameSettingsColorSpace.png&quot; /&gt;
&lt;p&gt;The texture importer by default now automatically uses the color space defined at game level:&lt;/p&gt;
&lt;img alt=&quot;Texture Color Space&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/TextureColorSpace.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/TextureColorSpace.png&quot; /&gt;
&lt;h2 id=&quot;sprites&quot; tabindex=&quot;-1&quot;&gt;Sprites &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#sprites&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;atlas-generation&quot; tabindex=&quot;-1&quot;&gt;Atlas generation &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#atlas-generation&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We have added support to create automatically atlas texture generated from sprite sheets. This feature is optional and the user can continue generating their atlas manually if they prefer. It supports sprite border size.&lt;/p&gt;
&lt;img alt=&quot;Sprite Sheet Texture Atlas&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/SpriteSheetTextureAtlas.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/SpriteSheetTextureAtlas.png&quot; /&gt;
&lt;h3 id=&quot;alpha-detection&quot; tabindex=&quot;-1&quot;&gt;Alpha detection &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#alpha-detection&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;We have also improve automatic alpha detection of textures and sprites. In addition to looking at the input file type and header, we are detecting actual data of the textures or sprites to detect alpha. This feature will be extended also to other types of texture formats (normal maps...etc.)&lt;/p&gt;
&lt;h3 id=&quot;sprite-editor-improvements&quot; tabindex=&quot;-1&quot;&gt;Sprite editor improvements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#sprite-editor-improvements&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;The sprite editor has been improved in several ways. First, the left pane now let you select the sheet type (sprites or UI) and the color key. To easily set the color key from the image itself, a color picking tool has been added. It is also possible to duplicate an existing sprite so you don’t have to enter the same parameters again and again.&lt;/p&gt;
&lt;img alt=&quot;Sprite Editor Left&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/SpriteEditorLeft.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/SpriteEditorLeft.png&quot; /&gt;
&lt;p&gt;Selecting the area of each sprite in a sheet can be annoying, so we added a magic wand tool to easily create a rectangle that fit the edges of the sprite you click on, using either transparency, or the color key to determine sprite limits.&lt;br /&gt;
&lt;img alt=&quot;Magic Wand&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/MagicWand.gif&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/MagicWand.gif&quot; /&gt;&lt;/p&gt;
&lt;h2 id=&quot;scene-editor&quot; tabindex=&quot;-1&quot;&gt;Scene editor &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#scene-editor&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We made several improvements to manage the hierarchy of entities. First, the root node representing the scene has been removed. You can now access the graphics compositor and editor settings via the &lt;em&gt;Scene settings&lt;/em&gt; button.&lt;/p&gt;
&lt;img alt=&quot;Scene Settings&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/SceneSettings.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/SceneSettings.png&quot; /&gt;
&lt;p&gt;Also, to help you sort and filter entities in your scene, we added the concept of folders. You can create folders either at root level, or inside an entity, and move other folders/entities into them. Folders are completely virtual and exist only at design time. The actual hierarchy of entities is not affected by them.&lt;/p&gt;
&lt;img alt=&quot;Scene Folders&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/SceneFolders.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/SceneFolders.png&quot; /&gt;
&lt;p&gt;Aligning the camera along coordinate axes was cumbersome. We added a new nativation gizmo to the top-right corner of the scene editor, which allows you to easily rotate the camera around axes in 45° increments. Clicking on the center of the cube a second time, will switch between perspective and orthographic projection. Camera controls have also been improved when working in orthographic mode, to make it easier to move around in 2D worlds.&lt;/p&gt;
&lt;img alt=&quot;Navigation Gizmo&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/NavigationGizmo.gif&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/NavigationGizmo.gif&quot; /&gt;
&lt;p&gt;Finally, the camera menu has been improved to allow you to customize various options related to the editor camera. These options were previously available in the editor settings section of the scene properties. This section has been removed.&lt;/p&gt;
&lt;img alt=&quot;Camera Menu&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/CameraMenu.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/CameraMenu.png&quot; /&gt;
&lt;p&gt;The material selection mode, introduced in the previous version, has been improved to allow you to perform close-ups on single meshes of a model. Hovering over the desired mesh and pressing &#39;F&#39; while in material mode, will now center the camera on it.&lt;/p&gt;
&lt;h2 id=&quot;physics-improvements&quot; tabindex=&quot;-1&quot;&gt;Physics improvements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#physics-improvements&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Physics support has seen a lot of improvements.&lt;br /&gt;
The physics system is now &lt;strong&gt;loaded automatically&lt;/strong&gt; - no need anymore to load it manually from code.&lt;/p&gt;
&lt;h3 id=&quot;element-types&quot; tabindex=&quot;-1&quot;&gt;Element types &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#element-types&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Physics elements have been simplified. To reduce confusion between object types some element types have been removed/merged with others. Each element type is now represented by separate class (instead of having a type property). This provides a clearer abstraction and easier configuration from the editor. Physics gizmos are &lt;strong&gt;color coded&lt;/strong&gt; by element type.&lt;/p&gt;
&lt;img alt=&quot;Physics Elements&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/physics_elements_new.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/physics_elements_new.png&quot; /&gt;
&lt;h3 id=&quot;linking-to-bones&quot; tabindex=&quot;-1&quot;&gt;Linking to bones &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#linking-to-bones&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You can now properly link physics elements to bones of a model hierarchy. This makes it possible to create ragdolls, flags, etc. from the editor. Searching for the correct node is assisted by the editor. No need to memorize the name of the node.&lt;br /&gt;
You currently still need to set up constraints programmatically. This will also be possible from the editor in the future.&lt;br /&gt;
Also, complex entity hierarchies are now well handled.&lt;/p&gt;
&lt;img alt=&quot;Physics Nodes&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/physics_nodes.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/physics_nodes.webp&quot; /&gt;
&lt;h3 id=&quot;async-scripting-for-collision-handling&quot; tabindex=&quot;-1&quot;&gt;Async scripting for collision handling &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#async-scripting-for-collision-handling&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Collision handling has been redesigned and now uses an async/await pattern. Events have been removed. Instead awaitable APIs are available, improving both internal performance and the readability of your code.&lt;/p&gt;
&lt;pre class=&quot;language-csharp&quot;&gt;&lt;code class=&quot;language-csharp&quot;&gt;&lt;span class=&quot;token comment&quot;&gt;//start our state machine&lt;/span&gt;
&lt;span class=&quot;token keyword&quot;&gt;while&lt;/span&gt; &lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;Game&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;IsRunning&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;token comment&quot;&gt;//wait for entities coming in&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; trigger&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;FirstCollision&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    SimpleMessage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;OnStart&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    &lt;span class=&quot;token comment&quot;&gt;//now wait for entities exiting&lt;/span&gt;
    &lt;span class=&quot;token keyword&quot;&gt;await&lt;/span&gt; trigger&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;AllCollisionsEnded&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;

    SimpleMessage&lt;span class=&quot;token punctuation&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;token function&quot;&gt;OnStop&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;token punctuation&quot;&gt;;&lt;/span&gt;
&lt;span class=&quot;token punctuation&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;collider-shapes&quot; tabindex=&quot;-1&quot;&gt;Collider shapes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#collider-shapes&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;You can now declare collider shapes right &lt;strong&gt;inside of a physics component&lt;/strong&gt;, for increased productivity. These shapes will also be affected by the scaling of the entity. Using Collider Shape assets to share shapes among elements is still possible, of course.&lt;/p&gt;
&lt;p&gt;A &lt;strong&gt;Convex Hull collider shape&lt;/strong&gt; has been added, providing a shape that is shrink wrapped to a model. For more complex model, a shape is wrapped to each mesh. In the future we also hope to provide complex convex decomposition.&lt;/p&gt;
&lt;img alt=&quot;Physics Inline Shapes&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/physics_inlineshapes_new.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/physics_inlineshapes_new.png&quot; /&gt;
&lt;h2 id=&quot;manage-code-and-scripts-from-game-studio&quot; tabindex=&quot;-1&quot;&gt;Manage code and scripts from Game Studio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#manage-code-and-scripts-from-game-studio&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Scripts are now a new special type of asset.&lt;/p&gt;
&lt;img alt=&quot;Script Asset&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/script_asset.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/script_asset.png&quot; /&gt;
&lt;p&gt;You can now create scripts straight from the Game Studio, without any need to have visual studio installed if wanted, Just fire your favorite code editor and start making scripts for your game!&lt;/p&gt;
&lt;p&gt;Renaming/Deleting/Adding a script from visual studio will be detected after script recompile in the Game Studio.&lt;/p&gt;
&lt;p&gt;Renaming/Deleting/Adding a script from the Game Studio will be detected after project save in Visual Studio.&lt;/p&gt;
&lt;p&gt;For this release when you drag and drop a script asset into a script component the first script in the code file will get picked up. (this will be improved very soon)&lt;/p&gt;
&lt;h2 id=&quot;scripting&quot; tabindex=&quot;-1&quot;&gt;Scripting &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#scripting&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;script-priorities&quot; tabindex=&quot;-1&quot;&gt;Script Priorities &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#script-priorities&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Added &lt;code&gt;Script.Priority&lt;/code&gt;, that allows you to control how a script will be scheduled each frame. Script will be executed by Priority order. You can change Priority of an already running Script during execution to control accurately the order of execution of your scripts.&lt;/p&gt;
&lt;p&gt;Also, all &lt;code&gt;SyncScript&lt;/code&gt; and &lt;code&gt;AsyncScript&lt;/code&gt; are now managed in the same scheduler and priorities between them will apply (before, all &lt;code&gt;AsyncScript&lt;/code&gt; were executed first, then all &lt;code&gt;SyncScript&lt;/code&gt;).&lt;/p&gt;
&lt;h3 id=&quot;live-scripting-improvements&quot; tabindex=&quot;-1&quot;&gt;Live Scripting improvements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#live-scripting-improvements&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;After our first initial version, we tried to improve live scripting usability with two new features.&lt;/p&gt;
&lt;p&gt;When running a game in live scripting while Visual Studio is started, the debugger will automatically attach to the newly started session. Note: Visual Studio might complain when you try to edit files. Disabling &lt;em&gt;Edit &amp;amp; Continue&lt;/em&gt; of managed code will fix this issue.&lt;/p&gt;
&lt;p&gt;During reload, you may want to keep some specific properties that are usually not serialized (public members with &lt;code&gt;DataMemberIgnore&lt;/code&gt; or private/internal members). You can now use &lt;code&gt;[DataMember(Mask = LiveScriptingMask)]&lt;/code&gt; on your script fields and properties to achieve this.&lt;/p&gt;
&lt;p&gt;Last, GameStudio-side logging has been improved to better show what happens in the remote game process.&lt;/p&gt;
&lt;h2 id=&quot;model-node-link-improvements&quot; tabindex=&quot;-1&quot;&gt;Model Node Link improvements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#model-node-link-improvements&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Model Node Link components allows you to make one entity follow a given model node or bone. They have been reworked and made easier to use.&lt;/p&gt;
&lt;p&gt;Firstly, if now target model is set, they will now automatically use the parent entitie’s model. When editing the target node, the editor will now display a list of available model nodes to choose from:&lt;/p&gt;
&lt;img alt=&quot;Model Node Link Node Selection&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/ModelNodeLinkNodeSelection.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/ModelNodeLinkNodeSelection.png&quot; /&gt;
&lt;p&gt;Also, transformation is not ignored anymore. It is now possible to apply an offset, relative to the node.&lt;/p&gt;
&lt;p&gt;Lastly, node link information is now visible in the scene tree view for easier discoverability:&lt;/p&gt;
&lt;img alt=&quot;Model Node Link Scene TreeInfo&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.3/ModelNodeLinkSceneTreeInfo.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.3/ModelNodeLinkSceneTreeInfo.png&quot; /&gt;
&lt;h2 id=&quot;breaking-changes&quot; tabindex=&quot;-1&quot;&gt;Breaking changes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#breaking-changes&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;General: you now need to redistribute your games with VS2015 C++ redist instead of VS2013 ones.&lt;/li&gt;
&lt;li&gt;Engine: When implementing a new entity component type, if you were using EntityComponent.Enabled, you now need to inherit from ActivableEntityComponent instead.&lt;/li&gt;
&lt;li&gt;Engine: Script execution order was previously undefined but is now controlled by Script.Priority. Please make sure it didn’t affect your game.&lt;/li&gt;
&lt;li&gt;Rendering: Remove post effect GammaTransform as the new pipeline is now using sRGB render targets for gamma correct pipeline.&lt;/li&gt;
&lt;li&gt;Rendering: Remove &lt;code&gt;LightShadowImportance&lt;/code&gt;. Switch to a single configuration done through the &lt;code&gt;LightShadiwMapSize&lt;/code&gt; enum.&lt;/li&gt;
&lt;li&gt;Rendering: Rename ILightColor to IColorProvider and move to namespace Engine.Rendering.Colors. Add extensions methods (github issue &lt;a href=&quot;https://github.com/SiliconStudio/xenko/issues/296&quot;&gt;#296&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Physics: Collision events are removed. An async/await pattern is encouraged from now on.&lt;/li&gt;
&lt;li&gt;Sprite Sheets: They are now automatically packed. If this affects you, you can simply disable this setting by editing your Sprite Sheet asset.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;version-1.3.0-beta&quot; tabindex=&quot;-1&quot;&gt;Version 1.3.0-beta &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#version-1.3.0-beta&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Release date: 2015/09/17&lt;/p&gt;
&lt;p&gt;Almost 1000 commits are included in this release since the previous version of July. You will find more details in the following sections.&lt;/p&gt;
&lt;h2 id=&quot;enhancements&quot; tabindex=&quot;-1&quot;&gt;Enhancements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#enhancements&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;general&quot; tabindex=&quot;-1&quot;&gt;General &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#general&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Switched Xenko to VS2015. You can still compile your games with VS2013, but you will need to ship VS2015 C++ redistributables instead of VS2013 ones.&lt;/li&gt;
&lt;li&gt;Graphics platform is not part of user projects anymore, it is either automatically deduced and will likely be controllable from new Game Settings asset&lt;/li&gt;
&lt;li&gt;Visual Studio Solution configuration is now switched automatically based on the startup project and vice versa.&lt;/li&gt;
&lt;li&gt;On Android, we better detect ADB (check registry, running process before trying to find on PATH)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;game-studio&quot; tabindex=&quot;-1&quot;&gt;Game Studio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#game-studio&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Removed the &lt;em&gt;Code&lt;/em&gt; section of a package and merged its content into the package top-level&lt;/li&gt;
&lt;li&gt;Animation preview now displays current time and duration of the animation, and has a proper scale under the seek bar&lt;/li&gt;
&lt;li&gt;Add a button in the asset properties to open the asset editor when it’s available for this asset type (currently only for scenes and sprite sheets)&lt;/li&gt;
&lt;li&gt;Some lists in the property grid can be reordered by drag and drop&lt;/li&gt;
&lt;li&gt;File and directory properties now accept drops from Windows Explorer&lt;/li&gt;
&lt;li&gt;Better handling of assets that can be edited, moved or deleted&lt;/li&gt;
&lt;li&gt;Better placement of the checkboxes in the property grid so the indentation is not affected by the presence of a checkbox&lt;/li&gt;
&lt;li&gt;The status bar now display background works, such as project build, thumbnail or effect compilation... and indicate progress and result&lt;/li&gt;
&lt;li&gt;The output panel will display an asterisk when new messages are logged.&lt;/li&gt;
&lt;li&gt;Scene editor: Add the concept of folders to sort assets&lt;/li&gt;
&lt;li&gt;Scene editor: Removed the root scene node, and added a &lt;em&gt;Scene settings&lt;/em&gt; button to access the scene properties&lt;/li&gt;
&lt;li&gt;Scene editor: Add a navigation gizmo to easily reorient the camera&lt;/li&gt;
&lt;li&gt;Scene editor: Moved all camera options into the camera menu of the toolbar and removed them from the Editor settings section of the property grid&lt;/li&gt;
&lt;li&gt;Scene editor: The tree view will scroll automatically when dragging entities in a long list&lt;/li&gt;
&lt;li&gt;Scene editor: Invert up/down and forward/backward keys when the camera is orthographic&lt;/li&gt;
&lt;li&gt;Scene editor: Display list of model nodes when editing ModelNodeLinkComponent.NodeName&lt;/li&gt;
&lt;li&gt;Scene editor: Display Model Node Link information in the scene tree view&lt;/li&gt;
&lt;li&gt;Scene editor: Select newly created entities when dropping asset to the scene&lt;/li&gt;
&lt;li&gt;Scene editor: Snap newly created entities when dropping asset to the scene if snapping is enabled&lt;/li&gt;
&lt;li&gt;Sprite editor: Add a button to center the view on the current sprite region&lt;/li&gt;
&lt;li&gt;Sprite editor: Magic wand tool to easily select sprite region. Works with either transparency or color key, support ctrl+click to include multiple partd in the same region.&lt;/li&gt;
&lt;li&gt;Sprite editor: Add a color picking tool to select the color key&lt;/li&gt;
&lt;li&gt;Sprite editor: Add buttons to cycle between the different sprite, with proper keyboard shortcut&lt;/li&gt;
&lt;li&gt;Sprite editor: Add a button to duplicate the selected sprites&lt;/li&gt;
&lt;li&gt;Sprite editor: Sprites can be reordered by drag and drop and can be dropped into a different spritesheet&lt;/li&gt;
&lt;li&gt;Sprite editor: More options in sprite context menu&lt;/li&gt;
&lt;li&gt;Sprite editor: Keep the position and zoom of the image when changing selected sprite&lt;/li&gt;
&lt;li&gt;Sprite editor: Support DDS images (and many other formats)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;assets-1&quot; tabindex=&quot;-1&quot;&gt;Assets &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#assets-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Add ability to include raw assets in a game and loading them with the &lt;code&gt;Assets.OpenStream&lt;/code&gt; API.&lt;/li&gt;
&lt;li&gt;Background asset compiler for faster asset compiling tasks.&lt;/li&gt;
&lt;li&gt;Added concept of &amp;quot;Root&amp;quot; assets (auto collect game assets, and user can manually mark additional ones)&lt;/li&gt;
&lt;li&gt;Added a new undeletable GameSettings asset where you can configure various global settings.&lt;/li&gt;
&lt;li&gt;Added a &amp;quot;Keep Source Side by Side&amp;quot; to force raw assets to be copied alongside their Xenko asset counterpart while saving.&lt;/li&gt;
&lt;li&gt;Switch to FBX SDK 2016 when handling FBX assets&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;engine&quot; tabindex=&quot;-1&quot;&gt;Engine &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#engine&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added Entity.AddChild() and Entity.GetParent() extension methods (&lt;a href=&quot;https://github.com/SiliconStudio/xenko/issues/251&quot;&gt;#251&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Added Script.Priority to give better control of script order of execution. Also interleaves execution of AsyncScript and SyncScript in the same scheduler.&lt;/li&gt;
&lt;li&gt;If ModelNodeLinkComponent.Model is null, it now automatically uses parent model&lt;/li&gt;
&lt;li&gt;ModelNodeLinkComponent now uses TransformationComponent values to applies an additional relative offset on top of the node transformation&lt;/li&gt;
&lt;li&gt;Reworked transformation order so that it is easy to add new components similar to Model Node Link Components (i.e. Sprite link, etc…)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;AnimationComponent.Play()&lt;/code&gt; now returns a &lt;code&gt;PlayingAnimation&lt;/code&gt;, on which you can use &lt;code&gt;await playingAnimation.Ended()&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;AsyncScripts now provide a &lt;code&gt;CancellationToken&lt;/code&gt; that can be passed to async APIs to properly cancel them&lt;/li&gt;
&lt;li&gt;AsyncScripts now also have a &lt;code&gt;Cancel&lt;/code&gt; method to do synchronous cleanup&lt;/li&gt;
&lt;li&gt;Before, every type of entity components could be disabled. From now on, they need to inherit from &lt;code&gt;ActivableEntityComponent&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Added the possibility to reference audio and font assets from scripts&lt;/li&gt;
&lt;li&gt;Unify API of collider shapes, procedural models and geometric primitives&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;input&quot; tabindex=&quot;-1&quot;&gt;Input &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#input&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Added support for sensor input&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;rendering-1&quot; tabindex=&quot;-1&quot;&gt;Rendering &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#rendering-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Shader material nodes as color providers are re-enabled in Materials. Refer to the &#39;Custom material shader&#39; sample for details&lt;/li&gt;
&lt;li&gt;Vertex stream in materials can be used as color providers.&lt;/li&gt;
&lt;li&gt;Better support for ColorSpace (Gamme vs. Linear) throughout the engine&lt;/li&gt;
&lt;li&gt;Improve &lt;code&gt;ToneMap&lt;/code&gt; color transform, Add Hejl 2 tonemapping operator. Add &lt;code&gt;AutoExposure&lt;/code&gt;/manual exposure and &lt;code&gt;TemporalAdaptation&lt;/code&gt; flags.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;issues-fixed&quot; tabindex=&quot;-1&quot;&gt;Issues fixed &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#issues-fixed&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;h3 id=&quot;assets-2&quot; tabindex=&quot;-1&quot;&gt;Assets &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#assets-2&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Obj + mtl file import support&lt;/li&gt;
&lt;li&gt;Fixed .blend assimp import&lt;/li&gt;
&lt;li&gt;Assimp imported meshes scale property support.&lt;/li&gt;
&lt;li&gt;Custom assets are now loaded correctly when used in the package they are defined in (&lt;a href=&quot;https://github.com/SiliconStudio/xenko/issues/280&quot;&gt;#280&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Local packages are now correctly loaded after their dependencies&lt;/li&gt;
&lt;li&gt;If you use &amp;quot;Keep Source Side by Side&amp;quot; on assets with raw assets, they will be copied alongside the asset while saving the project&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;build&quot; tabindex=&quot;-1&quot;&gt;Build &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#build&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Restored UserDoc functionality&lt;/li&gt;
&lt;li&gt;Added support for user&#39;s native libraries&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;engine-1&quot; tabindex=&quot;-1&quot;&gt;Engine &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#engine-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fixed an issue when creating StartupScripts in other StartupScripts (&lt;a href=&quot;https://github.com/SiliconStudio/xenko/issues/294&quot;&gt;#294&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;game-studio-1&quot; tabindex=&quot;-1&quot;&gt;Game Studio &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#game-studio-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Animation preview won’t freeze the Game Studio anymore&lt;/li&gt;
&lt;li&gt;Display an error message if Game Studio was started in 32 bit mode&lt;/li&gt;
&lt;li&gt;Previews and thumbnails now properly take skinning into account&lt;/li&gt;
&lt;li&gt;SpriteFont can now be properly referenced in scripts.&lt;/li&gt;
&lt;li&gt;There was some issues when importing shader log and undoing that&lt;/li&gt;
&lt;li&gt;The layout of the Game Studio was improperly saved&lt;/li&gt;
&lt;li&gt;Display properly the name of entities/sprites on the top of the property grid when something else than an asset is selected&lt;/li&gt;
&lt;li&gt;Scene editor: Issues in camera control: LMB+RMB allows to pan the camera, fix mouse lock when using middle click, fix right-click on gizmos&lt;/li&gt;
&lt;li&gt;Scene editor: Modifying a materials tessellation now properly updates the scene&lt;/li&gt;
&lt;li&gt;Scene editor: Orientation of the camera gizmo was sometimes incorrectly computed&lt;/li&gt;
&lt;li&gt;Scene editor: Transformations applied on a selection of multiple object were sometimes incorrectly processed&lt;/li&gt;
&lt;li&gt;Scene editor: Duplication using Ctrl key while using the transformation gizmo&lt;/li&gt;
&lt;li&gt;Scene editor: Prevent a crash that might occur when loading a large scene&lt;/li&gt;
&lt;li&gt;Scene editor: Transparency was incorrectly processed in the camera preview&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;input-1&quot; tabindex=&quot;-1&quot;&gt;Input &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#input-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Input: Properly detect HasMouse on Windows 10, Store and Phone platforms&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;rendering-2&quot; tabindex=&quot;-1&quot;&gt;Rendering &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#rendering-2&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fix ImageReadBack latency to force readback on first frame if previous frames were not available.&lt;/li&gt;
&lt;li&gt;Ensure recursive materials are generating an log error instead of a StackOverflowException&lt;/li&gt;
&lt;li&gt;Fixed issue where not all enabled lights would be rendered (&lt;a href=&quot;https://github.com/SiliconStudio/xenko/issues/297&quot;&gt;#297&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;shaders&quot; tabindex=&quot;-1&quot;&gt;Shaders &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#shaders&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Swizzling scalars now works on OpenGL platforms&lt;/li&gt;
&lt;li&gt;Display a proper error message when variables of different types have the same semantic (&lt;a href=&quot;https://github.com/SiliconStudio/xenko/issues/197&quot;&gt;#197&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;samples&quot; tabindex=&quot;-1&quot;&gt;Samples &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#samples&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Fixed corrupted scene of the ‘Sprite entity sample (&lt;a href=&quot;https://github.com/SiliconStudio/xenko/issues/281&quot;&gt;#281&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;known-issues&quot; tabindex=&quot;-1&quot;&gt;Known Issues &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-3-0-beta/#known-issues&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Rendering: Color used in SpriteBatch is not gamma correct and is considered as Linear It means that if you used a Color to modify a sprite with SpriteBatch, the sprite will appear a bit brighter.&lt;/li&gt;
&lt;li&gt;Rendering: DynamicFonts are not yet gamma correct.&lt;/li&gt;
&lt;li&gt;Rendering: Shadow maps are not rendered correctly with orthographic projections&lt;/li&gt;
&lt;li&gt;Input: Windows Phone touch inputs are sometimes not consistent with other platforms.&lt;/li&gt;
&lt;li&gt;UI: EditText is not implemented on Windows 10, Phone and Store&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Thu, 17 Sep 2015 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/new-version-1-3-0-beta/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/new-version-1-3-0-beta/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-1.3/thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Rescue Drone: Tech Demo</title>
      <description>&lt;p&gt;During CEDEC 2015, we have published &amp;quot;Rescue Drone&amp;quot;, a new real-time tech demo. It leverages on the latest rendering improvements made in Xenko, such as Physically Based Rendering.&lt;/p&gt;
&lt;div class=&quot;ratio ratio-16x9 mb-3&quot;&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/wOZ-s7Q4qWY&quot; title=&quot;YouTube video&quot; allowfullscreen=&quot;&quot;&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
      <pubDate>Thu, 10 Sep 2015 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/rescue-drone-tech-demo-cedec-2015/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/rescue-drone-tech-demo-cedec-2015/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/rescue-drone/thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Roadmap and Survey</title>
      <description>&lt;p&gt;Discover the latest Stride 3D roadmap and participate in our community survey to help shape the future of our open-source game engine.&lt;/p&gt;
&lt;h2 id=&quot;roadmap&quot; tabindex=&quot;-1&quot;&gt;Roadmap &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/roadmap-and-survery/#roadmap&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We just published our roadmap online: &lt;a href=&quot;https://trello.com/b/FwbjOjjB&quot; target=&quot;_blank&quot; class=&quot;readon&quot;&gt;view roadmap&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;We are excited to share our future plan and work with the community.&lt;/p&gt;
&lt;p&gt;You will be able to see the short term (few months) future plans relatively precisely, and some longer terms plans we have. The tag colors indicate progress on each features.&lt;/p&gt;
&lt;p&gt;Our release cycle is once every 2 to 3 months, and we will try to include as many new features as we every time. Of course we will also release patches when faster fixes are needed.&lt;/p&gt;
&lt;p&gt;We will keep updating the Trello roadmap on a regular basis an constantly tune it.&lt;/p&gt;
&lt;p&gt;We are passionate about building this engine and prioritize features that makes it a great tool to make games.&lt;/p&gt;
&lt;p&gt;Thus hearing the voices of our community is important. Please vote on the features and participate to our survey below!&lt;/p&gt;
&lt;h2 id=&quot;survey&quot; tabindex=&quot;-1&quot;&gt;Survey &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/roadmap-and-survery/#survey&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We created an online survey that should take around 5mins to complete:&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.surveymonkey.com/r/paradox-beta&quot; target=&quot;_blank&quot; class=&quot;readon&quot;&gt;Participate to Survey (English)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.surveymonkey.com/r/YGD8VYH&quot; target=&quot;_blank&quot; class=&quot;readon&quot;&gt;Participate to Survey (Japanese)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Since we are constantly refining Xenko roadmap, having your opinion will help a lot to better fit your needs and to make Xenko better.&lt;/p&gt;
</description>
      <pubDate>Thu, 13 Aug 2015 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/roadmap-and-survery/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/roadmap-and-survery/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/survey.png" type="image/png" length="0" /></item>
    <item>
      <title>History and Daily Commits on GitHub</title>
      <description>&lt;p&gt;One year ago, we open-sourced Xenko on GitHub when we released our first beta. This allows our users to understand how the engine work, use it more efficiently, not be blocked by bugs and contribute with the development.&lt;/p&gt;
&lt;p&gt;However, until recently, Xenko code was manually filtered and published to GitHub. The process was inefficient and time-consuming, resulting in delayed updates.&lt;/p&gt;
&lt;p&gt;Also, since all commits were squashed, our community couldn&#39;t see code history, branches, commit messages, activity and daily improvements made to the software. Changes would only be visible after releases.&lt;/p&gt;
&lt;p&gt;In addition, integrating GitHub PR and community activity back in our source tree was not well streamlined very well with our workflow.&lt;/p&gt;
&lt;p&gt;We decided to spend some time automatizing this commit filtering process and applying it on the last year of history (since 1.0.0-beta01).&lt;/p&gt;
&lt;p&gt;This history is now &lt;b&gt;live&lt;/b&gt; on our &lt;a href=&quot;https://github.com/SiliconStudio/xenko&quot;&gt;GitHub repository&lt;/a&gt;, and you can expect almost daily commits from now on.&lt;/p&gt;
&lt;p&gt;We are very excited to make our development more transparent and visible to the community!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://github.com/SiliconStudio/xenko/commits/master&quot; title=&quot;History on github&quot; class=&quot;mb-3&quot;&gt;&lt;img alt=&quot;History on github&quot; src=&quot;https://www.stride3d.net/images/blog/github/xenko-github.png&quot; class=&quot;img-fluid&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/github/xenko-github.png&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;div class=&quot;alert alert-secondary d-flex&quot;&gt;
    &lt;span class=&quot;me-3 mt-1&quot;&gt;&lt;i class=&quot;fa-solid fa-lightbulb fa-lg&quot;&gt;&lt;/i&gt;&lt;/span&gt;
    &lt;div&gt;This GitHub repository is now archived. You can access its successor, Stride, at this link https://github.com/stride3d/stride.&lt;/div&gt;
&lt;/div&gt;
</description>
      <pubDate>Thu, 30 Jul 2015 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/github-migration-history-and-live-commits/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/github-migration-history-and-live-commits/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/github/Octocat.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko 1.1 Beta Released</title>
      <description>&lt;p&gt;Everyone on the Xenko team has been working hard to bring you new features and tools, including the Scene Editor, PBR, and PostFX. We are proud to announce that Xenko 1.1 Beta version is now available for download.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/#highlights&quot;&gt;Highlights&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/#new-features&quot;&gt;New Features&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/#enhancements&quot;&gt;Enhancements&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/#issues-fixed&quot;&gt;Issues fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/#breaking-changes&quot;&gt;Breaking changes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/#known-issues&quot;&gt;Known Issues&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;img alt=&quot;Example Asset&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.1/robot_editor.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.1/robot_editor.webp&quot; /&gt;
&lt;h2 id=&quot;highlights&quot; tabindex=&quot;-1&quot;&gt;Highlights &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/#highlights&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Here are the new features on the new and updated version 1.1.0-beta:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;b&gt;Physically Based Rendering&lt;/b&gt; with Layered Material System&lt;/li&gt;
&lt;li&gt;A brand &lt;b&gt;new scene editor&lt;/b&gt; that is now the central piece of Xenko to assemble your game levels, test the rendering, script your entities.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Scene rendering compositor&lt;/b&gt;, offering a new way to define precisely how to render scenes in your game, apply post effects...etc.&lt;/li&gt;
&lt;li&gt;Easy-to-use and powerful &lt;b&gt;post-effects API&lt;/b&gt; coming along many built-in effects (Depth Of Field, Bloom, Lens Flare, Glare, ToneMapping, Vignetting, Film Grain, Antialiasing...)&lt;/li&gt;
&lt;li&gt;New implementation of &lt;b&gt;Shadow Mapping&lt;/b&gt;, supporting SDSM (Sample Distribution Shadow Maps with adaptive depth splits)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Scripting System&lt;/b&gt;, to easily add behavior and data to entities&lt;/li&gt;
&lt;li&gt;In Visual Studio, when you edit .pdxsl shaders, there is now &lt;b&gt;Error Highlighting&lt;/b&gt; and &lt;b&gt;F12 (Go to Definition)&lt;/b&gt; to make shader editing as smooth as possible.&lt;/li&gt;
&lt;li&gt;A &lt;b&gt;new launcher&lt;/b&gt;, that can manage several versions of Xenko SDK side-by-side&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We have been working to get as many mobile platforms to be included in this release but not all are fully supported yet. Some samples may not work yet so we ask for your patience. The whole team is hard at work to make sure that everything will work on the next update.&lt;/p&gt;
&lt;p&gt;Details of upcoming releases will also be posted soon so please keep an eye on this blog!&lt;/p&gt;
&lt;p&gt;Release date: 2015/04/28&lt;/p&gt;
&lt;h2 id=&quot;new-features&quot; tabindex=&quot;-1&quot;&gt;New Features &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/#new-features&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Launcher: New &lt;strong&gt;launcher&lt;/strong&gt; can now manage several versions of the Xenko SDK&lt;/li&gt;
&lt;li&gt;Studio: Introducing a brand new &lt;strong&gt;scene editor&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;Studio: The scene editor is now the central component of the Studio&lt;/li&gt;
&lt;li&gt;Studio: The asset log panel now display logs (errors, etc.) of the seleced assets and their dependencies&lt;/li&gt;
&lt;li&gt;Studio: Packages now have properties that can be displayed and edited (to set the default scene and some graphics settings)&lt;/li&gt;
&lt;li&gt;Studio: Editor and asset compiler are now &lt;strong&gt;x64&lt;/strong&gt; compatible.&lt;/li&gt;
&lt;li&gt;Effects: New built-in &lt;strong&gt;post-effects&lt;/strong&gt;: depth-of-field, color aberration, light streaks, lens flares, vignetting, film grain (noise)&lt;/li&gt;
&lt;li&gt;Engine: New Material System supporting &lt;strong&gt;PBR materials&lt;/strong&gt;, multi-layered materials with multiple attributes, including: Tessellation, Displacement, Normal, Diffuse, Specular/Metalness, Transparent, Occlusion/Cavity&lt;/li&gt;
&lt;li&gt;Engine: New &lt;strong&gt;rendering pipeline compositor&lt;/strong&gt; allowing to compose the rendering of the scene by layers and renderers&lt;/li&gt;
&lt;li&gt;Engine: New Ambient and Skybox lighting&lt;/li&gt;
&lt;li&gt;Engine: New light culling and object culling&lt;/li&gt;
&lt;li&gt;Engine: New implementation of &lt;strong&gt;Shadow Mapping&lt;/strong&gt; with support for SDSM (Sample Distribution Shadow Maps with adaptive depth splits)&lt;/li&gt;
&lt;li&gt;Engine: New &lt;strong&gt;scripting system&lt;/strong&gt;, to easily add behavior and data to entities.&lt;/li&gt;
&lt;li&gt;Engine: New &lt;code&gt;ComputeEffectShader&lt;/code&gt; class for compute-shader live compilation and dispatching&lt;/li&gt;
&lt;li&gt;Engine: New entity background component to add a background in a scene&lt;/li&gt;
&lt;li&gt;Engine: New entity UI component to add an UI on entities of the scene.&lt;/li&gt;
&lt;li&gt;Graphics: Add a shared 2x2 pixel white texture on the &lt;code&gt;GraphicsDevice&lt;/code&gt;  (extension method)&lt;/li&gt;
&lt;li&gt;Input: Add the possibility to hide and lock the mouse using &lt;code&gt;LockMousePosition&lt;/code&gt; function&lt;/li&gt;
&lt;li&gt;Mathematics: New &lt;code&gt;SphericalHarmonics&lt;/code&gt; class&lt;/li&gt;
&lt;li&gt;Physics: Renamed PhysicsEngine into Simulation, the engine now supports one separate Simulation for each scene.&lt;/li&gt;
&lt;li&gt;Assets: New asset type &lt;code&gt;RenderFrameAsset&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Assets: New asset type &lt;code&gt;ProceduralModelAsset&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;enhancements&quot; tabindex=&quot;-1&quot;&gt;Enhancements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/#enhancements&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Assets: Yaml now uses a shorter qualified name without culture and keytoken.&lt;/li&gt;
&lt;li&gt;Assets: Added AssetManager.Reload(), to reload on top of existing object&lt;/li&gt;
&lt;li&gt;Assets: During asset compilation, improved logging to always display what asset caused an error&lt;/li&gt;
&lt;li&gt;Assets: Assets can now have “compile-time dependencies” (i.e. when a Material layer embeds/uses another material at compile-time)&lt;/li&gt;
&lt;li&gt;Assets: Add non-generic versions of Load and LoadAsync methods in the AssetManager&lt;/li&gt;
&lt;li&gt;Assets: A Get method that allows to retrieve an already loaded asset without increasing the reference counter&lt;/li&gt;
&lt;li&gt;Assets: An Unload method overload that takes an url as parameter instead of a reference.&lt;/li&gt;
&lt;li&gt;Assets: Asset merging (reimport) is now more flexible&lt;/li&gt;
&lt;li&gt;Assets: Add support for sRGB textures&lt;/li&gt;
&lt;li&gt;Assets: Add support for HDR textures&lt;/li&gt;
&lt;li&gt;Assets/FBX: Add better support for FBX scene unit and up-axis&lt;/li&gt;
&lt;li&gt;Assets/FBX: Automatically generates normal maps if they are not present in a 3d model&lt;/li&gt;
&lt;li&gt;Assets/FBX: Do not merge anymore vertices belonging to different smoothing groups&lt;/li&gt;
&lt;li&gt;Build: Roslyn is now used to compile serialization code (instead of CodeDom)&lt;/li&gt;
&lt;li&gt;Build: Improved logging of asset build&lt;/li&gt;
&lt;li&gt;Build: Parallelization of the build has been improved.&lt;/li&gt;
&lt;li&gt;Core: “Data” classes don’t exist anymore. Now uses AttachedReferenceManager to directly represent design-time and runtime representation of an object with a single unified runtime class.&lt;/li&gt;
&lt;li&gt;Core: Add Collections.PoolListStruct&lt;/li&gt;
&lt;li&gt;Studio: If an asset or one of its dependency has a compile error, properly add a failure sticker on top of thumbnail, and details in the asset log&lt;/li&gt;
&lt;li&gt;Studio: Inside a scene, entities, components and scripts can reference each others.&lt;/li&gt;
&lt;li&gt;Studio: If a script can’t properly be loaded (i.e. due to missing types), be nice and try to keep data as is for next save.&lt;/li&gt;
&lt;li&gt;Studio: Reduce number of threads by sharing build system for assets, scene, preview &amp;amp; thumbnails (with priority management)&lt;/li&gt;
&lt;li&gt;Studio: Shaders are compiled asynchronously (glowing green effect) and compilation errors will be visible (glowing red effect); various shaders are precompiled for faster startup.&lt;/li&gt;
&lt;li&gt;Studio: Improved performance by using binary cloning instead of YAML.&lt;/li&gt;
&lt;li&gt;Studio: Many visual improvement of the Studio user interface&lt;/li&gt;
&lt;li&gt;Graphics: Add GraphicsDevice.PushState/PopState to save/restore Blend, Rasterizer, Depth states and RenderTargets&lt;/li&gt;
&lt;li&gt;Graphics: Add Rasterizer wireframes states&lt;/li&gt;
&lt;li&gt;Graphics: Add support for using new UserDefinedAnnotation for Direct3D11 API profiling&lt;/li&gt;
&lt;li&gt;Graphics: Add support to generate additional texcoords from an existing vertex buffer in VertexHelper&lt;/li&gt;
&lt;li&gt;Graphics: Add possibility to add a back face to the plane geometric primitive&lt;/li&gt;
&lt;li&gt;Graphics: Add the possibility to bind TextureCube and Texture3D to the &lt;code&gt;SpriteBatch&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Effects: Infrastructure for recording shader compilations in a Yaml asset and regenerate shaders on different platforms (no UI yet)&lt;/li&gt;
&lt;li&gt;Engine: The local transformation of entity linked with a &lt;code&gt;ModelNodeLinkComponent&lt;/code&gt; is now taken in account in final world matrix calculation&lt;/li&gt;
&lt;li&gt;Engine: Added &lt;code&gt;ScriptComponent&lt;/code&gt; to easily add behavior and data to entities directly inside Xenko Studio&lt;/li&gt;
&lt;li&gt;Engine: Materials are defined on Model, but can be overridden in &lt;code&gt;ModelComponent&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Engine: Add access to the &lt;code&gt;SpriteAnimationSystem&lt;/code&gt; from the script context.&lt;/li&gt;
&lt;li&gt;Mathematics: Add &lt;code&gt;MathUtil.NextPowerOfTwo&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Mathematics: Add &lt;code&gt;Vector3&lt;/code&gt; operators with floats&lt;/li&gt;
&lt;li&gt;Mathematics: Add &lt;code&gt;BoundingSphere.FromPoints&lt;/code&gt; from an native buffer with custom vertex stride&lt;/li&gt;
&lt;li&gt;Mathematics: Add &lt;code&gt;BoundingBoxExt&lt;/code&gt; for intersection between frustum and bounding box&lt;/li&gt;
&lt;li&gt;Mathematics: Move all &lt;code&gt;GuillotinePacker&lt;/code&gt; implementation copies to a single implem in Mathematics&lt;/li&gt;
&lt;li&gt;Mathematics: Fix &lt;code&gt;Color3&lt;/code&gt; to &lt;code&gt;Color4&lt;/code&gt; implicit operator&lt;/li&gt;
&lt;li&gt;Mathematics: Add &lt;code&gt;Color3.ToLinear&lt;/code&gt;, &lt;code&gt;Color3.ToSRgb&lt;/code&gt;, &lt;code&gt;Color4.ToLinear&lt;/code&gt;, &lt;code&gt;Color4.ToSRgb&lt;/code&gt; methods&lt;/li&gt;
&lt;li&gt;Mathematics: Add swizzle extension methods for vector classes&lt;/li&gt;
&lt;li&gt;Mathematics: Add explicit conversion method from &lt;code&gt;Int3&lt;/code&gt; to &lt;code&gt;Vector3&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Mathematics: Add &lt;code&gt;MathUtil.Log2&lt;/code&gt; method&lt;/li&gt;
&lt;li&gt;Mathematics: Add extension method &lt;code&gt;WithAlpha&lt;/code&gt; to &lt;code&gt;Color&lt;/code&gt; class. It creates a transparent color from an opaque one&lt;/li&gt;
&lt;li&gt;Physics: Added scaling parameter for Convex Hull Shape asset.&lt;/li&gt;
&lt;li&gt;Physics: Added LocalRotation in collider shape asset description.&lt;/li&gt;
&lt;li&gt;Physics: Removed Sprite workaround, added better default values to shapes.&lt;/li&gt;
&lt;li&gt;VisualStudio: Improve highligting and navigation for &lt;code&gt;pdxsl&lt;/code&gt; files&lt;/li&gt;
&lt;li&gt;VisualStudio: Improve error messages when &lt;code&gt;.cs&lt;/code&gt; file generation fails&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;issues-fixed&quot; tabindex=&quot;-1&quot;&gt;Issues fixed &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/#issues-fixed&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Assets: On OpenGL ES 3.0+ targets, HDR textures were converted to LDR during asset compilation.&lt;/li&gt;
&lt;li&gt;Assets/FBX: Animation containing data for only some of the component the Translation/Rotation/Scale are now correctly imported&lt;/li&gt;
&lt;li&gt;Engine: Correctly initialize transformation component rotation to the identity quaternion&lt;/li&gt;
&lt;li&gt;Engine: &lt;code&gt;EntityManager.Remove&lt;/code&gt; was destroying the hierarchy of the entity&lt;/li&gt;
&lt;li&gt;Input: Fix the key down status when the game lose and gain focus under Windows&lt;/li&gt;
&lt;li&gt;Input: Correctly translate control/shift/alt keys&lt;/li&gt;
&lt;li&gt;Graphics: Implemented &lt;code&gt;BlendStateDescription.Equals()&lt;/code&gt; and make a readonly copy of &lt;code&gt;BlendState.Description.RenderTargets&lt;/code&gt; (so that user can&#39;t modify it). Fixes #139&lt;/li&gt;
&lt;li&gt;Graphics: Various improvements and bugfixes to OpenGL renderer&lt;/li&gt;
&lt;li&gt;Graphics: Add safeguard to avoid engine crashing when generating extremely big font characters&lt;/li&gt;
&lt;li&gt;Graphics: Fix discontinuity problems in geometric primitive UV coordinates&lt;/li&gt;
&lt;li&gt;Graphics: Fix crash when creating an unordered  texture array of size greater than one&lt;/li&gt;
&lt;li&gt;Graphics: Fix the calculation of &lt;code&gt;Buffer&lt;/code&gt;’s element count on DirectX&lt;/li&gt;
&lt;li&gt;Mathematics: Matrix.Decompose output now a correct rotation matrix free of reflection&lt;/li&gt;
&lt;li&gt;Mathematics: Fix bug in Matrix.Invert when determinant was too small&lt;/li&gt;
&lt;li&gt;Mathematics: Fix in &lt;code&gt;Color3.ToRgb&lt;/code&gt; method&lt;/li&gt;
&lt;li&gt;Mathematics: Fix bug in Gradian property of Angle class&lt;/li&gt;
&lt;li&gt;Physics: Fixed PhysicsDebugEffect shader, debug shapes should now render again.&lt;/li&gt;
&lt;li&gt;Physics: Fixed issues related to creating collider shape assets in the Game Studio.&lt;/li&gt;
&lt;li&gt;Shaders: Add missing &lt;code&gt;GroupMemoryBarrierWithGroupSync&lt;/code&gt; keyword to shading language&lt;/li&gt;
&lt;li&gt;Shaders: Fix order declaration of the constants and  structures in generated shader&lt;/li&gt;
&lt;li&gt;Shaders: Remove generation of key for shader parameters with the &lt;code&gt;groupshared&lt;/code&gt; keyword&lt;/li&gt;
&lt;li&gt;Studio: Many fixes on the undo/redo stack&lt;/li&gt;
&lt;li&gt;Studio: The build log panel gets the focus only once per build&lt;/li&gt;
&lt;li&gt;Studio: Fix a crash when undocking the Asset log&lt;/li&gt;
&lt;li&gt;Studio: The Studio now have a minimum size at startup&lt;/li&gt;
&lt;li&gt;Studio: Some entries in the settings menu were not working&lt;/li&gt;
&lt;li&gt;Studio: Fix the sound preview when the source file of the asset has been changed&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;breaking-changes&quot; tabindex=&quot;-1&quot;&gt;Breaking changes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/#breaking-changes&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Android: Android projects should be compiled against Android API v5.0 (only a compile-time requirement, runtime requirement is still Android 2.3+)&lt;/li&gt;
&lt;li&gt;Assets: The entity asset has been removed, entities should be created inside a scene.&lt;/li&gt;
&lt;li&gt;General: Previous Xenko 1.0.x projects cannot be loaded in this new version&lt;/li&gt;
&lt;li&gt;Engine: Deferred lighting was removed. We will later add support for Forward+ and Deferred GBuffer shading&lt;/li&gt;
&lt;li&gt;Engine: &lt;code&gt;ScriptSystem.Add&lt;/code&gt; has been renamed &lt;code&gt;ScriptSystem.AddTask&lt;/code&gt;. &lt;code&gt;Add&lt;/code&gt; is now used only to add scripts&lt;/li&gt;
&lt;li&gt;Engine: Sprites of &lt;code&gt;SpriteComponents&lt;/code&gt; are now rendered in 3D. Their size is defined by the scale of the entity&lt;/li&gt;
&lt;li&gt;Engine: UI should be configured via entities and &lt;code&gt;UIComponents&lt;/code&gt; and not via the &lt;code&gt;UISystem&lt;/code&gt; anymore&lt;/li&gt;
&lt;li&gt;Engine: &lt;code&gt;VirtualResolution&lt;/code&gt; has been removed from &lt;code&gt;Game&lt;/code&gt; and should now be set directly in the &lt;code&gt;UIComponent&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Engine: Direction of Oz axis have been inversed in the UI to have an RH space&lt;/li&gt;
&lt;li&gt;Graphics: ParameterCollection are now grouped together in a ParameterCollectionGroup at creation time. This object can then be used in Effect.Apply().&lt;/li&gt;
&lt;li&gt;Physics: Collider Shape Asset and Physics Component have been simplified, their asset version is now not compatible with the old version.&lt;/li&gt;
&lt;li&gt;Physics: Debug shape rendering has been replaced by editor gizmos.&lt;/li&gt;
&lt;li&gt;Shaders: Previous generated code for &lt;code&gt;pdxfx&lt;/code&gt; is broken and must be regenerated&lt;/li&gt;
&lt;li&gt;Studio: Changed naming conventions of imported assets.&lt;/li&gt;
&lt;li&gt;Studio: The studio and asset compilation process are now running only on 64bits machines&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;known-issues&quot; tabindex=&quot;-1&quot;&gt;Known Issues &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/#known-issues&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Platforms: Shaders can’t compile due to lack of a proper workflow on other platforms than Windows Desktop  (this will be fixed soon)&lt;/li&gt;
&lt;li&gt;Platforms: Android and iOS platforms are currently not properly supported (this will be fixed soon).&lt;/li&gt;
&lt;li&gt;Platforms: iOS x64 is not yet supported (this will be added soon)&lt;/li&gt;
&lt;li&gt;Assets: Reimporting a Model asset (i.e. FBX) might have issues when merging materials&lt;/li&gt;
&lt;li&gt;Assets: ModelAsset scaling and orientation works only for .FBX, not other formats supported by Assimp library&lt;/li&gt;
&lt;li&gt;Studio: Scripts are not automatically reloaded by the editor. Closing and re-opening it is needed in order to see new scripts.&lt;/li&gt;
&lt;li&gt;Studio: Renaming default scene won’t properly update reference. Please set again the reference in project properties.&lt;/li&gt;
&lt;li&gt;Studio: DDS images cannot be viewed in the Sprite editor&lt;/li&gt;
&lt;li&gt;Studio: Collections in assets properties cannot be edited nor displayed in multi-selection&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Tue, 28 Apr 2015 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/new-version-1-1-0-beta-physically-based-rendering-and-scene-editor/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-1.1/robot_editor_thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Scene Editor and Advanced Rendering presented at GDC</title>
      <description>&lt;p&gt;We have been quiet for the past two months working hard on many new features in Xenko that we are presenting this week at GDC 2015.&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;A new scene editor&lt;/li&gt;
	&lt;li&gt;A new layered material system with physically based rendering quality&lt;/li&gt;
	&lt;li&gt;A new live scripting system, with a smart compilation reloading and hot-swapping of running scripts, using the Roslyn compiler&lt;/li&gt;
	&lt;li&gt;A simple and powerful PostEffects API coming along many builtin effects (Depth Of Field, Bloom, Lens Flare, Glare, ToneMapping, Vignetting, Film Grain, Antialiasing...)&lt;/li&gt;
	&lt;li&gt;A scene rendering compositor, a new way to define precisely how to render scenes in your game, apply post effects...etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All these features will be available in a new version in the coming weeks. We will need a bit more work after GDC to polish things, write proper documentation and add new samples so that you will embrace more easily all these new APIs. As this release is bringing some major changes, we had no choice than breaking some of the existing API, mostly related to the Entities and components, but you will see that It is coming with much greater benefits!&lt;/p&gt;
&lt;p&gt;In the meantime, we are presenting some sessions here at GDC, but you can also grab our presentations here:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;An overview of Xenko: A brief introduction of what is Xenko, new features and what is coming next (Download link &lt;a href=&quot;http://stride3d.net/images/blog/XenkoSession1-Overview.pptx&quot;&gt;here&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;Advanced Rendering: Some details about the new Material System, the Post Effects API and the Scene Rendering Compositor (Download link &lt;a href=&quot;http://stride3d.net/images/blog/XenkoSession2-AdvancedRendering.pptx&quot;&gt;here&lt;/a&gt;)&lt;/li&gt;
	&lt;li&gt;Beyong Uber Shaders: A sneak peek about the Xenko Shading Language (Download link &lt;a href=&quot;http://stride3d.net/images/blog/XenkoSession3-BeyonUberShaders.pptx&quot;&gt;here&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We will also release shortly a video showing the rendering of a Robot with the new PBR material system and post effects that we presented here at GDC.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://www.stride3d.net/images/blog/GDC2015/pbr_robot.webp&quot; title=&quot;Materials Physically Based Rendering&quot; class=&quot;mb-3&quot;&gt;&lt;img alt=&quot;Materials Physically Based Rendering&quot; src=&quot;https://www.stride3d.net/images/blog/GDC2015/pbr_robot_thumb.jpg&quot; class=&quot;img-fluid&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/GDC2015/pbr_robot_thumb.jpg&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
</description>
      <pubDate>Thu, 05 Mar 2015 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/gdc-2015-scene-editor-new-rendering/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/gdc-2015-scene-editor-new-rendering/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/GDC2015/xenko_gdc_thumb.png" type="image/png" length="0" /></item>
    <item>
      <title>Forums Opened, New Release With Image-Based Lighting</title>
      <description>&lt;p&gt;Discover the latest Stride release featuring Cubemap Image-Based Lighting and join our newly opened forums for discussions, support, and collaboration.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#forums&quot;&gt;Forums&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#cubemap-image-based-lighting&quot;&gt;Cubemap Image-Based Lighting&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#spotlight-shadowmaps&quot;&gt;Spotlight Shadowmaps&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#improvements&quot;&gt;Improvements&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#version-1.0.0-beta03&quot;&gt;Version 1.0.0-beta03&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#new-features&quot;&gt;New Features&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#enhancements&quot;&gt;Enhancements&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#issues-fixed&quot;&gt;Issues fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#breaking-changes&quot;&gt;Breaking changes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#known-issues&quot;&gt;Known Issues&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;forums&quot; tabindex=&quot;-1&quot;&gt;Forums &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#forums&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Due to popular demand, we have just opened a shiny new &lt;a href=&quot;http://forums.stride3d.net/&quot;&gt;Xenko discussion forums&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;We hope this place will become an important place for our community to discuss, help each other, collaborate, improve Xenko and show us some of their work.&lt;/p&gt;
&lt;p&gt;Even though Xenko Team will follow discussions and might answer, we currently won&#39;t provide any official support here and might not answer your bug/feature requests (a forum is not well suited for that).&lt;/p&gt;
&lt;p&gt;Please use &lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues&quot;&gt;Xenko GitHub&lt;/a&gt; for bug/enhancement requests, and our &lt;a href=&quot;http://answers.stride3d.net/&quot;&gt;AnswersHub website&lt;/a&gt; for Q&amp;A.&lt;/p&gt;
&lt;h2 id=&quot;cubemap-image-based-lighting&quot; tabindex=&quot;-1&quot;&gt;Cubemap Image-Based Lighting &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#cubemap-image-based-lighting&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;img alt=&quot;Cubemap IBL Sample&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.0-beta3/CubemapIBLSample.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.0-beta3/CubemapIBLSample.jpg&quot; /&gt;
&lt;p&gt;Over the next few months, on top of working on a level editor, we also want to improve the rendering quality. We know Xenko can scale well from mobile to high-end and we want to prove it!&lt;/p&gt;
&lt;p&gt;As part of this effort, this release includes image-based reflection lighting, with parallax correction.&lt;/p&gt;
&lt;p&gt;It supports multiple cubemaps: they will be accumulated during a specific deferred rendering step, similar to prelight rendering.&lt;/p&gt;
&lt;p&gt;Feel free to try it easily with a new dedicated sample, that you can create with only a few clicks inside Xenko Studio.&lt;/p&gt;
&lt;h2 id=&quot;spotlight-shadowmaps&quot; tabindex=&quot;-1&quot;&gt;Spotlight Shadowmaps &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#spotlight-shadowmaps&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;On top of our already existing cascade directional shadowmaps, this release adds support for spotlight shadowmaps.&lt;/p&gt;
&lt;h2 id=&quot;improvements&quot; tabindex=&quot;-1&quot;&gt;Improvements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#improvements&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We have done numerous bugfixes and improvements (see full details in changelog).&lt;/p&gt;
&lt;p&gt;Amongst them are a new UI slider component, physics has been modularized, Windows Phone/Store support has been improved (PCL support, properly build packages), GameStudio property grid should behave much better, etc...&lt;/p&gt;
&lt;h2 id=&quot;version-1.0.0-beta03&quot; tabindex=&quot;-1&quot;&gt;Version 1.0.0-beta03 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#version-1.0.0-beta03&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Release date: 2014/11/11&lt;/p&gt;
&lt;h3 id=&quot;new-features&quot; tabindex=&quot;-1&quot;&gt;New Features &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#new-features&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Engine: Add cubemap components to place cubemaps in the scene or render them at runtime.&lt;/li&gt;
    &lt;li&gt;Graphics: Add skybox renderer from a TextureCube (similar to background renderer).&lt;/li&gt;
    &lt;li&gt;Graphics: Add cubemap reflections for deferred rendering.&lt;/li&gt;
    &lt;li&gt;Graphics: Support of shadow mapping in forward rendering for spot lights. Only 1 cascade is supported at the moment.&lt;/li&gt;
    &lt;li&gt;Samples: Add CubemapReflection sample.&lt;/li&gt;
    &lt;li&gt;Samples: Add spot light shadow in ForwardRendering sample.&lt;/li&gt;
    &lt;li&gt;Shaders: Add several cubemap shaders for sampling, reflection, parallax correction etc.&lt;/li&gt;
    &lt;li&gt;UI: Add new UI element: Slider&lt;/li&gt;
    &lt;li&gt;Website: &lt;a href=&quot;http://forums.stride3d.net/&quot;&gt;Xenko Forums&lt;/a&gt; has just been opened. Feel free to use it to discuss about Xenko, help each other, collaborate and show off what you did with Xenko!&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;enhancements&quot; tabindex=&quot;-1&quot;&gt;Enhancements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#enhancements&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Studio: Property grids have been reworked to be more efficient and easily extendable.&lt;/li&gt;
    &lt;li&gt;Studio: Numeric input controls have been improved.&lt;/li&gt;
    &lt;li&gt;Physics: Physics assembly now depends on Engine (instead of the opposite). Soon Physics (and some other modules) will become optional.&lt;/li&gt;
    &lt;li&gt;Input: Allow emulation of several touch pointers at a same time with mouse different buttons.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;issues-fixed&quot; tabindex=&quot;-1&quot;&gt;Issues fixed &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#issues-fixed&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Assets: Fix shininess import from FBX files.&lt;/li&gt;
    &lt;li&gt;Core: EnumerableExtensions.LastIndexOf() wasn&#39;t working properly (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/62&quot;&gt;#62&lt;/a&gt;).&lt;/li&gt;
    &lt;li&gt;Game: Properly support windows with height 0 when AllowUserResizing is true (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/65&quot;&gt;#65&lt;/a&gt;).&lt;/li&gt;
    &lt;li&gt;Game: GameForm is created with a black background, to avoid initial flickering while Windows is being initialized (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/54&quot;&gt;#54&lt;/a&gt;).&lt;/li&gt;
    &lt;li&gt;Input: Alt+F4 is now properly working on Windows Store/Phone platforms (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/74&quot;&gt;#74&lt;/a&gt;).&lt;/li&gt;
    &lt;li&gt;Input: Properly maps all extended keyboard keys on Windows Store/Phone platforms (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/84&quot;&gt;#84&lt;/a&gt;).&lt;/li&gt;
    &lt;li&gt;Input: Fix several crashes and bugs in GestureRecognizers and mouse button states.&lt;/li&gt;
    &lt;li&gt;Misc: PCL can now be used in Windows Store/Phone platforms (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/72&quot;&gt;#72&lt;/a&gt;).&lt;/li&gt;
    &lt;li&gt;Samples: SimpleDynamicTexture was using expected screen size instead of actual screen size, resulting in incorrect picking in fullscreen mode (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/75&quot;&gt;#75&lt;/a&gt;).&lt;/li&gt;
    &lt;li&gt;Shaders: Geometry shaders are forced to transmit SV_Position stream to pixel shaders.&lt;/li&gt;
    &lt;li&gt;Shaders: Compositions (especially arrays) couldn&#39;t be used in child classes of the one containing their declaration. Function and member calls weren&#39;t correctly resolved.&lt;/li&gt;
    &lt;li&gt;Studio: Fix preview and thumbnail of materials with normal map.&lt;/li&gt;
    &lt;li&gt;Studio: Fix binding errors in the property grid (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/29&quot;&gt;#29&lt;/a&gt;).&lt;/li&gt;
    &lt;li&gt;Studio: Fix undesired hue changes and loss of precision in extremal values in the color picker.&lt;/li&gt;
    &lt;li&gt;Studio: Fix &quot;Show in explorer&quot; on assets.&lt;/li&gt;
    &lt;li&gt;UI: UIImage borders were not properly rendered when image had Orientation.Rotated90.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;breaking-changes&quot; tabindex=&quot;-1&quot;&gt;Breaking changes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#breaking-changes&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Graphics: Remove Rotated180 and Rotated90C from ImageOrientation enumeration for code simplicity and efficiency purpose.&lt;/li&gt;
    &lt;li&gt;Graphics: Change ImageFragment.Region type from Rectangle to RectangleF and corresponding batch draw function API (SpriteBatch/UIBatch).&lt;/li&gt;
    &lt;li&gt;Graphics: CopyRegion now contains additional parameters for subresource indices and destination offset.&lt;/li&gt;
    &lt;li&gt;Graphics: RasterizerState and DepthStencilState constructors are now private to match other Graphics classes. static New() should be used instead (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/83&quot;&gt;#83&lt;/a&gt;).&lt;/li&gt;
    &lt;li&gt;Physics: Physics engine initialization has changed since now Physics is a optional module. (please check updated samples)&lt;/li&gt;
    &lt;li&gt;Physics: Added Convex Hull simple wrap shape and complex decomposition as well.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;known-issues&quot; tabindex=&quot;-1&quot;&gt;Known Issues &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/#known-issues&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
    &lt;li&gt;Physics: Complex convex hull decomposition can be a very long process and there is visual feedback for it.&lt;/li&gt;
    &lt;li&gt;Physics: Convex hull shape debug shapes in game studio are not rendering very well, although the asset will be OK.&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Tue, 11 Nov 2014 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/forums-opened-new-release-with-cubemap-image-based-lighting/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-1.0-beta3/CubemapIBLSample_thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Xenko is Going Open Source</title>
      <description>&lt;p&gt;We are thrilled to announce that Xenko is going &lt;a href=&quot;https://github.com/SiliconStudio/paradox&quot;&gt;open source on GitHub&lt;/a&gt;. This is an important step toward the &lt;strong&gt;empowerment of game developers&lt;/strong&gt;. We hope that this will make you more confident in using Xenko. You will have also an unique opportunity to contribute to the project and see by yourself how Xenko engine is working.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#license&quot;&gt;License&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#binary-release-version&quot;&gt;Binary Release version&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#source-version&quot;&gt;Source version&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#contributions&quot;&gt;Contributions&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#new-platforms&quot;&gt;New Platforms&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#new-samples&quot;&gt;New Samples&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#roadmap&quot;&gt;Roadmap&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#release-notes-1.0.0-beta01&quot;&gt;Release notes 1.0.0-beta01&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#new-features&quot;&gt;New Features&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#enhancements&quot;&gt;Enhancements&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#issues-fixed&quot;&gt;Issues fixed&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#breaking-changes&quot;&gt;Breaking changes&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#known-issues&quot;&gt;Known Issues&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;h2 id=&quot;license&quot; tabindex=&quot;-1&quot;&gt;License &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#license&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Xenko is now delivered with two licences types:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Binary Release version&lt;/li&gt;
	&lt;li&gt;Source version&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;binary-release-version&quot; tabindex=&quot;-1&quot;&gt;Binary Release version &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#binary-release-version&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Xenko binary release (as distributed on &lt;a href=&quot;https://www.stride3d.net/download&quot;&gt;our website&lt;/a&gt;, with unmodified signed assemblies) is under the &lt;a href=&quot;http://stride3d.net/features/licensing&quot;&gt;&amp;quot;Xenko 1.x version&amp;quot; License Agreement&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;It allows you to create games and distribute them freely and royalty-free, as long as you use the signed binary runtime.&lt;/p&gt;
&lt;h3 id=&quot;source-version&quot; tabindex=&quot;-1&quot;&gt;Source version &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#source-version&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Most of Xenko source code is released under the &lt;a href=&quot;https://github.com/SiliconStudio/paradox/blob/master/LICENSE.GPL3.md&quot;&gt;GPL v3 License&lt;/a&gt; (unless otherwise stated).&lt;/li&gt;
	&lt;li&gt;
		A few specific parts (stated explicitely in the source header) are released under &lt;a href=&quot;http://opensource.org/licenses/MIT&quot;&gt;MIT&lt;/a&gt;, &lt;a href=&quot;http://opensource.org/licenses/CPL&quot;&gt;CPL&lt;/a&gt;
		or &lt;a href=&quot;http://opensource.org/licenses/Apache-2.0&quot;&gt;Apache 2.0&lt;/a&gt; (usually matching license of original contribution).
	&lt;/li&gt;
	&lt;li&gt;Some libraries (i.e. SiliconStudio.Core) will probably be converted to MIT later.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
	It means that if you use Xenko built from sources (either unmodified or modified), you must publish source of your game,
	as well as any changes to Xenko that you might have done (as per GPLv3 license).
&lt;/p&gt;
&lt;p&gt;Even for Binary Release version users, it allows to easily browse the sources and understand what&#39;s happening inside Xenko.&lt;/p&gt;
&lt;p&gt;
	If you want specific license terms (i.e. use a modified and/or self-compiled version of Xenko for your project),
	feel free to contact us at contact@stride3d.net
&lt;/p&gt;
&lt;h2 id=&quot;contributions&quot; tabindex=&quot;-1&quot;&gt;Contributions &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#contributions&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;We gladly accept external contributions. Feel free to submit us pull requests and we will consider them for inclusion.&lt;/p&gt;
&lt;p&gt;
	Contributors will need to sign electronically a Contributor License Agreement, &lt;a href=&quot;https://github.com/SiliconStudio/paradox/blob/master/doc/ContributorLicenseAgreement.md&quot;&gt;available here&lt;/a&gt; (based on Harmony).
	It allows us to use your changes in the commercial version, and relicense code easily (in case we decide to go MIT at some point for example).
&lt;/p&gt;
&lt;p&gt;Otherwise you are free to fork, as long as you maintain GPL v3 License.&lt;/p&gt;
&lt;h2 id=&quot;new-platforms&quot; tabindex=&quot;-1&quot;&gt;New Platforms &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#new-platforms&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;img alt=&quot;Update Platforms&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.0-beta1/UpdatePlatforms.png&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.0-beta1/UpdatePlatforms.png&quot; /&gt;
&lt;p&gt;We are also pushing a new release &lt;code&gt;1.0.0-beta01&lt;/code&gt;. This release is most notably adding support for two new platforms:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Windows RT/Store&lt;/li&gt;
	&lt;li&gt;Windows Phone&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It means that you can now target easily several &lt;strong&gt;major platforms&lt;/strong&gt;: &lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;Windows&lt;/li&gt;
	&lt;li&gt;Windows Phone&lt;/li&gt;
	&lt;li&gt;Windows Store&lt;/li&gt;
	&lt;li&gt;iPhone&lt;/li&gt;
	&lt;li&gt;iPad&lt;/li&gt;
	&lt;li&gt;Android Phone&lt;/li&gt;
	&lt;li&gt;Android Tablet &lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;You will be able to upgrade the platforms on your existing project by simply using the contextual menu &lt;code&gt;Update Package&#92;Update Platforms&lt;/code&gt; on a package in Xenko Studio.&lt;/p&gt;
&lt;h2 id=&quot;new-samples&quot; tabindex=&quot;-1&quot;&gt;New Samples &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#new-samples&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;img alt=&quot;Update Platforms&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.0-beta1/SimpleTerrain.webp&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.0-beta1/SimpleTerrain.webp&quot; /&gt;
&lt;p&gt;We are also delivering 3 new samples:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;strong&gt;SimpleTerrain&lt;/strong&gt; that demonstrates how to generate an entity model/mesh at runtime by displaying a heightmap terrain&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;SimpleDynamicTexture&lt;/strong&gt; that demonstrates how to dynamically upload CPU textures to the GPU&lt;/li&gt;
	&lt;li&gt;&lt;strong&gt;RenderSceneToTexture&lt;/strong&gt; that shows how to render your models in a render target from another camera point of view and display in a texture&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;roadmap&quot; tabindex=&quot;-1&quot;&gt;Roadmap &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#roadmap&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Towards the coming months, we are expecting to deliver lots of new features!&lt;/p&gt;
&lt;p&gt;This is a short list of the things we have in the pipe:&lt;/p&gt;
&lt;ul&gt;
	&lt;li&gt;A full scene editor&lt;/li&gt;
	&lt;li&gt;An improved animation system&lt;/li&gt;
	&lt;li&gt;Real-time dynamic scripting from Xenko Studio and Visual Studio while the game is running (on Windows, at development time)&lt;/li&gt;
	&lt;li&gt;Several advanced new rendering techniques and post effects.&lt;/li&gt;
	&lt;li&gt;Support for more platforms (OSX, Linux...)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;As we have done so far, we will try to provide a sustained delivery of new versions, with lots of small fixes and enhancements along the bigger features, as soon as they are ready (even in an alpha stage).&lt;/p&gt;
&lt;p&gt;At some point, we will open a user voice to collect your votes. Don&#39;t hesitate to post your thoughts on our answers hub!&lt;/p&gt;
&lt;h2 id=&quot;release-notes-1.0.0-beta01&quot; tabindex=&quot;-1&quot;&gt;Release notes 1.0.0-beta01 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#release-notes-1.0.0-beta01&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Release date: 2014/10/17&lt;/p&gt;
&lt;h3 id=&quot;new-features&quot; tabindex=&quot;-1&quot;&gt;New Features &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#new-features&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Assets: Materials can be compiled into a shader without being attached to a mesh. Use the key MaterialAsset.GenerateShader in your pdxfxlib file to allow this feature.&lt;/li&gt;
	&lt;li&gt;Engine: Add support for Windows Store and Windows Phone projects.&lt;/li&gt;
	&lt;li&gt;Misc: Assemblies are now all signed.&lt;/li&gt;
	&lt;li&gt;Studio: Create Windows Store and Phone Projects.&lt;/li&gt;
	&lt;li&gt;Studio: Deploy Windows Phone project directly from Game Studio.&lt;/li&gt;
	&lt;li&gt;Studio: Add and remove platforms of existing game. Force to regenerate platform specific projects.&lt;/li&gt;
	&lt;li&gt;Studio: Choose what platforms to create when starting from a sample.&lt;/li&gt;
	&lt;li&gt;UI: Add support for MouseOver on Windows (mainly MouseOverState property/event in UIElement)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;enhancements&quot; tabindex=&quot;-1&quot;&gt;Enhancements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#enhancements&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Samples: Load material and lighting configuration for the stand in ForwardLighting and DeferredLighting.&lt;/li&gt;
	&lt;li&gt;Shaders: Incorrect shaders are no longer cached preventing NullReferenceException errors at compilation time.&lt;/li&gt;
	&lt;li&gt;Studio: Generated solutions are created with VS2013 as default.&lt;/li&gt;
	&lt;li&gt;Studio: The &#39;sprite&#39; editor can now be used on UIImages too.&lt;/li&gt;
	&lt;li&gt;UI: Improve default design of Button and EditText.&lt;/li&gt;
	&lt;li&gt;UI: Make the EditText&#39;s caret blink and dissociate caret/selection colors.&lt;/li&gt;
	&lt;li&gt;UI: Add support for mouse selection in EditText on Windows.&lt;/li&gt;
	&lt;li&gt;UI: Create default design for ImageToggle.&lt;/li&gt;
	&lt;li&gt;UI: UIImages are now regrouped into UIImageGroup the same way as SpriteGroup. The runtime-time and assets classes share the same hierarchy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;issues-fixed&quot; tabindex=&quot;-1&quot;&gt;Issues fixed &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#issues-fixed&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Assets: Orientation of meshes from the assimp importer is now correct (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/22&quot;&gt;#22&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Assets: Mesh and materials are correctly associated during assimp import.&lt;/li&gt;
	&lt;li&gt;Materials: Material always contains a diffuse part even if their color is black.&lt;/li&gt;
	&lt;li&gt;Samples: Exhaustive shaders permutations for DeferredLighting.&lt;/li&gt;
	&lt;li&gt;Shaders: The default shader is correct even when there is no parameter to generate it (no diffuse, no specular...).&lt;/li&gt;
	&lt;li&gt;Shaders: Fix specular in deferred shading.&lt;/li&gt;
	&lt;li&gt;Shaders: Correctly rename class in AmbientMapShading.pdxsl.&lt;/li&gt;
	&lt;li&gt;Shaders: Fix issues related to geometry shader creation.&lt;/li&gt;
	&lt;li&gt;Studio: New LightingAsset asset can be created in GameStudio.&lt;/li&gt;
	&lt;li&gt;Studio: Unsupported assets are ignored when trying to be imported (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/42&quot;&gt;#42&lt;/a&gt;).&lt;/li&gt;
	&lt;li&gt;Studio: Fix issue with asset thumbnails sometimes not being updated.&lt;/li&gt;
	&lt;li&gt;Studio: Some properties of the Material assets displayed with wrong/missing controls.&lt;/li&gt;
	&lt;li&gt;UI: Fix problem in Canvas MeasureOverride method when measured with infinite values.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;breaking-changes&quot; tabindex=&quot;-1&quot;&gt;Breaking changes &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#breaking-changes&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;Assets: SpriteGroup asset field &#39;Sprites&#39; has been renamed &#39;Images&#39; (.pdxsprite files can recovered by renaming the field inside the file).&lt;/li&gt;
	&lt;li&gt;Assets: UIImage assets does not exist any more and have been replaced UIImageGroup assets. The old .pdxuiimg files cannot be easily recovered. The new .pdximage files can be easily created using the GameStudio &#39;sprite&#39; editor.&lt;/li&gt;
	&lt;li&gt;UI: EditText&#39;s EditInactiveImage and EditActiveImage properties have been renamed InactiveImage and ActiveImage.&lt;/li&gt;
	&lt;li&gt;UI: Simplify ToggleButton. It now behaves like a Button with persistent states.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;known-issues&quot; tabindex=&quot;-1&quot;&gt;Known Issues &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-open-sourcing/#known-issues&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
	&lt;li&gt;iOS: On slow phones, app might be too slow to start with Visual Studio attached (it gets killed by iOS). We will rearrange our initialization sequence.&lt;/li&gt;
	&lt;li&gt;iOS: Rebuild might sometime not use latest version.&lt;/li&gt;
	&lt;li&gt;Samples: Due to the way we now create platform-specific projects, samples specific icons on non-Windows platforms are currently gone. Later, a project setting page in Game Studio should make this setting available again.&lt;/li&gt;
	&lt;li&gt;Samples: Since there is no accelerometer Input API yet, Accelerometer sample is currently removed.&lt;/li&gt;
	&lt;li&gt;Windows Store/Phone: UI EditText and Game Resume/Destroy cycles are not implemented.&lt;/li&gt;
	&lt;li&gt;Windows Store/Phone: SharpFont.dll is still compiled against .NET 4.5 (might not pass certifications).&lt;/li&gt;
&lt;/ul&gt;
</description>
      <pubDate>Fri, 17 Oct 2014 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/new-version-open-sourcing/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/new-version-open-sourcing/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/github/Octocat.png" type="image/png" length="0" /></item>
    <item>
      <title>Xenko 1.0 Alpha Released</title>
      <description>&lt;p&gt;A new version is available for download. Run the Xenko Studio to download and install the latest version.&lt;/p&gt;
&lt;div class=&quot;table-of-contents&quot;&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#in-progress&quot;&gt;In Progress&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#version-1.0.0-alpha07&quot;&gt;Version 1.0.0-alpha07&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#issues-fixed&quot;&gt;Issues fixed&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#version-1.0.0-alpha06&quot;&gt;Version 1.0.0-alpha06&lt;/a&gt;&lt;ul&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#new-features&quot;&gt;New Features&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#enhancements&quot;&gt;Enhancements&lt;/a&gt;&lt;/li&gt;&lt;li&gt;&lt;a href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#issues-fixed-1&quot;&gt;Issues fixed&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;
&lt;img alt=&quot;Dragon Banner&quot; src=&quot;https://www.stride3d.net/images/blog/release-1.0-alpha/dragon_banner.jpg&quot; class=&quot;img-fluid mb-3&quot; loading=&quot;lazy&quot; data-src=&quot;/images/blog/release-1.0-alpha/dragon_banner.jpg&quot; /&gt;
&lt;h2 id=&quot;in-progress&quot; tabindex=&quot;-1&quot;&gt;In Progress &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#in-progress&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;General: Integration of &lt;a href=&quot;http://esotericsoftware.com/&quot;&gt;Spine&lt;/a&gt; &lt;/li&gt;
&lt;li&gt;General: Preparations for open-source release&lt;/li&gt;
&lt;li&gt;Issue: Installed in c:&#92;ProgramData (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/2&quot;&gt;#2&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Issue: InvalidOperationException: No screen modes found (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/7&quot;&gt;#7&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;UI: Improve layout of GameMenu sample.&lt;/li&gt;
&lt;li&gt;UI: Improve grid children measure process (fix some layout bugs).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;version-1.0.0-alpha07&quot; tabindex=&quot;-1&quot;&gt;Version 1.0.0-alpha07 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#version-1.0.0-alpha07&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Release date: 2014/09/04&lt;/p&gt;
&lt;h3 id=&quot;issues-fixed&quot; tabindex=&quot;-1&quot;&gt;Issues fixed &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#issues-fixed&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Studio: Exiting the Xenko Studio was generating errors.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;version-1.0.0-alpha06&quot; tabindex=&quot;-1&quot;&gt;Version 1.0.0-alpha06 &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#version-1.0.0-alpha06&quot;&gt;🔗&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Release date: 2014/09/04&lt;/p&gt;
&lt;h3 id=&quot;new-features&quot; tabindex=&quot;-1&quot;&gt;New Features &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#new-features&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Integrated release notes in the welcome menu&lt;/li&gt;
&lt;li&gt;Welcome to the new workspace!&lt;/li&gt;
&lt;li&gt;Integrate release notes in the new workspace&lt;/li&gt;
&lt;li&gt;Engine: Reload automatically shaders at runtime when they are modified on the disk (Windows only)&lt;/li&gt;
&lt;li&gt;Shaders: New DiscardTransparentThreshold shader. Set the threshold below the one a pixel will be discarded.&lt;/li&gt;
&lt;li&gt;Shaders: New shaders dealing with normal and tangent skinning.&lt;/li&gt;
&lt;li&gt;Materials: Add UseTransparentMask parameter key in material to disable alpha blending and use the alpha channel as a mask of the texture. Use AlphaDiscardThreshold parameter key to set the desired threshold below the one a pixel will be discarded.&lt;/li&gt;
&lt;li&gt;Assets: Support for &lt;code&gt;TGA&lt;/code&gt; and &lt;code&gt;PSD&lt;/code&gt; files for textures.&lt;/li&gt;
&lt;li&gt;UI: Add horizontally align text in EditText using property TextAlignment.&lt;/li&gt;
&lt;li&gt;UI: Add mouse wheel delta value since last frame using property &lt;code&gt;IInputManager.MouseWheelDelta&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;UI: Add image stretch type &lt;code&gt;StretchType.FillOnStretch&lt;/code&gt; and modify &lt;code&gt;StretchType.Fill&lt;/code&gt; behavior (previous &lt;code&gt;StretchType.Fill&lt;/code&gt; mode is now implemented by &lt;code&gt;StretchType.FillOnStretch&lt;/code&gt;).&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;enhancements&quot; tabindex=&quot;-1&quot;&gt;Enhancements &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#enhancements&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;General: Visual Studio Express 2013 can now open Xenko Projects (with some limitations) (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/4&quot;&gt;#4&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Engine: Change default Windows output type to Windows Application (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/8&quot;&gt;#8&lt;/a&gt;): By default, a console is only opened when there is a message, assemblies are created in debug and the debugger is not attached.&lt;/li&gt;
&lt;li&gt;Engine: Add anisotropic texture filtering on mobile platforms that support it.&lt;/li&gt;
&lt;li&gt;Sample: AnimatedModel. Add lighting to the model. Use default Xenko pre defined shaders.&lt;/li&gt;
&lt;li&gt;Sample: ForwardLighting. Add transparent meshes.&lt;/li&gt;
&lt;li&gt;Sample: Set the same orientation for all samples on Android.&lt;/li&gt;
&lt;li&gt;Studio: Modal windows are not displayed in the taskbar anymore&lt;/li&gt;
&lt;li&gt;Studio: Improvement in the sprite editor: possibility to drop image files in the interface, improved region selection rectangle.&lt;/li&gt;
&lt;li&gt;Studio: Performance improvement in the editor, particularly in the sprite editor&lt;/li&gt;
&lt;li&gt;UI: Allow 0-sized strip definition in Grid.&lt;/li&gt;
&lt;li&gt;UI: Allow mixing of relative/absolute element positioning in Canvas.&lt;/li&gt;
&lt;li&gt;UI: Allow user to modify values of the UIRenderingContext.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;issues-fixed-1&quot; tabindex=&quot;-1&quot;&gt;Issues fixed &lt;a class=&quot;direct-link&quot; href=&quot;https://www.stride3d.net/blog/new-version-1-0-alpha/#issues-fixed-1&quot;&gt;🔗&lt;/a&gt;&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;Build: Android project fails to build (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/3&quot;&gt;#3&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Studio: GameStudio was using 100% of one CPU core (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/1&quot;&gt;#1&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Studio: Splash Screen always on top (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/6&quot;&gt;#6&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Studio: Fix GameStudio crash when importing assets using the add files button (&lt;a href=&quot;https://github.com/SiliconStudio/paradox/issues/9&quot;&gt;#9&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Studio: Build log is now displaying build feedback&lt;/li&gt;
&lt;li&gt;Studio: Fixed the Hue selection in the color picker&lt;/li&gt;
&lt;li&gt;Engine: Reduce effect change detection footprint (for example when changing the lighting configuration of the scene).&lt;/li&gt;
&lt;li&gt;Engine: Reuse rendering states.&lt;/li&gt;
&lt;li&gt;Shaders: Fix incorrect normal and tangent skinning in shaders.&lt;/li&gt;
&lt;li&gt;Shaders: Fix converter Hlsl to Glsl.&lt;/li&gt;
&lt;li&gt;Input: Fixed InputManager crash when window size is reach 0.&lt;/li&gt;
&lt;li&gt;Physics: Character Controller was not working properly on iOS.&lt;/li&gt;
&lt;/ul&gt;</description>
      <pubDate>Sat, 06 Sep 2014 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/new-version-1-0-alpha/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/new-version-1-0-alpha/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/release-1.0-alpha/thumb.jpg" type="image/jpg" length="0" /></item>
    <item>
      <title>Stride Blog is Online</title>
      <description>&lt;p&gt;Welcome to our new blog!&lt;/p&gt;
&lt;p&gt;You will be able to get the latest news from the Stride Team about the development of Stride.&lt;/p&gt;
&lt;p&gt;The Stride Team.&lt;/p&gt;
</description>
      <pubDate>Fri, 05 Sep 2014 00:00:00 +0000</pubDate>
      <link>https://www.stride3d.net/blog/online/</link>
      <guid isPermaLink="true">https://www.stride3d.net/blog/online/</guid>
      <enclosure url="https://www.stride3d.net/images/blog/HelloWorld.png" type="image/png" length="0" /></item>
  </channel>
</rss>