mirror of
https://github.com/blender/blender
synced 2026-09-29 04:37:17 +03:00
GSplat: Initial rendering support for Cycles
Based on the "Stochastic ray tracing of transparent 3D Gaussians" paper by Xin Sun et. al. The basic idea: perform stochastic intersection with the Gaussian splat based on its transparency. Gaussian splats are implemented as a dedicated primitive type, but it shares the same layout for position and radius as points, so a lot of existing functions (positions, attributes, etc) work for both points and splats. For the Embree and hardware intersection it is implemented as a custom primitive type. The choice of using bounding spheres mainly comes from a balance between performance and memory usage. More ideal would be to use OBB, but it is not supported for custom primitive types in Embree and GPU HW-RT on all backends. There is a known limitation that comes from the fact that the datasets are trained in sRGB space and Cycles work in Linear space: areas with low opacity and high radiance render noticeably differently from the ground-truth implementation. Ref #159470 Pull Request: https://projects.blender.org/blender/blender/pulls/163103
This commit is contained in:
parent
1bd98e9649
commit
819d52f3d2
55 changed files with 1697 additions and 79 deletions
|
|
@ -925,6 +925,7 @@ if((WITH_CYCLES OR WITH_GPU_RENDER_TESTS) AND TEST_SRC_DIR_EXISTS)
|
|||
camera
|
||||
colorspace
|
||||
bsdf
|
||||
gsplat
|
||||
hair
|
||||
image_colorspace
|
||||
image_data_types
|
||||
|
|
|
|||
|
|
@ -351,6 +351,11 @@ def main():
|
|||
# OSL blackbody output is a little different.
|
||||
if (test_dir_name in {'colorspace'}):
|
||||
report.set_fail_threshold(0.05)
|
||||
# Keeping Gaussian splats rendered exactly the same on CPU and GPU is
|
||||
# tricky due to stochastic nature of the algorithm.
|
||||
if (test_dir_name in {'gsplat'}):
|
||||
report.set_fail_threshold(0.05)
|
||||
report.set_fail_percent(4)
|
||||
|
||||
ok = report.run(args.testdir, args.blender, get_arguments, batch=args.batch)
|
||||
|
||||
|
|
|
|||
|
|
@ -82,6 +82,7 @@ BLOCKLIST = [
|
|||
"image_mipmap_world_sun.blend",
|
||||
|
||||
### Cycles only tests go here ###
|
||||
"gsplat.*.blend",
|
||||
]
|
||||
|
||||
BLOCKLIST_METAL = [
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@ BLOCKLIST_HYDRA = [
|
|||
"many_lights.blend",
|
||||
# The result differs between platforms
|
||||
"principled_bsdf_dispersion.blend",
|
||||
# No Gaussian splat rendering in hydra.
|
||||
"gsplat_.*.blend",
|
||||
]
|
||||
|
||||
BLOCKLIST_USD = [
|
||||
|
|
@ -70,6 +72,8 @@ BLOCKLIST_USD = [
|
|||
"osl_camera_.*.blend",
|
||||
# The result in incorrect
|
||||
"principled_bsdf_dispersion.blend",
|
||||
# No Gaussian splat rendering in hydra.
|
||||
"gsplat_.*.blend",
|
||||
]
|
||||
|
||||
# Metal support in Storm is no as good as OpenGL, though this needs to be
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue