找回密码
 立即注册
查看: 482|回复: 0

Unreal添加自定义Pass

[复制链接]
发表于 2020-12-23 09:47 | 显示全部楼层 |阅读模式
Unreal在编辑器中没有Pass的概念,我们在做一些诸如描边这类的 效果又需要添加Pass,这样我们就有了需要添加自定义Pass的需求了。在开始工作前有必要了解一下UE的大致渲染流程。
下图是UE4.22更新后的MeshDraw的PipeLine。




想要详细了解渲染流程,可以去听一下UE4的渲染人员做的分享https://www.bilibili.com/video/av54601189/?p=10,这里简要说一下
场景中的动态和静态模型都是一个一个 Proxy,UE会去收集这些Proxy,将其转化成MeshBatch,一个MeshBatch你可以理解为一个RenderObject。一个MeshBatch可以添加多个Processor,这个Processor你可以理解其实就是我们的Pass,但也有些许不一样。在Unity中,我们一般 认为Pass是挂在Mesh上的,一个Mesh有多个Pass。在UE中,虽然也会遍历MeshBatch,但它是让Pass去收集可用到的MeshBatch。MeshBatch的Render其实只是让各个需要用到的Pass生成DrawCommand,真正Push到显卡是在这些Command生成完,然后一个个Pass推送到显卡进行渲染。可以看出这个Pass的概念和Unity的Pass还是有很大的不同的。
声明MeshPass
打开MeshPassProcessor.h,添加我们的自定义声明




然后命名




创建Pass对应的Processor
这里,你可以自己完全创建一个自己的Processor,也可以复用MobileBasePassProcessor,自定义Processor的好处是你可以在一个新的shader文件中编写你的代码,但是需要重新绑定你所需要的一些数据。我当时做的时候想图省事,复用MobileBasePassProcessor,结果发现复用MobileBasePassProcessor也是一个特别痛苦的事情,因为MobileBasePassProcessor为了兼容各种灯光数目以前LDR和HDR等功能,用了大量的泛型,好在可以依葫芦画瓢。
打开MobileBasePass.cpp,拉到最下面。


可以看到这个就是为移动平台各个Pass注册创建Processor的方法,我们照着BasePass添加我们的MyPass。
AddMeshBatch
UE有两种MeshBatch,静态和动态,我们需要在这两种MeshBatch遍历中,把MeshBatch挂在我们的Pass上。打开SceneVisibility.cpp,在MarkRelevant方法中添加静态的MeshBatch,在ComputeDynamicMeshRelevance中添加动态的MeshBatch。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Unity开发者联盟 ( 粤ICP备20003399号 )

GMT+8, 2024-9-20 06:33 , Processed in 0.065686 second(s), 23 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表