- Joined
- Feb 5, 2016
- Messages
- 41
- Reaction score
- 51
Hi everyone!
I'm a new(ish) member of Schine working as a game developer. Having recently finished my degree in "BSc (Hons) Computer Games (Software Development)" I've started working full time on StarMade.
Over my last few years of coding I have become addicted to voxel environments and coherent noise generation, I have gone deeper and deeper into these technologies and learnt I huge amount on the way and it has become a passion of mine to work and innovate in every area possible. (See some of my projects here)
My current main goal with StarMade is to improve on the performance and quality of the procedurally terrains and the recent upgrade to asteroids has been the first step I've been working on. I had originally planned on using the noise library I had written FastNoise but shortly after this I discovered the power of SIMD instructions and feel in love. This lead to my creation of FastNoise SIMD with a similar feature set as FastNoise but wielding the power of SIMD. This new library is what I have been integrating with the StarMade engine over the past few weeks and it is what powers the new faster generation of asteroids.
Technical breakdown of how SIMD works and how I used it for noise generation:
SIMD stands for Single Instruction Multiple Data, the simple explanation of this is instead of calculating numbers 1 at a time it allows groups of 4/8 numbers to be calculated at once while still being the same speed as doing it 1 at a time. In noise generation this equates to generating 4/8 voxels worth of noise at around the speed it would traditionally take to generate just 1.
These SIMD instructions work on low level CPU codes and not all CPUs support the same codes so I had to build several levels of SIMD instructions into the noise library in order to support every CPU whilst also making use of the newer/faster SIMD instruction sets.
The levels of SIMD support in FastNoise SIMD (slowest to fastest):
As mentioned in the last update notes this SIMD code must reside in C/C++ due to it's low level interaction with hardware, so a native library has been used to link it with the Java code of StarMade. Unfortunately native libraries lack the portability of Java so I have been coding and testing them for the 3 main operating systems Windows, Linux and MacOSX. Since the update I have been trying to provide support and bug fixes to all the players with issues. While there have been some compatibility problems due to all the different Linux distributions and this being the first native library required to host a server, I feel that the benefit SIMD provides to the majority is something that opens new levels of possibility for the game in the future.
Thanks to all for welcoming me into the community,
feel free to ask/suggest/praise, I'll be watching this thread.
I'm a new(ish) member of Schine working as a game developer. Having recently finished my degree in "BSc (Hons) Computer Games (Software Development)" I've started working full time on StarMade.
Over my last few years of coding I have become addicted to voxel environments and coherent noise generation, I have gone deeper and deeper into these technologies and learnt I huge amount on the way and it has become a passion of mine to work and innovate in every area possible. (See some of my projects here)
My current main goal with StarMade is to improve on the performance and quality of the procedurally terrains and the recent upgrade to asteroids has been the first step I've been working on. I had originally planned on using the noise library I had written FastNoise but shortly after this I discovered the power of SIMD instructions and feel in love. This lead to my creation of FastNoise SIMD with a similar feature set as FastNoise but wielding the power of SIMD. This new library is what I have been integrating with the StarMade engine over the past few weeks and it is what powers the new faster generation of asteroids.
Technical breakdown of how SIMD works and how I used it for noise generation:
SIMD stands for Single Instruction Multiple Data, the simple explanation of this is instead of calculating numbers 1 at a time it allows groups of 4/8 numbers to be calculated at once while still being the same speed as doing it 1 at a time. In noise generation this equates to generating 4/8 voxels worth of noise at around the speed it would traditionally take to generate just 1.
These SIMD instructions work on low level CPU codes and not all CPUs support the same codes so I had to build several levels of SIMD instructions into the noise library in order to support every CPU whilst also making use of the newer/faster SIMD instruction sets.
The levels of SIMD support in FastNoise SIMD (slowest to fastest):
- Scalar (no SIMD usage)
- SSE2
- SSE4.1
- AVX2 & FMA3
As mentioned in the last update notes this SIMD code must reside in C/C++ due to it's low level interaction with hardware, so a native library has been used to link it with the Java code of StarMade. Unfortunately native libraries lack the portability of Java so I have been coding and testing them for the 3 main operating systems Windows, Linux and MacOSX. Since the update I have been trying to provide support and bug fixes to all the players with issues. While there have been some compatibility problems due to all the different Linux distributions and this being the first native library required to host a server, I feel that the benefit SIMD provides to the majority is something that opens new levels of possibility for the game in the future.
Thanks to all for welcoming me into the community,
feel free to ask/suggest/praise, I'll be watching this thread.
Last edited: