37 lines
1.0 KiB
YAML
37 lines
1.0 KiB
YAML
vertex:
|
|
inout: |
|
|
// SSBO Layout - Default column_major matches Panda3D's internal layout
|
|
layout(std430) buffer transforms {
|
|
mat4 transform_data[];
|
|
};
|
|
|
|
// Input from Vertex Color (Baked ID)
|
|
in vec4 p3d_Color;
|
|
|
|
transform: |
|
|
// Decode Local ID (p3d_Color stores Local ID within chunk)
|
|
int low = int(p3d_Color.r * 255.0 + 0.5);
|
|
int high = int(p3d_Color.g * 255.0 + 0.5);
|
|
int id = high * 256 + low;
|
|
id = clamp(id, 0, 65535);
|
|
|
|
// Fetch Matrix from per-chunk SSBO
|
|
mat4 model = transform_data[id];
|
|
|
|
// Transform Position
|
|
vOutput.position = (model * p3d_Vertex).xyz;
|
|
|
|
// Transform Normal
|
|
vOutput.normal = normalize(mat3(model) * p3d_Normal);
|
|
|
|
post_transform: |
|
|
// Motion blur disabled for performance
|
|
|
|
fragment:
|
|
inout: |
|
|
|
|
|
|
material: |
|
|
vec4 tex_color = texture(p3d_Texture0, vOutput.texcoord);
|
|
if (tex_color.a < 0.5) discard;
|