首页 > 其他分享 >ue4.26 通过材质开关控制mesh pass的blend function

ue4.26 通过材质开关控制mesh pass的blend function

时间:2024-04-28 16:44:36浏览次数:26  
标签:function const ue4.26 MaterialResource 开关 mesh pass 材质 DistortionPassShaders

一,mesh pass中blend function的设置方法

在mesh pass中设置blend function有如下几种方式:

1,在CreateXXXProcessor (返回FXXXProcessor)中:

 2,FXXXProcessor::AddMeshBatch中:

 3,FXXXProcessor::Process中:

 4,RenderXXX中:

 

二,材质开关访问途径

我们知道,访问材质开关有以下几种途径:

1,通过FMaterialRelevance

  ((StaticMeshSceneProxy)PrimitiveSceneProxy).MaterialRelevance.bXXX;

2,通过UMaterial

  Material.bXXX

3,通过FMaterialResource (public FMaterial):

  MaterialResource.IsEnableXXX()

 

三,在mesh pass中访问材质开关

以Distortion pass为例,其SetBlendState是写在CreateDistortionPassProcessor中的,为Add one one:

现在假设我们已经添加了材质开关bDistortionBlendFuncOverride,下面看如何通过这个开关去控制把blend func切换为Add one zero。

由于CreateDistortionPassProcessor中不方便访问到材质开关,而且CreateDistortionPassProcessor为一个创建函数,其中设置blendState只是初始化,只会在特定时刻调用,意味着即使人们在这里面加了条件判断,那么当我们切换开关状态时因为不会再重新创建processor,所以也不会生效。所以还是应该在后面频繁调用的函数中去设置。

比如可以选择在FDistortionMeshProcessor::Process中去设置:

void FDistortionMeshProcessor::Process(
	const FMeshBatch& MeshBatch, 
	uint64 BatchElementMask, 
	const FPrimitiveSceneProxy* RESTRICT PrimitiveSceneProxy,
	int32 StaticMeshId,
	const FMaterialRenderProxy& RESTRICT MaterialRenderProxy,
	const FMaterial& RESTRICT MaterialResource,
	ERasterizerFillMode MeshFillMode,
	ERasterizerCullMode MeshCullMode)
{
	const FVertexFactory* VertexFactory = MeshBatch.VertexFactory;

	TMeshProcessorShaders<
		FDistortionMeshVS,
		FDistortionMeshHS,
		FDistortionMeshDS,
		FDistortionMeshPS> DistortionPassShaders;

	GetDistortionPassShaders(
		MaterialResource,
		VertexFactory->GetType(),
		FeatureLevel,
		DistortionPassShaders.HullShader,
		DistortionPassShaders.DomainShader,
		DistortionPassShaders.VertexShader,
		DistortionPassShaders.PixelShader
		);

	FMeshMaterialShaderElementData ShaderElementData;
	ShaderElementData.InitializeMeshMaterialData(ViewIfDynamicMeshCommand, PrimitiveSceneProxy, MeshBatch, StaticMeshId, false);

	const FMeshDrawCommandSortKey SortKey = CalculateMeshStaticSortKey(DistortionPassShaders.VertexShader, DistortionPassShaders.PixelShader);
	//yang chao begin
   if (MaterialResource.IsEnableDistortionBlendFuncOverride() == true) { PassDrawRenderState.SetBlendState(TStaticBlendState<CW_RGBA, BO_Add, BF_One, BF_Zero, BO_Add, BF_Zero, BF_One>::GetRHI()); }else { PassDrawRenderState.SetBlendState(TStaticBlendState<CW_RGBA, BO_Add, BF_One, BF_One, BO_Add, BF_One, BF_One>::GetRHI()); } //yang chao end
BuildMeshDrawCommands( MeshBatch, BatchElementMask, PrimitiveSceneProxy, MaterialRenderProxy, MaterialResource, PassDrawRenderState, DistortionPassShaders, MeshFillMode, MeshCullMode, SortKey, EMeshPassFeatures::Default, ShaderElementData); }

  

