Friends, food, and flourishing

Octave 3D notes

Octave 3D is a way cool plugin for making levels in Unity. Octave makes it easier to make levels. Andrew, the dev, has put much thought into special features that help with different tasks. For example, when you add rocks to a level, you want them to match the slope of the terrain. That’s how rocks do. Trees, on the other hand, grow straight up, even on a slope. Octave 3D allows for that.

However, Octave is a complex tool, with many settings. I found it hard to learn. One reason is that the docs are a set of videos (mostly). They’re good. However, after you start working with Octave, you need to look up techniques to use. That’s hard to do with videos.

Here are some notes I made from the tutorial videos. There are probably mistakes, and there are some things I didn’t understand.

Andrew, if you ever read this, maybe you could make a documentation wiki. You and Octave users could fill it in, so you wouldn’t have to do it all yourself.

These notes are for version 2.4.3.5, current at the time of writing. They’re meant to be used along with the videos, not as a substitute.

Getting started

In a scene, make an MT game object. Add the Octave 3D Word Builder script to the MT GO.

Keep the GO selected, to use Octave 3D.

The scene must be selected for shortcut keys to work.

Make sure gizmos are on, to see the location guide.

It’s about the prefabs

Octave helps you build levels from prefabs. For example, say you’re making a game with inside and outside levels, like Cryptid Kitchen. You buy asset packs like Tidal Flask’s village pack, interior pack, and nature pack. The packs have with many matching prefabs, like trees, bushes, houses, fences, barrels, walls, plates, etc.

For outside scenes, you make a terrain, using Tidal Flask’s grass, rock, and sand textures. Then you scatter trees, bushes, rocks, and other prefabs, with Octave.

For inside scenes, you make a floor with prefabs arranged in a grid. You add walls, and drop in props, like tables, chairs, and stoves. Octave makes all of this easier.

Octave’s prefab manager is one of its most important features. The basic workflow is to choose a prefab in the manager, and drop it in the scene. For example, here…

Prefab manager

… I selected a tractor prefab in the prefab manager. Octave rotates it automatically, to match the terrain’s slope at the point I drop the prefab.

Organizing prefabs is central to making Octave work for you. Let’s see how Octave helps you manage prefabs.

Organizing prefabs

Categories

A category is a set of related prefabs, like Walls, Doors, and Props. Before you insert new instances into the scene, select one of the prefabs from a category.

(Categories and groups are different. A category is a set of prefabs. A group is a set of prefab instances, like First Floor, Second Floor, Atrium, etc.).

There will always be at least one category, called Default.

Open the prefab manager with the Prefab button:

Open prefab manager window

You can move the window around as usual in Unity. I like to docked it with the console (below).

Make categories in the Prefab Management window. Type in a category name, and click Create category.

Create category

Drag prefabs into categories from an asset library.

Note: at the time of writing, there seems to be a bug that sometimes shows the wrong mesh in the preview area. Here, I added a tractor to the Vehicle category:

Tractor

Now I click on the pickup. The skinned pickup mesh shows in the preview window in the inspector, as expected. Now I drag the prefab into the category:

Not the tractor!

The wrong thing shows. Grass, not a pickup. Hover over the preview, and Octave says it’s a pickup, though. Insert the prefab into the scene, and you get a pickup. Close and re-open the prefab manager, problem is still there. Close and reopen Unity, and it’s hunky-dory.

Pickup

You can rename categories:

Rename category

You can move prefabs into different categories.

Move prefabs between categories

Filter by active tags (see below), or by name.

You can ask Octave to find the active prefab in the project window:

Select active prefab in project window

Folders

If you drag folders with prefabs, Octave will make categories from the folders. A Good Thing.

You can change this behavior. For example, have Octave add prefabs from the folder to the active category.

No categories from folders

Subfolders

If there are subfolders, Octave will make a category for each subfolder.

You can change the subfolder behavior:

Prefab drop settings

Octave will make one category for the main folder, and put all prefabs from all subfolders into it.

Uncheck “Create categories from dropped folders,” and Octave will not create new categories from folders. New prefabs will be added to the active category.

Right-click in the prefab management window to remove a category:

Remove category

There doesn’t seem to be a button for this, but I could be wrong.

Groups

When you add objects, you can add them to a group. They will be made children of the group in the hierarchy, so they can be turned on and off together. So, each Octave group has a GO in the hierarchy that’s a parent of other GOs.

Parent GOs are not always groups. You can tell Octave to make a parent a group by right-clicking, and…

Make a group from existing GO

When you add objects to the scene, they’re put in a group you’ve specified:

Groups

Be sure to have Attach to object group checked.

To reassign GOs to different groups, choose the Octave GO in the hierarchy, enter object selection mode, select the GOs (drag across them, or Ctrl+click), and…

