Blender Git Loki
Git Commits -> Revision 3ac8c45
Revision 3ac8c45 by Sergey Sharybin (cycles_bvh) June 14, 2016, 21:08 (GMT) |
Cycles: First proof of concept aligned and unaligned nodes living together This commit was mainly focused on making it so QBVH builder delivers proper packed array with interleaved aligned and unaligned nodes. It also contains tweaks to traversal code to check it all works. Packing seems to work fine for QBVH now (RegularBVH is simply untouched by this commit, it'll come later). Traversal of camera rays also works fine, but there are definitely some tricks to be done in the traversal code: - Need to avoid calculations of some variables which are only needed for unaligned nodes (such as dir4 for example). Should be easy task of ifdef-ing some values. - Avoid some extra visibility flag checks, for example when deciding which intersector to use and when fetching addresses of children. Moving children info next to visibility flags will avoid this extra bit check, but will cause different cache load. Would need to benchmark what's better for us, or at least need to ifdef it for non-curve functions. Curve intersectors would need to be renamed to unaligned btw. NOTE: shadow, SSS, volume traversal codes are disabled currently, meaning there's no way scene will be rendered correct. |
Commit Details:
Full Hash: 3ac8c45bde4e407d541a6954e7a50fa4d2438a93
Parent Commit: f826686
Lines Changed: +299, -270
14 Modified Paths:
/intern/cycles/bvh/bvh.cpp (+86, -52) (Diff)
/intern/cycles/bvh/bvh_node.cpp (+36, -0) (Diff)
/intern/cycles/bvh/bvh_node.h (+2, -0) (Diff)
/intern/cycles/kernel/geom/geom_bvh.h (+1, -0) (Diff)
/intern/cycles/kernel/geom/geom_bvh_curve.h (+18, -18) (Diff)
/intern/cycles/kernel/geom/geom_qbvh.h (+8, -4) (Diff)
/intern/cycles/kernel/geom/geom_qbvh_curve.h (+34, -131) (Diff)
/intern/cycles/kernel/geom/geom_qbvh_shadow.h (+15, -10) (Diff)
/intern/cycles/kernel/geom/geom_qbvh_subsurface.h (+9, -5) (Diff)
/intern/cycles/kernel/geom/geom_qbvh_traversal.h (+53, -30) (Diff)
/intern/cycles/kernel/geom/geom_qbvh_volume.h (+12, -9) (Diff)
/intern/cycles/kernel/geom/geom_qbvh_volume_all.h (+12, -9) (Diff)
/intern/cycles/render/mesh.cpp (+8, -1) (Diff)
/intern/cycles/render/mesh.h (+5, -1) (Diff)
/intern/cycles/bvh/bvh_node.cpp (+36, -0) (Diff)
/intern/cycles/bvh/bvh_node.h (+2, -0) (Diff)
/intern/cycles/kernel/geom/geom_bvh.h (+1, -0) (Diff)
/intern/cycles/kernel/geom/geom_bvh_curve.h (+18, -18) (Diff)
/intern/cycles/kernel/geom/geom_qbvh.h (+8, -4) (Diff)
/intern/cycles/kernel/geom/geom_qbvh_curve.h (+34, -131) (Diff)
/intern/cycles/kernel/geom/geom_qbvh_shadow.h (+15, -10) (Diff)
/intern/cycles/kernel/geom/geom_qbvh_subsurface.h (+9, -5) (Diff)
/intern/cycles/kernel/geom/geom_qbvh_traversal.h (+53, -30) (Diff)
/intern/cycles/kernel/geom/geom_qbvh_volume.h (+12, -9) (Diff)
/intern/cycles/kernel/geom/geom_qbvh_volume_all.h (+12, -9) (Diff)
/intern/cycles/render/mesh.cpp (+8, -1) (Diff)
/intern/cycles/render/mesh.h (+5, -1) (Diff)