Unity中Shader编译目标渲染器


前言

Unity中Shader编译到目标渲染器


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

在这里插入图片描述

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

在这里插入图片描述


二、在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渲染丢失了,呈现洋葱紫
在这里插入图片描述

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

剔除前(945行):
在这里插入图片描述

剔除gles后(774行):

在这里插入图片描述


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

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

猜你喜欢

转载自blog.csdn.net/qq_51603875/article/details/134708788