游戏中实现反射的几种方式

1.拷贝相机:利用额外的相机将反射的内容渲染到Render Target Texture上

参考:《Unity Shader入门精要》10.2.1节

原理很简单,以反射面(例如镜子)为中心,创建一个相机,处于主相机在镜子中反射的位置,用脚本实时更改相机位置与朝向

这个相机渲染的内容不直接输出到屏幕,而是输出到一张RTT上

然后再将这张RTT的左右翻转(例如直接缩放-1),再贴到这个平面上,就可以实现镜子效果了.

 

2.拷贝场景 

例如GTA5,小富的房间的镜子,就是用这种简单粗暴的方式,直接将当前场景拷贝一份,主角也拷贝一份,然后左右翻转

适合于小场景空间的镜面反射,效果简单粗暴又好

 

3.屏幕空间反射(SSR)(效果好,但比较吃性能)

参考:Unity URP 屏幕空间反射Screen space Reflection(SSR) - 知乎 (zhihu.com)

Screen Space Reflection | 3D Game Shaders For Beginners (lettier.github.io)

在Unity中实现屏幕空间反射Screen Space Reflection(1) - yangrc1234 - 博客园 (cnblogs.com)

 

3.光追(效果最好,最吃性能)

暂无参考

 

4.Cube反射贴图

传统上,游戏使用一种称为_反射贴图_的技术来模拟来自对象的反射,同时将处理开销保持在可接受的水平。此技术假定场景中的所有反射对象都可以“看到”(因此会反射)完全相同的周围环境。

Cube贴图可以由美术制作,也可以在运行时从6分方向截图获取。

缺点:如果游戏的主角(比如闪亮的汽车)处于开放空间中,此技术将非常有效,但是当角色进入不同的周围环境时,便看起来不真实;如果一辆汽车驶入隧道但天空仍然在窗户上产生明显反射,看起来就很奇怪。

 

5.反射探针 - Unity 手册 (unity3d.com)(反射贴图的改进)

传统的反射贴图仅使用单个立方体贴图来表示整个场景的周围环境。立方体贴图可由美术师绘制,也可通过从场景中的一个点进行六次“快照”(每个立方体面对应一次快照)获得。

反射探针在这方面进行了改进,允许您在场景中设置许多预定义的点,在这些位置点可创建立方体贴图快照。因此,您可以在场景中存在明显不同反射的任何位置点记录周围视图。

posted @ 2024-06-07 17:34  JeasonBoy  阅读(24)  评论(0编辑  收藏  举报