You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
80 lines
2.1 KiB
Plaintext
80 lines
2.1 KiB
Plaintext
2 weeks ago
|
/******************************************************************************/
|
||
|
/*
|
||
|
Project - MudBun
|
||
|
Publisher - Long Bunny Labs
|
||
|
http://LongBunnyLabs.com
|
||
|
Author - Ming-Lun "Allen" Chou
|
||
|
http://AllenChou.net
|
||
|
*/
|
||
|
/******************************************************************************/
|
||
|
|
||
|
#pragma kernel update_ray_traced_voxel_indirect_dispatch_args
|
||
|
#pragma kernel compute_ray_traced_voxel_gen_points
|
||
|
#pragma kernel compute_ray_traced_voxel_gen_points_with_normals
|
||
|
|
||
|
#include "../../Shader/ComputeCommon.cginc"
|
||
|
|
||
|
#include "../../Shader/AabbTreeFuncs.cginc"
|
||
|
#include "../../Shader/AutoSmoothDefs.cginc"
|
||
|
#include "../../Shader/BrushFuncs.cginc"
|
||
|
#include "../../Shader/GenPointDefs.cginc"
|
||
|
#include "../../Shader/IndirectArgsDefs.cginc"
|
||
|
#include "../../Shader/Math/MathConst.cginc"
|
||
|
#include "../../Shader/VoxelFuncs.cginc"
|
||
|
|
||
|
[numthreads(1, 1, 1)]
|
||
|
void update_ray_traced_voxel_indirect_dispatch_args(int3 id : SV_DispatchThreadID)
|
||
|
{
|
||
|
indirectDispatchArgs[0] =
|
||
|
max
|
||
|
(
|
||
|
1,
|
||
|
uint
|
||
|
(
|
||
|
aNumNodesAllocated[0]
|
||
|
+ kThreadGroupSize - 1
|
||
|
) / kThreadGroupSize
|
||
|
);
|
||
|
}
|
||
|
|
||
|
void fill_gen_points_basic(int iNode)
|
||
|
{
|
||
|
int iBrushMask = get_brush_mask_index(iNode);
|
||
|
|
||
|
SdfBrushMaterial mat;
|
||
|
sdf_masked_brushes(nodePool[iNode].center, iBrushMask, mat);
|
||
|
|
||
|
aGenPoint[iNode].material = pack_material(mat);
|
||
|
aGenPoint[iNode].iBrushMask = iBrushMask;
|
||
|
}
|
||
|
|
||
|
void fill_gen_points_normal(int iNode)
|
||
|
{
|
||
|
float3 n;
|
||
|
SDF_NORMAL(n, nodePool[iNode].center, sdf_masked_brushes, nodePool[iNode].iBrushMask, 1e-2f * voxelNodeSizes[3]);
|
||
|
|
||
|
aGenPoint[iNode].posNorm.w = pack_normal(n);
|
||
|
}
|
||
|
|
||
|
[numthreads(kThreadGroupSize, 1, 1)]
|
||
|
void compute_ray_traced_voxel_gen_points(uint3 id : SV_DispatchThreadID)
|
||
|
{
|
||
|
int iNode = id.x;
|
||
|
if (iNode >= aNumNodesAllocated[0])
|
||
|
return;
|
||
|
|
||
|
fill_gen_points_basic(iNode);
|
||
|
}
|
||
|
|
||
|
[numthreads(kThreadGroupSize, 1, 1)]
|
||
|
void compute_ray_traced_voxel_gen_points_with_normals(uint3 id : SV_DispatchThreadID)
|
||
|
{
|
||
|
int iNode = id.x;
|
||
|
if (iNode >= aNumNodesAllocated[0])
|
||
|
return;
|
||
|
|
||
|
fill_gen_points_basic(iNode);
|
||
|
fill_gen_points_normal(iNode);
|
||
|
}
|
||
|
|