35

Showdown vulkan

Embed Size (px)

Citation preview

Page 1: Showdown vulkan
Page 2: Showdown vulkan

将桌面级VR通过Vulkan和UE4移植到移动平台

Page 3: Showdown vulkan

总概

• 项目目的

• 平台差距

• 测试Vulkan

• 介绍Vulkan

• 准备工作

• 执行优化

• 遇到的困难

Page 4: Showdown vulkan

项目目的

• 探索移动平台VR效果的极限

• 探索UE4下移动端,Vulkan+VR流程/当前问题

Page 5: Showdown vulkan

THE “SHOWDOWN” DEMO

Page 6: Showdown vulkan

平台的差距

3840 x 2160? (1920 x 1080)

60 fps

Adreno 530

Multi-view?

Mobile Forward Renderer

Vulkan?

2160 x 1200

90 fps

GTX 970

Instanced Stereo

Deferred Renderer

DX11

Page 7: Showdown vulkan

关于Vulkan• Vulkan是用来替代OpenGL和OpenGL ES的下一代图形API

• 由Khronos领头,整个行业共同参与打造

• 开放,跨平台,支持PC、主机和移动设备

• 提供更底层轻度的,更高效的接口

• 考虑了现代图形硬件而设计

• 以SPIR-V格式作为shader预编译的中间格式

Page 8: Showdown vulkan

ES2/3.2 vs VulkanOpenGL:如果compile出错,在运行时会crash做绘制调用的时候会有hitch,驱动只在第一次绘制时才真的编译

Vulkan:可离线编译shader

在开发时可编译成SPIR-V二进制数据

所有shader的验证都在离线时完成

所有上层的shader优化都在离线时完成

Page 9: Showdown vulkan

ES2/3.2 vs VulkanOpenGL:

Set vertex and pixel shaders

Shader uniform parameters

Bound textures

Set blending states

Set depth states

Set rasterizer states

Etc…

Vulkan:

把这些属性和状态都封装在一个对象中

切换不同的状态相当高效!

Page 10: Showdown vulkan

ES2/3.2 vs VulkanVulkan有显式的RenderPass

vkBeginRenderPass(...)vkEndRenderPass(...)

每个render pass可以指定哪些数据需要load到tile memory里,哪些数据需要存回framebuffer

Page 11: Showdown vulkan
Page 12: Showdown vulkan

准备工作硬件:Galaxy S7(latest rom), Nexus 6P(Android N)?

SDK:Vulkan, ndk

UE4: 4.13

当前数据:

800+ drawcall

120w+ triangles

Page 13: Showdown vulkan

准备工作简单定位瓶颈:

1. stat unit – gpu

降低渲染分辨率:MobileContentScaleFactor = 1.0 (1080p) / 0.8 (720p)

快速用工具减面做测试

用mip setting降低贴图尺寸,降低gpu带宽占用

2. stat dumpave –ms=1 || stat startfile/stop file

发现game线程时间过长,profile确定render thread没开

3. RenderThread瓶颈

合并和简化场景mesh

Page 14: Showdown vulkan

执行优化

Page 15: Showdown vulkan

内容优化

• 面数太多;

• 物件太多;

• 材质太多;

• 材质太复杂;

• 贴图太大,

• 渲染品质参数太高

Page 16: Showdown vulkan

Statistics

Page 17: Showdown vulkan
Page 18: Showdown vulkan

烘培合并材质

Page 19: Showdown vulkan

烘培合并材质

Page 20: Showdown vulkan

烘培合并材质

Page 21: Showdown vulkan

减面Simplygon

Page 22: Showdown vulkan

Instancing Staticmeshes(Batch Staticmeshes)

Page 23: Showdown vulkan

选择需要合并的Actors

Page 24: Showdown vulkan

优化材质/大范围

Page 25: Showdown vulkan

优化材质/复杂

Page 26: Showdown vulkan

材质优化/透明

Page 27: Showdown vulkan

材质优化/粒子特效

Page 28: Showdown vulkan

优化材质/删除不必要的视觉元素

Page 29: Showdown vulkan

减少贴图sampler

Page 30: Showdown vulkan

去除后期材质和灯光function使用简单方式替代

Page 31: Showdown vulkan

检查清理地图警告

Page 32: Showdown vulkan

设置合理目标平台Profile,记得保存!

• 调整合理的渲染品质参数

• 合理的贴图大小

• 分辨率

Page 33: Showdown vulkan

三角面

Drawcall

Page 34: Showdown vulkan

Q&A

Page 35: Showdown vulkan