如果阴影离相机场景中创建特定视点图像的组件。输出要么绘制到屏幕上,要么作为纹理捕获。 更多信息
参见 词汇表很远,阴影可能会闪烁。有关更多信息,请参阅 了解视锥体。
如果阴影比世界空间原点更靠近相机,请启用相机相对剔除。Unity 使用相机作为阴影计算的相对位置,而不是世界空间原点,从而减少闪烁。
要启用相机相对剔除,请执行以下步骤
实时阴影的渲染开销相当高;任何可能投射阴影的游戏对象Unity 场景中的基本对象,可以代表角色、道具、场景、相机、路点等。游戏对象的功能由附加到它的组件定义。 更多信息
参见 词汇表首先必须渲染到阴影贴图中,然后该贴图将用于渲染可能接收阴影的对象。
软阴影比硬阴影的渲染开销更大,但这只会影响 GPU,不会导致额外的 CPU 工作量。
如果为复杂几何体渲染实时阴影的成本过高,请考虑使用低LOD细节级别 (LOD) 技术是一种优化,当游戏对象与其相机的距离增加时,它会减少 Unity 必须为游戏对象渲染的三角形数量。 更多信息
参见 词汇表网格甚至基本体来投射阴影。
如果这太消耗资源,可以使用应用于简单网格Unity 的主要图形基元。网格构成了 3D 世界的大部分。Unity 支持三角形或四边形多边形网格。Nurbs、Nurms、Subdiv 表面必须转换为多边形。 更多信息
参见 词汇表或四边形类似于平面但边缘仅长一个单位的基元对象,它只使用 4 个顶点,并且表面位于局部坐标空间的 XY 平面。 更多信息
参见 词汇表的模糊纹理来模拟角色下的阴影,或者可以使用自定义着色器创建斑点阴影。
直接被灯光照亮的光源有时看起来部分处于阴影中。这是因为应该精确地位于阴影贴图中指定的距离的像素有时被计算为更远(这是使用阴影过滤或使用低分辨率图像作为阴影贴图的结果)。结果是在阴影贴图中出现任意模式的阴影像素,而它们应该被照亮,从而产生一种称为“阴影痤疮”的视觉效果。
要防止阴影痤疮,可以调整灯光偏差设置。
可以向阴影贴图中的距离添加偏差,以确保边框上的像素通过比较,或者可以沿着法线稍微内缩几何体。
在内置渲染管线一系列操作,将场景的内容显示在屏幕上。Unity 允许您从预先构建的渲染管线中选择,或者编写自己的渲染管线。 更多信息
参见 词汇表中,当启用阴影时,可以在灯光检查器一个 Unity 窗口,显示有关当前选定游戏对象、资产或项目设置的信息,允许您检查和编辑值。 更多信息
参见 词汇表窗口中使用偏差和法线偏差属性设置这些值。
不要将偏差值设置得太高,因为投射阴影的游戏对象附近的阴影区域有时会错误地被照亮。这会导致阴影断开,使游戏对象看起来像是漂浮在地面上。
同样,将法线偏差值设置得太高会使阴影看起来对于游戏对象来说太窄
在某些情况下,法线偏差会导致一种称为“光线渗漏”的意外效果,即光线从附近的几何体渗漏到应该被阴影遮挡的区域。一个可能的解决方案是打开游戏对象的网格渲染器一个网格组件,它从网格过滤器获取几何体并在对象转换组件定义的位置渲染它。 更多信息
参见 词汇表并将其投射阴影属性更改为双面。这有时会有所帮助,尽管它可能会更消耗资源,并在渲染场景场景包含游戏的环境和菜单。将每个独特的场景文件视为一个独特的关卡。在每个场景中,您放置您的环境、障碍物和装饰,本质上是设计和构建游戏。 更多信息
参见 词汇表时增加性能开销。
可能需要调整灯光的偏差值,以确保不会出现意外效果。通常,用肉眼判断正确的数值比尝试计算它更容易。
为了进一步防止阴影痤疮,我们使用一种称为阴影扁平化的技术。其思想是减少渲染阴影贴图时沿光线方向使用的光空间范围。这会导致阴影贴图精度提高,从而减少阴影痤疮。
在上面的图中
将这些阴影投射器钳制到优化空间的近裁剪平面(在顶点着色器中)。请注意,虽然这通常有效,但对于穿过近裁剪平面的非常大的三角形,它可能会产生伪影
在这种情况下,蓝色三角形只有一个顶点位于近裁剪平面后面,并被钳制到它。但是,这会改变三角形的形状,并可能导致阴影错误。
您可以从质量窗口中调整阴影近平面偏移属性以避免此问题。这会将近裁剪平面拉回。但是,将此值设置得太高最终会导致阴影痤疮,因为它会增加阴影贴图需要沿光线方向覆盖的范围。或者,您也可以细分有问题的阴影投射三角形。
如果您发现一个或多个对象没有投射阴影,则应检查以下几点
可以在质量窗口中完全禁用实时阴影。确保启用了正确的质量级别,并且为该设置打开了阴影。
场景中所有网格渲染器都必须设置其接收阴影和投射阴影的正确设置。两者默认情况下都已启用,但请检查它们是否被无意中禁用。
只有不透明物体才会投射和接收阴影,因此使用内置透明或粒子着色器的物体既不会投射也不会接收阴影。通常,对于有“间隙”的物体(如栅栏、植被等),可以使用透明剪切着色器。自定义着色器在 GPU 上运行的程序。 更多信息
参见 词汇表必须是像素照亮并使用几何体渲染队列。
使用顶点照亮着色器的对象不能接收阴影,但可以投射阴影。
Unity 无法为具有“无光照”类型着色器的材质的游戏对象计算阴影。Unity 只能为具有支持光照的着色器的材质计算阴影。
在内置渲染管线中,使用前向渲染路径,某些着色器只允许最亮的定向光投射阴影(特别是,这会发生在 Unity 从 4.x 版本开始的内置着色器中)。如果您希望有多个投射阴影的灯光,则应使用延迟着色内置渲染管线中的一种渲染路径,对可以影响游戏对象的灯光数量没有限制。所有灯光都以每像素的方式进行评估,这意味着它们都与法线贴图等正确交互。此外,所有灯光都可以具有曲奇和阴影。 更多信息
参见 词汇表渲染路径渲染管线用来渲染图形的技术。选择不同的渲染路径会影响灯光和着色计算的方式。某些渲染路径比其他路径更适合不同的平台和硬件。 更多信息
参见 词汇表。您可以通过使用fullforwardshadows
表面着色器为内置渲染管线编写着色器的一种简化方式。 更多信息
参见 词汇表指令使您自己的着色器支持“全阴影”。