升级到Unity 5.5
基于物理的阴影相关的代码已被重构在Unity 5.5(文件UnityStandardBRDF.cginc等)。在大多数情况下,这不直接影响你的着色器代码,除非你直接手动调用一些函数。显着的变化如下所示。
现在有功能,光滑度,粗糙度和感性粗糙度之间的转换: PerceptualRoughnessToRoughness,RoughnessToPerceptualRoughness,SmoothnessToRoughness, RoughnessToSmoothness。
在能见度长期UnityStandardBRDF.cginc需要roughness,而不是perceptualRoughness。
在Unity的旧版本中,可以使用Marmoset粗糙度进行重映射。随着向GGX它不再匹配,以及UNITY_GLOSS_MATCHES_MARMOSET_TOOLBAG2定义和相关的代码已被删除。
所有的读取和写入到Gbuffer应该通过新的功能UnityStandardDataToGbuffer/ UnityStandardDataFromGbuffer。
你的shader代码应该调用UnityGlossyEnvironmentSetup()初始化一个Unity_GlossyEnvironmentData结构,而不是做手工的。
该roughness变量Unity_GlossyEnvironmentData实际上是“感性粗糙”,但它并没有被改名为避免与现有的着色器代码中的错误。注意:UnityGlossyEnvironmentSetup需要smoothness作为一个参数,并计算听觉粗糙度。
的ndotl变量的值UnityLight,现在计算的飞行并写入变量的任何值将被忽略。
Unity 5.5现在在后台处理DX9半像素偏移光栅化,这意味着您不再需要在着色器或代码中修复DX9半像素问题。参见更多细节这个博客帖子。如果您在代码中使用这些检查,现在可以将其删除:
在着色器中检查UNITY_HALF_TEXEL_OFFSET,并基于此移位顶点/ UV。
通过SystemInfo.graphicsDeviceType或SystemInfo.graphicsDeviceVersion检查D3D9,并基于此移动顶点/ UV。
Unity现在解决的方式是通过将半像素调整代码插入到正在编译的所有顶点着色器中。因此,顶点着色器常数寄存器c255由Unity保留,以及两个指令被添加到所有着色器,并且使用一个更多的临时寄存器。这不应该产生问题,除非你的顶点着色器占用所有可用资源(常量/临时寄存器和指令槽)到绝对最大值。
Z缓冲器(深度缓冲器)方向已经反转,这意味着Z缓冲器现在将在近平面处包含1.0,在远平面处包含0.0。这与浮点深度缓冲区结合显着增加深度缓冲器精度,导致较少的Z战斗和更好的阴影,特别是当使用小的近平面和大的远平面时。
_CameraDepthTexture纹理范围是[1,0]而不是[0,1]
以下宏/函数将处理反转的Z情境,而无需任何其他步骤。如果您的着色器已经在使用它们,则不需要从您身边进行任何更改:
但是,如果您手动提取Z缓冲区值,则需要编写类似于以下内容的代码:
float z = tex2D(_CameraDepthTexture, uv); #if defined(UNITY_REVERSED_Z) z = 1.0f - z; #endif
对于剪辑空间深度,您可以使用以下宏。请注意,这个宏将不会改变基于OpenGL / ES plaforms夹的空间,但仍将[-near, far]:
float clipSpaceRange01 = UNITY_Z_0_FAR_FROM_CLIPSPACE(rawClipSpace);
Z-bias由Unity自动处理,但如果您使用本地代码渲染插件,您将需要在匹配平台上的C / C ++代码中否定它。
命名的文件夹的所有子文件夹“编辑”将从构建中排除,并在播放模式在Unity编辑器将不会加载。此前名为子文件夹“资源”将有包含在构建其资产。这些资产仍然可以通过在编辑器脚本中调用Resources.Load()来加载。
例如,这些文件被排除在构建和会不会在编辑器中播放模式时加载,但会如果从脚本调用加载:
编辑/美孚/资源/ Bar.png (这从加载代码编辑器的“Bar.png”)
编辑/资源/编辑/资源/ Foo.png (这从加载编辑代码“Foo.png”,但不作为“编辑/资源/ Foo.png”)
资源/美孚/编辑/ Bar.png (这个负载如“foo /编辑/ Bar.png”)
资源/编辑/资源/ Foo.png (这荷载为“Foo.png”而不是“编辑/资源/ Foo.png”)
此前在“背向面容忍'参数光照贴图参数使用最终聚集烘焙GI在不施加。它现在应用正确。该参数现在影响实时GI和烤GI阶段(包括最终聚集)。
受影响的场景主要是具有单面几何形状(如广告牌)的场景,其中重要的是能够调整“背面容差”以避免使看到单面几何形状的背面的纹素无效。在使用广告牌和最终聚集的场景中,现在可以通过调整“背面容差”来改进光照贴图,但是如果应用非默认“背面容差”,则其他场景也可能会受到影响,因为现在正确地考虑了最终聚集阶段。
BRDF2是默认情况下在移动平台上设置的标准着色器类型,现在使用GGX近似而不是Blinn-Phong。这使它看起来更接近BRDF1(在桌面上默认使用),并提高了视觉质量。
如果您需要保留旧的近似值,您应该修改UnityStandardBRDF.cginc中的BRDF2代码,该代码在#if UNITY_BRDF_GGX语句中有新的实现(这也被BRDF1用来选择GGX)。更改UnityStandardConfig.cginc中的定义或在BRDF2_Unity_PBS函数中将#if UNITY_BRDF_GGX更改为#if 0。
您现在可以使用摇篮来构建Android。
Gradle对于现有的Unity Android构建系统没有那么严格的错误,这意味着一些现有的项目可能很难转换为Gradle。查看文档摇篮故障识别和解决这些构建失败。
默认情况下,Instantiate函数的特定重载包含原始GameObject的参数和父Transform的参数已更改为工作方式不同。它不再将原始GameObject的位置和旋转解释为世界空间位置和旋转,因此忽略了指定的父Transform的位置和旋转。
现在,默认情况下,将位置和旋转解释为指定的父变换的空间内的局部位置和旋转。这与编辑器中的行为一致。您的脚本不会自动更新。这意味着当您运行包含对此实例化重载的调用的脚本尚未更新以考虑此更改时,您可能会遇到意外的行为。