UE4 Forward平面反射小记

Forward的Mobile的平面反射流程小记

主要相关的几个文件

 首先截帧看,如果场景中有planarReflection组件,那后面不管有没有用到。这张反射的RT都会渲

 

如果是Deffered的流程,则会先走一次SceneColor的BilinearFiltering,然后再在FDeferredShadingSceneRenderer::RenderDeferredPlanarReflections中走PlanarReflectionShaders.usf中的PlanarReflectionPS并将ComputePlanarReflections的结果存在ReflectionsOutputTexture中返回。

 然后再将结果存到ScreenSpaceReflectionsTexture中给到后面的ReflectionEnvironmentPixelShader中的反射计算用。

如果是Forward的流程,则在MobileBasePassPixelShader中就会调用ComputePlanarReflections

 所以可以知道反射贴图的采样逻辑主要在ComputePlanarReflections中,如MobileForward下的Unlit材质可以直接在CustomNode中用,或者直接采样PlanarReflectionTexture来获得反射信息。但要注意得在MaterialTemplate中include一下不然获取不到。

OK知道了以上采样反射结果后的流程,接下来我们更关注的是创建和赋值PlanarReflectionTexture的过程

 

 

 UE4 Forward平面反射小记_第1张图片

 

可以看到最后传进来的RT就是平面反射组件的RT

所以平面反射主要的设置就在FScene::UpdatePlanarReflectionContents中,我们来看看他的流程

首先会根据平面反射组件的ScreenPercentage参数创建设置相应大小的RT。也就是平面反射组件这里这个参数

 

 之后的设置引擎的注释都很明确,到下面的矩阵计算设置

UE4 Forward平面反射小记_第2张图片

 https://blog.csdn.net/puppet_master/article/details/80808486?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522166246238216782248577259%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fblog.%2522%257D&request_id=166246238216782248577259&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~blog~first_rank_ecpm_v1~rank_v31_ecpm-1-80808486-null-null.nonecase&utm_term=%E5%8F%8D%E5%B0%84&spm=1018.2226.3001.4450

我们知道镜面反射的基本逻辑是根据反射平面的反射矩阵,在MV后加入反射变换最后再P

可以在MirrorMatrix的构造函数中看到UE的反射矩阵

UE4 Forward平面反射小记_第3张图片

 UE4 Forward平面反射小记_第4张图片

BulidProjectionMatrix()和SetupViewFamilyForSceneCapture()的具体实现可以在SceneCaptureRendering中看到

同时在里面我们也能看到其他类型的SceneCapture的更新函数

这里只关心平面反射的内容,继续回到UpdatePlanarReflectionContents,可看到在View相关设置后,创建了SceneRenderer,CreateSceneRenderer函数在创建时就已经判断好了类型。

 UE4 Forward平面反射小记_第5张图片

 所以之后传入UpdatePlanarReflectionContents_RenderThread后会在里面调Render主渲染函数。这样就会在prefilterPlanarReflection前先画一遍反射的场景了

 UE4 Forward平面反射小记_第6张图片

 

你可能感兴趣的:(学习笔记,ue4)