【转载】GLSL 转 HLSL(Unity Shader)

648 阅读1分钟

原文链接:GLSL 转 HLSL(Unity Shader)

基本类型转换

highp vec4 -> float4
mediump vec4 -> half4
lowp vec4 -> fixed4

highp vec3 -> float3
mediump vec3 -> half3
lowp vec3 -> fixed3

highp vec2 -> float2
mediump vec2 -> half2
lowp vec2 -> fixed2

highp float -> float
mediump float -> half
lowp float -> fixed
highp int -> int

vec4 -> float4
vec3 -> float2
vec2 -> float2

bvec4 -> bool4
bvec3 -> bool3
bvec2 -> bool2

ivec4 -> int4
ivec3 -> int3
ivec2 -> int2

mat4 -> float4x4
mat3 -> float3x3
mat2 -> float2x2

矩阵

  • GLSL 中的矩阵是纵向的
  • Untiy 中的矩阵是横向的

例:

GLSL Matrix

x x x
y y y
z z z

Unity Matrix

x y z
x y z
x y z

GLSL 中见到形如以下的构建矩阵代码

highp mat3 tmpvar_8;

tmpvar_8[0].x = tmpvar_6.x;
tmpvar_8[0].y = tmpvar_7.x;
tmpvar_8[0].z = tmpvar_1.x;

tmpvar_8[1].x = tmpvar_6.y;
tmpvar_8[1].y = tmpvar_7.y;
tmpvar_8[1].z = tmpvar_1.y;

tmpvar_8[2].x = tmpvar_6.z;
tmpvar_8[2].y = tmpvar_7.z;
tmpvar_8[2].z = tmpvar_1.z;

转换到 Unity 中就应该改成

float3x3 tmpvar_8;

tmpvar_8[0] = tmpvar_6.xyz;
tmpvar_8[1] = tmpvar_6.xyz;
tmpvar_8[2] = tmpvar_6.xyz;

Windows 的官方文档

GLSL-to-HLSL reference