Porting a shader

From Unify Community Wiki
Revision as of 20:08, 23 December 2008 by Tgraupmann (Talk | contribs)

Jump to: navigation, search



This document aims to provide some guidelines for porting shaders between FX composer, RenderMonkey, Mental Mill, ShaderFX, and Unity3d. Porting shaders is a manual process. But most of the work is just copy paste. And there are some slight semantic differences on each platform.

Shader Applications

There are several applications that facilitate shader development and prototyping:
  • ShaderFX - A max plugin capable of exporting to FX composer. Similar to Mental Mill to be used by artists.
  • Mental Mill - An artist shader development application bundled with FX Composer similar to ShaderFX, but in a free flavor.
  • Unity - Our target shader platform

Getting Shader Help

  • AMD - Developer forums

Shader Porting Practice

I found it helpful to first port the shader to FX composer. When comparing your ported shader it makes a good base to compare to. Before porting to Unity, I attempted a port to RenderMonkey first. That way I could identify all the correct semantics to use. And lastly I ported to Unity while checking the docs and chat for the Unity semantics.
RenderMonkey has a StreamMapping that controls the mapping of semantics into your vertex and shader programs. You likely need to double click the stream mapping outside of the pass and provide Normal, Tangent, and Binormal information. They should all map to index 0. And use names like rmTangent, rmBinormal, and rmNormal.
Note, when using the vertex and fragment programs, the binding parameters are created for you. So you don't want to provide that redudant/wrong information in your shader.
Personal tools