统一的2D水

时间:2018-04-25 08:17:30

标签: unity3d shader

我编写了一个类似于this的弹簧的2D水效果。现在我想在顶点着色器(Unity)中实现它。但是对于Wave Propagation,我需要知道当前Vertex的左右邻居(计算影响力)并以某种方式保存所产生的力以进行下一次迭代。我不知道怎么做。

1 个答案:

答案 0 :(得分:0)

您应该创建顶点操作所需偏移的纹理表示,然后在顶点着色器中使用tex2lod() - 这些在着色器模型3及更高版本中受支持。

然后使用片段着色器生成或更新纹理。

你的顶点着色器看起来像这样:

sampler2D _OffsetMap;

// vertex shader
vert_data vert (appdata_base v) {
     vert_data v_out;
     float4 vertexPos = v.vertex;
     vertexPos += tex2Dlod (_OffsetMap, float4(vertexPos.xz, 0, 0));
     v_out.position = UnityObjectToClipPos (vertexPos);
     return v_out;
}

你也可以使用相同的提取来操纵顶点法线。