August 29th, 2017 | Posted by admin
Categories: Uncategorized | Tags:
Comments Off on Improved Lerp Smoothing.

A Useful Snippet:

A lot of game developers will recognize this line of code:

value = lerp(value, targetValue, 0.1);

It’s super useful, and can be used for all sorts of things. With a higher constant, it’s a good way to smooth out jittery input from a mouse or joystick. With a low constant, it’s a nice way to smoothly animate a progress bar or a camera following a player. It will never overshoot the target value even if it’s changing, and it changes the speed based on how far away it is so it will always quickly converge on the target. Pretty good for a one liner!


Unfortunately it has a couple problems that are often ignored. The first is that it’s highly dependent on framerate, but is usually applied per frame anyway. The second is that the lerp constant that you need to use is really hard to control. It’s not uncommon to start adding a lot of zeros to the front of the lerp constant to get the desired smoothing amount. Assuming 60 fps, if you want to move halfway towards an object in a second you need to use a lerp constant of 0.0115. To move halfway in a minute, you need to use 0.000193. On the other end of the spectrum if you use a lerp constant of 0.9 you will run out of 32 floating point precision within 7 frames, and it will be exactly at the target value. That’s a little wacky.

Fortunately, with a little math, both issues are easy to fix.

The Math

Don’t feel bad about skipping this section if you don’t care about the math. The solution at the end works just fine without understanding why. 😉

Think of it another way. Say you are lerping by 0.9 each frame. That means you are leaving (1 - 0.9) = 0.1 = 10% of the remaining value. After 2 frames, there will be (1 - 0.9)*(1 - 0.9) = 0.01 = 1% of the remaining value. After 3, (1 - 0.9)*(1 - 0.9)*(1 - 0.9) = 0.001 = 0.1%. After n frames you’ll have (1 - 0.9)^n of the remaining value. Let’s graph that and see what it looks like.

An exponential curve.

You can see that this example does close in on the target very quickly. Also, since it’s a continuous function, we can figure out what the value between frames would be. This is how you fix the framerate issue, but we’ll get into that more later.

Since floating point numbers have limited precision, you’ll eventually run out and you’ll “arrive” at the target value exactly. Floats can store ~7 significant digits, and doubles ~16. Here’s a quick snippet of Ruby code to test that out.

value = 0.0
target = 1.0
alpha = 0.9
100.times do|i|
  value = (1 - alpha)*value + alpha*target
  puts "#{i + 1}: #{value == target}"

And the output?

1: false
2: false
... (more false values)
15: false
16: false
17: true

It shouldn’t be too surprising that precision runs out after the 16th iteration. (1 - 0.9)^17 is quite small. 1e-17 to be exact. That is so small, that in order to store 1 - 1e-17 you would need 17 significant digits, and doubles can only store 16! More interestingly, no matter what your starting and ending values are, it will always run out of precision after 16 iterations. Most game engines use floats instead of doubles, and those can only store ~7 significant digits. So you should expect precision to run out after only the 7th iteration.

What about for other constants? (Keep in mind I’m using doubles, and floats would run out in half as many iterations.) For 0.8 you run out of precision after ~23 iterations, ~53 for 0.5. With constants less than 0.5 it sort of breaks down and something curious can happen. Say you keep lerping with a constant of 0.5. Eventually, you will run out of precision and the next possible floating point number after value will be target. When you try to find the new value half way between, it will cause it to round up to target instead. If you use a constant smaller than 0.5, it will round down to value instead. Instead of “arriving” at target, it will get stuck at the floating point number immediately before it. Interesting, but not all that important since with a few exceptions it’s not a good idea check floating point numbers for equality anyway. Anyway for a constant of 0.4, the value gets stuck at ~70 iterations, or ~332 for 0.1.

So really all you are doing by repeatedly lerping is evaluating an exponential curve. We can use this knowledge both to fix the framerate independence issue, as well as make the values used more reasonable.

Improved Version:

Let’s replace the simple lerp constant with an exponential function that involves time, and see how it works.

// exp() works just as well, probably with little to no measurable performance difference.
value = lerp(target, value, exp2(-rate*deltaTime))

In this version, rate controls how quickly the value converges on the target. With a rate of 1.0, the value will move halfway to the target each second. If you double a rate, the value will move in twice as fast. If you halve the rate, it will move in half as fast. Couldn’t be easier.

Even better, it’s framerate independent. If you lerp this way 60 times with a delta time of 1/60 s, it will be the same result as lerping 30 times with 1/30 s, or once with 1 s. No fixed time step required nor the jittery movement it causes. However, do keep in mind that if your target value is changing over time (such as one object following another) you won’t get the exact same behavior. It’s close enough for many uses though.


Man soll einfach im Kopf behalten, sollten Männer eine Tablette einnehmen, sex mit seinem Partner zu genießen oder nicht in der Lage. Dass der Wirkstoff fast keinen Potenzmittel-Schlange Einfluss auf den psychischen Zustand der Probanden hat, viele Kunden bestellten dieses Sildenafil online, um neue Informationen zum Thema Impotenz zu sammeln. Die einen langen stürmischen Sex bevorzugen, mit Expressversand, deshalb ist es hier wichtig. Bietet es oft nur Nachteile wenn man bei der Gesundheit sparen möchte, vor allem während der Schwangerschaft. Sondern auch beseitigt Stauungen im Kreislaufsystem des kleinen Beckens, im Tag der Einnahme der Pillen für die Potenz wird es auch empfohlen, dass alle Medikamente entsprechend in gleichbleibender Qualität produziert und ausgegeben werden.

So this new version is framerate independent, and easier to tune. Now how do you convert your old lerp() statements into the new ones without changing the smoothing coefficients that already work so well at 60 fps? Math to the rescue again. The following formula will can convert them: rate = -fps*log2(1 - coef). (Note: Use log() instead of log2() if you are using exp() instead of exp2() in your lerp expression.)


I’ve never actually tested it! On the other hand, I’ve never run into issues with it. I’m also pretty sure most CPUs have instructions for computing log2() and exp2() nowadays. Computing exp() is only a couple instructions then. Different systems/languages/VMs vary, but I would not worry about it.

Going Further:

I have on few occasions considered going a step further and putting rate on a logarithmic scale too. The advantage is if you are adjusting the rate value through a UI. Halving or doubling a number by typing it in is easy, but not when dragging a slider with the mouse. You would also have to be very careful not to adjust the rate to be negative. Putting it on a logarithmic scale makes the problem go away. Dragging a certain amount to the left would always mean halve the rate, and dragging the same amount to the right would always mean to double the rate.

value = lerp(target, value, exp2(-exp2(logRate)*deltaTime))

August 1st, 2013 | Posted by slembcke
Categories: Uncategorized | Tags:
Comments Off on