标签:function,const,ue4.26,MaterialResource,开关,mesh,pass,材质,DistortionPassShaders
From: https://www.cnblogs.com/wantnon/p/18164011

相关文章

  • 华为云FunctionGraph构建高可用系统的实践
    本文分享自华为云社区《华为云FunctionGraph构建高可用系统的实践》,作者:华为云PaaS服务小智。导语每年,网上都会报道XXX系统异常不可用,给客户带来巨大的经济损失。云服务的客户基数更大,一旦出现问题,都将给客户和服务自身带来极大影响。本文将基于华为云FunctionGraph自身的实践,......
  • UE4之StaticMesh和SkeletalMesh类关系图
    StaticMesh类关系图StaticMesh渲染数据结构 SkeletalMesh类关系图 USkinnedMeshComponent::CreateRenderState_Concurrent函数voidUSkinnedMeshComponent::CreateRenderState_Concurrent(FRegisterComponentContext*Context){LLM_SCOPE(ELLMTag::SkeletalMesh......
  • C++多态与虚拟:函数重载(Function Overloading)
    重载(Overloading):所谓重载是指不同的函数实体共用一个函数名称。例如以下代码所提到的CPoint之中,有两个memberfunctions的名称同为x():1classCPoint{23public:4floatx();5voidx(floatxval);67};  其两个memberfunctions实现代码如下:1f......
  • JS基础(二)运算符、流程控制语句、数组对象、JSON对象、Date对象、Math对象、Function对
    一运算符<script>//算数运算符//(1)自加运算varx=10;//x=x+1;//x+=2;varret=x++;//先赋值再计算:x+=1//varret=++x;//先计算再赋值:x+=1console.log(x)......
  • SkeletalMesh之MorphTargets技术
    利用变形目标(MorphTargets)可以将网格体从基础形状变为目标形状。通常它们将作为动画系统的一部分与SkeletalMesh一同使用。 导入含有MorphTargets数据的SkeletalMesh 预览SkeletalMesh的MorphTargets效果 在AnimationSequence中添加MorphTarges数值的控制  ......
  • Functional PHP (通义千问)
    FunctionalPHP是一个专为PHP开发者设计的库,旨在引入函数式编程的概念和工具,帮助开发者编写更高效、可读性强的代码。以下是几个使用FunctionalPHP库进行函数式编程的实例:**实例1:简单过滤和映射**假设有一个包含用户数据的数组,我们想要过滤出状态为"active"的用户,并......
  • nuxt3__fetch is not a function
    目录服务端代码调用代码解决思路情景复现:在开发服务端渲染程序时,出现开发环境可以从远程服务器正确获取到数据,但是线上环境无法获取数据并且报错_fetchisnotafunction错误.服务端代码///server/detail.get.jsexportdefaultdefineEventHandler(asyncevent=>......
  • 《Evading EDR》— FUNCTION-HOOKING_DLLS
    最近一直在做EDR相关的工作,虽然略有了解EDR的机制,但是并未深究其完整的工作框架和可能的绕过机制,借工作空闲时间依靠智谱清言阅读一下《EvadingEDRTheDefinitiveGuidetoDefeatingEndpointDetectionSystems》一书。在众多现代端点安全产品的组件中,最常部署的是负责函数......
  • 14、OSPF Mesh-Group
    OSPFMesh-Group定义OSPFMesh-Group是将并行链路场景中的链路分组,从而洪泛时从群组中选取代表链路进行洪泛,避免重复洪泛而造成不必要的系统压力。缺省情况下,不使能Mesh-Group功能。目的当OSPF进程收到一个LSA或者新产生一个LSA时,会进行洪泛操作。并行链路场景下,OSPF会......
  • Fluent Meshing:导入几何报错(Error in CAD Import)
    问题具体描述在使用Fluent自带的划分网格工具时,需要导入几何,在spaceclaim中做好几何处理以后,导入几何却报错:ErrorinCADImport解决方案采用下面的该方法逐一排除路径是否含有中文或者不合规字符等以管理员身份启动软件尝试几何文件和划网格软件版本是否一致Fluent是否安......