Coder Social home page Coder Social logo

isabella232 / godot3-bunnymark Goto Github PK

View Code? Open in Web Editor NEW

This project forked from payload/godot3-bunnymark

0.0 0.0 0.0 1.57 MB

Compares Godot 3.1 scripting languages by rendering as many bunny sprites as possible at 60fps

License: MIT License

C# 12.97% GDScript 13.06% Makefile 0.65% C++ 21.95% Nim 17.79% Shell 0.64% D 14.27% JavaScript 1.22% TypeScript 9.20% Rust 8.25%

godot3-bunnymark's Introduction

Godot Bunnymark

Renders an increasing number of bunny sprites until a stable 60fps is hit. This is a decent test of real world usage as it combines Godot api usage with raw computation. I plan to update this README whenever significant performance changes occur or when new languages are added. Feel free to contribute language implementations or improvements!

Disclaimer

The performance differences here might appear significant, but these benchmarks test the limits of each language (and the engine), which most games will never hit. Do not pick a language because it is "fastest" unless you know you need the fastest language. The smarter choice would be to pick the language you are most productive in. I personally think that most people will be more productive in GDScript or C#. A lot of time and energy went into making GDScript an integrated, seamless experience so it is a good starting point if you don't have a preference for any of the other languages listed.

It is also important to note that C#/Mono and GDNative are both very young. Its possible that their performance characteristics will change. And please don't use these benchmarks to say "Language X is better / faster than Language Y", we don't have enough data to make those assertions. If anything this proves that any of the choices below are viable. Choose the language that you are comfortable with and do your own testing to cover your own scenarios.

Updates

Follow me on twitter @cart_cart if you want Bunnymark updates or updates on my other projects!

Running

  • Build C++ files
    • Setup headers and bindings using these directions
    • run make in the root of this project
  • Build C# files
    • run msbuild /p:Configuration=Tools;DebugSymbols=false;Optimize=true (some terminals might require escaping some of those symbols)
  • Build Nim files
  • Build D files
  • Build Rust files
    • run cargo build --release
  • Build Godot with the ECMAScript module if you want to run the ECMAScript tests
  • run sh run_benchmarks.sh
  • wait! This will take some time ... the automation code is still a bit naive so it takes awhile to converge on 60 fps
  • view the results in USER_HOME_DIRECTORY/.godot/app_userdata/Bunnymark/benchmark_results.json

Benchmark Run - March 16, 2019

BunnymarkV2

Attempts to draw as many sprites as possible using Sprite nodes. It calls GetChildren() to iterate over a list of Sprites and sets their positions. It also updates a Label's text once per frame. This test aims to be a better emulation of real world api usage than the V1 tests.

Language Bunnies Rendered
ECMAScript/Javascript 4660
GDScript (Release) 18560
C#/Mono 27555
GDNative (D) 28020
GDNative (Nim) 29920
GDNative (C++) 37480

BunnymarkV1 - DrawTexture

Attempts to draw as many sprites to the screen as possible by drawing textures directly with VisualServer. This test focuses on compute / render performance and avoids making godot api calls.

Language Bunnies Rendered
ECMAScript/Javascript 4340
GDScript (Release) 20540
C#/Mono 36720
GDNative (Nim) 60056
GDNative (C++) 65580
GDNative (D) 67840

BunnymarkV1 - Sprites

Attempts to draw as many sprites to the screen as possible by adding Sprite nodes. This test focuses on compute / render performance and avoids making godot api calls.

Language Bunnies Rendered
ECMAScript/Javascript 4300
GDScript (Release) 17639
GDNative (Nim) 37180
C#/Mono 37455
GDNative (D) 38740
GDNative (C++) 41935

Hardware:

  • CPU: Intel i7 7700k 4.2GHz
  • GPU: Nvidia GeForce GTX 1070
  • RAM: 16GB DDR4

Build Info:

  • OS: Arch Linux
  • Official Godot 3.1 release

Credits

godot3-bunnymark's People

Contributors

cart avatar capital-ex avatar colinkinloch avatar payload avatar endragor avatar geequlim avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.