关于shader的内存占用分析,以urp项目内置shader Lit为例

新建cube1,cube2,cube1对应材质球cube1.mat,cube2.mat,两个cube分别打成一个bundle(nostatic资源组 bundlemode 是pack separately)材质球不放进addressables里面,

 把cube1和cube2都加载出来,shader Lit  profiler内存占用如下,Lit有两条数据。

两个材质球也放进addressables里面,并且打成一个bundle包( 材质球组 bundlemode 是pack together),把cube1和cube2都加载出来,shader Lit  profiler内存占用 如下,Lit有一条数据。

 两个材质球也放进addressables里面,并且打成两个bundle包( 材质球组 bundlemode 是pack separately),把cube1和cube2都加载出来,shaer Lit  profiler内存占用 如下,Lit有两条数据。

 

 总结:如果所有应用Lit shader的材质球都打进一个budle里面,或者把Lit  shader单独打成一个包,profiler里面shader部分应该只显示一个Lit数据,不是多条数据,并且总体shader的内存占用会变小。(profiler用的不熟,有问题欢迎指正)

在使用URP(Universal Render Pipeline)时,如果将Lit Shader设置为Transparent,意味着你希望该材质渲染为半透明效果。在这种情况下,渲染顺序变得非常重要,因为它会影响到对象的视觉叠加效果。 在Unity中,半透明物体通常是按照从后到前(由远离摄像机到接近摄像机)的顺序进行渲染的,以确保正确的透明度混合。然而,URP默认的渲染顺序可能并不总是符合特定场景的需求。以下是一些解决URP/Lit Shader设置为Transparent时渲染顺序问题的方法: 1. **使用渲染队列**: - 在Shader文件中,可以通过`Tags`来设置渲染队列。如,你可以将队列设置为`Transparent`来确保它在不透明物体之后绘制。 ```csharp Tags { "Queue" = "Transparent" } ``` - 这样做可以确保透明物体在大多数不透明物体渲染完毕后再渲染,但不保证它们之间的相对顺序。 2. **使用渲染排序层(Render Layers)**: - 如果需要更细粒度的控制,你可以使用Unity的渲染排序层功能。在需要控制的物体上设置一个特定的Layer,并在相机的渲染设置中为这些Layer指定特定的渲染顺序。 3. **使用相机排序设置(CameraSortingLayer)**: - 通过为相机设置一个排序层,你可以控制相机渲染特定Layer上的物体的顺序。这样,你可以优先渲染某些半透明物体。 4. **自定义渲染顺序**: - 如果以上方法仍不能满足需求,可以通过编写自定义的渲染逻辑来强制特定的渲染顺序。这可能需要使用到Unity的事件回调,如`OnRenderObject`,在这些回调中你可以手动指定哪些物体先渲染。 需要注意的是,URP通常会根据渲染队列自动对材质进行排序,但有时候一些特殊的Shader或者使用了特殊技术(如实化、遮挡剔除等)的场景可能需要额外处理。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值