在Unity的Camera设置中有一个CullingMask的选项,用于指定该Camera会渲染哪些LayerMask的对象。在代码编写时可以直接暴露一个LayerMask参数然后赋值到CullingMask进行设置。
但是也仅有这个方式可以正确的赋值。CullingMask实际是一个bitmask,每一个位表示一个layer,位为1的layer代表选中,0为未选中。而LayerMask内包含的int value实际上与CullingMask的计算方式并不匹配。LayerMask是一个多选的值,其value包括多层选择合并后的结果。因此如果要从LayerMask中获取正确的layer,需要用LayerMask.GetMask(“层名”)去获取正确的value值。如果直接使用1<<LayerMask的方式拿到的int值作为bitmask实际上会设置成错误的值。
比如,如果希望渲染Layer序号为6以外的层,使用&= ~(1<<6)的结果是正确的,但是如果声明LayerMask lm选中为第6层layer,使用&= ~(1<<lm)将得到错误的结果,断点可以得知此时lm虽然在面板上指定的是第六位,但是值为64。它代表的不是lm为第6层layer,而是代表”只选择了”第6层layer
 
Volumetric Light Beam源码笔记(二)- VolumetricLightBeamSD研读Camera Clear Color的Gamma设置问题