<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Maya</title>
    <description>The latest articles on DEV Community by Maya (@mayakhalil).</description>
    <link>https://dev.to/mayakhalil</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4225748%2F6d9dbb1e-abde-4372-815a-a231bfc29770.png</url>
      <title>DEV Community: Maya</title>
      <link>https://dev.to/mayakhalil</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mayakhalil"/>
    <language>en</language>
    <item>
      <title>I built a shader translator: write a shader once, get native nodes in Blender, Godot, Unreal and Unity</title>
      <dc:creator>Maya</dc:creator>
      <pubDate>Wed, 04 Nov 2026 10:19:30 +0000</pubDate>
      <link>https://dev.to/mayakhalil/i-built-a-shader-translator-write-a-shader-once-get-native-nodes-in-blender-godot-unreal-and-fbk</link>
      <guid>https://dev.to/mayakhalil/i-built-a-shader-translator-write-a-shader-once-get-native-nodes-in-blender-godot-unreal-and-fbk</guid>
      <description>&lt;p&gt;Every time I move a look from one program to another, I rebuild it by hand. A painterly shader made in Blender has to be remade in Godot, then again in Unreal, and by the third copy they no longer match. So I built Inoscula.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Inosculation: when two branches grow into each other and become one.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You write a shader once, as code or as Blender nodes. Inoscula rebuilds it as native, editable material in Blender, Godot, Unreal, Unity and three.js: real nodes, real parameters you can keyframe, and the same look in each program.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F57m2tkgjysvmv8c5q5rz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F57m2tkgjysvmv8c5q5rz.png" alt="four nodes of different dccs" width="798" height="242"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What it does
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;One graph, every program.&lt;/strong&gt; A small open format describes the shader. Each program gets its own version: a script that builds Blender Shader Editor nodes, a Godot VisualShader (.tres) or .gdshader, an Unreal script that builds material expressions, a Unity Shader Graph Custom Function file, and GLSL for three.js.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;The same pattern everywhere.&lt;/strong&gt; Blender's Noise, Voronoi and White Noise are ported from Blender's own code, so a pattern made in Blender lands in Godot in the same place. Unlit looks match Blender's own bake on 99.3 to 100% of pixels.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Round trips.&lt;/strong&gt; Every export carries its graph inside it. Tweak in Blender, read it back, send it on to Godot, pull the Inspector values back out.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;A live link.&lt;/strong&gt; A small bridge passes parameter changes between Blender, Godot, Unreal and anything that speaks OSC, so one slider moves the material everywhere.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Object based, never baked.&lt;/strong&gt; Everything is computed on the object's own surface, so it moves and scales with the object, and painterly looks keep the same stroke size on a pebble and on a building.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Inoscula Studio
&lt;/h2&gt;

&lt;p&gt;The whole tool is one HTML file that works offline. A live preview and the parameters at the top, code and nodes underneath, and a Nodes view that shows the shader the way each program shows it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk0tbn4mm8fgo5bz7n5mo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk0tbn4mm8fgo5bz7n5mo.png" alt="preview of the lightweight web based shader engine" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It comes with a library of looks: thick impasto oil paint, wet strokes with offset outlines, hand painted, comic print, engraving, claymation with real fingerprint ridges, and more. You can mix one look into another, stand other objects around yours with their own looks, and save your edits as your own looks.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg0nrzn8grsbe8g6zvp5p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fg0nrzn8grsbe8g6zvp5p.png" alt="render 1" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkkqk2l8w6b8srg9n5z5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffkkqk2l8w6b8srg9n5z5.png" alt="render 2" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj0nou84yzm14hta3tmji.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj0nou84yzm14hta3tmji.png" alt="render 3" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Some renders..
&lt;/h2&gt;

&lt;p&gt;A check script renders a shader in three.js, in real Blender (Cycles) and in real Godot, in one test scene, and puts the three side by side:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fys3ej5azdnp5qapnq1od.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fys3ej5azdnp5qapnq1od.png" alt="dcc shader accuracy comparison" width="800" height="218"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it is
&lt;/h2&gt;

&lt;p&gt;Measured: Blender, Godot 4.5 and three.js. Unreal and Unity compile but have not been run in the engines yet, so if you use Unreal or Unity, I would love a test report. The repo's docs/TESTING.md walks through it in about ten minutes.&lt;/p&gt;

&lt;p&gt;It is free and open source (Apache 2.0). It works with RICO Engine, my real-time engine for creative tools, but you do not need RICO to use it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Repo:&lt;/strong&gt; &lt;a href="https://github.com/mayakhalil-cmd/inoscula" rel="noopener noreferrer"&gt;https://github.com/mayakhalil-cmd/inoscula&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Stars, issues and test reports all help. Tell me which look or which program you want next.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>blender</category>
      <category>gamedev</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
