码迷,mamicode.com
首页 > 其他好文 > 详细

Shader预处理宏、内置状态变量、多版本编译等

时间:2015-08-09 20:27:43      阅读:482      评论:0      收藏:0      [点我收藏+]

标签:

预定义shader预处理宏:
  Target platform:

  SHADER_API_OPENGL - desktop OpenGL
  SHADER_API_D3D9 - Direct3D 9
  SHADER_API_XBOX360 - Xbox 360
  SHADER_API_PS3 - PlayStation 3
  SHADER_API_D3D11 - desktop Direct3D 11
  SHADER_API_GLES - OpenGL ES 2.0 (desktop or mobile), use presence of SHADER_API_MOBILE to determine.
  SHADER_API_FLASH - Flash Stage3D
  SHADER_API_D3D11_9X - Direct3D 11 target for Windows RT

  Surface shader pass indicators:

  UNITY_PASS_FORWARDBASE - 前向渲染的base pass(主方向光、lightmaps、SH)
  UNITY_PASS_FORWARDADD - 前向渲染的add pass(没盏灯一个pass)
  UNITY_PASS_PREPASSBASE - 延迟渲染base pass(renders normals & specular exponent).
  UNITY_PASS_PREPASSFINAL - 延迟渲染final pass (applies lighting & textures).
  UNITY_PASS_SHADOWCASTER - 阴影投射渲染pass.
  UNITY_PASS_SHADOWCOLLECTOR - 阴影手机pass for directional light shadows.

内置全局状态变量:

  内置的矩阵:

    UNITY_MATRIX_MVP: Current model*view*projection matrix
    UNITY_MATRIX_MV: Current model*view matrix
    UNITY_MATRIX_V: Current view matrix.
    UNITY_MATRIX_P: Current projection matrix
    UNITY_MATRIX_VP: Current view*projection matrix
    UNITY_MATRIX_T_MV: Transpose of model*view matrix
    UNITY_MATRIX_IT_MV: Inverse transpose of model*view matrix
    UNITY_MATRIX_TEXTURE0 to UNITY_MATRIX_TEXTURE3: Texture transformation matrices

  内置的向量:

  UNITY_LIGHTMODEL_AMBIENT: Current ambient color.

使用multi_compile编译Shader的多个版本:
  有时候我们希望保留一个shader的大多数实现,而只是做一些细节的修改,此时我们就可以通过该方式来生成shader的多个版本,然后在代码中控制使用哪个版本。
  命令:
  #pragma multi_compile FANCY_STUFF_OFF FANCY_STUFF_ON
  控制:
  Material.EnableKeyword/DisableKeyword
  Shader.EnableKeyword/DisableKeyword
  在shader中根据定义好的关键字处理具体显示方案:

  float4 frag(vertOut i):COLOR
  {
    float4 c = float4(0, 0, 0, 0);
    #ifdef MY_multi_1
      c = float4(0, 1, 0, 0);
    #endif
    #ifdef MY_multi_2
      c = float4(0, 0, 1, 0);
    #endif
    return c;
}

  注意不要在shader中大量使用此命令,因为关键字的个数是有上限的,而多条multi_complie会交叉匹配产生很多种结果。

GLSL shader编程
  在Shader中,除了Cg/HLSL以外,GLSL(OpenGL Shading Languate)也可以直接使用。
  一般不建议使用GLSL,除非你确定你的目标平台只有Max OS X或兼容OpenGL ES 2.0的移动设备。
  Unity默认都会将Cg/HLSL交叉编译出优化过得GLSL,以此来支持多平台。在desktop平台下可以通过打开#pragma glsl选项来支持。

 

CSDN博客:http://blog.csdn.net/candycat1992/article/details/47284289

Shader预处理宏、内置状态变量、多版本编译等

标签:

原文地址:http://www.cnblogs.com/sifenkesi/p/4716047.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!