前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于计算机图形学与技术美术

关于计算机图形学与技术美术

作者头像
Jean
发布2021-01-03 15:09:49
1K0
发布2021-01-03 15:09:49
举报
文章被收录于专栏:Web行业观察

记录一下从前端开发转行到游戏开发4个月以来的总结。


技术美术(TA)

技术美术师经常参与研发的就是三维可视化系统了,这是一个前期以技术研发为主,后期以内容开发为主的大型项目,目前课题处于前期研发阶段,主要包含5个方向:

  • 虚幻引擎
  • GIS
  • 渲染性能
  • UI设计
  • 模型、数据库

研发的主要内容包括:

  • 虚幻引擎实现三维可视化的可行性;
  • 像素流技术在园区网内的通讯能力;
  • 千万级构建的三维模型所需的最低硬件需求;
  • 前后端通讯的接口逻辑;

核心目标

三维可视化研发在今年的目标主要是做成一个初版的demo,实现从空间索引数据库PostGIS中动态加载构建(三角面片总量是10亿数量级的期望),以分形算法渲染不同的细节层次(LOD),从3D网格体的基本矢量信息(点线面)和贴图等物理属性载入虚幻引擎中渲染拥有不同表现形式的物体,最后利用WebRTC将像素流快速、安全地传送到Web前端展示。

今年的目标还包括确定引擎对前后端硬件的要求和引擎的渲染极限(顶点和三角面片的数量上限)。由于使用了即时通讯行业最先进的WebRTC技术,前端展示集成的性能基本只由显示器的分辨率决定,当然前提是有足够的内网带宽,后端需要能够运行UE4集群的硬件,主要对显卡和显存的需求较高。引擎的渲染极限仍然在研究当中,目前在RTX2060处理器上的三角面片数量是百万级别,但考虑到尚未吃满的GPU利用率以及后期陆续的优化,三角形的数量在将来能达到500万。


收获的新知识

今年上半年经过各种技术选型最终确定了课题研发的基础设施,包括对图形理论实现地最好的虚幻引擎和基于空间矢量模型的网格体(mesh)渲染模式,放弃了存在性能瓶颈的WebGL和空间复杂度过高的体素化(voxel)渲染模式,最关键的一点是选定了基于像素流的前后端分离渲染模式。

今年下半年开始了虚幻引擎的沉浸式研发,通过不断的学习对自身进行计算机图形学的理论升级,先后解决了许多问题,确定了许多不确定性的想法,实现了许多未经验证的可能性,我完成的成果按照时间顺序排列,大致包括但不限于:

  • UE引擎API接口的学习与理解;
  • P2P视频流通讯的稳定性测试;
  • UE与GIS地理信息的整合(考虑海洋、天空、光照);
  • 纹理贴图的几何变换(平移、旋转、缩放、投影);
  • 自动漫游的功能;
  • 基于四叉树的空间数据索引算法研究;
  • 网格体序列化数据的压缩存储方案;


经验教训

三维可视化系统研发涉及计算机图形学、射影几何、关系代数、信息论等基础学科,是一种面向GPU编程的研究型工作,它对于团队中每个人都是全新的机遇和挑战,其中的机遇在于,这个岗位(暂且称之为TA:技术美术)尚未饱和,行业竞争少,发展空间巨大,相对于传统研发有许多趣味;其中的挑战则在于较高的行业门槛,稀少的市场案例,以及未来研发途中各种无法预测的技术障碍。

我个人在这个季度中收获巨大,不仅深入理解了UE4、WebRTC、OpenGL、GPU,还对整个3D乃至游戏行业有了一个更深刻的认识,相当于成功进入了一个崭新的行业(以前的专业是前端开发)。我再次意识到基础知识的重要性:基础知识相当于内功,扎实的内功是高超的招式的前提;学习计算机基础知识则是掌握应用技术的前提。


不足的地方

我们也存在一些不足,或者说需要提高警惕的地方,比如我们赖以生存的虚幻引擎是否可能存在一些尚未发现的性能/功能瓶颈,需要尽早发现这些隐患,寻找相应的解决方案以备不时之需;除此之外我们离国内做的最好的几家同行(如51world)之间也有不少差距,需要提高研发速度,坚持学习以应对未来的竞争。

我个人而言,花费在理解虚幻C++接口上的时间略长,必须养成阅读源码的习惯来提高效率;此外,不用拘泥于数据库空间优化,有时候空间压缩的代价是时间的牺牲(时间换空间原理),先把功能做出来再考虑性能与安全性才是最优解(优化的前提是能跑)。


个人总结思考与建议

技术美术属于研发型岗位,研发型和开发型岗位不同之处在于:研发型工作需要更多的理论储备和基础知识尤其是数学,追求的是技术深度,而开发型工作要求的是使用工具的能力,追求的是技术广度。比如三维可视化运维系统,前期需要大量的研发工作,才能为后期大量的开发人员提供方向;从个人角度看,对计算机图形学的探索很符合我“往计算机底层发展”的职业规划。

希望自己私下的研究方向和开源作品能够在项目中产生应用,实现个人价值,比如基于Base128变长编码的Zipack序列化格式可以在各种RPC通讯协议、内存缓存等高能场景提供比JSON更高效的二进制前缀码,为数据的存储和传输提供更小更快的解决方案。


自我提升方向

2021年我的提升方向大致是沿着TA这条主干路线走,深入研究网格建模与图形理论,学习GLSL着色器语言和Direct3D图形卡接口,实现骨骼动画和基于shader的特效。因为当前的服务器硬件性能远高于常规的游戏主机,我们有足够的物质基础来按照3A次世代大作的标准设计系统的整体架构,在虚幻源码的基础上改进性能,突破引擎的渲染极限,将硬件的计算力和存储力发挥到极致。

在沿途路上还要积极探索其他的相关方向包括:

  • 能提供原生内存堆栈空间接口的WebAssembly汇编指令集;
  • 处于垄断地位的p2p即时通讯协议WebRTC压缩算法;
  • 非关系型数据库MongoDB和Redis提供的空间索引;
  • GDAL相关的GIS地理信息库和大地坐标系统;
  • 未来可能出现的3D体素化“位空间”渲染模式;
  • 高效压缩的序列化编码格式例如变长的实数和字符;
  • 我的“老本行”前端领域和JS相关的各种技术栈;

目标设定与计划

目前正在攻克的难点在渲染引擎身上,我们在研究UE宁愿降低帧率也不吃满GPU利用率的根本原因,初步判断是因为渲染所在的主线程无法拆分导致cpu单核堵塞从而造成的短板效应(单核堵塞导致多核等待),但完整的原因和解决方案还未确定:这是我们明年首先要解决的难题,为此我们准备尝试用多线程处理相互独立的异步任务,以及对DrawCall请求进行打包,对顶点进行合并以求更少的时间间隙,还打算向Epic公司寻求有限的技术咨询。

明年上半年的主题无疑是性能优化,优化的内容包括:

  • 选择主频更高的服务器cpu以加速渲染;
  • 减少FoV角度以限制视锥体内的三角数量;
  • 限制帧数在25~35fps以兼顾性能和流畅性;
  • 最大化空间检索的能力以保持1~2万每帧的DrawCall次数;
  • 改良场景动态加载算法以实现对遮挡物体的动态剔除;
  • 将LoD切换检测的任务由系统转向用户以节省机器的计算量;
  • 将部分UI交互任务挪到前端实现以缓解后端的压力;

按照目前的研发速度,明年下半年以后大多关键技术瓶颈都已经迎刃而解,同时还伴随着UE5的正式发布,届时动态的全局光照和层次细节将被原生支持,空间索引和即时渲染的难度将大大降低,引擎的整体性能会发生质的升级,当然我也不能太依赖新技术:软件层面的更新迭代不可能超越硬件的极限,从CPU、GPU、内外存、带宽的角度思考功能、性能、安全性始终是明智的研发思想。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-12-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 WebHub 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 核心目标
  • 收获的新知识
  • 经验教训
    • 不足的地方
      • 个人总结思考与建议
      • 自我提升方向
        • 目标设定与计划
        相关产品与服务
        图像处理
        图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档