Revision: 21385 http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=21385 Author: jaguarandi Date: 2009-07-06 15:27:40 +0200 (Mon, 06 Jul 2009)
Log Message: ----------- *Added output of BB/primitves test/hits *"Added" SCE_PASS_RAYHITS to visually see each pixel primitive and BB tests (not-completed for UI) *Added runtime exchange of tree structure *Removed FLOAT_EPSILON from BLI_bvhkdop BB's Modified Paths: -------------- branches/soc-2009-jaguarandi/release/ui/buttons_scene.py branches/soc-2009-jaguarandi/source/blender/makesdna/DNA_scene_types.h branches/soc-2009-jaguarandi/source/blender/makesrna/intern/rna_scene.c branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_raytrace.h branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_shader_ext.h branches/soc-2009-jaguarandi/source/blender/render/intern/source/pipeline.c branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject.c branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject_blibvh.c branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayshade.c branches/soc-2009-jaguarandi/source/blender/render/intern/source/rendercore.c branches/soc-2009-jaguarandi/source/blender/render/intern/source/shadeinput.c Modified: branches/soc-2009-jaguarandi/release/ui/buttons_scene.py =================================================================== --- branches/soc-2009-jaguarandi/release/ui/buttons_scene.py 2009-07-06 12:24:09 UTC (rev 21384) +++ branches/soc-2009-jaguarandi/release/ui/buttons_scene.py 2009-07-06 13:27:40 UTC (rev 21385) @@ -26,6 +26,7 @@ colsub = col.column() colsub.active = rd.render_raytracing colsub.itemR(rd, "raytrace_structure", text="Structure") + colsub.itemR(rd, "raytrace_tree_type", text="Tree Type") colsub.itemR(rd, "octree_resolution", text="Octree") col.itemR(rd, "dither_intensity", text="Dither", slider=True) Modified: branches/soc-2009-jaguarandi/source/blender/makesdna/DNA_scene_types.h =================================================================== --- branches/soc-2009-jaguarandi/source/blender/makesdna/DNA_scene_types.h 2009-07-06 12:24:09 UTC (rev 21384) +++ branches/soc-2009-jaguarandi/source/blender/makesdna/DNA_scene_types.h 2009-07-06 13:27:40 UTC (rev 21385) @@ -161,6 +161,8 @@ #define SCE_PASS_RADIO 8192 /* Radio removed, can use for new GI? */ #define SCE_PASS_MIST 16384 +#define SCE_PASS_RAYHITS 32768 + /* note, srl->passflag is treestore element 'nr' in outliner, short still... */ @@ -233,7 +235,8 @@ /* render engine, octree resolution */ short renderer, ocres; short raystructure; - short pad4[3]; + short raytrace_tree_type; + short pad4[2]; /** * What to do with the sky/background. Picks sky/premul/key @@ -675,6 +678,11 @@ #define R_RAYSTRUCTURE_SINGLE_OCTREE 2 #define R_RAYSTRUCTURE_SINGLE_BVH 3 +/* raytrace tree type */ +#define R_RAYTRACE_TREE_BVH 0 +#define R_RAYTRACE_TREE_BLIBVH 1 +#define R_RAYTRACE_TREE_BIH 2 + /* scemode (int now) */ #define R_DOSEQ 0x0001 #define R_BG_RENDER 0x0002 Modified: branches/soc-2009-jaguarandi/source/blender/makesrna/intern/rna_scene.c =================================================================== --- branches/soc-2009-jaguarandi/source/blender/makesrna/intern/rna_scene.c 2009-07-06 12:24:09 UTC (rev 21384) +++ branches/soc-2009-jaguarandi/source/blender/makesrna/intern/rna_scene.c 2009-07-06 13:27:40 UTC (rev 21385) @@ -293,6 +293,12 @@ {R_RAYSTRUCTURE_SINGLE_BVH, "{R_RAYSTRUCTURE_SINGLE_BVH", 0, "Single BVH", "BVH of all primitives (no instance support)"}, {R_RAYSTRUCTURE_SINGLE_OCTREE, "{R_RAYSTRUCTURE_SINGLE_OCTREE", 0, "Octree", "Octree of all primitives (no instance support)"}, {0, NULL, 0, NULL, NULL}}; + + static EnumPropertyItem raytrace_tree_type_items[] = { + {R_RAYTRACE_TREE_BVH, "{R_RAYTRACE_TREE_BVH", 0, "BVH", "rayobject_bvh.c"}, + {R_RAYTRACE_TREE_BLIBVH, "{R_RAYTRACE_TREE_BLIBVH", 0, "BLIbvh", "rayobject_blibvh.c"}, + {R_RAYTRACE_TREE_BIH, "{R_RAYSTRUCTURE_SINGLE_BVH", 0, "BIH", "rayobject_bih.c"}, + {0, NULL, 0, NULL, NULL}}; static EnumPropertyItem fixed_oversample_items[] = { {5, "OVERSAMPLE_5", 0, "5", ""}, @@ -694,6 +700,12 @@ RNA_def_property_enum_items(prop, raytrace_structure_items); RNA_def_property_ui_text(prop, "Raytrace Acceleration Structure", "Type of raytrace accelerator structure."); RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); + + prop= RNA_def_property(srna, "raytrace_tree_type", PROP_ENUM, PROP_NONE); + RNA_def_property_enum_sdna(prop, NULL, "raytrace_tree_type"); + RNA_def_property_enum_items(prop, raytrace_tree_type_items); + RNA_def_property_ui_text(prop, "Raytrace tree type", "Type of raytrace accelerator structure."); + RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL); prop= RNA_def_property(srna, "antialiasing", PROP_BOOLEAN, PROP_NONE); RNA_def_property_boolean_sdna(prop, NULL, "mode", R_OSA); Modified: branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_raytrace.h =================================================================== --- branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_raytrace.h 2009-07-06 12:24:09 UTC (rev 21384) +++ branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_raytrace.h 2009-07-06 13:27:40 UTC (rev 21385) @@ -31,12 +31,43 @@ #ifndef RE_RAYTRACE_H #define RE_RAYTRACE_H -#define RE_RAY_COUNTER +#define RE_RAYCOUNTER +#ifdef RE_RAYCOUNTER +typedef struct RayCounter RayCounter; +struct RayCounter +{ + + struct + { + unsigned long long test, hit; + + } faces, bb, raycast; + + unsigned long long rayshadow_last_hit_optimization; +}; + +/* #define RE_RC_INIT(isec, shi) (isec).count = re_rc_counter+(shi).thread */ +#define RE_RC_INIT(isec, shi) (isec).raycounter = &((shi).raycounter) +void RE_RC_INFO (RayCounter *rc); +void RE_RC_MERGE(RayCounter *rc, RayCounter *tmp); +#define RE_RC_COUNT(var) (var)++ + +extern RayCounter re_rc_counter[]; + +#else + +#define RE_RC_INIT(isec,shi) +#define RE_RC_INFO(rc) +#define RE_RC_MERGE(dest,src) +#define RE_RC_COUNT(var) + +#endif + + /* Internals about raycasting structures can be found on intern/raytree.h */ typedef struct RayObject RayObject; typedef struct Isect Isect; -typedef struct RayCounter RayCounter; struct DerivedMesh; struct Mesh; @@ -50,7 +81,6 @@ RayObject* RE_rayobject_octree_create(int ocres, int size); RayObject* RE_rayobject_instance_create(RayObject *target, float transform[][4], void *ob, void *target_ob); -#define RE_rayobject_tree_create RE_rayobject_bvh_create RayObject* RE_rayobject_blibvh_create(int size); /* BLI_kdopbvh.c */ RayObject* RE_rayobject_bvh_create(int size); /* rayobject_bvh.c */ RayObject* RE_rayobject_bih_create(int size); /* rayobject_bih.c */ @@ -93,39 +123,12 @@ void *userdata; -#ifdef RE_RAY_COUNTER - RayCounter *count; +#ifdef RE_RAYCOUNTER + RayCounter *raycounter; #endif }; -#ifdef RE_RAYCOUNTER - -struct RayCounter -{ - - struct - { - unsigned long long test, hit; - - } intersect_rayface, raycast; - - unsigned long long rayshadow_last_hit_optimization; -}; - -void RE_RC_INIT (RayCounter *rc); -void RE_RC_MERGE(RayCounter *rc, RayCounter *tmp); -#define RE_RC_COUNT(var) (var)++ - -#else - -#define RE_RC_INIT(rc) -#define RE_RC_MERGE(dest,src) -#define RE_RC_COUNT(var) - -#endif - - /* ray types */ #define RE_RAY_SHADOW 0 #define RE_RAY_MIRROR 1 Modified: branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_shader_ext.h =================================================================== --- branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_shader_ext.h 2009-07-06 12:24:09 UTC (rev 21384) +++ branches/soc-2009-jaguarandi/source/blender/render/extern/include/RE_shader_ext.h 2009-07-06 13:27:40 UTC (rev 21385) @@ -30,6 +30,7 @@ #ifndef RE_SHADER_EXT_H #define RE_SHADER_EXT_H +#include "RE_raytrace.h" /* For RE_RAYCOUNTER */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ /* this include is for shading and texture exports */ /* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */ @@ -57,6 +58,7 @@ float nor[3]; float rad[3]; float winspeed[4]; + float rayhits[4]; } ShadeResult; /* only here for quick copy */ @@ -178,6 +180,10 @@ struct Group *light_override; struct Material *mat_override; +#ifdef RE_RAYCOUNTER + RayCounter raycounter; +#endif + } ShadeInput; Modified: branches/soc-2009-jaguarandi/source/blender/render/intern/source/pipeline.c =================================================================== --- branches/soc-2009-jaguarandi/source/blender/render/intern/source/pipeline.c 2009-07-06 12:24:09 UTC (rev 21384) +++ branches/soc-2009-jaguarandi/source/blender/render/intern/source/pipeline.c 2009-07-06 13:27:40 UTC (rev 21385) @@ -347,6 +347,13 @@ if(channel==-1) return "Mist"; return "Mist.Z"; } + if(passtype == SCE_PASS_RAYHITS) + { + if(channel==-1) return "Rayhits"; + if(channel==0) return "Rayhits.R"; + if(channel==1) return "Rayhits.G"; + return "Rayhits.B"; + } return "Unknown"; } @@ -398,6 +405,8 @@ if(strcmp(str, "Mist")==0) return SCE_PASS_MIST; + if(strcmp(str, "RAYHITS")==0) + return SCE_PASS_RAYHITS; return 0; } @@ -523,7 +532,7 @@ rl->lay= srl->lay; rl->lay_zmask= srl->lay_zmask; rl->layflag= srl->layflag; - rl->passflag= srl->passflag; + rl->passflag= srl->passflag | SCE_PASS_RAYHITS; rl->pass_xor= srl->pass_xor; rl->light_override= srl->light_override; rl->mat_override= srl->mat_override; @@ -565,6 +574,8 @@ render_layer_add_pass(rr, rl, 1, SCE_PASS_INDEXOB); if(srl->passflag & SCE_PASS_MIST) render_layer_add_pass(rr, rl, 1, SCE_PASS_MIST); + if(rl->passflag & SCE_PASS_RAYHITS) + render_layer_add_pass(rr, rl, 4, SCE_PASS_RAYHITS); } /* sss, previewrender and envmap don't do layers, so we make a default one */ Modified: branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject.c =================================================================== --- branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject.c 2009-07-06 12:24:09 UTC (rev 21384) +++ branches/soc-2009-jaguarandi/source/blender/render/intern/source/rayobject.c 2009-07-06 13:27:40 UTC (rev 21385) @@ -54,10 +54,14 @@ float t1z = (bb[isec->bv_index[4]] - isec->start[2]) * isec->idot_axis[2]; float t2z = (bb[isec->bv_index[5]] - isec->start[2]) * isec->idot_axis[2]; + RE_RC_COUNT(isec->raycounter->bb.test); + if(t1x > t2y || t2x < t1y || t1x > t2z || t2x < t1z || t1y > t2z || t2y < t1z) return FLT_MAX; if(t2x < 0.0 || t2y < 0.0 || t2z < 0.0) return FLT_MAX; if(t1x > isec->labda || t1y > isec->labda || t1z > isec->labda) return FLT_MAX; + RE_RC_COUNT(isec->raycounter->bb.hit); + dist = t1x; if (t1y > dist) dist = t1y; if (t1z > dist) dist = t1z; @@ -157,7 +161,7 @@ if(is->orig.ob == face->ob && is->orig.face == face->face) return 0; - RE_RC_COUNT(is->count->intersect_rayface.test); + RE_RC_COUNT(is->raycounter->faces.test); VECCOPY(co1, face->v1); VECCOPY(co2, face->v2); @@ -276,7 +280,7 @@ } #endif - RE_RC_COUNT(is->count->intersect_rayface.hit); + RE_RC_COUNT(is->raycounter->faces.hit); is->isect= ok; // wich half of the quad is->labda= labda; @@ -294,7 +298,7 @@ int RE_rayobject_raycast(RayObject *r, Isect *isec) { int i; - RE_RC_COUNT(isec->count->raycast.test); + RE_RC_COUNT(isec->raycounter->raycast.test); /* Setup vars used on raycast */ isec->labda *= Normalize(isec->vec); @@ -315,15 +319,15 @@ /* Last hit heuristic */ if(isec->mode==RE_RAY_SHADOW && isec->last_hit && RE_rayobject_intersect(isec->last_hit, isec)) { @@ Diff output truncated at 10240 characters. @@ _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org http://lists.blender.org/mailman/listinfo/bf-blender-cvs