GMTC 高德 王前卫的副本(1)

前端狗

2019/07/09 发布于 编程 分类

GMTC2019 

文字内容
1. 基于GLES的三维地图渲染技术 ⼯工程实践与创新 王前卫 高德客户端地图渲染技术团队负责人
2. ⾃自我介绍 王前卫,客户端地图渲染技术团队负责人。 l 深耕AMAP地图渲染技术多年,参与高德AE8,AE9,SDK几场硬仗,为高德AMAP 地图渲染技术打下了很好基础。 l 目前在高德负责地图渲染引擎及AR导航黑科技,未来将持续关注AI及渲染技术的演 变及发展趋势。
3. ⽬目录 1. 终端地图渲染的困难与挑战 2. 地图渲染技术的优化与创新 3. 快速迭代的工程体系建设 4. 总结与展望
4. 传统地图 VS 互联⽹网地图 点 线 ⾯面 图⾯面 看地图 定位 我在哪 搜索 要去哪 出⾏行行 怎么去
5. 困难与挑战 游戏引擎! 地图引擎! 实时连续! 预加载! ⽆无极变换! 单场景! 真实数据!
6. 困难与挑战 数据! 效果! 性能! 全栅格! ⼆二维! CPU! 半栅格! 精品三 维! 三维! GPU! 全⽮矢量量! 简易易三 维! …!
7. 困难与挑战 不不再只是地图的渲染
8. 地图渲染技术的优化与创新-架构 HMI! 应⽤用层 数据解析! 地图层 基础层 耦合 地图接⼝口适配! POI! 相机控制! 道路路! 绿地! 渲染管线! 基础库! ⽔水系! BUG 动画管理理! 模型! …! 功耗
9. 地图渲染技术的优化与创新-架构 接⼝口层 业务层 核⼼心层 基础层 功能定义接⼝口! 功能接⼝口实现 设备管理理! 帧率控制! 图层管理理! 消息处理理! 相机控制! 动画管理理! 街区! 楼快! 绿地! ⽔水系! 模型! …! 导览图! 热⼒力力图! 景区图! 交通事件! 环境地图! …! 室内地图! 交通路路况! 场景树! 渲染树! 基础库! 简易易三维! 资源管理理! 精品三维! 缓存管理理! 数据引擎! …! 异步机制! 抽象细分 统⼀一平台 分离数据 分离渲染
10. 地图渲染技术的优化与创新--消息 业务线程! 渲染线程(消息线程)! 创建消息! 消息队列列 (⽆无锁队列列) 发送消息! 消息驱动 处理理消息! 执⾏行行消息!
11. 地图渲染技术的优化与创新—⼿手势 ⼿手势识别 Android! iOS! ⻋车机! GestureInfo! 消息处理理 地图引擎! 动画模块! 开放平台! 。。。!
12. 地图渲染技术的优化与创新—动画 动画! 绑定 插值器器 线性! 加速! ⾃自定义! 控制参数! 地图元素! 执⾏行行 串串⾏行行动画! 减速! 相机姿态! 并⾏行行动画!
13. 地图渲染技术的优化与创新—线程池
14. 地图渲染技术的优化与创新--三缓冲
15. 地图渲染技术的优化与创新—异步渲染
16. 地图渲染技术的优化与创新—状态管理理
17. 地图渲染技术的优化与创新—CPU 图块数据异步加载 控制前后屏的帧率 CPU 地图比例尺自适应 四叉树,先少后多
18. 地图渲染技术的优化与创新—GPU 批次合并 每帧数据量 GPU 一张大图 深度编译
19. 地图渲染技术的优化与创新—特效 uniform mat4 g_mvpMatrix; uniform float g_uvRation attribute vec3 position; attribute vec2 texcoord; varying vec2 outTexcoord; void main() { gl_Position = g_mvpMatrix * vec4(position.x, position.y, position.z, 1.0); outTexcoord = texcoord*g_uvRation; } uniform sampler2D g_texSampler; uniform float g_waterwavetime; varying vec2 outTexcoord; void main() { float time = g_waterwavetime*0.105; float cosvalue=cos(time+50.0*outTexcoord.y); float xoffset = -0.0075*cosvalue+g_waterwavetime*-0.00448; float yoffset = -0.075*(1.0+cosvalue); gl_FragColor = texture2D(g_texSampler, outTexcoord+vec2(xoffset,yoffset)); }
20. 地图渲染技术的优化与创新—切⽚片
21. 地图渲染技术的优化与创新—总结 不不过度设计 不不为了了技术⽽而技术 我们直选最合适的
22. ⼯工程体系建设—全链路路 定时触发! 新库触发! CPU测试! 内存测试! 效果截图! 基线对⽐比! 展示分析! 每天定时触发检测 IOS使⽤用Xcode测试 版本⽐比较 展示测试结果 新的修改提交触发 Android使⽤用⾃自研平台 性能采样点⽐比较 平台详细展示 效果相关进⾏行行截图 效果图⽚片⽐比较 邮件/钉钉报告
23. 趟过的坑 Ø RTT时,创建纹理的格式和通过glGet获取的类型不一致 使用RGBA格式纹创建FBO Color Texture, 但使用 GL_IMPLEMENTATION_COLOR_READ_TYPE和 GL_IMPLEMENTATION_COLOR_READ_FORMAT 获取对应的格式和类型时不是GL_UNSIGNED_BYTE 和GL_RGBA,而是GL_UNSIGNED_SHORT_5_6_5和GL_RGB。 读取纹理数据时,由于丢失了Alpha通道值,导致后续效果错误。 出现机型:部分机型***
24. 趟过的坑 Ø Shader引起的卡死 attribute highp vec3 inVertex; gl_Position = inMatrixMVP * vec4(inVertex, 1.0); vec4() 构造函数写法,在某些低端设备、较旧驱动的情况下被“优化” 在使用vbo,并且draw顶点数量达到一定点数(5000)时,会出现卡死。 修改为gl_Position = inMatrixMVP * vec4(inVertex.x,inVertex.y,inVertex.z, 1.0); 出现机型:部分机型***
25. 趟过的坑 Ø Shader的精度问题 Vertex Shader中,中精度的浮点与高精度浮点相乘, 反而降级为中精度运算,需要统一为高精度,在Galaxy S6(SM-G9200)机型上出现,导致纹理坐标精度不够贴 图错误。 Fragment Shader中的Uniform、varing变量最好不 能有高精度类型,mali400显卡,smoothstep不支持 高精度浮点,导致贴图错误
26. 质量量效率 研发⽀支撑! 运维⽀支撑! 编译平台! 质量量监控! 分析平台! 配置平台! ⾃自动化测试平台! 项⽬目A! 全链路路⽇日志分析! 项⽬目B! 效果验证平台! 项⽬目C! 集团服务! 账号管理理! ANONE! ODPS! AOS! 包管理理! etc!
27. 快速迭代的⼯工程体系建设—总结 站在“巨⼈人”的肩上 共建拉通融合 打造适合⾃自⼰己的体系化⼯工具
28. 展望—强云强端 能⼒力力! 云加端! 数据! Release platform 端可配置! 云可配置! Configulation platform 数据可配置!
29. 展望-智能化 算法 ⽀支撑! 软件 ⽀支撑! 硬件 ⽀支撑! 神经⽹网络! ⼤大数据分析! 图像识别! 云计算! OpenGL ES! OpenCL! Vulkan! Metal! CPU! GPU! NPU!