
43:51
How I built a realistic grass shader in UE5! Shader driven bend, clump, tilt, wind and more!
Ghislain Girardot
Overview
本视频深入探讨了如何在虚幻引擎5(UE5)中使用World Position Offset(WPO)技术创建逼真的动画草。作者展示了如何通过操纵顶点位置来实现草的弯曲、摇摆、倾斜、聚集和风吹等效果,并详细介绍了实现这些效果的着色器技巧和工具。视频还讨论了法线重建、不透明度处理以及相机朝向逻辑,旨在最大化像素覆盖率和视觉真实感,同时权衡性能成本。
How was this?
Save this permanently with flashcards, quizzes, and AI chat
Chapters
- 草网格采用扁平卡片状设计,全部沿X轴正方向对齐,以便于后续的World Position Offset(WPO)操作。
- 使用第一张UV贴图来映射草的纹理。
- 利用数据烘焙插件(Data Baker Blender addon)烘焙了卡片的轴心点(pivot)和UV坐标。
- 烘焙了垂直轴上的归一化高度和水平轴上的每张卡片的随机值,为后续的WPO效果提供数据支持。
这种非传统的网格设计和预先烘焙的数据是实现高度可控和随机化草效果的基础,为后续的着色器操作奠定了关键基础。
草网格由一系列平直的、沿X轴对齐的扁平卡片组成,看起来像一排排整齐的木板,而不是典型的草叶模型。
- 通过从世界位置减去自身来将所有顶点折叠到世界原点。
- 添加顶点局部位置并减去烘焙的轴心点,将卡片居中到零点。
- 应用实例缩放(Instance Scale)和旋转,围绕卡片的轴心点进行变换。
- 使用实例淡出(Instance Fade)节点平滑处理远距离的实例剔除,避免硬边缘。
这些基础的WPO操作是定位、缩放和初步变换草卡片的核心,确保它们在世界中正确放置并准备好进行更复杂的效果处理。
将所有草卡片先聚集到原点,然后通过计算和应用轴心点偏移,将每张卡片精确地放置到其预设的基准位置上。
- 通过构建三个轴并使用3x3矩阵来旋转每张草卡片,实现比传统三角函数更简单高效的旋转。
- 利用顶点法线(Vertex Normals)存储每张卡片烘焙的随机2D方向,作为新的X轴。
- 通过交叉积(Cross Product)计算新的Y轴,与X轴共同定义新的坐标系。
- 可以利用烘焙到顶点法线或UV中的随机2D方向来驱动卡片的随机旋转。
随机旋转和倾斜是增加草视觉多样性和自然感的关键,避免了所有草叶都指向同一方向的单调感。
使用一个工具(如Blender中的插件)将每个草卡片烘焙的随机2D方向存储在顶点法线中,然后在着色器中读取这个法线来驱动卡片的旋转。
- 利用实例的世界位置变换得到地形法线(Landscape Normal)。
- 将地形法线作为新的Z轴,通过两次交叉积计算出新的X和Y轴,构建一个3x3变换矩阵。
- 使用Lurp节点在垂直方向和基于地形法线的方向之间插值,控制草叶的倾斜程度。
- 可以通过偏移Z向量来进一步调整草叶的倾斜角度,甚至使用纹理来驱动这种偏移,实现聚集效果。
使草叶能跟随地形起伏,这是实现逼真草地效果的重要一步,让草看起来像是自然生长在地面上。
草叶会根据其所在位置的地形法线进行倾斜,在山坡上草叶会顺着坡度生长,而不是笔直地向上。
- 开发了一个编辑器工具(Editor Utility Widget)来生成聚集贴图(Clump Map)。
- 该工具通过绘制随机化的笔刷笔触来生成纹理,模拟自然的聚集形态。
- 使用一个双曲面球形遮罩(Bilateral Sphere Mask)来控制聚集效果的衰减,避免中心点过度交叉。
- 通过将聚集贴图的UV偏移添加到草卡片的Z向量偏移中,实现草叶向特定点聚集的效果。
- 聚集贴图的UV坐标可以进一步通过顶点法线中的随机方向进行偏移,增加聚集的混乱感。
聚集效果是提升草地视觉丰富度和真实感的关键,使草看起来不是孤立的单株,而是形成自然的草丛。
使用一个工具绘制的纹理,使得附近的草叶倾向于朝向纹理上的某个点聚集,形成一簇簇的草丛外观。
- 利用风力纹理(Wind Texture)的2D风速向量来驱动草叶的摆动。
- 通过计算草叶朝向与风向的点积(Dot Product),来调制风力对草叶的影响程度,实现迎风时草叶更直的效果。
- 使用烘焙的草叶高度渐变(Top-down gradient)和Lurp节点,在草叶长度方向上实现弯曲效果。
- 通过噪声纹理驱动草叶的自然弯曲(Resting Pose),并根据风力大小调整弯曲程度,风越大草叶越直。
- 草叶的弯曲效果基于X轴对齐的网格,并应用了与草叶旋转相同的变换矩阵。
风力和自然弯曲是草动态表现的核心,使草地在静态和动态中都显得生动自然。
当风力增强时,草叶会从自然的弯曲姿态逐渐变得笔直,并且整体向风吹来的方向倾斜。
- 通过将草卡片旋转至朝向相机,最大化像素覆盖率,提升视觉密度。
- 使用视图空间(View Space)或相机空间(Camera Space)来计算朝向相机的向量。
- 需要将相机朝向逻辑应用于草叶弯曲和旋转之前,以获得正确的效果。
- 通过“反向旋转”视图向量来补偿草叶自身的旋转,确保最终朝向相机。
- 这种技术在大量草叶组成的场景中效果显著,能显著提升视觉密度,且性能开销可控。
最大化像素覆盖率是提升草地视觉密度和真实感的关键技术,尤其是在远景和低多边形草叶模型中。
即使草叶本身是弯曲或随机旋转的,它们也会被调整姿态,使其尽可能地正面朝向玩家的视角,看起来更茂密。
- 由于WPO操作复杂,直接重建世界空间法线比修复现有法线更简单。
- 可以选择使用向上法线(Upward Normals)或前向法线(Forward Normals),并结合双面着色模型。
- 通过Lurp节点在世界法线和倾斜方向之间插值,确保风力和聚集效果影响法线,从而影响光照。
- 将切线空间(Tangent Space)的法线贴图重新映射到世界空间,需要根据草叶的变换矩阵进行坐标系转换。
- 可以混合使用向上和前向法线,或根据光照条件调整法线方向以获得最佳视觉效果。
正确的法线重建和法线贴图处理是实现逼真光照和细节的关键,直接影响草叶的立体感和质感。
草叶表面的光照会根据其弯曲、倾斜和风吹状态动态变化,即使在不同光照条件下(如日出日落)也能保持良好的视觉效果。
- 使用LOD(Level of Detail)来平滑过渡不同细节级别的草网格,减少视觉突变。
- 采用沙漠蒙版不透明度(Desert Mask Opacity)来获得更平滑的边缘和蓬松的外观。
- 需要注意Mipmap生成可能导致沙漠蒙版不透明度在远处失效,可通过调整Mipmap生成选项或手动编辑Mipmap来解决。
- 可以使用“沙漠跳动抗锯齿”(Desert Jitter AA)来模拟光线穿透草叶的效果,并减少阴影的厚重感。
- 通过在阴影通道(Shadow Pass)中调整草卡片的尺寸或不透明度,可以增强远景草地的密度感。
精细的不透明度控制和LOD优化是保证草地在不同距离下都能保持良好视觉效果和性能的关键。
在近处,草叶边缘有细微的透明度变化,看起来更蓬松;在远处,草叶会变得更密集,阴影更厚重,以维持视觉密度。
- 草卡片上可以包含多个草叶,以增加视觉丰富度并减少卡片感。
- 使用像素深度偏移(Pixel Depth Offset)来模拟草叶间的深度差异,增加立体感。
- 最终的着色器包含基础颜色、粗糙度、高光、不透明度、世界位置偏移和法线等通道。
- 虽然WPO效果丰富,但顶点着色器计算量大,需要严格控制顶点数和减少过绘制(Overdraw)。
- 作者选择不使用Nanite和虚拟阴影贴图(Virtual Shadow Maps),因为它们与WPO的兼容性尚不完美,且作者更倾向于使用熟悉的技术。
理解并平衡视觉效果与性能开销是实现大规模逼真场景的关键,作者通过多种技术手段在两者之间找到了折衷方案。
即使草卡片看起来是平面的,但通过像素深度偏移,某些草叶会显得比其他草叶更靠前或靠后,增加了卡片的立体感。
Key takeaways
- World Position Offset(WPO)是实现复杂草地动画和形态控制的强大工具,可以实现弯曲、倾斜、聚集和风吹等多种效果。
- 通过在Blender中预先烘焙数据(如轴心点、随机方向、高度)到网格的UV或顶点法线中,可以极大地简化和增强着色器中的WPO效果。
- 草叶的随机旋转、倾斜和跟随地形是提升自然感的关键,可以通过构建变换矩阵和利用地形法线来实现。
- 聚集(Clump)效果可以通过自定义工具生成贴图,并利用该贴图驱动草叶的朝向和位置偏移,从而形成自然的草丛。
- 相机朝向逻辑(Billboard)对于最大化像素覆盖率和提升视觉密度至关重要,但需要注意其与草叶自身变换(如弯曲)的顺序和兼容性。
- 法线重建和法线贴图的处理是实现逼真光照的关键,需要仔细考虑不同空间坐标系下的变换和插值。
- LOD和不透明度蒙版(如沙漠蒙版)是优化草地性能和视觉效果的重要手段,需要注意Mipmap对这些效果的影响。
- 虽然WPO功能强大,但其性能成本较高,尤其是在顶点着色器阶段,因此需要严格控制网格复杂度、LOD和过绘制。
Key terms
World Position Offset (WPO)虚幻引擎5 (UE5)Blender顶点法线 (Vertex Normals)UV贴图 (UV Mapping)变换矩阵 (Transformation Matrix)交叉积 (Cross Product)聚集贴图 (Clump Map)相机朝向逻辑 (Camera Facing Logic / Billboard)LOD (Level of Detail)Mipmap像素深度偏移 (Pixel Depth Offset)法线重建 (Normal Reconstruction)切线空间 (Tangent Space)世界空间 (World Space)
Test your understanding
- World Position Offset(WPO)是如何被用来实现草叶的随机旋转和倾斜的?
- 在视频中,作者是如何利用顶点法线来存储和应用草叶的随机2D方向的?
- 解释一下为什么在实现相机朝向逻辑时,需要先应用草叶的弯曲和旋转,然后再进行相机朝向的计算。
- 作者是如何通过自定义工具和贴图来创建草丛聚集(Clump)效果的?
- 在处理草叶的法线时,为什么作者认为直接重建世界空间法线比修复现有法线更有效?