Я новичок в программировании шейдеров. Я просто ссылался на некоторые блоги, чтобы узнать больше об этой области. Я наткнулся на эту статью https://halisavakis.com/my-take-on-shaders-grass-shader-part-i/
По их словам, они используют текстуру смещения для расчета вклада ветра
"Мы рассчитываем вклад ветра в выборку текстуры смещения. "
float4 worldPos = mul(unity_ObjectToWorld, midpoint);
float2 windTex = tex2Dlod(_WindTexture, float4(worldPos.xz *
_WindTexture_ST.xy + _Time.y * _WindSpeed, 0.0, 0.0)).xy;
float2 wind = (windTex * 2.0 - 1.0) * _WindStrength;
Объяснение приведенного выше кода:
Выборка текстуры ветра происходит в виде линий 113-114, и это почти тот же метод, который мы видели много раз, когда дело доходит до текстур смещения: выборка текстуры, смещение UV (здесь это компоненты x и z мировой позиции) по времени, а затем отображение всего вещь от -1 до 1 и умножьте его на силу эффекта.
midpoint
здесь представляет середину треугольника. Насколько я понимаю, в mul(unity_ObjectToWorld, midpoint);
мы получаем мировую позицию средней точки
Я действительно не понимаю, что происходит в
float2 windTex = tex2Dlod(_WindTexture, float4(worldPos.xz *
_WindTexture_ST.xy + _Time.y * _WindSpeed, 0.0, 0.0)).xy;
, и я действительно не понимаю, как .xz и .xy работает! Я искал везде и все еще не мог получить хороший гр asp за это!
Может кто-нибудь объяснить? Спасибо!