10. Volume Framework||Volume Overrides List||Diffusion Profile

可以对照着现有文档观看,如果有误,已现有官方文档为准

Diffusion Profile Override

HDRP中的Lit材质支持半透明和此表面散射类型,但我们需要先配置Diffusion Profile,这里面存储了他们的配置信息

高清渲染管线(HDRP)允许你同时在视图上使用多达15个 Diffusion Profiles 。要在一个场景里使用超过15个Diffusion Profiles,你可以在Volume中使用Diffusion Profile Override。这使你可以指定在场景中的某个区域使用哪个Diffusion Profile(或者在场景里 Volume时Global).

Using a Diffusion Profile Override

添加一个Diifusion Profile Override到Volume:

  1. 在Scene或者Hierarchy中选择Volume组件,在Inspector窗口中查看。
  2. 在Inspector窗口,通过Add Override 然后点击Diffusion Profile Override

Properties

在这里插入图片描述

PropertyDescription
Diffusion Profile List为每个字段分配一个Diffusion Profile,以创建这个Volume中材质可以使用的Diffusion Profile的列表。点击加号图标添加另一个字段,要从列表中删除Diffusion Profile文件,可以在列表中选中它,然后单击减号图标
Fill Profile List With Scene Materials单击这个按钮删除Diffusion Profile List中的所有的Diffusion Profile文件,然后用Diffusion Profile重新填充列表,该配置文件影响在Local Volume影响范围内的Materials。请注意,这不适用于使用ShaderGraph Shader制作的材质,只有Volume组件的Mode属性选择Local时,此属性才可用,向这个GameObject添加一个Collider以设置Volume的范围边界。

Details

如果一个材质(Material)引用了一个Diffusion Profile不在可用的Diffusion Profile List中,那么这个材质将使用默认的Diffusion Profile,这个Diffusion Profile是一个绿色的。

如果Diffusion Profile Override所在的Volume时Local的,那么Fill Profiles With Scene Materials按钮才会出现。点击这个按钮会仓Volume所影响的范围内的材质中获取Diffusion Profiles,并用他们填充Diffusion Profile List,请注意,这个功能不适用于ShaderGraph Shader制作的材质。

如果多个Volume重叠并且同时影响相机,为了处理重叠的值,HDRP会在同一Volume override属性的多个值之间进行插值。但是,无法为Diffusion Profile List内插最终值,相反,HDRP从优先级(Priority)最高的Volume中选择Diffusion Profile List

查找哪个材质使用的Diffusion Profile的性能开销最小,这意味你使用的Diffusion Profile越少,这个过程越快。你可以使用Diffusion Profile Override来优化搜哦所过程,而不是限制你使用的Diffusion Profile文件的数量,如果你有多个场景,并且每个场景只使用一个Diffusion Profile文件,那么你可以在每个场景的全局Volime上使用这个Override来为每个场景选择Diffusion Profile文件,而不是将每个场景的Diffusion Profile文件放入HDRP资源文件里。这降低了在着色器中搜索的资源强度,如果你的场景里包含大量透明来产生诸如树叶和植被等视觉效果,这个技术特别有用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在找到目标数据后停止请求,您可以在逐个遍历 `overrides` 的过程中添加一个条件判断来实现。当找到目标数据后,您可以使用 `break` 语句来终止循环。以下是修改后的代码示例: ```javascript findOverrideMapId = async (overrides: CaseOverrideInfo[]) => { let page = 1; const pageSize = 40; let mapIdTowardIndex = -1; while (page) { const batchMaps = await this.getMaps(page, pageSize); for (const item of overrides) { if (item.missingMap && !item.overrideMapId) { const mapIdTowardId = batchMaps.items.find((ele) => ele?.name === item.mapId)?.id; if (mapIdTowardId) { item.overrideMapId = mapIdTowardId; mapIdTowardIndex = batchMaps.items.findIndex((ele) => ele?.name === item.mapId) + (page - 1) * pageSize; break; // 找到目标数据后终止循环 } } } page++; if (!batchMaps || batchMaps.items.length < pageSize || mapIdTowardIndex !== -1) { break; // 当获取到目标数据或者达到结束条件时终止请求循环 } } this.setState({ initialPage: Math.ceil(mapIdTowardIndex / (pageSize + 2)) }); return overrides; }; ``` 在这个示例中,当找到目标数据并更新 `overrideMapId` 后,我们使用 `break` 语句来终止内部循环。同时,我们还在外部循环中添加了一个条件判断,当获取到目标数据或者达到结束条件时,也会使用 `break` 语句来终止请求循环。 请注意,这只是一种实现方式,具体的实现可能需要根据您的代码逻辑进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值