71 lines
2.1 KiB
GLSL
71 lines
2.1 KiB
GLSL
|
|
// [COMBO] {"combo":"SKINNING"}
|
|
// [COMBO] {"combo":"MORPHING"}
|
|
// [COMBO] {"combo":"MORPHING_NORMALS"}
|
|
// [COMBO] {"combo":"BONECOUNT"}
|
|
// [COMBO] {"combo":"LEAVESUVMODE"}
|
|
|
|
#include "base/model_vertex_v1.h"
|
|
#include "common_foliage.h"
|
|
|
|
uniform mat4 g_ViewportViewProjectionMatrices[6];
|
|
in uint gl_InstanceID;
|
|
varying uint gl_ViewportIndex;
|
|
|
|
attribute vec3 a_Position;
|
|
attribute vec2 a_TexCoord;
|
|
|
|
#if MORPHING
|
|
uniform sampler2D g_Texture1; // {"material":"morph"}
|
|
uniform vec4 g_Texture1Resolution;
|
|
#endif
|
|
|
|
#if ALPHATOCOVERAGE
|
|
varying vec2 v_TexCoord;
|
|
#endif
|
|
|
|
uniform float g_Time;
|
|
uniform float g_SpeedLeaves; // {"material":"foliagespeedleaves"}
|
|
uniform float g_SpeedBase; // {"material":"foliagespeedbase"}
|
|
uniform float g_StrengthLeaves; // {"material":"strengthleaves"}
|
|
uniform float g_StrengthBase; // {"material":"strengthbase"}
|
|
uniform float g_Phase; // {"material":"foliagephase"}
|
|
uniform float g_FoliageScale; // {"material":"foliagescale"}
|
|
uniform float g_Direction; // {"material":"scrolldirection"}
|
|
uniform float g_CutOff; // {"material":"foliagecutoff"}
|
|
uniform float g_TreeHeight; // {"material":"foliageheight"}
|
|
uniform float g_TreeRadius; // {"material":"foliageradius"}
|
|
uniform vec2 g_FoliageUVBounds; // {"material":"foliageuvbounds"}
|
|
|
|
void main() {
|
|
#if ALPHATOCOVERAGE
|
|
v_TexCoord = a_TexCoord;
|
|
#endif
|
|
|
|
vec3 localPos = a_Position;
|
|
|
|
#if MORPHING
|
|
ApplyMorphPosition(gl_VertexID, MAKE_SAMPLER2D_ARGUMENT(g_Texture1), g_Texture1Texel, g_MorphOffsets, g_MorphWeights, localPos);
|
|
#endif
|
|
|
|
vec4 worldPos;
|
|
#if SKINNING
|
|
ApplySkinningPosition(localPos, a_BlendIndices, a_BlendWeights, worldPos);
|
|
#else
|
|
ApplyPosition(localPos, worldPos);
|
|
#endif
|
|
|
|
#if LEAVESUVMODE
|
|
vec2 leafUVs = a_TexCoord;
|
|
#else
|
|
vec2 leafUVs = CAST2(1);
|
|
#endif
|
|
|
|
worldPos.xyz += CalcFoliageAnimation(worldPos.xyz, localPos, leafUVs, g_Direction, g_Time,
|
|
g_SpeedLeaves, g_SpeedBase, g_StrengthLeaves, g_StrengthBase,
|
|
g_Phase, g_FoliageScale, g_CutOff, g_TreeHeight, g_TreeRadius, g_FoliageUVBounds);
|
|
|
|
gl_Position = mul(worldPos, g_ViewportViewProjectionMatrices[gl_InstanceID]);
|
|
gl_ViewportIndex = gl_InstanceID;
|
|
}
|