# Home

**Welcome to the Open Blocks Documentation**

There is content here for both users of Open Blocks and for people that want to contribute to its development.

It's currently a massive work in progress and various links and info will be incorrect but we're just trying to get all the information currently available in one place.

Writing good docs takes time. We'd love people to help. Hop on our [Discord ](https://discord.gg/W7NCEYnEfy)or just write some docs and let us know about them. There's a bunch of you out there who know more about actually using Open Blocks than we as developers do and your contribution would be invaluable.


# Getting Open Blocks

Open Blocks will always be free and open source. We depend on contributions from our community and from our sponsors to support and continue developing new features.

## Windows

{% embed url="<https://store.steampowered.com/app/3077230/Open_Blocks/>" %}

## Meta Quest

{% embed url="<https://www.meta.com/en-gb/experiences/open-blocks-low-poly-3d-modelling/8043509915705378/>" %}

## Other Devices and Platforms

We aim to work on all OpenXR compatible devices. We're currently fixing some issues that affect other popular Android-based headsets but this link will point to the latest release if you want to try it out on your hardware.

{% embed url="<https://github.com/icosa-foundation/open-blocks/releases/latest>" %}


# Controls

| Controller | Input             | Result                                        |
| ---------- | ----------------- | --------------------------------------------- |
| Main       | Grip              | Move world                                    |
|            | Trigger           | Activate current tool or interact with a menu |
| Secondary  | Directional left  | Undo                                          |
|            | Directional right | Redo                                          |
|            | Trigger           | Snap/Align (depending on tool)                |
|            | Grip              | Move world                                    |
|            | A Button          | Asset Browser                                 |
| Both       | Both Grips        | Move and rotate world                         |


# Tools

<figure><img src="/files/pGATc8z2yqIUKh0zkWbq" alt=""><figcaption></figcaption></figure>


# Insert Shape Tool

Inserts one of the predefined shapes:&#x20;

* Cone
* Sphere
* Box
* Cylinder
* Torus
* Icosahedron (beta release)

<figure><img src="/files/Jl6WxiOmuMMcqRdN2zaD" alt=""><figcaption></figcaption></figure>

#### Controls:

| Controller | Input             | Result         |
| ---------- | ----------------- | -------------- |
| Main       | Directional left  | Previous shape |
|            | Directional right | Next shape     |
|            | Directional up    | Increase size  |
|            | Directional down  | Decrease size  |
|            | Trigger           | Create shape   |
| Secondary  | Trigger           | Snap/Align     |


# Insert Stroke Tool

Draws brush strokes of various shapes.

#### Controls:

| Controller | Input             | Result                   |
| ---------- | ----------------- | ------------------------ |
| Main       | Directional left  | Previous shape           |
|            | Directional right | Next shape               |
|            | Directional up    | Increase number of sides |
|            | Directional down  | Decrease number of sides |
|            | Trigger           | Draw                     |
| Secondary  | Trigger           | Snap/Align               |


# Paint Tool

Change the color and material of entire shapes or just the chosen faces.

#### Controls:

| Controller | Input             | Result               |
| ---------- | ----------------- | -------------------- |
| Main       | Directional left  | Repaint whole object |
|            | Directional right | Repaint faces        |
|            | Trigger           | Paint                |


# Grab Tool

Select entire shapes to move, scale, flip, group or duplicate them.

![](/files/su0MFkFS9NahcB0Kv3Fs)

#### Controls:

| Controller | Input             | Result                |
| ---------- | ----------------- | --------------------- |
| Main       | Directional left  | Duplicate             |
|            | Directional right | Flip                  |
|            | Directional up    | Size +                |
|            | Directional down  | Size -                |
|            | Trigger           | Grab                  |
|            | A button          | Group selected shapes |


# Modify Tool

Modifies parts of a shape - either moving, subdividing or extruding.

<figure><img src="/files/LVsQb7cS1Nyj7dBclcKa" alt=""><figcaption></figcaption></figure>

#### Controls:

| Controller | Input                            | Result                        |
| ---------- | -------------------------------- | ----------------------------- |
| Main       | Directional left                 | Subdivide mode                |
|            | Directional right                | Extrude mode                  |
|            | Directional up                   | Modify mode                   |
|            | Directional down                 | Plane cut mode                |
|            | Trigger                          | Select/extrude/move/subdivide |
|            | Trigger (hold in subdivide mode) | Loop subdivide                |
| Secondary  | Trigger                          | Snap/Align                    |


