34 lines
1.1 KiB
HLSL
34 lines
1.1 KiB
HLSL
|
|
// BVLE Voxels - Smooth Surface Nets Vertex Shader (Phase 5.1)
|
||
|
|
// Vertex pulling from StructuredBuffer<SmoothVertex>.
|
||
|
|
// 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<SmoothVtx> 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;
|
||
|
|
}
|