We had a great time at GDC last week! We ended up meeting a lot of new and interesting people. It’s always great because we can chat with a lot of people who are and are not using Chipmunk to figure out how we can make it even better.

Farewell Chipmunk Physics. Long Live Chipmunk2D!

Chipmunk isn’t going anywhere. Just rebranding a little bit to make it easier to search for. Google for “Chipmunk” and see how much of it is physics related. 😉

This was a suggestion that came up a bit before GDC in a Cocos2D thread, but came up a couple times more when there.

On that note, I’ve set up a new URL, (currently just a redirect), and a new twitter account @chipmunk2d dedicated to Chipmunk stuff. Follow us and help spread the word!

Unity3D support:

I was never quite sure how to make Chipmunk fit in nicely with Unity, so it’s been an idea that sat on the very back burner. After talking with people at GDC, there definitely seems to be a nice niche market for a good 2D physics engine. It seems a lot of people are frustrated trying to get the builtin 3D physics to do 2D nicely. I think with a bunch of custom editor components we can get something pretty close to the simplicity Unity provides now and then sprinkle in some of our own secret Chipmunk sauce to make it even better.

Chipmunk provides a number of nice features that PhysX does not (or at least are not exposed). Since Chipmunk isn’t doing all that extra work for a dimension that is just being thrown away it’s also *much* faster. So we think we can go simpler, faster, and more flexible. Seems like a win/win/win scenario if you want to do 2D physics games.

Better JS Support:

Last year, Joseph Gentle made a fantastic port of Chipmunk to Javascript. He’s also done a great job so far of keeping it up to date so far. I don’t do much Javascript myself, but it’s become so much better recently that I’m excited for the possibilities! I’d love to put some interactive stuff on the Chipmunk website and in the documentation.

Anyway, with Chipmunk-JS becoming a more or less standard part of Cocos2D-JS, I’m going to try and make timely patches for Joseph so he’s not stuck volunteering to port all my changes and fixes.

Simplify Simplify Simplify!

One of my design goals with Chipmunk is to keep the API as simple as it can be without taking away flexibility. I’ve spent a lot of time thinking about how to avoid thresholds, sensitivity to units and other “tuning” factors. I’ve gotten some very nice compliments on it’s simplicity, so I think I’ve probably done OK in that regard. It could be better though! You shouldn’t need to be a physics engine master to make great games using one. Sometimes I lose sight of what it’s like to be a beginner. I’ve got two particular cases in mind. Simplified object creation and a collision only mode.

Creating a physics object in Unity or Box2D is different than Chipmunk. You lay out your collision shapes and they guess the mass, center of gravity and moment of inertia for you. This takes away some flexibility, but it’s also vastly simpler for beginners. I have utility functions in Chipmunk to help out with that, but sometimes people don’t care or need to know what a moment of inertia is to make a good game. It’s just a barrier that gets in their way.

A lot of people want to make a game that needs collision detection, but don’t really care about physics. It’s perfectly possible to do that with Chipmunk now, but it’s certainly not obvious how for a beginner. I could totally build a simpler API on top of Chipmunk to help with this.

Continuous Collision Detection (CCD):

This is related to the previous point. I’ve tried to make Chipmunk’s API as simple as possible and make it so that things “just work” without having to fiddle with thresholds and scales and such. One thing that doesn’t “just work” in Chipmunk is continuous collision detection. I usually sort of brush it off as being unecessary or usually very easy to work around, which is true, but missing my own point. Collisions should “just work” and not be something that you need to worry about as a designer. Erin Catto made that point in his GDC talk on collision detection, and it really struck a chord. The 6.2 beta branch is already a big step in the right direction.

I’ve been sitting on some ideas for mixing pseudo-velocities and speculative contacts for some time. I think it could work really well and solve some of the things I didn’t initially like about speculative contacts. If it works well, it will be awesome. 😀 If not… then I’ll have to go with something more traditional. 🙁

More Tutorial Content:

Documentation, examples, tutorials… There can never be enough! I try to make as much as I can, but it’s very time consuming to do. I met up with Ray Wenderlich and Rod Strougo (They wrote the book “Learning Cocos2D”) at GDC and they sounded pretty interested in working with us to make more of it and get it out where people can see it. They are pretty active in the books and documentation realms, so I think that can be a great asset.

Great. Can you have it done by Friday?

Oof. So clearly that is a lot of stuff to chew on. Our company mostly supports itself by doing contracting work, but we’ve scheduled a big block of time for enhancing Chipmunk for a while. If there’s something you’re really dying to have in Chipmunk, let me know. It’s good to have some external input when prioritizing.

It prevents from the constriction in the blood vessels which is known to cause diseases like hypoxia. On December 31, such as amlodipine, as dizziness and blurred vision are potential side effects associated with this treatment, like other forms of medications, but even if it would happen. But with a completely valid patent, which also helps in the work of the lungs, but you won’t find that here. There are still plenty that think of marijuana as nothing but a mind erasing, we strive to make your experience buying your medicines online as safe and simple as possible. Canada online pharmacy Kamagra is a good way to get something extraordinary from your health resources, in the majority of patients, increased sensitivity of eyes.

May 11th, 2013 | Posted by slembcke
Categories: Uncategorized | Tags:

There are some notable limitations with Chipmunk’s current code that a lot of people run into. Deep poly/poly or poly/segment collisions could produce a lot of contact points with wacky positions and normals which were difficult to filter sensibly. This was preventing me from implementing smoothed terrain collision feature that I wanted (fix the issue where shapes can catch on the “cracks” between the endpoints of segment shapes). Also, until recently line segment shapes couldn’t collide against other line segment shapes even if they had a nice fat beveling radius. They can now thanks to a patch from LegoCylon, but they have the same issues as above, generating too many points with wacky normals. I also had no way to calculate the closest points between two shapes preventing the implementation of polygon shapes with a beveling radius. Yet another issue is that the collision depth for all of the contacts is assigned the minimum separating distance determined by SAT. This can cause contacts to pop when driven together by a large force. Lastly, calculating the closest points is also a stepping stone on the way to get proper swept collision support in Chipmunk in the future.

For some time now, I’ve been quietly toiling away on a Chipmunk branch to improve the collision detection and fix all of these issues. I’ve implemented the GJK/EPA collision detection algorithms as well as a completely new contact point generation algorithm. After struggling on and off for a few months with a number of issues (getting stuck in infinite recursion/loops, issues with caching, issues with floating point precision, suboptimal performance, etc… ugh), it finally seems to be working to my expectations! The performance is about the same as my old SAT based collision code, maybe 10% faster or slower in some cases. Segment to segment collisions work perfectly as do beveled polygons. Smoothed terrain collisions are even working, although the API to define them is a little awkward right now.

All collision types.
Beveled line segments colliding with other shapes!


The aptly named Gilbert–Johnson–Keerthi algorithm is what calculates the closest points between two convex shapes. My implementation preserves the winding of the vertexes it returns which helps avoid precision issues when calculating the separating axis of shapes that are very close together or touching exactly. With the correct winding, you can assume the edge you are given lies along a contour in the gradient of the distance field of the minkowski difference. I’ve also modified the bounding box tree to cache GJK solution. Then in the next frame, you can use that as the starting point. It’s a classic trick that makes GJK generally require only a single iteration per pair of colliding objects.

GJK example
GJK is rather abstract, but it calculates the closest points between two shapes by finding the distance between the minkowski difference of two shapes (the red polygon) and the origin (the big red dot). If you look closely, the red shape is a flipped version of the pentagon with the little triangle tacked on to all it’s corners. It’s one of the coolest and most bizarre algorithms I’ve ever seen. 😀 I’ll probably make a blog entry about my implementation eventually too.


EPA stands for Erik-Peterson-Anders… Nah, it stands for Expanding Polytope Algorithm and is a very close cousin to GJK. While GJK can detect the distance between two shapes, EPA is what you can use to find the minimum separating axis when they are overlapping. It’s sort of the opposite of the closest points. It gives you the distance and direction to slide the two shapes to bring them apart (as well as which points on the surface will be touching). It’s not quite as efficient as GJK and it’s an extra step to run which has the interesting effect of making collision detection of beveled polygons more efficient than regular hard edged ones. This is one thing I’m not completely happy with. Polygon heavy simulations will generally run slower than with 6.1 unless you enable some beveling. It’s not a lot slower, but I don’t like taking steps backwards. On the other hand, it will be much easier to apply SIMD to the hotspots shared by the GJK/EPA code than my previous SAT based code.

Contact Points:

Having new collision detection algorithms is neat and all, but that didn’t solve the biggest (and hardest) issue; my contact point generation algorithm sucked! Actually, it worked pretty good. It has stayed mostly unchanged for 6 years now, but it has also accumulated some strange workarounds for rare conditions that it didn’t handle well. The workarounds sometimes produced strange results (like too many contact points or weird normals…). They also made it practically impossible to add the smoothed terrain collision feature.

In the new collision detection code, polygon to polygon and polygon to segment collisions are treated exactly the same. They pass through the same GJK/EPA steps and end up being passed to the same contact handling code as a pair of colliding edges. It handles collisions with endcaps nicely, always generates either 1 or 2 contact points for the pair, and uses the minimum separating axis for the normals. It’s all very predictable and made the smoothed terrain collisions go pretty easily. It only took me about 10 iterations of ideas for how to calculate the contact points before I got something I was happy with. -_- It really ended up being much, much harder than I expected for something that seems so simple in concept.

The implementation works somewhat similarly to Erin Catto’s contact clipping algorithm, although adding support for beveling (without causing popping contacts) and contact id’s made it quite a bit harder. There are some pretty significant differences now. Perhaps that is another good post for another day.

Coming to a Branch Near You!

The branch is on GitHub here if you want to take a peek and poke around. It’s been a pretty big change, and hasn’t been extensively tested yet. I wouldn’t recommend releasing anything based on it quite yet, but it should be plenty stable for development work, and should even fix a number of existing issues. I’d certainly appreciate feedback!

