Sorry for the delay.
So I used indexing because I can never figure out scatter for more than one dimension, but this is what I had in mind
import torch
import math
size = 100
coords = torch.randint(0,size, (50,3))
coords[:, 2] %= 30  # lazy trick, won't be uniformly distributed...

t = torch.zeros(size, size, 30)
t[coords[:, 0], coords[:, 1], coords[:, 2]] = 1
# now we have the peaks at the centres
# let's apply a Gaussian
# you want the kernel to be an odd number, but you can add something if you want
sqcoords = torch.arange(-4,5, device=t.device, dtype=t.dtype)**2
weights = (torch.exp(-(sqcoords[None]+sqcoords[:, None]))/(2*math.pi))[None, None]
t_gauss = torch.nn.functional.conv2d(t.permute(2,0,1).unsqueeze(1), weights, padding=weights.size(-1)//2).squeeze(1).permute(1,2,0)

Best regards
Thomas