# Eraser Tool

Erase whole shapes or parts of a shape

#### Controls:

| Controller | Input             | Result                 |
| ---------- | ----------------- | ---------------------- |
| Main       | Directional left  | Erase shape            |
|            | Directional right | Erase vertex/edge/face |
|            | Trigger           | Erase                  |


# Snapping

The ability to snap objects, edges and vertices together helps make your creations precise. However, we heard that the existing snapping behavior was often unpredictable or difficult to control. To ensure every snap you make does what you expect it to do, we’ve vastly improved our snapping algorithm and introduced a brand new user experience to guide you.

When trying to snap two objects together, make sure to half-press the alternate trigger to see a helpful guide line. The line will preview the spot to which your object will snap if the trigger is fully pressed. Use this guide to locate your snapping gesture to the exact face you intend before pressing the trigger all the way down.

![](/files/nV8XDvdPUUPRZGK1hFqq)

You can also more easily snap meshes together. Let’s say, for example, that you’d like to snap a torus around a cylinder. Half-press the alternate trigger while placing the torus to get helpful guidelines for placing one mesh around the other. Fully press the trigger to snap the torus in place.

![](/files/WhydCCTniZQNHe5muR7i)


# Exporting To Other Apps


# Environment Options

You can pick from four modeling environments. there is a night version of the current environment for those who find the desert a bit too bright after long creation sessions. You’ll also find plain white and black options. Make sure to look up while creating in the black environment for a night sky surprise. Plus, we’ll remember which environment you used in your last session and automatically default to that selection your next time around.

![](/files/0KsRj31xb0N9HvJqkBWd)


# Experimental Features

At the very bottom of your Blocks menu you'll now see a beaker icon which lets you access prototype versions of your most-asked-for features. Here’s a breakdown:

### **Non-coplanar face mode**

Many of you have noticed that Blocks will create coplanar faces when reshaping meshes. This is helpful in many cases, but in others it creates extraneous triangles that make further operations like perfect subdivision difficult. Now you can enable non-coplanar faces to avoid creation of extra triangles.

![](/files/jtAEzAnuGsxFdsT11B8j)

### **Loop subdivide**

&#x20;Subdivision can be a really powerful tool. It’s even more powerful if you can cut a loop around an entire mesh. With loop subdivide enabled, simply long press on the trigger while subdividing to see a perfect subdivision loop form around your object.

![](/files/vCoKMn7ymMnct7AfEsey)

### **Edge, Face and Vertex Deletion**

Many have asked for the ability to delete a single edge, face or vertex. With this feature enabled, use the eraser tool to do just that. We'll “collapse” the mesh based on the edge, face or vertex you delete.

![](/files/2RuyVCdZSzPyLDT7Vq7e)

### **Worldspace grids**

Another option that helps with precision is enabling worldspace grids. This feature will show grids along every side of your worldspace. The grid units are equivalent to the actual worldspace grid units, so you can precisely measure and place objects along the grids.

![](/files/6MeaFtDCnYSSrhdH3wc6)

### **Volume insertion ruler**

Modeling very precisely in Blocks can be difficult without a sense of relative scale. This experimental feature allows you to enable a ruler when you are inserting a mesh. As you insert the object, you'll see relative measurements in meters appear on each axis so you can precisely and accurately measure every object relative to the others.

![](/files/lAXiB4xYn3D902gFox4m)

### **Expanded mesh wireframe**

&#x20;When reshaping a mesh you see a helpful wireframe around the section of the mesh you are reshaping. Many have asked for the ability to turn that wireframe on for the entire mesh, and this feature does exactly that.

![](/files/EQMU0Vd5P55rLUxgbW7E)

### **Stepwise selection undo**

Multi-selecting a lot of objects can be frustrating if you select the wrong object in the middle of your selection process. We wanted to make this easier, so we’ve experimented with allowing you to undo and redo steps in your multi-selection. You can use the undo and redo buttons on your non-dominant controller to undo or redo the selection of objects in order. Make sure to keep your trigger held down while undoing or redoing to ensure you can keep multi-selecting after correcting your mistake!

![](/files/SeAkIiqEDyCVvfBgMjVT)

It’s important to note that since these features are experimental, there may be minor bugs or issues when using them.


# Saving and Sharing on the Web

{% hint style="info" %}
Coming Soon
{% endhint %}

<figure><img src="/files/Qepd4UdyCA7rdIpYfKe3" alt=""><figcaption></figcaption></figure>

