ShadowMask,ShadowMap的区别与联系

发布时间 2023-05-28 00:11:22作者: yanghui01

区别与联系

1) ShadowMask和ShadowMap可以看做是同一个东西,只是ShadowMask是专门用于静态物体的。
2) ShadowMask在编辑器阶段就预计算好并存入贴图,这个过程也叫烘培(Bake)。
疑问:_worldToShadow矩阵会保存吗?
 
 
投射阴影时,投射情况
  静态物体 动态物体
ShadowMask 投射 不投射
ShadowMap 不投射 投射
 
 

 
 
接收阴影时,采样情况
  静态物体 动态物体
ShadowMask 采样 不采样
ShadowMap 采样 采样
 
 
 
 

 

ShadowMask相关的设置

1) 菜单 -> Window -> Rendering -> Light Settings -> Scene -> Mixed Lighting

a) Baked Indirect: 直接光使用实时光照;间接光使用lightmap(预计算);所有的阴影也都是实时渲染,不会启用ShadowMask贴图

b) Shadowmask: 直接光使用实时光照;间接光使用lightmap(预计算);阴影使用shadowMask(预计算)

c) Subtractive: 直接光照,间接光照,阴影信息都烘焙到了一张lightmap中

 

2) 菜单 -> Edit -> Project Settings -> Quality

a) Shadowmask: 无需解释

b) Distance Shadowmask: 在shadow distance范围内,静态物体投射的阴影也变成了实时阴影,只有shadow distance范围外才使用shadowmask

 

3) 灯光设为Mixed模式,Realtime模式将不会使用shadowMask因为该模式所有都会实时计算

 

例子 

1) Plane_A为静态物体, Cube_A为静态物体, Cube_B为动态物体

a) Plane_A投射到ShadowMask, Cube_A投射到ShadowMask, Cube_B投射到ShadowMap

b) 运行时Plane_A采样ShadowMask和ShadowMap, 显示Cube_A的Bake阴影和Cube_B的实时阴影, UnityMixRealtimeAndBakedShadows负责处理两种阴影的混合

c) 运行时Cube_B采样ShadowMap,不采样ShadowMask, 所以Cube_B表面不会显示Cube_A投射的阴影

 

2) 把Cube_A设置为非静态时,Cube_B表面会显示Cube_A投射的阴影的

 

参考

Unity中的混合光照_unity 混合光照_异次元的归来的博客-CSDN博客

Unity3D CustomSRP[译].6.阴影遮罩[Shadow Masks] - 简书 (jianshu.com)