正在学习unreal
的材质,有些不一定到位
前提知识交代
- SceneDepth
- CustomDepth
- PixelDepth
这几个概念是这个文章里比较重点的,至于stencil
的话,以后再说吧!
直接进入正题吧!
项目前提
创建一个空的场景
将SM_MatPreviewMesh_01
和TextRenderActor
删除!
创建一个Actor
(Name=”TestActor”)
添加两个StaticMesh
,一个改名为Outline
,一个为Mesh
为这两个StaticMesh
添加同一个mesh
(如果对ue比较熟悉的可以不样!)
将Mesh
的设置改成下图
将Outline
的设置改成下图
SceneDepth
为了方便展示SceneDepth
是什么样的,目前我能想到有两种方式
- 直接使用
G-Buffer
- 使用
postProcess
将其渲染出来!
G-Buffer
整个场景的深度!
postProcess
创建一个PostProcessVolume
,将该Volume
设置成全局生效!
创建一个材质,设置为PostProcess
然后将该材质放置到Volume
中!
此后,我们就能在场景中看到sceneDepth
的效果了!(记得要从G-Buffer
中切回Lit
)
神奇的区域
解决方法:
CustomDepth
CustomDepth
的方法和SceneDepth
一样
G-Buffer:
PostProces:
PixelDepth
PixelDepth
好理解,就是正在渲染的像素点的深度,需要注意的是,如果是透明的物体,因为没有遮挡的问题,同一个像素点会有多次渲染,每次的深度也有可能不同(因为光栅化后,距离相机远的点也需要渲染!)
半透明材质的描边
- 直接基于
CustomDepth
的处理 PostProcess
的处理
基于CustomDepth
的处理
创建一个半透明的材质(Name=”Mat_Tran”),将其模式改为Translucent
;
然后开放自定义深度的写入
如果没有开放Allow Custom Depth Write
的话,在G-Buffer
的CustomDepth
中我们是看不到的!
简单处理一下半透明的材质;
将该材质应用到Mesh
(前文已经说了,可以回去看看 项目前提 )中
准备Outline
创建一个的材质(Name=”Mat_Outline”),将其模式改为Translucent
;这个材质不需要开放CustomDepth
的写入。
比较简单的逻辑,这里就不细说了,如果真的是0基础,多调整几下参数,用笔算一下就可以了。
将Mat_Outline
放置到Outline
中,我们就能看到下图的效果,
注意事项:
因为Tonemapper
的影响,有时候颜色变化貌似不是自己理想中的样色,所以可以暂时取消后看效果!
PostProcess
的处理
这里就有点难度了,一般都是用到卷积
,卷积怎么回事我就不说了,放link;
https://blog.csdn.net/SittingAtThisMoment/article/details/83716251
我这里基本是照着做的
效果: