照明
光照类型:
- 实时(Real-time):每帧计算光照。
- 烘焙(Baked):在电脑上预先计算光照并生成光照贴图(包含光照和阴影的纹理),然后覆盖在这些对象上。
- 混合(Mixed):静态物体使用烘焙光照,动态物体使用实时光照。
灯光类型:
- 方向光(Directional):本质上就是太阳。每个场景不应超过 1 个。(它的影响范围是无限的,因此它的位置并不重要,但它的旋转却很重要。)
- 点光(Point):从中心向各个方向投射光线。模拟灯泡。
- 聚光(Spot):从中心向外投射锥形光线。模拟聚光灯。
- 区域光(Area):从二维矩形或圆形向外投射光线。模拟天花板上的办公室照明。
理想情况下,所有灯光都应烘焙,不应使用实时灯光。
VRChat中的实时灯光要么看起来很糟糕,要么会降低帧速率,或两者兼而有之。
光照探针(Light Probe)
你要如何为动态对象打光呢?使用光照探针!这些探针会预先计算对象在该探针位置的照明效果。许多探针被放置在一个组中,当动态对象穿过该组时,它们会与探针混合并相应地点亮。
光照体积(Light Volume)
这是一个由社区提供的光照解决方法,光照探针允许你以体素的方式提前烘焙3D空间的光照信息,并且为虚拟形象等动态物体提供更加灵活的光照。
反射探针(Reflection Probe)
反射探针通过放置一个虚拟“相机” 捕捉周围环境的360度图像,物体利用拍摄下来的全景图像信息实现逼真的反射效果。
这些图像通常以 立方体贴图(Cubemap)形式存储。
- 烘焙(baked):预先生成静态的反射立方体贴图,存储在内存中,性能极佳。
- 自定义(Custom):可以手动设置探针存储的静态立方体贴图。
- 实时(Realtime)探针在游戏中实时更新立方体贴图,可以对场景中的动态对象做出反应,性能差。
灯光设置(Lighting settings)
转到 Window > Rendering > Lighting Settings(窗口 > 渲染 > 灯光设置),弹出该窗口。
如果场景完全在室内,没有窗户,请关闭天空盒照明。
如果是室外场景,则打开天空盒照明,并在照明设置中设置定向光源。
单位像素(Texels per unit)
Texels 就像放置在物体上的像素,用于计算烘焙光照。对于许多 PC 世界来说,我认为每单位约 30 个像素足以兼顾质量和大小。
将灯光设置为柔和的阴影。
要实际查看灯光贴图的像素如何投射到几何体上,可以单击 "场景 "窗口顶部的下拉菜单(通常设置为 "阴影"),将其设置为 "烘焙灯光贴图(Baked Lightmap)"。
要更改网格的光贴图 UV,可以在模型设置中进行(点击 "项目 "窗口中的模型,更改 "模型 "选项卡底部的 "生成光贴图 UV "设置)。
虽然某些阴影较短的物体使用硬阴影可能更准确,但在较长的距离上,软阴影更准确,而且在较低的像素分辨率下看起来更好。Unity 并不包含 PCSS(百分比接近软阴影)等开箱即用的自适应阴影。 下次在阳光下,看看你的阴影。看看靠近原点(你的脚)的边缘是如何清晰的,而越往上越模糊!这就是 PCSS 等技术所模拟的效果。
不要过度提高像素密度!像素越多,光照贴图的文件大小就越大!
https://unity3d.com/how-to/progressive-lightmapper-optimization-tips
在某些情况下,由于光照贴图的 UV重叠(常见于 probuilder 对象),你可能会想使用更高的 texel 数。
在您的关卡设计中,如果您的灯光是烘焙的,请避免在地板上或墙壁低处放置细节阴影;在这些阴影上行走的非静态模型将不会投射到这些细节阴影上。
光照贴图分辨率(Lightmap resolution)
控制灯光贴图的最大分辨率。将其设置为只有一个光贴图,以获得最佳性能。
反射(Bounces)
控制光线的反弹次数。(这些需要很长时间烘焙)
大多数场景的反射数值不应高于2。(除了完全间接照明的场景)
遮挡剔除(Occlusion Culling)
将您的静态游戏对象设置为 static (这将把子参数、occlusion 和 occludee static 设置为 true) 。然后转到 Windows > Rendering > Occlusion Culling,并在上传您的世界之前点击烘焙(bake)。
Unity 不会渲染玩家看不到的虚拟形象;由于渲染虚拟形象对性能的影响最大,因此好的 VRChat 关卡设计应该下意识地引导玩家只看他们正在互动的其他玩家,而不是在背景中渲染一堆他们不关心的表现不佳的虚拟形象。
No Comments