EG/ssbo_component/effects/ssbo_instancing.yaml
2026-02-25 11:49:31 +08:00

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;