UE5仿对马岛程序化草生成

1. 核心渲染:基于贝塞尔曲线的程序化草叶生成
摒弃传统静态 Mesh,在顶点着色器中通过二次贝塞尔曲线公式实时重构草叶几何体,仅用单个 Rectangle 基元即可参数化生成不同形态(细长/矮胖)的草叶。
关键实现:
- 利用 3 次 Lerp 节点计算曲线上的点 P(t),并通过减去 (t,0) 修正 UV 偏移,乘以 100 适配 UE 单位;
- 将控制点 P1 解耦为 MidPoint(位置)与 Curve(曲率)两个材质参数,支持美术实时调节草叶弯曲度;
- 通过 UV.v 通道构建宽度 Mask,结合草尖形状 Mask 与"胖度"控制点,精确裁剪出自然草叶轮廓;
- 手动完成 Instance Space 到 World Space 的变换矩阵转换,确保草叶正确响应物体 Transform。

2. 高级法线重建:解决薄片感与束状质感
针对程序化草叶无原始法线的问题,通过数学推导重建高质量法线,并模拟真实草叶的内折/外倾光学特征,避免 GBuffer 中出现默认的 (0,0,1) 平面法线。
关键实现:
- 导数法线:对贝塞尔曲线求导得到切线 T,旋转 90° 获得法线 XZ 分量,再叉乘得到 Y 分量,保证法线与曲面严格垂直;
- 柱状外倾:参考《对马岛之魂》GDC 分享,沿法线反方向偏移采样点后重新计算连线向量,使草叶呈现圆润的柱状光照;
- 束状内折:通过 UV 构造 V/W/WW 形 Mask,混合 RimPosition 参数模拟草叶向内翻折的真实形态,增强体积感。

3. 风格化着色系统:还原对马岛视觉特征
定制化 PBR+NPR 混合着色模型,解决远处草地闪烁问题,并还原草尖褪色、脉络纹理等生物细节。
关键实现:
- 距离自适应高光:基于 CameraDistance 构建衰减 Mask,动态提升远景 Roughness 值,抑制风吹动画导致的 Specular 高频闪烁(Noise);

- 生物细节模拟:复用 Roughness Noise 作为 Vein Mask 驱动 BaseColor 变化;通过 UV 顶部 Mask + PCG 传入的 Random Attribute 混合,实现每株草独立的草尖褪色效果;

- 厚度补偿:根据 ViewDir 与草叶法线的夹角,动态倾斜 WPO 偏移量,解决侧面观察时草叶过薄被 Clip 的问题。
4. 双层风场动画系统:Swell + Flutter
分离"宏观风浪"与"微观飘动"两层动画逻辑,通过贝塞尔曲线控制点驱动而非简单顶点偏移,实现符合物理直觉的柔性摆动。
关键实现:
- Wind Swell(风浪):采样 3 层 Perlin Noise 叠加后 Remap 至 (0,1),经 Sine 函数平滑处理,驱动整片草场的波浪式起伏;
- Wind Flutter(飘动):仅依赖 PerInstanceRandom 提供单株随机性,通过 FlutterLength/Speed 参数控制局部高频颤动,避免全场同步摆动的机械感;
- 动画融合:将 Swell 与 Flutter 结果叠加后作用于贝塞尔曲线控制点 P1/P2,而非直接修改顶点位置,保证形变过程中曲线连续性。

5. PCG 数据驱动生成管线
搭建完整的 UE5 PCG Graph,实现百万级草地的数据化分布、分簇聚集与智能剔除,兼顾视觉效果与运行时性能。
关键实现:
- 自定义属性传递:通过 Add Attribute 节点创建 Rand0/Rand1 两组浮点随机数,经 Attribute Noise 扰动后写入 PerInstanceCustomData,供材质读取实现逐株差异化;
- Voronoi 分簇:使用 Spatial Noise (Voronoi) 生成 ClumpID,按 ID 区间过滤点位并应用独立 Transform,模拟自然界草丛的聚集生长规律;