Reassign objects to different groups

Note: moving objects in the hierarchy doesn’t have the same effect. Or it might, after refreshing. I’m not sure.

Groups can be nested.

Groups and categories can be linked…

Groups associated with categories

… but I don’t know what that means. (It was in a video, but I didn’t grok it.)

Prefab tags

Another way to create prefab sets. You can have prefabs in the same category separated into sets. Prefabs across categories can have the same tags.

Open the Prefab Tags window to mess with tags:

Tags button

An example. Suppose you have three categories: Plants, Rocks, and Vehicles. Some prefabs are big (like trees), some are small (like flowers). You create two tags:

Tags window

You apply a tag to each prefab:

Apply tag

You apply the tags to the prefabs in the categories:

Tags in plants category

Tags for vehicles

Say you’re adding vehicles to an area where only small vehicles make sense, like a park. You can use the tag window to limit Octave to prefabs with the small tag.

Small vehicles only

Another example: if you want to create areas with certain colors, you could tag prefabs by color (blue, green, whatevs).

You can assign more than one tag to a prefab, like Vehicle, Blue, and Big. Maybe the Tardis?

Octave can add tags automatically from folder names, when you add prefabs to categories.

Create tags from subfolders

Nice if you have an asset pack where assets are grouped into sensibly named folders. (You can create categories based on subfolder as well. See above.)

You can also have Octave add tags for you, when you drag a prefab into a category. Say I have a bumper car that I want to be tagged as small. I haven’t added it to any category yet.

Set the Small checkboxes as shown:

Adding bumper car to vehicles

Drag the new prefab into the category, Vehicles in this case. The Small tag will be applied automatically.

Bumper car is small

W00t!

You can rename tags. Check a box, and the tag name controls will change from labels to text boxes.

Change tag name

Main modes

Octave has many modes for different things. The most general mode is:

  • Insert: add new objects
  • Select: choose existing objects
  • Delete: what it says
  • Snap: manage snapping

Modes

Strangely, the one that looks disabled is the current mode.

The grid is central to Octave. When you select the Octave GO, it shows its own grid, on top of Unity’s. The grid is 1 m × 1 m.  Here are four 1 m × 1 m floor tiles:

Tiles on the grid

They have a grid pattern in their texture. The red, green, and blue numbers show the size of the selected GO’s bounding box, using a command from MonKey.

New prefabs snap to the grid, or to another object. U key toggles object snapping. If it’s off, you snap to the grid.

When inserting, there are object placement settings:

Insert object placement settings

Point and click adds one object.

Block lets you drag, and add many of the same object, like floor tiles. I thought it would work by dragging the mouse, but it doesn’t.

Say you want to draw a rectangle of floor times. First, choose the prefab you want in the prefab manager:

Choosing a prefab

Move the mouse to one corner of the area you want to fill:

Starting a block

Click. The prefab will vanish—don’t worry, that’s just how Octave do. Move the mouse to the other corner of the area you want to fill:

Area to fill

Click again, and the prefabs will fill the area.

Another way to create many prefabs at once is to switch to selection mode, select some objects, and extrude. Enter selection mode, and select some objects (Ctrl+click on them, or drag across an area). Choose extrude mode…

Extrude

Hold down Ctrl, and drag one of the dimension arrows on the gizmo, to duplicate objects.

You can select more than one GO type to extrude. Here, I’ve selected floor tiles, and office cabinets:

Selecting multiple prefab types

Ctrl+click on the red arrow, and:

Extruded

Set extrude snap step…

Extrude snap step

… to duplicate in only some positions.

Extrude result

Bricks extruded with snap step of 1, ladders with 2.

When inserting/changing GOs, press Y to rotate it 90 degrees in Y. Same for X and Z.

In select mode, can use Ctrl+D to duplicate. Works with one or many objects selected.

Octave gives some useful status info in the design window:

Status

In selection mode, when you double-click on a GO, Octave will select all the active GOs using the same prefab. Deactivate GOs before double-clicking, to exclude them from the selection. Grouping prefabs (below) makes this easier.

When object snapping is too fiddly to work well, try vertex snapping. Hold down V, and choose the vertex to snap.

Moving the grid

Say you’ve made a floor and some walls, not want to add a ceiling. It helps to move the grid up to the top of the wall.

In Insert mode, hold down T, and double-click above the center line of a wall GO. The grid will move to the top of the wall GO.

Grid at top of wall

You can move the grid down with the N key. For example, these stairs are selected, and on the floor:

Stairs above floor

Press N to drop the grid:

Stairs below floor

The top of the stairs aligns with the bottom of the floor.

The grid is still at the top of the stairs, though. To move it to the bottom, hold down T, hover the mouse cursor towards the bottom of the stairs, then double-click. The grid will move down.

Grid at stairs bottom

