赞
踩
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的过程
可以看到最后传进来的RT就是平面反射组件的RT
所以平面反射主要的设置就在FScene::UpdatePlanarReflectionContents中,我们来看看他的流程
首先会根据平面反射组件的ScreenPercentage参数创建设置相应大小的RT。也就是平面反射组件这里这个参数
之后的设置引擎的注释都很明确,到下面的矩阵计算设置
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的反射矩阵
BulidProjectionMatrix()和SetupViewFamilyForSceneCapture()的具体实现可以在SceneCaptureRendering中看到
同时在里面我们也能看到其他类型的SceneCapture的更新函数
这里只关心平面反射的内容,继续回到UpdatePlanarReflectionContents,可看到在View相关设置后,创建了SceneRenderer,CreateSceneRenderer函数在创建时就已经判断好了类型。
所以之后传入UpdatePlanarReflectionContents_RenderThread后会在里面调Render主渲染函数。这样就会在prefilterPlanarReflection前先画一遍反射的场景了
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。