e4s-sdk/gamedata/shaders/r2/deffer_lod.vs.hlsl
2026-06-17 23:06:51 +03:00

53 lines
1.2 KiB
HLSL

#include "common.hlsli"
uniform float3x4 m_xform;
uniform float3x4 m_xform_v;
uniform float4 consts;
uniform float4 wind;
uniform float4 wave;
uniform float4 c_scale;
uniform float4 c_bias;
uniform float2 c_sun;
void main(in v_tree I, out p_bumped_new O)
{
float4 pos = float4(mul(m_xform, I.P).xyz, 1.0);
float2 tc = I.tc.xy * consts.xy;
float sun = I.Nh.w * c_sun.x + c_sun.y;
float hemi = I.Nh.w * c_scale.w + c_bias.w;
#ifdef USE_TREEWAVE
float base = m_xform._24;
float H = pos.y - base;
float dp = calc_cyclic(wave.w + dot(pos, wave.xyz));
float frac = I.tc.z * consts.x;
float inten = H * dp;
pos.xz += calc_xz_wave(wind.xz * inten, frac);
#endif
float3 Pe = mul(m_V, pos);
O.tcdh = float4(tc.xy, hemi, sun);
O.position = float4(Pe, 1.0f);
float3 N = unpack_bx4(I.Nh);
float3 T = unpack_bx4(I.T);
float3 B = unpack_bx4(I.B);
float3x3 xform = mul((float3x3)m_xform_v, float3x3(
T.x, B.x, N.x,
T.y, B.y, N.y,
T.z, B.z, N.z));
O.M1 = xform[0];
O.M2 = xform[1];
O.M3 = xform[2];
O.hpos = mul(m_VP, pos);
}