概述
本文并不包含革命性的发现,而是对镜子的一些观察,对于从未将镜子应用到游戏中的人来说可能并不完全明显。
《模拟人生 4》提供了真正有用的镜子!为此,游戏需要为场景中的每个镜子再次渲染房间。当然,这是昂贵的。
来源: 《模拟人生 4》
不错的优化:从远处看,镜子实际上没有反射任何东西!它显示静态纹理,直到我们放大得更近。然后静态纹理淡出并为实际反射腾出空间。
在你问之前:不,无限镜子是不可能的:
来源: 《模拟人生 4》
不管怎样,我真正想展示的是下一个视频,我们可以在“镜像诗句”中观察到高效的剔除。
为了让您做好观看此视频的准备:当我附加分析工具时,由于某种原因,渲染出现了故障!地板缺失,镜面房间渲染在顶部。这使我们能够看到整个镜面房间(不仅仅是我们可以通过镜面观察到的微小部分)!
我喜欢剔除工作的效率。所有角色和物体都会被快速剔除。甚至笔记本电脑的显示屏!我知道,这没什么特别的,但我喜欢看这样的东西!
技术细节
以下是有关镜子渲染过程的更多技术细节:
如前所述,游戏会为每个镜子再次渲染房间。以下是我可以使用我的分析工具找到的内容。渲染深度缓冲区(以及阴影贴图)后,场景将照常渲染,然后逐一渲染镜子。
来源: 《模拟人生 4》
第一个块(923)是另一个镜子,它在附近但在视野之外。
为了弄清楚哪个镜子应该显示哪个房间,游戏似乎使用了模板缓冲区(基本上是黑/白蒙版)。在使用三个镜子进行捕获时,我发现了三个模板缓冲区:
模板参考从2开始,因为当我捕捉场景中的三个可见光时,附近有另一个镜子。
我无法证明它在 Sims 4 中到底是如何工作的,但我认为它与Unity 教程中显示的非常相似:
- 将每个镜像表面渲染到其自己的模板缓冲区中(或者渲染到相同但具有不同 ID 的缓冲区中?)。
- 单独收集每个镜子的所有可见几何形状以便渲染它们,但仅限于相应镜子的模板掩模允许的情况。

奖金
额外观察#1
在《模拟人生 4》中,您可以隐藏内墙,以便更好地看到屋内发生的情况。但镜子仍然渲染它们并忽略这种“无墙”视图模式:
来源: 《模拟人生 4》
额外观察#2
如果我们观察模拟市民正在洗澡,我们可以看到像素化效果和淋浴本身的水粒子也反映在镜子中:
来源: 《模拟人生 4》
如果我们在“故障”处于活动状态时查看同一场景,我们可以观察到一些有趣的事情:模拟仅在镜子区域内像素化,粒子(来自淋浴的水/蒸汽)也是如此。我认为它们也仅限于上述模板掩模。
来源: 《模拟人生 4》
额外观察#3
我无法重现这个有趣的故障(该视频已经有 10 年历史了)。我认为这是动画系统的优化,也许现在已经修复了。但我还是想放这个视频,因为它很有趣:
来源:模拟人生 4 镜子故障
奖金示例
Marina刚刚在她的游戏中实现了一面镜子,并在我的Discord上分享了一些不错的见解。

“对于玩家来说,它是一个相机+一个渲染目标,该目标是一个简单的四边形,带有一个在水平轴上跟随玩家的脚本,并且镜子上还有一个模板遮罩,因此四边形仅在其前面时才会出现。”

就像在《模拟人生》中一样,我们可以在镜子中看到一堵墙,但从我们的角度来看,它实际上并不存在(否则它会挡住相机)。是怎么做到的?
“环境是镜子物体本身的简单纹理!”

我希望您喜欢这次进入镜子世界的小冒险!
西蒙