Качение травы идентично террейновской

Общие вопросы о Unity3D

Качение травы идентично террейновской

Сообщение jetyb 27 сен 2013, 10:56

Здравствуйте.
Как сделать собственную траву, которая качается также как и встроенная террейновская?
В исходных шейдерах качение травы задается здесь:
Синтаксис:
Используется csharp
CBUFFER_START(UnityTerrain)
     float4 _WaveAndDistance;     // wind speed, wave size, wind amount, max sqr distance
CBUFFER_END

//vertex - позиция вершины, ее тут двигают
//waveAmount - высота вершины относительно травинки
//color не нужен
fixed4 TerrainWaveGrass (inout float4 vertex, float waveAmount, fixed4 color)
{  
       //какие-то магические числа
      float4 _waveXSize = float4(0.012, 0.02, 0.06, 0.024) * _WaveAndDistance.y;
      float4 _waveZSize = float4 (0.006, .02, 0.02, 0.05) * _WaveAndDistance.y;
      float4 waveSpeed = float4 (0.3, .5, .4, 1.2) * 4;

      float4 _waveXmove = float4(0.012, 0.02, -0.06, 0.048) * 2;
      float4 _waveZmove = float4 (0.006, .02, -0.02, 0.1);

      float4 waves;
      waves = vertex.x * _waveXSize;
      waves += vertex.z * _waveZSize;

      // Add in time to model them over time
       waves += _WaveAndDistance.x * waveSpeed;

        //s - вектор из 4 степеней синуса waves
        float4 s, c;
        waves = frac (waves);
        FastSinCos (waves, s,c);
        s = s * s;     
        s = s * s;

        s = s * waveAmount;
        float3 waveMove = float3 (0,0,0);
        waveMove.x = dot (s, _waveXmove);
        waveMove.z = dot (s, _waveZmove);

        //собственно само движение вершины от ветра
        vertex.xz -= waveMove.xz * _WaveAndDistance.z;
}
 

Как видно, качение травы определяется внешней переменной _WaveAndDistance. Но если я просто создаю ГО со своим подобным шейдером, то качения не наблюдается, видимо потому что _WaveAndDistance в моем шейдере не меняется, а значение качения пишется скриптом террейна только непосредственно в CBuffer материала травы мимо моего шейдера.

Собственно для создания идентичного качения надо
либо знать по каким принципам считается _WaveAndDistance в террейне
либо каким-то образом вытащить это значение из материала травы
Есть наводки?
jetyb
Адепт
 
Сообщения: 1486
Зарегистрирован: 31 окт 2011, 17:21

Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 12