Трудность в понимании того, как работает tex2Dlod - PullRequest
0 голосов
/ 30 января 2020

Я новичок в программировании шейдеров. Я просто ссылался на некоторые блоги, чтобы узнать больше об этой области. Я наткнулся на эту статью 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 за это!

Может кто-нибудь объяснить? Спасибо!

...