@@ -11,7 +11,7 @@ namespace VoxelSystem {
1111
1212public class GPUVoxelizer {
1313
14- protected const string kVolumeKernelKey = "Volume" , kSurfaceKernelKey = "Surface " , kTextureKernelKey = "BuildTexture3D" ;
14+ protected const string kVolumeKernelKey = "Volume" , kSurfaceFrontKernelKey = "SurfaceFront" , kSurfaceBackKernelKey = "SurfaceBack ", kTextureKernelKey = "BuildTexture3D" ;
1515protected const string kStartKey = "_Start" , kEndKey = "_End" , kSizeKey = "_Size" ;
1616protected const string kUnitKey = "_Unit" , kInvUnitKey = "_InvUnit" , kHalfUnitKey = "_HalfUnit" ;
1717protected const string kWidthKey = "_Width" , kHeightKey = "_Height" , kDepthKey = "_Depth" ;
@@ -88,21 +88,31 @@ public static GPUVoxelData Voxelize(ComputeShader voxelizer, Mesh mesh, Bounds b
8888voxelizer . SetInt ( kDepthKey , d ) ;
8989
9090// send mesh data
91- var surfaceKer = new Kernel ( voxelizer , kSurfaceKernelKey ) ;
92- voxelizer . SetBuffer ( surfaceKer . Index , kVertBufferKey , vertBuffer ) ;
93- voxelizer . SetBuffer ( surfaceKer . Index , kUVBufferKey , uvBuffer ) ;
9491voxelizer . SetInt ( kTriCountKey , triBuffer . count ) ;
9592 var indexes = triBuffer . count / 3 ;
9693voxelizer . SetInt ( kTriIndexesKey , indexes ) ;
97- voxelizer . SetBuffer ( surfaceKer . Index , kTriBufferKey , triBuffer ) ;
98- voxelizer . SetBuffer ( surfaceKer . Index , kVoxelBufferKey , voxelBuffer ) ;
99- voxelizer . Dispatch ( surfaceKer . Index , indexes / ( int ) surfaceKer . ThreadX + 1 , ( int ) surfaceKer . ThreadY , ( int ) surfaceKer . ThreadZ ) ;
94+
95+ // surface front
96+ var surfaceFrontKer = new Kernel ( voxelizer , kSurfaceFrontKernelKey ) ;
97+ voxelizer . SetBuffer ( surfaceFrontKer . Index , kVertBufferKey , vertBuffer ) ;
98+ voxelizer . SetBuffer ( surfaceFrontKer . Index , kUVBufferKey , uvBuffer ) ;
99+ voxelizer . SetBuffer ( surfaceFrontKer . Index , kTriBufferKey , triBuffer ) ;
100+ voxelizer . SetBuffer ( surfaceFrontKer . Index , kVoxelBufferKey , voxelBuffer ) ;
101+ voxelizer . Dispatch ( surfaceFrontKer . Index , indexes / ( int ) surfaceFrontKer . ThreadX + 1 , ( int ) surfaceFrontKer . ThreadY , ( int ) surfaceFrontKer . ThreadZ ) ;
102+
103+ // surface back
104+ var surfaceBackKer = new Kernel ( voxelizer , kSurfaceBackKernelKey ) ;
105+ voxelizer . SetBuffer ( surfaceBackKer . Index , kVertBufferKey , vertBuffer ) ;
106+ voxelizer . SetBuffer ( surfaceBackKer . Index , kUVBufferKey , uvBuffer ) ;
107+ voxelizer . SetBuffer ( surfaceBackKer . Index , kTriBufferKey , triBuffer ) ;
108+ voxelizer . SetBuffer ( surfaceBackKer . Index , kVoxelBufferKey , voxelBuffer ) ;
109+ voxelizer . Dispatch ( surfaceBackKer . Index , indexes / ( int ) surfaceBackKer . ThreadX + 1 , ( int ) surfaceBackKer . ThreadY , ( int ) surfaceBackKer . ThreadZ ) ;
100110
101111 if ( volume )
102112 {
103113 var volumeKer = new Kernel ( voxelizer , kVolumeKernelKey ) ;
104114 voxelizer . SetBuffer ( volumeKer . Index , kVoxelBufferKey , voxelBuffer ) ;
105- voxelizer . Dispatch ( volumeKer . Index , w / ( int ) volumeKer . ThreadX + 1 , h / ( int ) volumeKer . ThreadY + 1 , ( int ) surfaceKer . ThreadZ ) ;
115+ voxelizer . Dispatch ( volumeKer . Index , w / ( int ) volumeKer . ThreadX + 1 , h / ( int ) volumeKer . ThreadY + 1 , ( int ) surfaceFrontKer . ThreadZ ) ;
106116 }
107117
108118// dispose
0 commit comments