贴花性能分析

1、使用传统投影Projector

使用Unity自带的投影组件,实现投射贴图到目标上。

image.png

优点:使用Unity自带组件,使用和开发都方便。

缺点/限制:会将接受投影的物体整体重渲染一次。

性能相关:接受投影的物体数量和顶点数。性能压力主要在GPU。

2、EasyDecal插件

(1) 适用与Plane等地复杂的RayProjector

image.pngimage.png 

优点:适用于简单的,凸面物体。单独生成目标面,避免多余的重绘。

缺点/限制:需要物体有碰撞,或额外生成碰撞模型。生成的新的面的精度基于设置的分辨率(Resolution)。且精度值较大时,会有频繁的GC。

性能相关:Resolution值越大,精度越高,性能开销越大。性能压力主要在CPU。

(2) 适用与比较复杂的BoxProjector

image.png

优点:较复杂的面,单独生成目标面,避免多余的重绘。

缺点/限制:需要物体有碰撞,或额外生成碰撞模型。不受影响的层级需要使用指定材质。

性能相关:接受贴花的物体越多,越复杂性能消耗越大。且目前的测试过程中存在比较严重的GC问题。性能压力主要在CPU。

 

(3) 居于屏幕的贴花

① 基于延迟渲染管线的屏幕贴花

image.pngimage.png 

1) 优点:与接受贴花的目标复杂度无关。

2) 缺点/限制:需要启用延迟渲染(Deferred),不适用于低端设备。不能合批。仅适用于透视的相机。操作不够灵活。

3) 性能相关:屏幕贴花的尺寸(屏幕贴花占用像素)。性能压力主要在GPU。

② 基于前向渲染管线的屏幕贴花(目前推荐)

image.png

1) 优点:与接受贴花的目标复杂度无关。

2) 缺点/限制:不能合批。仅适用于透视的相机。操作不够灵活。会影响所有层级。

3) 性能相关:屏幕贴花的尺寸(屏幕贴花占用像素)。性能压力主要在GPU。

注:移动端需要手动开启相机的深度图。Camera.main.depthTextureMode = DepthTextureMode.Depth;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用Unity中的Shader来实现贴花效果。以下是一个简单的贴花Shader示例代码: ```csharp Shader "Custom/Decal" { Properties { _MainTex ("Base Texture", 2D) = "white" {} _DecalTex ("Decal Texture", 2D) = "white" {} _Color ("Color", Color) = (1,1,1,1) _Opacity ("Opacity", Range(0,1)) = 1 _Tiling ("Tiling", Range(1,10)) = 1 } SubShader { Tags { "RenderType"="Opaque" } LOD 100 CGPROGRAM #pragma surface surf Lambert sampler2D _MainTex; sampler2D _DecalTex; fixed4 _Color; float _Opacity; float _Tiling; struct Input { float2 uv_MainTex; float2 uv_DecalTex; }; void surf (Input IN, inout SurfaceOutput o) { fixed4 mainColor = tex2D(_MainTex, IN.uv_MainTex); fixed4 decalColor = tex2D(_DecalTex, IN.uv_DecalTex * _Tiling); // Apply decal color with opacity fixed4 finalColor = lerp(mainColor, decalColor * _Color, decalColor.a * _Opacity); o.Albedo = finalColor.rgb * finalColor.a; o.Alpha = finalColor.a; } ENDCG } FallBack "Diffuse" } ``` 你可以将这段代码保存为一个名为"Decal.shader"的文件,然后将其拖放到Unity项目中的一个合适文件夹中。接下来,您可以将此Shader应用于您的对象上的材质。创建一个新材质,将其Shader属性设置为"Custom/Decal",然后将您的贴花纹理和基础纹理分别赋值给"_DecalTex"和"_MainTex"属性。 请注意,此示例代码仅提供了一个基本的贴花效果,您可以根据自己的需求进行修改和扩展。同时也可以在Unity的Shader文档中了解更多关于Shader的知识。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值