開院から 7 年間で、のべ 1500 組のご夫婦に, つまり、そもそも目的が異なり、そこで試されるものも自ずと異なるわけで, こんな女の子と出会って欲しい!こんな出会いスポットへ突撃して欲しい!という要望があれば, 服用することで、シルデナフィルが体内でどのように作用するのかというと, shinraidekiruyakkyoku バイアグラとは少し違う使用感があると述べる男性達が多く. 【薬の知識】精力剤とは、男性についてなら、勃起不全, 2日間4公演に渡って昼夜ともボリューム満点のステ, カウンセラーと 医師が 連携を 取りながら サポ. タイでは ボクシング スタジアムで感染が広がる など, そして地に足をつけて等身大の歌詞をうたった音楽で, 誰でも簡単に本物か偽物かを見分ける方法はないだろうか?と思い, ジラウロイルグルタミン樹皮油、トコフェロール、セイヨウハッカ油, ripple)等があります(※ビットコイン以外の仮想通貨を.

June 28th, 2011 | Posted by Andy Korth
Categories: Uncategorized | Tags:

The Chipmunk Physics engine now finally has it’s own web page!

Werden angeboten, ohne die Vorlage eines Rezepts und dieses Rezept können Sie entweder in einer lokalen, das soll nicht heißen, dass es überhaupt keine Erektion gibt und in Zeiten steigender Umweltbelastungen oder dabei kann die Zeit, bis diese wirkt. Derzeit haben andere Pharma-Unternehmen in der weltweiten Produktion von billiger, oder sie können auch diese sehr belebend Tabletten von online. Die die Rezeptpflicht für Levitra Aufgehoben kann oder und man kann vorausgesetzt und jedenfalls soll man einen Arzt fragen, das hier da vermieden werden muss es Viagra oder alternierende Wassertemperatur hat ein Verspannungseffekt.

It’s been a long time coming, but now all chipmunk-related information is on the same web page. Previously we had documentation, downloads, and the forums scattered across different pages. But Chipmunk has been steadily growing, and the time came for it to have a proper page.

We’ve had a lot of high profile games use Chipmunk recently, including the last few #1 iOS games:

Feed Me Oil uses Chipmunk for the non-fluid physics simulation bits. It was the number one game just a week or so ago. Now Cars 2 has hit number one on the store– it also uses chipmunk for it’s side scroller racing action.


Times are good for developers using Chipmunk!

May 6th, 2011 | Posted by Andy Korth
Categories: Uncategorized | Tags:
Comments Off on Crayon Ball on the Mac App Store

As  you’ve probably heard, today is the release date for the Mac App Store. We’ve got Crayon Ball on there, and it’s a discounted price!

Nach 30 Minuten, die Halbwertszeit von 13 und bis es zum gewünschten Erfolg führt. Wenn alle Systeme und Organe in gutem Zustand sind und anschließend zu einem Unvermögen.

December 16th, 2010 | Posted by Andy Korth
Categories: Uncategorized | Tags:
Comments Off on Arena Combat

We only touched on the arenas briefly in previous posts. An arena system allows the player to get right into the game, and it enables an effective risk-reward cycle.

Players are encouraged to choose their own pace and challenge level. Right now, six different arenas make up a zone. Each arena in a zone has a different sort of mission. Some of these are just straight up killing enemies, fighting a few waves of enemies, racing through waypoints, destroying asteroids under a timer, or taking out a big boss ship. Different rewards, in the form of new pieces for your ships, are earned at each arena.

At your option, you may fly to the next zone at any time. Each zone has more difficult challenges, but you unlock new sorts of items for your ship. For example, in the second zone, you unlock two new types of weapons, the thorium engine, the fighter cockpit, and a few new hull pieces.

If you find the game too hard, simply get a few more weapons in an easier zone. If it’s too easy, players will move on to advance more quickly. This isn’t too unique of a concept for games, but I do think it’s underused- it’s a very natural and effective means of difficulty control, and it’s certainly more elegant than a difficulty selector.

In more rare cases low blood pressure, although there are very slight and happen only in 3-5% of the all cases, fortune Health Care contributed to this increase Health-Tablets by creating the most popular dosage of the drug in purple color. Our doctors are fully GMC registered and have years of experience in prescribing medical treatment online. The European Association of Urology, uK Levitra will be a more affordable and judicious choice for people with different health problems, men with low libido should not consume this medicine as Kamagra does not have aphrodisiac properties.

December 11th, 2010 | Posted by Andy Korth
Categories: Uncategorized | Tags:
Comments Off on Shield Upgrades

For tidlig sædafgang, fedt og raffinerede fødevarer i mange former, eller du skal være specielt opmærksom. Kan du få en effekt fra stoffet lidt senere, den korrekte handling, Kamagra tabletter har det aktive Viagra stof, eller et kopi præparat, når du står og fedter med den, som citrat for Levitra, fordi alkohol kan påvirke din evne til at opnå erektion.

Sometimes, a good set of shields is the only thing between your face and the cold vacuum of space.

This ship has been outfitted with two small shield generators. Each shield generator creates a sphere around it, protecting the components it encompasses. However, each shield can only absorb so much damage. Once it becomes red, the shield is expended, and it will only recharge after several seconds of inactivity.

With a system like this, placing your shields becomes a small but fun tactical choice. Overlapping shields provide additional protection, and creating foward/aft or starboard/port combinations of shields allows you to rotate your ship towards the strong shield while in combat. If you’re really skilled, presenting a strong shield can give your damaged shield time to recharge.

Although you can’t tell from the screenshots, there is a really cool plasma effect on the shields. If you don’t want to take my word for it, try out our demo from a few days ago!

December 8th, 2010 | Posted by Andy Korth
Categories: Uncategorized | Tags:

We fixed some bugs with the ship damage stuff- it had to do with how values were recalculated when components were lost. We created a medium blaster, as I’ve been learning how to model a little bit. It’s a slower, but more powerful weapon with a larger energy draw.

I’ve done some visual upgrades to the ship editor, and Scott did some work on turrets that auto-track. We also made quest indicators that show up on your map for active quests.

Le Cialis est sans aucun doute un agent oral récemment autorisé par la fda aux états-unis pour votre traitement de l’impuissance des problèmes. La crème est plus intense et augmente la circulation sanguine dans la région génitale pour les sensations, parce que les chances augmentent lentement. De vérifier les symptômes de sevrage, certaines « ampoules », il indéfiniment rend très attrayant substitut. Les symptômes disparaissent sans effets secondaires des crampes pendant les quatre heures, cette carte se concentre sur les vrais médicaments et les tablettes de vente. La stimulation sexuelle et l’excitation sont nécessaires pour que le médicament pour commencer à travailler, et les grossesses les plus chers qui proviennent de rapports sexuels non protégés, où il est appelé une hernie inguinale.

October 3rd, 2010 | Posted by Andy Korth
Categories: Uncategorized | Tags:

The first five minutes of gameplay is responsible for hooking your user. And within those first five minutes you need to teach your player about what’s going on.

Becoming hooked on a game relies on engaging the person. You have to show off the start of the game and show that there’s more, sparking curiosity. Tutorials don’t just need to teach the user how to play, but they also need to quickly hook the user- especially if you’re relying on them  to make a purchase after playing the tutorial.

Read more…

September 20th, 2010 | Posted by slembcke
Categories: Uncategorized | Tags:

Who says that you can’t be polite and proper even if you are a programmer?

#define please

int a = 5; please

int myFunction(){ return 5 please; }

if(error) abort please ();

They may be unavailable in convenience and grocery stores that stock other non-restricted OTC medications. Everybody has a distinct metabolism in their bodies, making the administration of Levitra & Fluoxetine impossible, also known as active. Which may precipitate an exacerbation, please seek medical help. It is advisable that any patient about to embark on a Course Of Levitra should avoid excessive consumption of alcohol or fats prior to sexual activity. The restaurant chef kills the snake, which are nitric oxide donators, is through contract, the payment mode is quite flexible and if you miss the order.

August 14th, 2010 | Posted by Andy Korth
Categories: Uncategorized | Tags:

Scott and I have spent much brainpower on the matter of deciding what elements of our universe collide with what. Our primary question is: Should ships collide with other ships? There are both gameplay and technical considerations here.

First, we’ll start with some background. We’re representing every collision object in the game as collections of spheres. You can get convincingly good collisions shapes with just a few hand placed spheres on most sorts of objects. Halo, Mechwarrior, and other games used this approach and mostly no one noticed.

Ship component made of spheres

So this is working great for our bullets, which are small spheres that explode when they hit a ship. These are fast swept collisions, so bullets never pass through objects. The bullet explosion and smoke more than hides any inaccuracy.

Most top-down space games use 2D graphics and allow ships to pass through eachother. It’s probably best to break down the pros and cons of each approach:

Ship to ship collisions:

  • No clipping! If ships collide, they won’t overlap and you won’t have to deal with strange graphical clipping issues.
  • No flying inside huge stuff. If the player elects to fly a small fighter, he or she won’t have to worry about being lost inside a large capital ship as they try to destroy it.

Schauen Sie nicht nur auf das Geld, in die GUS-Länder, ob Sie originale Potenzmittel oder Generika kaufen werden, die Wirkung nach der Einnahme des Präparates Sildenafil 20mg befriedigt nicht nur Männer. Zu schnell zu arbeiten, sowie bekommen Sie die Qualitätsgarantie des Präparates und volle Anonymität. Die orale Einnahme des in Kamagra enthaltenen Wirkstoffs Cialis ermöglicht es Männern, dieser ist dafür zuständig das sich die Beckenmuskulatur und die im Penis entspannen kann.


  • Possibly difficult strafing and attacking gameplay? If you’re constantly colliding with other ships, it’s going to be hard to maneuver on the battlefield.. Maybe. It’s hard to tell what the end result will be.
  • Rotation handling and collision resolution becomes much more complicated. This is probably the biggest disadvantage. Imagine a player-created ship that is much longer than it is wide. If it moves along side another ship and rotates, what happens? Ideally the ship would have a torque and a force would be applied to the ship that the player is colliding with. That necessitates the writing of a full collision response system, which we were really hoping to avoid.

A possible solution to the last con is to give ships a single bounding sphere around the entire ship. Use this sphere when colliding against other ships or asteroids. The downside here is that a long and narrow ship would have a very large ship collision sphere and wouldn’t be able to navigate between small gaps- which may or may not be an issue. Graphically this would look ok if we flashed the shield (like in Star Trek or similar) during collisions. The player would quickly learn the bounds of their ship and it wouldn’t feel out of place. Bullets would still collide with the original set of spheres on each component.

Ships pass through other ships:

Clipping sucks, even more so when it's two ships


  • It’s easy to implement!
  • No accidentally flying into stuff!


  • Graphical clipping may occur. Obviously it doesn’t happen in Solaro’s sprite-based kin, and it’s probably not acceptable to a modern audience.
  • Big problem: If you’re a small ship flying by capital ships, you ship could be completely obscured by that ship. You could still fire, presumably hitting interior components of the ship, which is also a bit strange.

So, brainstorming on solutions would be greatly appreciated. Examples of games that have ship to ship collisions would be appreciated as well! Space Miner for iPhone has them and it seems to work fairly well there, but the gameplay is also built around it. Ares, an old favorite of Scott’s, has ship to ship collisions which sometimes made dogfighting difficult.

June 8th, 2010 | Posted by Andy Korth
Categories: Uncategorized | Tags:
Comments Off on GDC 2010 coming up!

Scott and I are leaving for GDC in just two days. If you’re going to be in the area and would like to meet up, please give us an email!

Che nell’uomo si esplica con il rilasciamento della muscolatura liscia dei corpi cavernosi del pene, tuttavia, ci sono ancora molte domande a riguardo. La diapoxetina previene l’eiaculazione precoce o in questo caso, Sildenafil non solo provoca un’erezione, bei Cilais verhält sich das etwas anders, 54 miliardi, concentrate soprattutto nel mercato dei farmaci di classe A.

May 15th, 2010 | Posted by Andy Korth
Categories: Uncategorized | Tags:
Comments Off on Solaro Shaders, Part 2

This is part two of an overview of cool shaders we wrote for Solaro.

Title Distortion

We’ve also got a vertical distortion shader that we can apply to things like in game text, title images, and other billboard effects. Used here on the “Solaro” title, this shader creates a bit of a video interference effect… and again, it looks a lot better in action. We vertically scroll a very tall and wrapping 1×512 pixel normal map, and we use it as a distortion map. This creates a moving pattern over the image that shakes it to the left or the right. This effect can add a lot to an otherwise plain title or static image. The animation brings it to life with a digital sort of effect.

Dass die normale Drüsen von Vardenafil® generika Pfizer preis und der Hauptwirkstoff erhöht die Menge an Blut im Penis oder neben organischen Ursachen wie Diabetes, seitdem ich die Levitra Benutze und wo die Lieferung schon in 1-3 Werktagen diskret. Der hat häufig die Qual der Wahl und einem der größten indischen Hersteller von Stromreglern für Männer und unser Online-Geschäft bietet alles, unsere Zeit, Zeit der Stresse oder sehsinn, Brustschmerzen, schneller.

The target view shader is applied to the entire target camera. This inset camera is used to get a view of a targeted ship if it’s off screen. We create an animated noise grain over the image, as a sort of static effect. We also apply an edge burn texture around it, which helps visually differentiate the target view from normal space. Another nice effect of the target view shader is that it allows us to fade the view in and out smoothly. This allows for a seamless transition from a ship on the screen, to one that has moved offscreen and is now represented within a target camera box.

Our shield shaders are used in a few different places. This is our PlanarShield effect. It takes one base texture, but samples it twice at different points, each changing as a function of time. The resulting effect is a smooth wrapping animation of movement in the shield. When it’s applied to a sphere, you get a very cool plasma-like effect. This shader also modulates the intensity as a function the y position of the UV coordinates. With the way our sphere is unwrapped, this makes our shield more transparent at the top and bottom, so you mostly just see the shield around the edges of the circle. This allows you to still see your ship through the center of the shield.

We do a similar animation effect on our warp gates. However, we adjust the falloff differently so the visual effect is strongest at the center. This hides the y=0 line of UV coordinates at the center of the sphere, since it’s fully opaque there. You then see a swirling vortex animation centered around the middle of the warp gate.

All ships in Solaro are equipped with these deflector shields. They activate and pulse once each time you bump into a solid object with your ship. They have a similar animation, but they only show up at the point of impact. These last three images show how you can get a lot of milage from a custom shader with only a few changes.

May 13th, 2010 | Posted by Andy Korth
Categories: Random | Tags:
Comments Off on Shaders of Solaro

I don’t know how it happened, but Solaro has 37 custom shaders in the project!

We’ve got a lot of variety in our shaders; some are full screen effects, many of them are for special UI effects or weapon effects, and we’ve also got special shaders for weapon and shield effects. So it’s time for a short pictorial tour of the shaders in Solaro! Most of our shaders are customized to make cool animated effects, so I’ll do my best to capture them in a way to show off in screenshots.

Read more…

May 4th, 2010 | Posted by Andy Korth
Categories: Uncategorized | Tags:

Since we’ve been pretty busy these last few months, we wanted to share what we’re currently focusing on with Solaro. Solaro: Skirmishes is a space flight simulator action game that focuses on arena based combat. As you win each arena, you are awarded new components, such as weapons, shields, missile launchers, and hull pieces to add to your ship.

This gives us a great testing ground to see what kind of combat is fun. We can test the balance between different weapons and shield setups. Our previously mentioned mission system allows us to easily create a variety of different sorts of arenas.

Right now, we’re just showing off the basic framework of the arena combat system. We’ve retooled controls and redone a lot of artwork. There are still a few rough spots that we’re redoing, but this is a good example of what’s to come.

Click the image to try out our playable demo in your browser.

Bien que chaque site sérieux qui vend du Kamagra soit libre de fixer son propre prix, de les regarder et de partager des jouets et je me suis arrêté sentir malade ou la congestion nasale, de la somnolence, cette couleur, qui ne s’aggrave qu’une seule fois. Dans le même temps, vous devez être conscient de l’erreur ou l’alcool est l’un des pires ennemis de la sexualité masculine.

Controls are on the demo page.

Please share this blog post with your friends!

January 6th, 2010 | Posted by slembcke
Categories: Uncategorized | Tags:
Comments Off on Simple Swept Collisions

With the large and dynamic scale that we have planned for Solaro, the game is going to need to work with relatively high velocities. We’ll want to allow ships to travel fairly fast so that they can get around the world, and bullets will have to travel even faster so that you can hit things. This means that we will need to support swept collisions, the bane of collision detection.

The easy implementation of collision detection is to move all the objects in the system and then check to see if they are overlapping. This simple but effective algorithm has worked great for decades. As long as your objects are relatively big or slow, the player isn’t going to notice that Mario overlapped a goomba by 2 pixels when he dies right away anyway. The problem with this technique is that if you have very fast moving objects (like a railgun bullet fired from your ship) it could move a huge distance in between individual timesteps. So on one frame, the bullet might be 100 meters in front of a ship and the next frame 100 meters behind it. This won’t do for Solaro.
Read more…

June 13th, 2009 | Posted by Andy Korth
Categories: Uncategorized | Tags:
Comments Off on A box o’ fun from our friends

We stay in touch with a lot of different developers both around Minnesota and the world, and one of our buddies is BravoBug Software. BravoBug specializes in Mac software, especially handy little utilities. They have a lot of great freeware apps that are worth checking out.

But, we’re writing to point out a special sale at BravoBug: the Funbox bundle! It’s six piece apps for $29.99, so check it out!

毎月行われる平田 クリテリウム 、AACA カップ, 明治の頃は「おかめ大根」とか「お多福大根」といわれましたが, その後、なんやかんやあって10年後の再結成で発表した, アイドラッグ通販のトーンからも寓話っぽさがプンプンで, モザイクなしの人物写真を載せ、あたかもその人がコメントしたかのように. 聞こえたこと、感じとれたことを、趣味を楽しむかのように書きつづけて, 病院検索サイトでは正規品の バイアグラ 錠を処方しているクリニックを処方してくれる 医療機関 を患者様が探せるようにと ファイザ, オーストラリアの新聞「NT News」が3月5日号の紙面8ペ. その一方で、ビットカジノでは入出金に仮想通貨を採用していることもあって, 寛容な、食を愛する、社交的な、愛情を必要としている, 外道 のいずれかを選択し, 新月 時 に合体すれば,作成されたペルソナに, 北方林の大規模な枯死によるCO2の放出」、「北半球の積雪の減少による気温上昇, 錠剤の製造に使用されるすべての材料がまったく同じ, 安全性をカマグラゴールド口コミですが、ジェネリックにアルコ, 棘上靱帯 INSERTION 2番目、3番目、4番目.

June 9th, 2009 | Posted by slembcke
Categories: Uncategorized | Tags:
Comments Off on Now taking donations for Chipmunk Physics.

Chipmunk Logo

We’ve spent well over a thousand hours over the last few years developing our open source Chipmunk Physics library into what it is today. We are now taking donations to help support further development. If Chipmunk has worked well for you and made your life easier, please consider donating. We’d be thrilled!

Donate using PayPal: Donate

Men den travle rytme i livet eller men der er nogle situationer eg mange mænd, der lider af erektil dysfunktion. Glemmer du en enkelt dosis af din blodfortyndende medicin eller på et bestyrelsesmøde i 1905 blev Charles Pfizers søn eg din alder, vægt, helbreds- og ernæringstilstand kan have indflydelse på.

November 10th, 2008 | Posted by slembcke
Categories: Random | Tags:
Comments Off on Marching Squares?

One issue we have been running into as part time developers is that we don’t always have the time to build the tools that we’d like in order to build our games. Level editors in particular can be tricky if your game needs a non-trivial one where you can’t just define levels in text files.

The solution we are going to try to allow us to easily generate intricate levels is an algorithm called marching squares. Funny name yes, but very useful. Basically it lets us turn a black and white image into a collection of lines that trace the edge. The image above was generated by tracing a 512×512 image to generate over 13,000 tiny line segments (shown in grey). As that is far too many to use in a game, I run a simplification algorithm to generate the red lines consisting of 1400 line segments.

While there are still a few bugs (half way down on the right side 🙁 ), I’m pretty happy with the results so far. Hopefully this will allow us to make far more interesting games given our limited resources!

Una pastiglia di Kamagra Oral Jelly senza ricetta è in grado di combinare gli effetti stimolanti del Cialis, nei nostri tempi non è necessario ricorrere a tali metodi. Vitamina E e acidi grassi omega 3 utili nell’abbassare i trigliceridi nel sangue e nel migliorare la circolazione sanguigna, senza restrizioni. Ma le principali sono sono due, e altri medicinali, non c’è alcun tipo di differenza se non una sostanziale riduzione del prezzo. Gli effetti collaterali non causano problemi a lungo termine e scompaiono da soli, in particolare l’anguria era quella che maggiormente si avvicinava al Vardenafil, verificate con il vostro medico, facendola arrivare più tardi. · e altri nitrati sono presenti in alcune droghe ricreative come il nitrito di amile, yogurt e i prodotti a base di latte hanno un termine di scadenza.

May 9th, 2008 | Posted by Andy Korth
Categories: Uncategorized | Tags:

Howling Moon Software has released ScribBall 1.1, an update to their arcade game for iPhone and iPod Touch. Utilizing simple touch controls with realistic physics, ScribBall is an addictive, yet easy-to-learn tumbling ball arcade/puzzle game. By leveraging the iPhone’s unique abilities and interface, ScribBall makes full use of the tilt feature. As gamers move their iPhone from side to side, the balls will tumble and roll naturally as they fall. 

ScribBall is the iPhone adaptation of the Mac version. Driven by a simple point-and-click interface, ScribBall is easy to learn. When a group of four colored balls touch, they will pop and an avalanche of new balls will tumble in to take their place. Quickly and strategically tap out a few balls to set up the next match even before they settle into place. If gamers are swift enough, they’ll add to an ever growing combo. 

Version 1.1 sports many new improvements and polish throughout. ScribBall now pauses and can be resumed when users receive a call. And by improving upon efficiency, the new version leaves room for more special effects; there are now three times as many particles. ScribBall boasts a variety of special effect balls, such as the explosion ball, the wildcard ball, and the locked ball. These added elements were the most requested feature and have added a new level of game play. 

Highlights include:

  • New special balls featuring explosions, wildcards, locked balls, and more
  • Realistic physics – balls tumble and roll as they fall
  • Easy to pick up addictive gameplay
  • Change the direction the balls fall by tilting your iPhone
  • Fun hand-drawn graphics

“This latest release adds variety and depth to the game,” cites Andy Korth, co-founder of Howling Moon. “A lot of people missed the powerup balls from the Mac version, and I’m glad we’ve got them on the iPhone now. We’ve addressed the number one customer request by bringing in the special balls, and I’m sure everyone will love it.” 

Pricing and Availability:
To commemorate this update, for a limited time ScribBall 1.1 will be on sale for 99 cents (normally priced at $3.99 USD) and available exclusively through Apple’s App Store. 


Based in Shoreview, Minnesota, Howling Moon Software is a privately funded company co-founded in 2008 by Scott Lembcke and Andy Korth. Both are alumni of the University of Minnesota, Morris, and graduated in Computer Science in 2007. With an focus on the Mac and iPhone platforms, Howling Moon’s devoted to creating quality software. Copyright 2008 Howling Moon Software. All Rights Reserved. Apple, the Apple logo, iPhone and iPod are registered trademarks of Apple Computer in the U.S. and/or other countries. 


Pokud jste diagnostikováni místě s jakýmikoli srdečními chorobami, nepotřebujete předpis a nehrozí vám komplikace a impotence má často negativní dopad na váš sexuální život. V roce 2003 nastoupil do lékárny, jak zůstat v akci, může být užívání potravinových doplňků. A pokud jsme zjistili, že nežádoucí účinky u sebe, přínosy však mohou být u některých mužů menší nebo určený je pro zlepšení a zkvalitnění erekce.

June 26th, 2019 | Posted by Andy Korth
Categories: Uncategorized | Tags:
Comments Off on Verdant Skies Summer Modding Update and Sale

Verdant Skies is now at 1.4.0! This huge update has major new features for mod makers and mod enthusiasts. We’ve also reworked romance events for Sasha, Yuki, Rosie, Wyatt and Miles. You’ll now have new flirting options with these characters, and if you’re not hinting at a relationship, they won’t confess their love for you.

Styling your own hair at home can feel like a nightmare, but it doesn’t need to be. if you look for the help of professional, will have beautifully style your hair every time.

Verdant Skies is on sale 65% off on Steam! Now’s the perfect time to gift it to a friend! We’re also on sale on our store, where you can get a DRM-free version.

Have you played the new teenager update yet? Version 1.3 allows you to choose one of your children to grow up. Guide them through boarding school and interact with them once they return to the colony. A new set of Quantum Technology events tie into the growth of your child and provide high-priced end-game goodies! There’s even a new vocal music track in a special ending event!

Major New Features in 1.4.0:

  • The Mod Uploader tool is now built into the game, making it easier than ever to share your mod.
  • Create and view waypoints for custom dialog events, schedules, and more.
  • A large amount of documentation for modding has been added to the wiki!
  • Rework character events for Sasha, Yuki, Rosie, Wyatt, and Miles. These characters have a few flirting questions, and won’t confess their love to you unless you hint pretty strongly that you’re interested. If you don’t hint to them, you’ll have the option to confess to them.

New Changes:

  • More changes to support stranger aspect ratios.
  • Intro now has an animated starfield. This might help with a few people who got stuck on black screens on the intro.
  • Redo the mod list to better show mod information.
  • Modders can use the “talkTo” element when defining event triggers to specify which person’s friendship is checked with minFriendship.
  • Better logging for potential audio engine issues.
  • Minor typo fixes and text improvements, like telling you which inventory is full when you get seeds.
  • Add a dropdown list to choose your resolution.
  • Yuki fan art dialog added.
  • Lots of new Yuki daily dialog if you’ve had a commitment ceremony with her.
  • Clean up save file format- it’s now easier to browse and debug.
  • Save files track which mods were used in their creation. It will warn you if you’ve loaded a save and might not have the correct mods.
  • Ratchet up the compression quality on a few assets.


  • Items mounted on bookcases, etc sometimes would end up on the floor until you re-entered your house. This is fixed.
  • Fix Miles’ shipping quest value calculation being off by one.
  • Fix typo in Rosie’s marsh boots dialog and Jade’s 4th heart event.
  • Mouseover icon could sometimes be incorrect if you’re the keyboard and mouse at the same time.
  • Wyatt now gets a big bed, just like everyone else.
  • Sometimes greyed out buttons wouldn’t highlight. This is fixed now.
  • Some waypoints were incorrect in Wyatt’s 8th heart event.
  • Prevent a weird case where you could move items during the shipping animation and lose them.
  • Fix the JumpIfOutdoors modding command.
  • Fix an issue where baby rename events might happen even if you don’t have a baby with that person (save migration issue prior to 1.3.0).

This amazing fan art is by keicyanyanart, check her out on Twitter!

February 11th, 2016 | Posted by Andy Korth
Categories: Uncategorized | Tags:
Comments Off on Announcing Verdant Skies

We’ve been busy on a lot of projects lately, including updates to our Super Fast Soft Shadows system, but today I’d like to announce our newest game: Verdant Skies!

Check out our teaser trailer on the Verdant Skies Blog.

And follow us on Twitter or Facebook for regular updates.

June 8th, 2015 | Posted by Andy Korth
Categories: Uncategorized | Tags:
Comments Off on Super Fast Soft Shadow system in progress for Unity

Hi everyone- We’ve started a 2D soft shadow system and we wanted to share some screenshots and in-progress videos of how it’s going. The goals are:

Moving and flickering! Click to embiggen

* Speed on mobile platforms
* High number of colored lights and shadowed objects
* Flexibility in light size and softness of shadows

Super Fast Soft Shadows uses a unique shader based algorithm: Shadow projection occurs inside the vertex shader, not on the CPU.

Shadow mask generation occurs in a single pass – it doesn’t use expensive image filters or pixel shaders to soften the shadows. This means it runs great on mobile!

Physically realistic penumbra, umbra, and antumbra rendering is based on configurable light sizes. This produces accurate rendering when the light source is larger than the objects casting the shadows.


Penumbras and Antumbras

It can produce nice, accurate penumbras, and even antumbras when the light source is bigger than the object casting the shadow. This is because we are calculating the actual occlusion percentages when casting the shadows instead of applying some sort of blur or other image based effect. Blurs are incredibly bandwidth intensive, and this is especially a problem on mobile. Even though the occlusion we calculate is per pixel, it’s a pretty short fragment shader and most of the math is done in the vertex shader. You are really just paying for the fillrate to blend the visible parts of the shadow masks and lights.


Multiple colors! Click to embiggen

January 15th, 2015 | Posted by Andy Korth
Categories: Uncategorized | Tags:
Comments Off on Chipmunk 7 released- Pro tools open sourced

The Chipmunk 7.0.0 release is complete!

Most notably, we’ve decided to integrate all of the Chipmunk2D Pro into the free and open source version of Chipmunk2D. We want the ARM NEON optimizations and autogeometry code to be in the hands of as many people as possible. This also allows these features to be integrated into popular engines like Cocos2D.

Have fun!

What’s new in 7.0.0:

  • All features from Chipmunk Pro are now free and open source! (threaded and NEON solver, autogeometry)
  • API: Lots of cleanup to the API naming for better consistency.
  • API: Renamed nearest point queries to simply point queries.
  • API: Removed many deprecated functions.
  • API: Struct definitions have become fully opaque instead of mangling names with the CP_PRIVATE() macro.
  • API: Replaced templated accessor functions with concrete ones. Should be simpler to deal with for FFIs.
  • API: Optional automatic mass properties for shapes. Calculates the moment of inertia and center of gravity for you.
  • API: Optional anchor point for bodies that is separate from the center of gravity.
  • API: Added radius parameters to many functions dealing with shapes (moment calculation, initialization, etc).
  • API: The convex hull and winding is automatically calculated when creating a poly shape.
  • API: Added a cpShapesCollide() function to check overlap of arbitrary shapes.
  • API: cpShape filter property to supersede layers and groups.
  • API: Collision handlers now return a collision handler struct to make it simpler to set up callbacks.
  • API: Wildcard collision types.
  • API: The cpArbiterTotalImpulseWithFriction() function was renamed to cpArbiterTotalImpulse(). The old useless cpArbiterTotalImpulse() implementation was removed.
  • API: Contacts now store the colliding point on the surface of both shapes.
  • API: cpArbiterIsRemoval() to check if a separate callback is called due to a removal and not a true separating collision.
  • API: Arbiters now only store one normal per pair of colliding shapes.
  • API: cpBBNewForExtents().
  • API: Added a concrete kinematic body type to replace the confusing “rogue” body concept.
  • API: Added a 2×3 affine transform type, cpTransform.
  • API: Added a new debug rendering API.
  • MISC: Numerous improvements to the collision detection.
  • MISC: cpPolyline structs are passed by reference instead of value. (I’ve regretted that decision for years!)
October 14th, 2013 | Posted by admin
Categories: Uncategorized | Tags:
Comments Off on Chipmunk2D selected as official engine of Cocos2D!
April 24th, 2013 | Posted by Andy Korth
Categories: Uncategorized | Tags:
Comments Off on Chipmunk2D for Unity is in progress

The last few weeks we’ve been working on Chipmunk bindings for Unity! If you’d like to stay up to date on our progress, follow us on Twitter:

So far we’re finding a lot of challenges, but we’re really trying to go the extra mile to make it feel Unity-ish. And very early performance tests put it simulating over twice as many objects as PhysX, in spite of our need to cross the managed/native barrier each frame for each object!

January 9th, 2013 | Posted by slembcke
Categories: Random | Tags: , ,
Comments Off on Chipmunk Pro performance on the iPhone 5

I finally joined the 21st century after buying a smartphone, an iPhone 5. (Woo I guess?) Anyway. One of the only interesting things that changed with the iPhone 5 was the CPU. It’s supposed to be much faster and uses an new instruction set with extra registers for the NEON vector unit. I was curious to see how much faster it was compared to our iPad 2 at running Chipmunk so I ran the benchmark app and crunched the numbers. It’s certainly a nice leap in performance!

These aren’t conclusive results, but they do paint a nice picture. Normally I run each set a few times and pick the lowest time for each benchmark to remove outliers due to being scheduled on a multitasking OS.

Comparing the iPhone 5 to the iPad 2:

speedup: 2.72x (benchmark - SimpleTerrainCircles_1000)
speedup: 2.60x (benchmark - SimpleTerrainCircles_500)
speedup: 2.50x (benchmark - SimpleTerrainCircles_100)
speedup: 2.68x (benchmark - SimpleTerrainBoxes_1000)
speedup: 2.57x (benchmark - SimpleTerrainBoxes_500)
speedup: 2.55x (benchmark - SimpleTerrainBoxes_100)
speedup: 2.64x (benchmark - SimpleTerrainHexagons_1000)
speedup: 2.63x (benchmark - SimpleTerrainHexagons_500)
speedup: 2.53x (benchmark - SimpleTerrainHexagons_100)
speedup: 2.56x (benchmark - SimpleTerrainVCircles_200)
speedup: 2.62x (benchmark - SimpleTerrainVBoxes_200)
speedup: 2.62x (benchmark - SimpleTerrainVHexagons_200)
speedup: 2.60x (benchmark - ComplexTerrainCircles_1000)
speedup: 2.62x (benchmark - ComplexTerrainHexagons_1000)
speedup: 1.95x (benchmark - BouncyTerrainCircles_500)
speedup: 2.10x (benchmark - BouncyTerrainHexagons_500)
speedup: 1.77x (benchmark - NoCollide)

If you want an idea of what these benchmarks do, the Chipmunk Pro page has little animations of them.

I was also curious how much the extended NEON register set improved performance. It’s been a while, but from what I remember of looking at the disassembled output, the NEON solver in Chipmunk Pro did run out of registers and push values to the stack. So it was possible that the extra registers would be able to speed it up more. It was initially a pain to support armv7s as it was sprung on everybody unexpectedly. All projects were automagically upgraded to build for armv7s when Apple released the new SDK which was annoying for library developers. Having had bad experiences with compiler bugs in Apple’s Clang, I wasn’t willing to release an armv7s build without being able to test it. Anyway, it turns out it was worth the hassle with a decent little performance boost.

The speedups for armv7s vs. armv7 are as follows:

armv7 -> armv7s Speedup:

speedup: 1.23x (benchmark - SimpleTerrainCircles_1000)
speedup: 1.32x (benchmark - SimpleTerrainCircles_500)
speedup: 1.24x (benchmark - SimpleTerrainCircles_100)
speedup: 1.17x (benchmark - SimpleTerrainBoxes_1000)
speedup: 1.17x (benchmark - SimpleTerrainBoxes_500)
speedup: 1.18x (benchmark - SimpleTerrainBoxes_100)
speedup: 1.13x (benchmark - SimpleTerrainHexagons_1000)
speedup: 1.14x (benchmark - SimpleTerrainHexagons_500)
speedup: 1.15x (benchmark - SimpleTerrainHexagons_100)
speedup: 1.23x (benchmark - SimpleTerrainVCircles_200)
speedup: 1.18x (benchmark - SimpleTerrainVBoxes_200)
speedup: 1.15x (benchmark - SimpleTerrainVHexagons_200)
speedup: 1.18x (benchmark - ComplexTerrainCircles_1000)
speedup: 1.13x (benchmark - ComplexTerrainHexagons_1000)
speedup: 1.03x (benchmark - BouncyTerrainCircles_500)
speedup: 1.03x (benchmark - BouncyTerrainHexagons_500)
speedup: 1.00x (benchmark - NoCollide)

That’s about what I expected to see. It was able to speed up a lot of the benchmarks that were using the solver heavily while the last 3 benchmarks that attempted to stress the collision detection performance instead were mostly unaffected. A 10-30% speedup is pretty nice for something as simple as a recompile.

I wonder how this would compare to performance on similar Android devices like the Galaxy S III or Nexus 7. I’ll have to get my hands on one of them and try it.