// BVLE Voxels - Smooth Surface Nets Vertex Shader (Phase 5.1) // Vertex pulling from StructuredBuffer. // Each vertex is 32 bytes: float3 pos, float3 normal, uint matPacked, uint16 chunkIndex. #include "voxelCommon.hlsli" struct SmoothVtx { float3 position; // world-space position (chunk origin already added) float3 normal; // face normal uint matPacked; // materialID(8) | secondaryMat(8) | blendWeight(8) | pad(8) uint chunkIndex; // packed: chunkIndex in low 16 bits }; StructuredBuffer smoothVertices : register(t6); struct VSOutput { float4 position : SV_POSITION; float3 worldPos : WORLDPOS; float3 normal : NORMAL; nointerpolation uint matPacked : MATERIALID; }; [RootSignature(VOXEL_ROOTSIG)] VSOutput main(uint vertexID : SV_VertexID) { SmoothVtx vtx = smoothVertices[vertexID]; VSOutput output; output.position = mul(viewProjection, float4(vtx.position, 1.0)); output.worldPos = vtx.position; output.normal = vtx.normal; output.matPacked = vtx.matPacked; // pass all packed material data to PS return output; }