Unity中Shader编译目标渲染器

文章目录

  • 前言
  • 一、Unity在打包时,会把Shader编译成不同平台对应的代码
    • 我们在状态栏,可以看见我们目前所处于的目标平台
  • 二、在Unity中,怎么指定目标平台
    • 1、#pragma only_renderers
    • 2、#pragma exclude_renderers
  • 三、我们测试一下看看效果
    • 1、 我当前处于 DX11 平台,我们修改为只渲染 IOS/Mac 平台(Metal)
    • 2、我们剔除一些平台,看看剔除后,编译的代码有没有减少
  • 四、编译目标渲染器优化的好处


前言

Unity中Shader编译到目标渲染器


一、Unity在打包时,会把Shader编译成不同平台对应的代码

Unity中Shader编译目标渲染器_第1张图片

我们在状态栏,可以看见我们目前所处于的目标平台

在这里插入图片描述


二、在Unity中,怎么指定目标平台

1、#pragma only_renderers

#pragma only_renderers
仅编译指定平台的Shader

  1. d3d11 - Direct3D 11/12
  2. glcore - OpenGL 3.x/4.x
  3. gles - OpenGL ES 2.0
  4. gles3 - OpenGL ES 3.x
  5. metal - iOS/Mac Metal
  6. vulkan - Vulkan
  7. d3d11_9x - Direct3D 11 9.x功能级别,通常在WSA平台上使用
  8. xboxone - Xbox One
  9. ps4 - PlayStation 4
  10. psp2 - PlayStation Vita
  11. n3ds - Nintendo 3DS
  12. wiiu - Nintendo Wii U

2、#pragma exclude_renderers

剔除掉指定平台的相关代码

  1. d3d11 - Direct3D 11/12
  2. glcore - OpenGL 3.x/4.x
  3. gles - OpenGL ES 2.0
  4. gles3 - OpenGL ES 3.x
  5. metal - iOS/Mac Metal
  6. vulkan - Vulkan
  7. d3d11_9x - Direct3D 11 9.x功能级别,通常在WSA平台上使用
  8. xboxone - Xbox One
  9. ps4 - PlayStation 4
  10. psp2 - PlayStation Vita
  11. n3ds - Nintendo 3DS
  12. wiiu - Nintendo Wii U

三、我们测试一下看看效果

1、 我当前处于 DX11 平台,我们修改为只渲染 IOS/Mac 平台(Metal)

//仅编译指定目标平台
#pragma only_renderers metal

我们会发现,Unity渲染丢失了,呈现洋葱紫
Unity中Shader编译目标渲染器_第2张图片

2、我们剔除一些平台,看看剔除后,编译的代码有没有减少

剔除前(945行):
Unity中Shader编译目标渲染器_第3张图片

剔除gles后(774行):

Unity中Shader编译目标渲染器_第4张图片


四、编译目标渲染器优化的好处

这样优化,并不能提高游戏在运行时的性能,但是可以节省打包编译时的时间,和编译文件所占的存储空间。

你可能感兴趣的:(Unity,unity,游戏引擎)