渲染升级细节
Unity 3 进行了许多图形相关的更改,某些事项有必要在升级现有的 Unity 2.x 工程时进行调整。如需了解着色器的相关更改,请参阅 着色器升级指南。
向前渲染路径更改
Unity 2.x 拥有一个渲染路径,在 Unity 3 中称为向前 (Forward)。与 Unity 2.x 相比,这部分有了重大改变:
最常见的情况(一个方向逐像素灯)是现在用单程 (one pass) 绘制!(以前是双程)
不支持点光源和聚光灯阴影。只有一个方向灯可以投射阴影。如果需要更多阴影,请使用延迟照明 (Deferred Lighting)。
大部分“顶点 (Vertex)” 灯替换为球面谐波照明。
向前渲染路径现在完全基于着色器,所以可以在 OpenGL ES 2.0、Xbox 360、PS3(如不支持固定功能渲染的平台)上工作。
着色器更改
请参阅表面着色器 (Surface Shaders)。
没人会注意到的图形卡模糊变化 (Obscure Graphics Changes That No One Will Probably Notice TM)
已删除 Mac Radeon 9200 像素着色器支持(
!!ATIfs
程序集着色器)。已删除对前 ShaderModel2.0 硬件的逐像素照明支持。因此,Diffuse Fast 着色器现在只是顶点照明 (VertexLit)。
已删除不衰弱灯光。所有点光源和聚光灯现都已衰弱。
已删除脚本回调:
OnPreCullObject
和RenderBeforeQueues
属性。已删除基于 P 缓冲区的 RenderTextures。OpenGL 上的 RenderTextures 现在要求 FBO 支持。
大部分 Pass LightMode 标签都已消失,并替换上新标签。无论如何,用户一般应使用表面着色器 (Surface Shaders) 进行。
纹理 instanceID 不再是 OpenGL 纹理名称。可能影响依赖它们的 C++ 插件,请使用
texture.GetNativeTextureID()
。将着色器关键字 SHADOWS_NATIVE 重命名为 SHADOWS_DEPTH,SHADOWS_PCF4 重命名为 SHADOWS_SOFT。
已删除受 8 个以上顶点灯影响对象的环境增强效果。
已删除
_ObjectSpaceCameraPos
和_ObjectSpaceLightPos0
(新增_WorldSpaceCameraPos
和_WorldSpaceLightPos0
)。着色器纹理属性中的
LightmapMode
标签现已不起作用。天空盒着色器不写入深度缓存。
GrabPass
(如折射玻璃着色器)现在始终抓取屏幕大小的纹理。#pragma multi_compile_vertex
和#pragma multi_compile_fragment
消失。ShaderLab 中的多边形偏移无法再引用变量(如
Offset [_Var1], [_Var2]
)。将
TRANSFER_EYEDEPTH/OUTPUT_EYEDEPTH
重命名为UNITY_TRANSFER_DEPTH/UNITY_OUTPUT_DEPTH
。它们也在 Unity 3 的 float2 中起作用。已删除特殊着色器的 pass 类型:R2TPass、OffscreenPass。
已删除
_Light2World0
、_World2Light0
内置着色器矩阵。已删除 _SceneAmbient、_MultiModelAmbient、_MultiAmbient、_ModelAmbient、_MultiplyFog、_LightHackedDiffuse0、_ObjectCenterModelLightColor0 内置着色器矢量。
已删除
_FirstPass
内置着色器浮点。阴影文件中的雾模式无法来自变量(如
Fog { Mode [_MyFogMode] }
)。如需使用全局雾模式,请写入Fog { Mode Global }
。已从 ShaderLab 中删除
BlendColor
颜色。已删除着色器属性中的说明纹理矩阵按值支持。
已删除“静态 (static)” 着色器属性支持。
已删除纹理边框颜色支持 (
RenderTexture.SetBorderColor
)。已删除
ColorMaterial Ambient, Diffuse, Specular
支持(剩下 ColorMaterial AmbientAndDiffuse 和 Emission)。对已删除项的支持根据平台造成的混乱情况的不同而有较大差异,但这些似乎并没有太大用处。内置
_CameraToWorld
和_WorldToCamera
矩阵现在将按期望工作。之前,它们只包含转动部分,全球相机在 Y 轴上翻动。我们也不知道是怎么回事 :)已删除
Shader.ClearAll()
。2007 年开始弃用,可以不再关注。顶点着色器现已编译至 Shader Model 2.0(以前为 1.1)。如果想编译至 SM1.1,请在着色器中新增
#pragma target 1.1
。