When it was originally released - Google Blocks was designed to closely integrate with Google Poly - the 3d model sharing website by Google.

We have nearly finished work on a complete replacement - The Icosa Gallery which will be fully open source. You'll be able to save and publish your work and view or remix the work of others.

We hope to make a preview release of this functionality available in Q3 2024


# Release History

This section lists changes in our major releases and point releases.

There is also information on the current beta version.


# v0.2.0

### 🚀 Features

* Initial fixes for PC VR (PR #1 by @andybak)
* Fix and reserialize assets (PR #8 by @andybak)
* Change local save button action to one not requiring login (PR #9 by @andybak)

### 🐛 Fixes

* Fix camera rig errors (PR #6 by @andybak)
* Fix Tutorial (PR #15 by @andybak)

### 🛠️ Infrastructure

* Initial CI \[copied from Open Brush] (PR #2 by @mikeage)
* Actually run the release job (PR #5 by @mikeage)
* Add pre-commit and reformat all files (PR #3 by @mikeage)
* Add workflow jobs to make it easier to manage unity license secrets (PR #4 by @mikeage)
* Save caches from branches (these are much smaller than Open Brush, so no need for the optimization here) (PR #18 by @mikeage)
* Upload releases to Steam (PR #17 by @mikeage)
* Automatically upload docs to open-blocks-docs (PR #19 by @mikeage)
* Fix typo in steam release dependencies (cosmetic only) (PR #20 by @mikeage)

### 📦 Dependencies / Maintenance

* Merge upstream (PR #10 by @andybak)
* Sync with upstream (PR #21 by @mikeage)


# Current Beta Release Notes

[Full release details](https://github.com/icosa-foundation/open-blocks/compare/v0.9...fd7308b684c704b01cba2a0cc1082d147718b848)

## 🚀 Features

* API geometry creation ([PR #155](https://github.com/icosa-foundation/open-blocks/pull/155) by @andybak)

## 🐛 Fixes

* Fix login / CORS ([PR #156](https://github.com/icosa-foundation/open-blocks/pull/156) by @andybak)
* Allow list for Polyhydra (and others in future) ([PR #157](https://github.com/icosa-foundation/open-blocks/pull/157) by @andybak)
* Stop persisting config URL overrides in PlayerPrefs ([PR #158](https://github.com/icosa-foundation/open-blocks/pull/158) by @andybak)

## 📦 Dependencies / Maintenance

* Bump actions/checkout from 6 to 7 in the all-actions-updates group ([PR #160](https://github.com/icosa-foundation/open-blocks/pull/160) by @dependabot\[bot])
* Bump actions/cache from 5 to 6 in the all-actions-updates group ([PR #161](https://github.com/icosa-foundation/open-blocks/pull/161) by @dependabot\[bot])
* Bump actions/setup-dotnet from 5.3.0 to 5.4.0 in the all-actions-updates group ([PR #162](https://github.com/icosa-foundation/open-blocks/pull/162) by @dependabot\[bot])

## 💬 Uncategorized

* Mobile memory optimization ([PR #164](https://github.com/icosa-foundation/open-blocks/pull/164) by @andybak)


# Tutorials and other Resources

## Video Tutorials

Here's a YouTube playlist of various tutorials we have collected:

{% embed url="<https://youtube.com/playlist?list=PLJIe24Xo6ZTfoFL_K3YJA21lgARlLRxiM&si=3LVycRHhXLetcU1r>" %}


# Support

The quickest way to get support is often to come and chat to us on our [Discord](https://discord.com/invite/W7NCEYnEfy) although you can [email us directly](mailto:contact@openblocks.app)&#x20;

We are also active on social media - primarily on [Bluesky](https://bsky.app/profile/openblocks.app) (we are winding down our [Twitter presence](https://twitter.com/openblocksapp) but the account is still active during the transition. We also have accounts on [Instagram](https://www.instagram.com/openblocksapp/) and [Threads](https://www.threads.net/@openblocksapp) - and we'll hopefully soon be more active on Tiktok, Mastodon and [Reddit](https://www.reddit.com/r/openblocks/)\
\
For more technical issues - especially those related to the code or integrating your software with Open Blocks then we have a [Github Issue Tracker](https://github.com/icosa-foundation/open-blocks/issues)


# Introducing Open Blocks!

Blocks is open source 🎉

Hey VR creators,

Google Blocks is [now open source software](https://opensource.googleblog.com/2024/07/google-blocks-is-now-open-source.html)! We're extremely excited to announce that our fork, naturally called **Open Blocks**, is already in development and will be joining [Open Brush](https://openbrush.app) in providing free XR creation tools to everyone.

{% embed url="<https://youtu.be/IhNdgD2jsx0>" %}

Read on to hear the story so far...

#### A short history of Blocks

Originally developed in-house by Google, Blocks was one of the first VR-native creation apps, designed to make 3D modelling intuitive and accessible for everyone. With just six simple tools - Shape, Stroke, Paint, Modify, Grab, and Ease - users could effortlessly create 3D objects. Blocks’ user-friendly interface lowered the barrier to entry, allowing even beginner modellers to jump into VR content creation.

{% embed url="<https://www.youtube.com/watch?v=1TX81cRqfUU>" %}

Sadly, Blocks was last updated in 2018, and has sat dormant since then. Around the time Tilt Brush [was open sourced](https://opensource.googleblog.com/2021/01/the-future-of-tilt-brush.html), we inquired if the same could happen for Blocks, but we were informed it wasn't possible. We got on with the development of Open Brush and our Poly replacement Icosa Gallery, and Blocks was left in the dark.

Earlier this year, we thought we'd try again! We reached out to both former and current members of the original Google Blocks team who worked on Blocks, and found they were eager to find a way forward for us. A little while later, Google approved the release of the [source code](https://github.com/googlevr/blocks).

We've been working hard with the Google Blocks team in the last few weeks to bring the codebase to a usable state, so anyone should now be able to download and run the Unity project.

However, it's not enough to just release what already exists...

#### Our Roadmap for Open Blocks

We pushed hard for the Blocks code to be released, and we're committed to keeping its spirit alive. Naturally, we are going to release and maintain our own community-led version under the Icosa banner, just as we have done with Open Brush.

We're working hard to bring the Open Blocks codebase up to modern standards. First up, we've switched to use the OpenXR framework and new input system within Unity, enabling us to target Open Blocks for a much wider range of XR devices. We have created a standalone XR port, which brings Open Blocks to the Quest (and soon Pico) platform. Next, there are be plenty of opportunities to add immersive XR features such as MR passthrough.

We'll also be adding glTF import support, more base shapes, an improved colour palette and support for our Poly replacement, Icosa Gallery. This will be instrumental in unlocking Open Blocks' full potential for asset creation and remixing.

Our long term roadmap will transform Open Blocks into a full modelling suite, giving you more control over materials, adding texturing support, and enabling more powerful tools from traditional CSG pipelines.

{% hint style="info" %}
You can install Open Blocks from [Steam](https://store.steampowered.com/app/3077230/Open_Blocks/) and the [Meta Quest Store](https://www.meta.com/en-gb/experiences/open-blocks/8043509915705378/)\
(or manually from Github for [PC](https://github.com/icosa-foundation/open-blocks/releases) or [Quest/Standalone](https://nightly.link/icosa-foundation/open-blocks/actions/runs/13035567150/Oculus%20Quest%20%282%2B%29.zip) )\
Other stores/platforms coming soon...
{% endhint %}

#### A community effort

We invite developers, artists, and XR enthusiasts to join our community and help shape the future of Open Blocks. Thousands of users rely on tools like Open Blocks and Open Brush daily for their XR productivity. Your contributions - whether through code, donations, feedback, or community engagement - are crucial to driving this project forward and ensuring it continues to evolve and improve.

Check out our [GitHub](https://github.com/icosa-foundation/open-blocks), try the pre-release [builds](https://github.com/icosa-foundation/open-blocks/releases), and share your feedback on our [Discord](https://discord.gg/W7NCEYnEfy). Together, we can create a powerful, community-driven tool that enhances VR creativity for everyone.

#### A heartfelt thank you to Google Blocks team

We want to extend a big thank you to the Google Blocks team for their hard work with the original application, and for making the source code available to the community. We'd like to give a special shout-out to [Jason Toff](https://x.com/jasontoff), who helped us reach out to the team and get the ball rolling. Their support has been instrumental in enabling us to bring Open Blocks to the community.

Stay tuned for more updates, and let’s create something amazing with Open Blocks!

Happy modelling,\
The Icosa Foundation Maintainers

#### About Icosa Foundation

Icosa Foundation was created with the mission of preserving and maintaining the legacy of Google's Poly platform, realized in [**Icosa Gallery**](https://icosa.gallery). We also quickly grew to maintain [**Open Brush**](https://openbrush.app), a fork of Google’s discontinued VR painting app Tilt Brush. We’re dedicated to preserving and enhancing these creative tools, ensuring they remain accessible and continue to grow with the needs of the ever changing XR landscape.

If you would like to support us financially, we have an [Open Collective](https://opencollective.com/icosa) page. Any funds raised go towards maintaining our free software, with contributions going towards bug bounties, freelance developers, store fees, and paying for server infrastructure. Any support is greatly appreciated.\
\
**Links**<br>

[Discord](https://discord.gg/W7NCEYnEfy)\
[Open Collective](https://opencollective.com/icosa)\
[Social Media](https://linktr.ee/openblocks)<br>

[Open Blocks Quest Store Page](https://www.meta.com/en-gb/experiences/open-blocks-low-poly-3d-modelling/8043509915705378/)\
[Open Blocks Steam Download Page](https://store.steampowered.com/app/3077230/Open_Blocks/)\
[Open Blocks Code on Github](https://github.com/icosa-foundation/open-blocks)

[Icosa Foundation Home Page](https://icosa.foundation/)\
\ <br>


# Sponsors

<figure><img src="/files/qkWHdiYGONZqQF68GvSo" alt=""><figcaption></figcaption></figure>

We would like to thank Google both for generously releasing the original Blocks source code as open-source and for their financial contribution that helped us port to standalone headsets

<div><figure><img src="https://camo.githubusercontent.com/18d0ebcc19a7d25b943507f23eba871024403b60067a43e353ef9d8540815674/68747470733a2f2f6e6c6e65742e6e6c2f696d6167652f6c6f676f732f4e4749305f7461672e737667" alt="" width="188"><figcaption></figcaption></figure> <figure><img src="https://camo.githubusercontent.com/23074761c539526c4a06c00d6321eabf023587823d6f25982cb27051a62308e1/68747470733a2f2f6e6c6e65742e6e6c2f6c6f676f2f62616e6e65722e706e67" alt="" width="188"><figcaption></figcaption></figure></div>

This project is partly funded through [NGI0 Entrust](https://nlnet.nl/entrust), a fund established by [NLnet](https://nlnet.nl) with financial support from the European Commission's [Next Generation Internet](https://ngi.eu) program. Learn more at the [NLnet project page](https://nlnet.nl/project/IcosaGallery).


# Contacting Us

Open Blocks is developed and managed by the [Icosa Foundation](http://icosa.foundation/)

You can email us at <hello@icosa.foundation>

We are also active on [Discord](https://discord.com/invite/W7NCEYnEfy)

All code is available on our [Github account](https://github.com/icosa-foundation/)

We are gratefully accepting donations via [Open Collective](https://opencollective.com/icosa)

Social Media: <https://linktr.ee/OpenBlocks>


# Privacy Policy

**This privacy policy discloses how Icosa Gallery Ltd (hereinafter "Icosa Gallery", “us”, "we") handles and protects, and values your information**

The purpose of this page is to inform users of the Open Blocks application (the "App") and/or our customer support service (this service and the App hereinafter referred to as the "Services") regarding our policy with the collection, use, and disclosure of Personal Information of any users of our Service.

By using our Services, you agree to the collection and use of information in relation to this policy. The Personal Information that we collect is used for providing and improving the Services. We will not use or share your information with anyone except as described in this Privacy Policy.

**Information Collection and Use**

As per Meta requirements, the App receives information about the users' age group, but this information is never stored and is immediately discarded.

In order to provide customer service for our users, you may [contact us via email](mailto:contact@openblocks.app). During this transaction it is likely that we will receive Personal Information (e-mail address, and any other Personal Information you may include). Your Personal Information will only be used to provide you with the support requested, and will not be processed for any other reason. Any emails we receive will be kept on record to enable us to provide continued customer service, but you are free to request Personal Information deletion at any time by contacting us on the same email: <contact@openblocks.app>

**Privacy policy updates**

We reserve the right to modify this privacy policy at any time, so please review it frequently. Changes and clarifications will take effect immediately upon their posting on the website. If we make material changes to this policy, we will notify you here that it has been updated, so that you are aware of what information we collect, how we use it, and under what circumstances, if any, we use and/or disclose it.

**Updates/Opting Out**\
If you would like to access, correct, amend or delete any personal information we have about you, you are invited to contact us by [sending an email](mailto:contact@openblocks.app).