For a second level, we could add tiles as before, but there is an easier way: project the floor tiles onto the grid at the ceiling level, and replace the floor tiles with the ceiling tiles.

Switch to selection mode, then select all the floor objects (e.g., double-click on one to select all with the game prefab). Duplicate them (Ctrl+D). In the selection project settings, check Project on grid, set the direction, and click Project selection.

Project

(To select only some tiles using the double-click thing, first set groups you don’t want to select to inactive, before double-clicking.)

The tiles just duplicated will be projected up to the current grid.

Floor projected to ceiling

To make them use the ceiling prefab, go into that category, find the one you want, and click on it.

Make a second floor

Make a second floor by selecting all the elements of the first floor, duplicate, and move up. As with floors earlier, but include walls as well.

To select all, use groups. That is, put items to duplicate in a group, select the group, and duplicate. Put the duplicates in a new group for the second floor.

Move grid to top.

Select all first floor objects:

Select images in group

Now you want to duplicate them into another group. Before that, make the destination group. Select it as the destination of new objects:

Send duplicates to new group

(The UI has two sets of groupy options. Use the right one.)

Now duplicate (Ctrl+D).

Now project to grid (which is at the top of the lower floor, bottom of upper floor). Project down.

Project to upper floor

Placing props

Make categories for them. The use Insert|Decore Paint mode. Decore Paint is the best mode for working with props.

Adding props

If align axis off (as above), rotate the objects manually. Otherwise, they snap to planes. (Probably want it on for normal prop placement?)

Hold shift+C and move mouse to rotate. (I had trouble getting this to work consistently. Maybe depends on axis alignment option not being selected?)

Rotate

Press I to reset rotation.

Press X, Y, Z to rotate in 90 degrees on matching axis.

Shift + X (Y, Z) to rotate with mouse around those axes. Shift+C rotates around the surface normal.

This works in any placement mode.

Shift + Ctrl to scale. Press O to reset the scale. This works in any placement mode.

Terrains

Use Decore paint when working with terrains. It’s the only mode that will work with terrains.

Terrain modes

When Align axis is on, objects align to slopes. W00t!

Mess with the alignment axis if the look isn’t right, though positive up usually works.

Decore paint: Single mode

Above, the paint mode is set to single. Select a prefab, click, and Octave will position one item, adjusting to terrain slope. It’s magical!

Drag to make many. Control density with stroke distance. They’ll all be adjusted to the terrain slope individually. Even more magic!

You can randomize rotation and scale during placement.

Randomize rotation and scale

For rotation, use Placement Surface Normal to have objects match the slope of the terrain.

Can have rotation distribution continuous (Randomization Mode/Random Rotation Value), or an integral value. Give the distance between the values in Random Rotation Step.

Rotation following mouse movement

Check Align To Stroke. Select an object, like a fence component. Grab one pivot point of the location guide, usually one of the corners. Drag. New objects will align the mouse movement. Double w00t!

Align to stroke

This is sensitive to mouse movement speed.

You can specify that some items are ignored when positioning others. Switch to selection mode, select the elements to ignore (e.g., with G), and click the button that assigns them to a decor mask. Those objects won’t affect positioning of new objects. (I think. Bit fuzzy on it, TBH.)

Decor paint mask

Brush mode

Lets you distribute objects by “painting” on the distribution area. W00ty w00t!

A brush is a collection of brush elements. An element is a prefab, with some settings controlling its generation by the brush.

Creating a brush:

Creating a brush

Drag prefabs to add elements to the brush.

Add elements to brush

Click an element, and its deets will show up:

Set element properties

Add many prefabs, like bushes, grass, and small rocks that will be mixed together on a terrain.

All prefabs must be in a category. When dragging new elements into brushes, what categories are they placed in? The one identified:

D\estination category for new elements

Here are element properties:

Element properties

Align to surface should be checked most of the time. Align to stroke will change object rotation to follow mouse cursor when dragging.

The min/max slope will limit the slopes objects can be placed on. E.g., only place objects on slopes below 45 degrees. Another nice detail.

A hint: when placing trees, you usually don’t want them aligned to the surface. Trees don’t grow what way. Best to also turn off random rotation, or the results might look funky.

Renaming a brush is easy, but I couldn’t see an obvious way to delete a brush.

Mass erase

Does what you think. Adjust the radius for less or more destruction.

Mass erase

Selection grabbing

More w00tiness!

Say you have some rocks. They are rotated individually, to fit the slope of the terrain where they lie.

Rocks

You want to move some around. Select the group, move, and each rock’s rotation will be adjusted to the terrain of whatever place they end up.

In selection mode, select the rocks you want to move. (One or more.) (Ctrl+click adds the clicked object to the selection.)

Press C (don’t hold down). That grabs the selection.

Selection grab

You can move them around. Slope will be adjusted for you. W00t!

Hold down shift/crtl to rotate/scale will moving.

Press C again to exit grab mode.

You can position meshes on other meshes, like a small rock on a big rock, as well as positioning objects on terrains.

There are some grab settings:

Grab settings

Grab settings deets

You may need to experiment with the alignment axis, for the things you’re working with.

Make Offset from surface negative, to embed objects in the ground a little.

With trees, you might want to turn off Align Axis. In that case, check Embed in surface (no align).

Working with existing scenes

Like demo scenes in assets you buy.

Groups

If you click on a GO, Octave might select too many objects…

Selected too many

… since it doesn’t know how you want to group them.

Right-click on the GO in the hierarchy containing the object, and Make group.

Make group

Now you can select objects individually.

Categories

You can put prefabs in the existing scene into categories. Make a new category (or use an existing one), and make it the active category (in the Prefab Manage screen). Select an existing GO in the scene, and press R. The object will be put in the category.

If a GO you’ve selected is already in a category, the selected GO will become the current object.

Reusing objects

Say you assemble a GO from several prefabs. Maybe a car made from a body, tires, etc., or an office, with a desk, chair, PC, and paintings, all carefully positioned. Octave will help you reuse the assembled GO. W00t!

Say I want to make a farmer’s meeting prefab, like this:

Farmer's meeting

I have a Vehicles category, with these prefabs. I add them to the terrain with Decore Paint in single mode. So, when I add them, the will adjust to the terrain’s local slope.

Here’s what will make them into a prefab:

Set up

First, I created a new category, for vehicle groups, and selected it in the Prefab Creation Settings. I could have used an existing category instead.

I selected the objects I wanted in the new prefab. Ctrl+Click on them.

I’m making a new prefab, so I tell Octave what to name it, and where to put it (you can drag the destination folder from the project window). Both are required. Then click the Create button.

Here’s what was in the folder before I clicked the button:

MT folder

Here’s what I saw after I clicked the button:

Prefab created

W00t! A new prefab, in the right folder, and in the right category!

I had a problem, though. When I used the prefab, Octave didn’t adjust the rotation of the individual elements to match the terrain. This makes sense, since there is one rotation for the entire assembled prefab.

The right way to do it was to use the selection grabbing feature discussed earlier. Enter selection mode, then select all three individual vehicles (click on one, then ctrl+click on the others). Ctrl+D to duplicate them. Maybe move the new objects a little to the side. Press and release C. Move the group around; just move the mouse. The individual vehicles will adjust to the slope. Press and release C again. Here’s was my result:

Two meetings, rotations matching slope

W00t!

Mirroring

Mirroring helps build symmetric levels. Build on one half of an area, and Octave will reflect what you do on the other half.

Mirroring

The mirror, in the center, will duplicate the object on the left, in the location shown on the right.

Mirroring when inserting new prefabs

Start by choosing a prefab you want to reflect. You’ll see where its reflection will be placed. That makes it easier to work with (for me, anyway).

You need to move the mirror into position. Click the Manipulate button (gizmos must be on to see the mirror):

Manipulate

The mirror rests on the surface of the grid. I couldn’t work out how to make it rest on the surface of a terrain. Maybe it can do that.

Move the mirror around with the mouse. Hold down Ctrl to turn off snapping, although you would usually want to use snapping. Press Y to rotate the mirror 90 degrees.

To rotate in less than 90 degree increments, hold Shift+C and use the mouse.

Hold down Q and move the mouse to move the mirror up and down.

Once the mirror is in position, press Enter to exit manipulation mode, and lock the mirror in place.

Here I have a market stall near a mirror (in insert|point and click mode):

Making two stalls

I click and…

Two stalls

W00t! I can make a complete farmer’s market that way.

This works with block insertion, so you can make large areas quickly.

Large area

More w00t!

BTW, the mirror is short, and you can’t stretch it. That doesn’t matter. The entire plan the mirror defines is reflecty, as you can see above. You can make the mirror wider, if you want. That’s in the mirroring look-and-feel settings.

As you working, you might want to place an object or two without mirroring. Maybe a prop that appears only on one side. You can turn mirroring off…

Off

… add the prop, then turn it on again to continue.

There are some more settings.

Other settings

Mirror rotation: when you click to mirror an object, its rotation is copied as well. Unless this is off. Then only the position is copied.

Mirror spanning: when objects are close to the mirror, so the duplicate will overlap the original, click, and you’ll have two overlapping objects. Uncheck the option to prevent reflecting when there is an overlap.

Allow intersection I didn’t understand. Maybe when I try it more.

Mirroring selected objects

Another way cool thing. Select some objects with mirroring on.

Selected

Now press the M key:

New objects

Leave a Reply

Your email address will not be published. Required fields are marked *

css.php