Fuzzy stone placement

Hi there!

I created a uservoice suggestion for this but I’m not sure how much visibility those have, so I’m adding this post to open a dicsussion.

A feature I personally like in some other programs (especially Sabaki) is the fuzzy stone placement: the stones are not placed dead-center on the intersections but randomly a bit off. I find that this adds a natural look to the whole board.

What do you guys think about it?



And I suggest a drunk mode in which stones can fall between intersections at equal distance from each :smiley:

Well, I think what you suggest could be funny and more realistic but it’s indeed far in my personal wishlist :slight_smile:



I personally like the idea but it would need to be optional so as not to drive the OCD crowd wild. I’d use it.


I do align my stones carefully. They’re not as fuzzy on a real board as when placed artificially fuzzy. :thinking:

To be even more realistic, there should be a small random chance to draw a bad stone (with a part broken off, or cheap plastic among glass, or stone of the other color, or mistakenly taken from prisoners). Then you would have to click again to remove it, and a third time to place a proper stone.


Hey VARoadstter,

I 100% agree with you, and that’s why the uservoice suggestion that I linked says: “Add an option to toggle “fuzzy stone placement”.”

Glad you’re agreeing with me :slight_smile:

Oh, and since you like it, feel free to vote for the ticket.



I like this, i’m sure it would look cool! Since we already have lot of options for personalising our board appearance, having this would also be fitting for the site.
And maybe also an option to put small shadows on our stones?


What about correspondence games? Should the server remember the fuzzy placement of each stone to preserve the board appearence?


Not to speak for the OP but I’d imagine the intent is to display a board image where the stones are potentially off by a pixel or two when drawn. For correspondence games, reopening the game would just apply the “randomizer” to the stones. Any time there is a full screen refresh of the game page you’d likely get a new fuzzy layout. I don’t see preserving the exact pixel location of each stone’s centerpoint as that important.


Yeah, not important at all, I’d think.


As a contributor to some of the stone alignment client code I can say that it should be doable, but might be trickier than expected given what I know.

The textured stones are pre-rendered in resolution suitable for a device, giving a pixel sharp presentation. So any sub-pixel shifts to pre-rendered stones would impact image quality. To maintain the quality of stones the random shifts would need to be included in the pre-rendering logic. That increases the number of templates needed from just few (with different directions of shell lines) to 20+.

And it becomes tricky, as differently sized templates are reused in multiple places:

  • Go problems - these probably shouldn’t include fuzziness
  • Stone picker - this one probably should be straight as well
  • The overlay stone (move marker)
  • etc.
    meaning the code needs to have 2 sets of templates - one that is aligned and another that isn’t.

Another potential issue is ghosting, which happens when neighbouring stones overlay the boundary pixel. Because of that you cannot expect too much of fuzziness, as the margin of freedom for the stone is usually less than a pixel. Any extra freedom would require a change to how the whole board is refreshed. That would be quite risky - given the number of different devices and resolutions in which the application is running, it’s fairly easy to break the experience for some of the clients. Which I humbly admit I managed to achieve with my contributions (alas temporarily)!

It would be great to give the board a little more organic feeling, but the effort that’s needed vs. the actual gains from this improvement, mean that probably we will not be seeing this implemented extremely soon.


…but there are… shadows… under the stones :slight_smile:


Why does the shift have to be sub-pixel?

Maybe this fuzziness should only be on devices where a pixel is not a significant distance?


Settings are already bound to device rather than account (another change I wouldn’t mind seeing) so theoretically this could work. Have the option check screen res before being selectable.


Oh, I wasn’t meaning by user setting, I was meaning in the code, knowing what device you are on and either fuzzing or not.

But if you take the approach of per-device settings, then the user could just turn it off on a mobile if they don’t like massive 1 pixel fuzziness :smiley:


In high res the full pixel shifts could work, but I don’t know if that would look very natural. Sub-pixel shifts make the stone geometry slightly differ. Each stone gets a little extra ‘aji’ because of it :slight_smile:

1 Like

I had a quick look and it is as JA says, only more so.

There are an impressive number of reasons why this isn’t easy!

(What about the marks in the stones (like the ‘0’ that marks the most recently played stone?) How deal with the fact that the board is redrawn actually quite often (like when you press forwards one turn in Analyze mode)… have to remember where the random placements were …etc!)


OK, so I had a spare lazy Sunday (waiting for opponents to return moves! :slight_smile: ), and I got curious about this, so I had a shot at it.

The solution I have coded seems to work OK at least on my browser.

One thing that quickly stands out is that our current display jams the stones together tightly - there is no gap between them. This means that they can’t be nudged without bumping into (overlapping!) each other, or bumping their neighbours the same way.

For my first attempt at this, I solved this by making the stones a bit smaller. Thus they can move around a bit without having to mess with their neighbours. This matches how my own real (physical) Go board is.

I have noticed that Drwyin’s real board, in his videos, has the stones as big as the squares, and touching each other, so I don’t know what is best.

Anyhow, this is what the result looks like:

Interestingly, when I went back to the real server and it’s touchy stones, I found that I prefer the more spaced look, with gaps between the stones.

Interestingly also, Sabaki has about the same gap between stones, and the same amount of nudging of stones - a fluke, I only just looked at it!

That said, now that I seem to know how to do this, it would be fairly trivial to do it the big-stones-touching-and-bumping-their-neighbour way, if that was considered better.


PS: For comparison, here is what the same game looks like with the current normal touchy stones Goban (without my changes):


My understanding is that the pieces are meant to be slightly too big with the slate ones slightly larger than the clamshell. This counters the optical illusion of the white stones appearing to be larger.


I take it back.

I don’t think you can have the stones ‘only just fit’ in the squares (as they currently do) and have random offsets for the stones.

The reason is that you might place a bunch of stones left on the board jiggled randomly rightwards and some in the right of the board jiggled randomly leftwards. What happens when you start placing stones between them? At some point you reach a stage where you can’t place a stone between the left right-wards jiggled ones and the right leftwards jiggled ones.

So then (as on a real board in this case) you’d have to start re-jigging them all. That would be a distracting mess to watch.

I suspect this is why Sabaki has gaps between their stones - precisely so that they can have random offsets without having this problem.

So it’s either random offsets or big touchy stones, not both.



As a thought. What if the whole board was to redraw every time a stone is placed with a check in place to avoid overlap?

1 Like