Shader Bridge

Skava in Rendering


Shader Bridge — Convert Blender Materials to Unity Shader Graph & Unreal

Real material conversion: procedurals are baked, channel-packed, and emitted as Unity Shader Graph, Unity ShaderLab, or Unreal T3D — no manual rebuilding.


Why Shader Bridge

Manual shader rebuilding burns hours per asset. Existing converters either dump every Blender node verbatim (which the engine can't compile) or summarise the material into a single Principled BSDF and lose all the detail.

Shader Bridge takes a middle path: it converts what the engine has a real equivalent for, bakes what it doesn't, and emits the result in the engine's native format with the right channel packing already applied.


Features

Three Unity targets + Unreal T3D

  • Unity URP — .shadergraph (Universal Lit target)
  • Unity HDRP — .shadergraph (HDRP Lit target)
  • Unity Built-in — .shader (ShaderLab surface shader)
  • Unreal Engine 4 / 5 — .t3d material file

Six supported root shaders (v1.1)

  • Principled BSDF — direct conversion
  • Emission — Color/Strength land on emission_color / emission_strength, base_color = 0
  • Diffuse BSDF — metallic = 0, specular = 0
  • Glossy BSDF — metallic = 1
  • Glass BSDF — transmission = 1, IOR copied
  • Transparent BSDF — alpha = 0, transmission = 1

Smart traversal

  • Mix Shader / Add Shader passthrough — picks the dominant branch by Fac value, the other branch contributes its upstream nodes
  • NodeGroup auto-traversal — enters custom node groups via GROUP_OUTPUT, no need to ungroup first
  • Reroute transparency — hops through reroute nodes cleanly, ignores dangling links

Procedural baker

  • Noise / Voronoi / Wave / Musgrave become real textures
  • Proper context restore — your material's nodes are not left rewired after a failed bake
  • ShaderToRGB-driven graphs detected and routed through the baker

Channel packing per engine

  • Unity URP / Built-in — Metallic (RGB) + Smoothness (A)
  • Unity HDRP — Mask Map: Metallic / AO / Detail / Smoothness
  • Unreal Engine — ORM: AO (R) + Roughness (G) + Metallic (B)

Diagnostic Conversion Report

  • Accurate supported / unsupported counts
  • root_kind field — tells you whether the master ended up as PRINCIPLED / EMISSION / DIFFUSE / GLOSSY / GLASS / TRANSPARENT / ADD_SHADER
  • Plain-English error messages for Use Nodes disabled, missing Material Output, unconnected Surface — no more Supported: 0 / Unsupported: 0 mystery

Real IR-driven emitters

  • Values come from actual node defaults
  • Links from the real graph
  • No placeholder zeros

Viewport approximation

  • One-click EEVEE preview tuned to the engine's look (Unity Filmic, Unreal ACES-style)
  • Auto-detects EEVEE Next on Blender 4.2+

Toon detector

  • Flags ShaderToRGB-driven materials so you can route them through the procedural baker

Compatibility

  • Blender: 4.0 + (4.2 LTS recommended)
  • Unity: 2022.3 LTS + (URP, HDRP, Built-in)
  • Unreal Engine: 4.27 + and 5.x

What you get

  • Shader Bridge add-on (Python only, no DLL)
  • README with full quick-start guide
  • Free updates for v1.x
  • Support through marketplace messaging

Install

Edit → Preferences → Add-ons → Install... → pick the archive from your purchase page → enable. The ShaderBridge sidebar tab appears in the 3D Viewport (press N).

No external Python packages or DLLs required.


License

GPL-3.0. Standard for Blender add-ons. The license applies to the add-on code only — the shaders you generate with it are yours to ship in any commercial project.


What's new in v1.2.3

The shader now arrives usable, not just compiling. Three things were wrong and all three were reported by a buyer rather than found by us.

Every texture property was declared as a normal map. Unity answered with “This texture is not marked as a normal map — Fix Now” on a plain colour texture. The property type is now taken from what the texture is; the value was calibrated against 253 texture properties in Unity's own shipped graphs, where 0 means a colour map and 3 means a normal map and nothing else.

Texture properties were named after the Blender node, not the image. Every one of them was called “Image Texture”, so the exported UVGridTex.png beside the graph could not be matched to the slot it belonged in — the shader came up with no texture applied. Properties now carry the image name.

There were no controls in the material inspector. The values were baked into the graph and could only be changed by opening it. Base Color, Metallic, Smoothness and Alpha are now exposed as properties, with your Blender values as their defaults; where a texture drives an input, the knob for it is correctly absent.

All of this is now measured end to end, not inspected: the exported graph is imported into a real Unity editor, a material is built from it, the exported textures are bound by name, and the material is rendered. The rendered colour is compared with the texture it should be showing. On the previous version that check raises eight complaints, including the yellow UV grid rendering as the default grey; on this one, none.

What's new in v1.2.2

The material you built is now the material that arrives. Until this version only connected inputs were exported: anything you typed as a number was dropped and replaced by a default. A metal with Metallic 1.0 and Roughness 0.2 reached Unity as Metallic 0.0 and Smoothness 0.5, and reached Unreal as a completely empty material — four of seven test materials exported with not a single expression in the file.

Roughness is now converted rather than renamed. Unity stores smoothness, Blender stores roughness, and they are opposites: without the conversion a mirror metal arrived matte. Measured: Roughness 0.2 now becomes Smoothness 0.8.

On the Unreal side three more things are fixed. Every material was called M_Material regardless of its name in Blender — it now carries its own. A texture node with no image was written out with an empty reference and wired to Normal, so the normal map silently did nothing; a normal map now takes the image from the texture feeding it. And an unconnected Normal is left alone instead of being pinned to a degenerate constant.

Measured before and after on seven materials: empty Unreal materials 4 → 0, wrong material names 7 → 0, dead texture references 1 → 0.

What's new in v1.2.1

Every exported graph imported into Unity and then failed to compile, so every material came out pink. The error was invalid subscript 'TangentSpaceNormal', reported three times per shader, in the vertex program.

The cause: a shader graph has two blocks that use the same slot class but different coordinate spaces — the vertex Normal block is object space, the surface Normal (Tangent Space) block is tangent space. The exporter decided the space from the slot class instead of from the block, so the vertex block was written as tangent space. An unconnected tangent-space normal slot asks Unity for TangentSpaceNormal in the vertex stage, where no such value exists, and the shader stops compiling.

Measured before and after on seven materials — plain, metal, glass, image texture, normal map, bump, UV transform. Before: 18 of 22 compiled stages failed on every one of them. After: 22 of 22 compile, zero errors, on Unity 6000.4 with URP.

Two checks were added, because the ones we had passed the broken files. The format checker now reads the required coordinate space of each block out of Unity's own shipped graphs and compares — it reddens on all seven broken files and passes all seven fixed ones. And a second check now imports the exported graphs into a real Unity editor and compiles every pass of every shader, which is the thing that was never being asked. Note for anyone doing the same: ShaderUtil.ShaderHasError returns false in batch mode even on a shader that cannot compile, because variants are not built until something asks for them.

What's new in v1.2.0

  • Unity files are now written in the format Unity reads. Earlier versions wrote a single JSON object with the nodes nested inside it. A real Shader Graph file is a stream of separate objects that reference each other by id, the surface is described by blocks rather than by a master node, and the render pipeline is named by a target object. Files produced before this version were not importable by URP. Re-export your materials and the new files will open.
  • Toon setups arrive as a baked texture. Shader To RGB is an EEVEE-only trick and Unity has no equivalent, so a toon material used to land in the graph as a note saying so. Anything the target engine cannot express is now baked and wired in as a map. The same rule covers procedural textures and colour ramps.
  • Channel packing no longer fails as soon as there is something to pack.
  • Baking no longer fails when the blend file has never been saved.
  • Verified by importing the exported files into Unity 6000.4 with URP: both a PBR material and a toon material compile into a shader with no errors.

What's new in v1.1.1

  • Export tells you what is wrong. A failed export names the reason instead of going quiet.
  • The procedural baker restores the Principled BSDF emission settings even when the bake step itself fails.

What's new in v1.1.0

  • Stylised root shaders supported: Emission, Diffuse, Glossy, Glass, Transparent now accepted as Material Output sources
  • Mix Shader / Add Shader passthrough with dominant-branch selection
  • NodeGroup auto-traversal via GROUP_OUTPUT — works with materials from BlenderKit / Poliigon / Quixel that wrap their guts in a custom group
  • Diagnostic Conversion Report — accurate counts plus a root_kind indicator
  • Plain-English error messages with concrete fixes for Use Nodes disabled, missing Material Output, unconnected Surface

$9.99

Have questions about this product?
Login to message

Details
Sales 10+
Published 5 months ago
Blender Version 3.1 - 5.1
Extension Type N/A
Render Engine Used Arnold, Blender-Internal, Blender-Game-Engine, Cycles, Eevee, Freestyle, Luxrender, Mental-Ray, Octane, Vray, Yafaray
License GPL