[Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [20094] trunk/blender: BGE performance, 3rd round: culling and rasterizer.

Campbell Barton ideasman42 at gmail.com
Thu May 7 12:13:33 CEST 2009


This is incredible!
YoFrankie's main level (level_1_home.blend) is now faster in my debug
build (-O0 -fno-inline -g3) then 2.48, and thats while it  was still
building the optimized blender! :)

the optimized build is somewhere between 2x and 3x faster overall!
<happy dance>

On Thu, May 7, 2009 at 2:13 AM, Benoit Bolsee <benoit.bolsee at online.be> wrote:
> Revision: 20094
>          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=20094
> Author:   ben2610
> Date:     2009-05-07 11:13:01 +0200 (Thu, 07 May 2009)
>
> Log Message:
> -----------
> BGE performance, 3rd round: culling and rasterizer.
>
> This commit extend the technique of dynamic linked list to the mesh
> slots so as to eliminate dumb scan or map lookup. It provides massive
> performance improvement in the culling and in the rasterizer when
> the majority of objects are static.
>
> Other improvements:
> - Compute the opengl matrix only for objects that are visible.
> - Simplify hash function for GEN_HasedPtr
> - Scan light list instead of general object list to render shadows
> - Remove redundant opengl calls to set specularity, shinyness and diffuse
>  between each mesh slots.
> - Cache GPU material to avoid frequent call to GPU_material_from_blender
> - Only set once the fixed elements of mesh slot
> - Use more inline function
>
> The following table shows the performance increase between 2.48, 1st round
> and this round of improvement. The test was done with a scene containing
> 40000 objects, of which 1000 are in the view frustrum approximately. The
> object are simple textured cube to make sure the GPU is not the bottleneck.
> As some of the rasterizer processing time has moved under culling, I present
> the sum of scenegraph(includes culling)+rasterizer time
>
> Scenegraph+rasterizer(ms)       2.48      1st round       3rd round
>
> All objects static,            323.0           86.0             7.2
> all visible, 1000 in
> the view frustrum
>
> All objects static,            219.0           49.7             N/A(*)
> all invisible.
>
> All objects moving,            323.0          105.6            34.7
> all visible, 1000 in
> the view frustrum
>
> Scene destruction              40min          40min              4s
>
> (*) : this time is not representative because the frame rate was at 60fps.
>      In that case, the GPU holds down the GE by frame sync. By design, the
>      overhead of the rasterizer is 0 when the the objects are invisible.
>
> This table shows a global speed up between 9x and 45x compared to 2.48a
> for scenegraph, culling and rasterizer overhead. The speed up goes much
> higher when objects are invisible.
>
> An additional 2-4x speed up is possible in the scenegraph by upgrading
> the Moto library to use Eigen2 BLAS library instead of C++ classes but
> the scenegraph is already so fast that it is not a priority right now.
>
> Next speed up in logic: many things to do there...
>
> Modified Paths:
> --------------
>    trunk/blender/projectfiles_vc9/gameengine/rasterizer/RAS_rasterizer.vcproj
>    trunk/blender/projectfiles_vc9/gameengine/rasterizer/openglrasterizer/RAS_openglrasterizer.vcproj
>    trunk/blender/source/gameengine/Ketsji/BL_BlenderShader.cpp
>    trunk/blender/source/gameengine/Ketsji/BL_BlenderShader.h
>    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.cpp
>    trunk/blender/source/gameengine/Ketsji/KX_BlenderMaterial.h
>    trunk/blender/source/gameengine/Ketsji/KX_GameObject.cpp
>    trunk/blender/source/gameengine/Ketsji/KX_GameObject.h
>    trunk/blender/source/gameengine/Ketsji/KX_KetsjiEngine.cpp
>    trunk/blender/source/gameengine/Ketsji/KX_Light.cpp
>    trunk/blender/source/gameengine/Ketsji/KX_PolygonMaterial.cpp
>    trunk/blender/source/gameengine/Ketsji/KX_PythonInit.cpp
>    trunk/blender/source/gameengine/Ketsji/KX_Scene.cpp
>    trunk/blender/source/gameengine/Rasterizer/CMakeLists.txt
>    trunk/blender/source/gameengine/Rasterizer/Makefile
>    trunk/blender/source/gameengine/Rasterizer/RAS_BucketManager.cpp
>    trunk/blender/source/gameengine/Rasterizer/RAS_BucketManager.h
>    trunk/blender/source/gameengine/Rasterizer/RAS_IPolygonMaterial.cpp
>    trunk/blender/source/gameengine/Rasterizer/RAS_IPolygonMaterial.h
>    trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.cpp
>    trunk/blender/source/gameengine/Rasterizer/RAS_MaterialBucket.h
>    trunk/blender/source/gameengine/Rasterizer/RAS_MeshObject.cpp
>    trunk/blender/source/gameengine/Rasterizer/RAS_MeshObject.h
>    trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/CMakeLists.txt
>    trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/Makefile
>    trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/RAS_ListRasterizer.cpp
>    trunk/blender/source/gameengine/Rasterizer/RAS_OpenGLRasterizer/SConscript
>    trunk/blender/source/gameengine/Rasterizer/SConscript
>    trunk/blender/source/gameengine/SceneGraph/SG_DList.h
>    trunk/blender/source/gameengine/SceneGraph/SG_QList.h
>    trunk/blender/source/gameengine/SceneGraph/SG_Spatial.cpp
>    trunk/blender/source/gameengine/SceneGraph/SG_Spatial.h
>    trunk/blender/source/gameengine/VideoTexture/ImageRender.cpp
>    trunk/blender/source/kernel/gen_system/GEN_HashedPtr.cpp
>
> Modified: trunk/blender/projectfiles_vc9/gameengine/rasterizer/RAS_rasterizer.vcproj
> ===================================================================
> --- trunk/blender/projectfiles_vc9/gameengine/rasterizer/RAS_rasterizer.vcproj  2009-05-07 05:23:15 UTC (rev 20093)
> +++ trunk/blender/projectfiles_vc9/gameengine/rasterizer/RAS_rasterizer.vcproj  2009-05-07 09:13:01 UTC (rev 20094)
> @@ -43,7 +43,7 @@
>                        <Tool
>                                Name="VCCLCompilerTool"
>                                Optimization="0"
> -                               AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\Expressions;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\source\blender\makesdna"
> +                               AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\Expressions;..\..\..\source\gameengine\SceneGraph;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\source\blender\makesdna"
>                                PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_GLEXT"
>                                BasicRuntimeChecks="3"
>                                RuntimeLibrary="1"
> @@ -118,7 +118,7 @@
>                        <Tool
>                                Name="VCCLCompilerTool"
>                                InlineFunctionExpansion="1"
> -                               AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\Expressions;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\source\blender\makesdna"
> +                               AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\Expressions;..\..\..\source\gameengine\SceneGraph;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\source\blender\makesdna"
>                                PreprocessorDefinitions="NDEBUG,WIN32,_LIB"
>                                StringPooling="true"
>                                RuntimeLibrary="2"
> @@ -193,7 +193,7 @@
>                        <Tool
>                                Name="VCCLCompilerTool"
>                                InlineFunctionExpansion="1"
> -                               AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\Expressions;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\source\blender\makesdna"
> +                               AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\Expressions;..\..\..\source\gameengine\SceneGraph;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\source\blender\makesdna"
>                                PreprocessorDefinitions="NDEBUG;WIN32;_LIB;WITH_GLEXT"
>                                StringPooling="true"
>                                RuntimeLibrary="0"
> @@ -268,7 +268,7 @@
>                        <Tool
>                                Name="VCCLCompilerTool"
>                                Optimization="0"
> -                               AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\Expressions;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\source\blender\makesdna"
> +                               AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\Expressions;..\..\..\source\gameengine\SceneGraph;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\source\blender\makesdna"
>                                PreprocessorDefinitions="_DEBUG,WIN32,_LIB"
>                                BasicRuntimeChecks="3"
>                                RuntimeLibrary="3"
> @@ -343,7 +343,7 @@
>                        <Tool
>                                Name="VCCLCompilerTool"
>                                Optimization="0"
> -                               AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\Expressions;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\source\blender\makesdna"
> +                               AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\Expressions;..\..\..\source\gameengine\SceneGraph;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\source\blender\makesdna"
>                                PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_GLEXT"
>                                BasicRuntimeChecks="3"
>                                RuntimeLibrary="1"
> @@ -418,7 +418,7 @@
>                        <Tool
>                                Name="VCCLCompilerTool"
>                                InlineFunctionExpansion="1"
> -                               AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\Expressions;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\source\blender\makesdna"
> +                               AdditionalIncludeDirectories="..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\source\kernel\gen_system;..\..\..\source\gameengine\Expressions;..\..\..\source\gameengine\SceneGraph;..\..\..\..\lib\windows\python\include\python2.5;..\..\..\source\blender\makesdna"
>                                PreprocessorDefinitions="NDEBUG;WIN32;_LIB;WITH_GLEXT"
>                                StringPooling="true"
>                                RuntimeLibrary="0"
>
> Modified: trunk/blender/projectfiles_vc9/gameengine/rasterizer/openglrasterizer/RAS_openglrasterizer.vcproj
> ===================================================================
> --- trunk/blender/projectfiles_vc9/gameengine/rasterizer/openglrasterizer/RAS_openglrasterizer.vcproj   2009-05-07 05:23:15 UTC (rev 20093)
> +++ trunk/blender/projectfiles_vc9/gameengine/rasterizer/openglrasterizer/RAS_openglrasterizer.vcproj   2009-05-07 09:13:01 UTC (rev 20094)
> @@ -43,7 +43,7 @@
>                        <Tool
>                                Name="VCCLCompilerTool"
>                                Optimization="0"
> -                               AdditionalIncludeDirectories="..\..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\..\source\kernel\gen_system;..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\source\blender\gpu;..\..\..\..\source\gameengine\Ketsji;..\..\..\..\source\blender\makesdna;..\..\..\..\source\blender\blenkernel;..\..\..\..\source\blender\blenlib"
> +                               AdditionalIncludeDirectories="..\..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\..\source\kernel\gen_system;..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\source\gameengine\SceneGraph;..\..\..\..\source\blender\gpu;..\..\..\..\source\gameengine\Ketsji;..\..\..\..\source\blender\makesdna;..\..\..\..\source\blender\blenkernel;..\..\..\..\source\blender\blenlib"
>                                PreprocessorDefinitions="_DEBUG,WIN32,_LIB"
>                                BasicRuntimeChecks="3"
>                                RuntimeLibrary="3"
> @@ -118,7 +118,7 @@
>                        <Tool
>                                Name="VCCLCompilerTool"
>                                Optimization="0"
> -                               AdditionalIncludeDirectories="..\..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\..\source\kernel\gen_system;..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\source\blender\gpu;..\..\..\..\source\gameengine\Ketsji;..\..\..\..\source\blender\makesdna;..\..\..\..\source\blender\blenkernel;..\..\..\..\source\blender\blenlib"
> +                               AdditionalIncludeDirectories="..\..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\..\source\kernel\gen_system;..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\source\gameengine\SceneGraph;..\..\..\..\source\blender\gpu;..\..\..\..\source\gameengine\Ketsji;..\..\..\..\source\blender\makesdna;..\..\..\..\source\blender\blenkernel;..\..\..\..\source\blender\blenlib"
>                                PreprocessorDefinitions="_DEBUG;WIN32;_LIB;WITH_GLEXT"
>                                BasicRuntimeChecks="3"
>                                RuntimeLibrary="1"
> @@ -193,7 +193,7 @@
>                        <Tool
>                                Name="VCCLCompilerTool"
>                                InlineFunctionExpansion="1"
> -                               AdditionalIncludeDirectories="..\..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\..\source\kernel\gen_system;..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\source\blender\gpu;..\..\..\..\source\gameengine\Ketsji;..\..\..\..\source\blender\makesdna;..\..\..\..\source\blender\blenkernel;..\..\..\..\source\blender\blenlib"
> +                               AdditionalIncludeDirectories="..\..\..\..\..\build\msvc_9\intern\guardedalloc\include;..\..\..\..\..\build\msvc_9\intern\moto\include;..\..\..\..\..\build\msvc_9\intern\string\include;..\..\..\..\..\build\msvc_9\extern\glew\include;..\..\..\..\source\kernel\gen_system;..\..\..\..\source\gameengine\Rasterizer;..\..\..\..\source\gameengine\SceneGraph;..\..\..\..\source\blender\gpu;..\..\..\..\source\gameengine\Ketsji;..\..\..\..\source\blender\makesdna;..\..\..\..\source\blender\blenkernel;..\..\..\..\source\blender\blenlib"
>                                PreprocessorDefinitions="NDEBUG,WIN32,_LIB"
>                                StringPooling="true"
>                                RuntimeLibrary="2"
> @@ -268,7 +268,7 @@
>                        <Tool
>                                Name="VCCLCompilerTool"
>                                InlineFunctionExpansion="1"
>
> @@ Diff output truncated at 10240 characters. @@
>
> _______________________________________________
> Bf-blender-cvs mailing list
> Bf-blender-cvs at blender.org
> http://lists.blender.org/mailman/listinfo/bf-blender-cvs
>



-- 
- Campbell


More information about the Bf-committers mailing list