1、使用传统投影Projector
使用Unity自带的投影组件,实现投射贴图到目标上。
优点:使用Unity自带组件,使用和开发都方便。
缺点/限制:会将接受投影的物体整体重渲染一次。
性能相关:接受投影的物体数量和顶点数。性能压力主要在GPU。
2、EasyDecal插件
(1) 适用与Plane等地复杂的RayProjector
优点:适用于简单的,凸面物体。单独生成目标面,避免多余的重绘。
缺点/限制:需要物体有碰撞,或额外生成碰撞模型。生成的新的面的精度基于设置的分辨率(Resolution)。且精度值较大时,会有频繁的GC。
性能相关:Resolution值越大,精度越高,性能开销越大。性能压力主要在CPU。
(2) 适用与比较复杂的BoxProjector
优点:较复杂的面,单独生成目标面,避免多余的重绘。
缺点/限制:需要物体有碰撞,或额外生成碰撞模型。不受影响的层级需要使用指定材质。
性能相关:接受贴花的物体越多,越复杂性能消耗越大。且目前的测试过程中存在比较严重的GC问题。性能压力主要在CPU。
(3) 居于屏幕的贴花
① 基于延迟渲染管线的屏幕贴花
1) 优点:与接受贴花的目标复杂度无关。
2) 缺点/限制:需要启用延迟渲染(Deferred),不适用于低端设备。不能合批。仅适用于透视的相机。操作不够灵活。
3) 性能相关:屏幕贴花的尺寸(屏幕贴花占用像素)。性能压力主要在GPU。
② 基于前向渲染管线的屏幕贴花(目前推荐)
1) 优点:与接受贴花的目标复杂度无关。
2) 缺点/限制:不能合批。仅适用于透视的相机。操作不够灵活。会影响所有层级。
3) 性能相关:屏幕贴花的尺寸(屏幕贴花占用像素)。性能压力主要在GPU。
注:移动端需要手动开启相机的深度图。Camera.main.depthTextureMode = DepthTextureMode.Depth;