UE4·体积材质
1 min to read
打算用houdini在UE4里做一些奇形怪状的体积云和气雾效果,故此有了本文。
体积云的常见做法,一种是2D贴片云,一种是3D体积云。
贴片云之前在Unity Procedural Skybox中有类似的实现,使用了一张noise贴图,通过cutoff凸显出云的形状,加以扰动和多层颜色可以呈现出不错的风格化云效果。
最近看到知乎上这位老哥在做写实风的公告牌云,使用houdini制作形状和法线的贴图,flipbook制作云的扰动动画,效果更加写实精细。简言之贴片云是制作云的一种廉价方案,个人感觉用作高空区域的云可能跟体积云也没啥区别。
而3D体积云则有切实的“体积”,体积感更强,可以用在一些近距离的场景,也可以实现与物体交互的效果。
关于体积材质的制作,主要看了这篇帖子,介绍了SD制作体积贴图的方法,里面提到的shaderbit网站中的相关博文帮助很大,对体积材质渲染的原理也有详细描述。本文也会提到houdini制作体积贴图的做法。
关于体积云
之前看RTR有写过一篇笔记,最近又补上了部分内容,关于这部分的理论解释差不多完整了(在梦里,还有一半没看…)。
使用SD制作3D贴图
3D贴图将一张贴图分割为a × a等份,自左到右自上到下一次读取单份贴图,全部读完堆砌起来,就构成了3D贴图。
在SD中通过构造3D position图来获取3D贴图中各个切片在一张正方形贴图中的位置。然后通过SD的3D系列节点在各个位置上生成所需形状。
下图为一个球形3D贴图的生成过程:
通过RGBA Merge
在各个通道上组合出3D贴图的position图,其中RG通道构成单张贴图的uv信息,B通道确定各个切片在一张贴图中的位置信息。
之后将position图输入3D volume mask
,可以获得球形的3D体积贴图。(注意如果长宽为偶数,就会出现下图这样,有一行空出来的情况…)
注意3Dtexture的alpha通道会影响渲染效果,如果想要获得准确的3D形状,alpha通道需要设置与mask相同,可以用Alpha merge
组合mask到透明通道。
使用Houdini制作3D贴图
Houdini的Labs工具提供了Volume Texture
节点,用于从体积生成3D贴图。需要进节点里修改一下透明通道,不然导出图片会有灰色背景色。
UE4体积材质
在UE4中创建体积贴图(volume texture),将上面制作的3D贴图应用上。左上view
可以切换贴图模式或3D体积预览模式,如果体积显示为全黑,大概是alpha通道没关。
体积贴图创建完毕后,将贴图直接拖到模型上,UE4会自动帮忙创建体积材质,但是那个材质我没跑通,我用的材质长下面这样:
应用材质到模型后,记得在场景中放入exponential height fog
并打开其下的Volumetric fog
选项!否则几乎啥也看不见,不明显的话打一盏spot light会更清楚。
最终效果如下。