UE4迭代器删除元素

在一个Unreal Engine的项目中,发现TArray<AActor>迭代器循环,actor::destroy会在数组中移除该元素,和element.remove()一样, 引起迭代器失效,很奇怪。经调查原来是因为在Actor::endplay里代码把自身从数组中移除了。我因为之前没有在迭代器里删除过元素,在查这个Bug过程中,我看了下数组Remove的代码。

TArray Remove Implementation

C++ vector::erase操作删除一个元素会导致后面所有的元素都会向前移动一个位置,这些元素的地址发生了变化,所以当前位置到容器末尾元素的所有迭代器全部失效。

这里,由于移除元素,移除元素后面的元素都向前移动,所以导致第二个元素3无法被移除掉。


3.18 Three TOPICS


Multiplayer networking with physics


https://ikrima.dev/ue4guide/networking/network-replication/physics-replication/
https://gamedev.stackexchange.com/questions/35459/multiplayer-networking-with-physics

Rendering thread

https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/Rendering/ThreadedRendering/

Explain P2P networking framework

This is a good example for explain P2P networking framework. Overall, No authority server in networking is P2P networking framework.

https://gamedevelopment.tutsplus.com/tutorials/building-a-peer-to-peer-multiplayer-networked-game–gamedev-10074

virtuos TGDC 2020 switch移植优化分享

维塔士上海技术总监Andy:Switch游戏优化经验分享

内存优化

去重复资源:贴图,shader,材质

贴图压缩格式:astc

限制最高mipmap

分辨率检查GBuffer内存布局,把不必要的效果的渲染缓冲去除掉

更激进的动画压缩算法

strip不必要的LOD

CPU

多线程渲染,对各个线程产生独立的命令缓冲

拆分render pass队列

拆分为多线程渲染,准备命令缓冲从20ms降低到6ms

GPU

Tegra GPU可以把渲染缓冲划分成很多图块,一个图块一个图块的播放渲染请求。可以提高命中cache。适用于大面积粒子效果。收集渲染命令和播放由一定开销。当使用大量的顶点属性或频繁修改属性时不建议使用。

模型、材质、粒子增加LOD使用

降低Shadow使用量

工具

最近的事

  1. Goal Oriented Action Planning(GOAP)是一种新的AI制作系统,让AI通过计算达到目标的代价,获得更多的自主性。我目前没有太了解GOAP,GDC这篇游戏应用的文章可以了解更多。题外话,GDC分享者Crystal Dynamics的Chris Conway提到他2006就开始写GOAP的核心代码基于06年他们公司lead designer的GDC分享,并于几周写完90%的核心代码。但直到7年后的古墓丽影才第一次才应用到发售的游戏上(First shipped title using it)。

十一月十四号的事

周六参加了一个小的行业分享会,好像说起来是我回成都后在成都参加的第一个外部的分享会。以下是我自己听后的理解,不全代表作者的观点。

第一个由邓春燕带来的《技术转型管理的思考》,分享了从做事、做人和思维上的转变。做事上,转型管理会有从管理自己到管理他人的转变。管理他人的前提是要先管理好自己。所以一个好的管理者,应有一个好的自我管理。春燕她自己一个时间管理,早上开会前和晚上6后是他的一个自我学习和工作总结的时间。如果做纯管理,思维上从技术性思维向一个商业性思维的转变,比如项目需要一个“天气系统”的考量。因为管理通常意味着更多的责任,自己做事的目的性会更强,遇到挫折更加坚韧。由于工作内容的转变,当然会有新的挑战,比如招聘。也会做一些以前不情愿做的事,比如辞退员工。

第二个是由Raynald Bouchard带来的《Focussing on Productivity》,分享了pipeline tool的重要性及育碧在优化pipeline上做的工作。主要集中在以下几点。

  1. 通过增加工具收集数据,特别是错误数据。分析pipeline瓶颈。降低相互等待的情况。
  2. 增加自动化工具,节约人力时间。
  3. 不断优化生产工具,更好用,更少的bug,让使用者专注于内容。
  4. 当下开放大世界越来越流行,做开放大世界,Split data对提升效率上是一个很重要的点,可以减少互相等待,及缩小反馈周期。
  5. 内容验证,越早越好。育碧尽可能的做内容验证,尽早发现错误。通常在生产者提交前就会做尽可能多的内容检查,比如美术内容有错误,不会被渲染出来。

邓春燕在分享开头提到了他们公司的类似“照扫建模”的技术,可以生成高质量高精度的模型,包括人物脸部模型用于游戏中。无独有偶最近我们公司美术师也在公司分享了照扫技术的应用。得益于当前计算机强大的计算能力,三维建模的工作量可以进一步降低。对照扫技术感兴趣可以看下开源的软件Meshroom

Things new

  • 最近在学UE4蓝图,学习UE4 蓝图最开始是抗拒的(笑),学会了,感觉用着还是蛮顺手的。不熟悉蓝图时感觉实现一个功能不如自己写代码快,很多简单的功能,自己写代码知道怎么做,用蓝图找模块网上查半天,而且觉得用蓝图的思维模式和写代码的思维模式还是有差别。当学会了蓝图,发现其实很多gameplay的功能比写代码快,因为功能模块的代码引擎帮你“复制”好了,不要自己再去复制自己的代码了(笑)。
  • 用D3D DX12实现了一个3D BOX,成功显示出来效果很炫啊。都快忘了大学用OpenGL画一个图形的惊艳感了(那也算是自己的图形引擎第一步[笑])

五月三十一号的事

周末和莎莎在家看综艺-奇遇人生第8期《李诞和阿雅日本行禅悟人生,谈“吐槽大会”痛并快乐着》,李诞是本期嘉宾(2018年的综艺)。李诞讲到:“我如果再说生活难受就太不是人了,我生活其实挺好过的,没有什么大岔子,也没有很累,没什么错误,没什么问题”。

BLOG RETURN

两年多前域名到期没有续费,域名被回收了,很长时间被处于不能重新免费取回状态。这几年个人以文字为主的创作发布平台在变化,微博,微信公众号逐渐的崛起,个人博客在逐渐走向历史。我订阅的个人博客基本是一片灰,基本也是几年都没更新了。

今天工作看到一个个人博客让我想起我还有博客这回事 :p,顺手搜了下域名,一看我的域名都已经可以正常注册了.. 然后费了点周折的弄好。我忘记了博客密码,还不能邮箱找回.. 我还得到数据库里改。总之,博客又弄回来了。看着以前的文章,还有那些未发表的文字,看到了我曾经的想法,肯定有些感慨,哈哈。

很巧今天是2019的最后一天,第一次在新环境写博客。今年工作依然很忙,今年也去了不少地方,也要感谢聪聪 ;p。

期待新的一年。2019年过去了,我很…