Content
- Welcome to Texture Studio
- Features
- Installing
- Getting Started
- Texture Studio Basics
- Texture Studio Window
- Layers Panel
- Params Panel
- Texture Edit Window
- Map Select Window
- Photoshop Files
- Settings
- API
- Videos
- Keys
- Release Notes
- Contact Us
Welcome to Texture Studio
Does your project need to have parts of models easily customizable or skinnable, do you need to change some text on any object such as a driver names or race number. Do you need to change the color of parts of an object for team colors, or maybe need to add decal or damage effects to your model, or any other number of things that being able to change your model textures quickly and easily at runtime would allow you to do. Make your characters easily and quickly skinnable without any special shaders and so much more, if you need any of the the above then Texture Studio is perfect for your needs.
Texture Studio is a layer based Texture creator, builder, adjuster. It can be used to build up your game textures from any number of other textures. Each layer can be positioned, rotated, scaled or deformed in numerous ways, as well as each layer can have its channels remapped, swizzled, multiplied or adjusted with numerous modifiers such as color, hue, saturation, levels, color replace and more. The layers can be blended using Photoshop style blends as well as making use of blend masks and target masks to limit areas where changes will happen. And you can also add text layers using the full Text Mesh Pro features and even make use of sprite and texture atlases. Being able to build textures from parts and being able to change any part at anytime in your project can also greatly reduce the number of textures needed to be loaded or added to the final build.
As well as being able to create your layered maps directly in Unity you can also import Photoshop .psd and .psb files into Texture Studio so you can use your favourite Art package to create your map if you wish and then import it and all its layers and blending modes will be kept so you can add to or edit them in Texture Studio. This also means you can use Texture Studio to quickly bake out Textures directly inside Unity from your .psd layers, enable and disable layer that you need and then create a new texture, or leave it as a Composite Map and choose your maps quickly and freely at runtime.
The system makes use of the GPU to build the textures and you can at any time change the output resolution to suit your needs, the final texture can be used directly as is as on any shader on any pipeline, or you can bake it out to a texture file. The real power of Texture Studio comes at runtime though as the system is fully functional in your built projects so you can build up complex textures and in your game project turn on and off any of the layers, substitute in other images, change the text, cycle through sprite images, change colors, apply extra decal effects and more. So if you game project needs different skins such as in a car game, or you need player names to appear on some object or changing team colors without having to have special shaders then Texture Studio will do that for you.
Texture Studio also has a Param system where you can define per layer or per map params you would like to change via script and then through a very simple API you can update the texture at anytime in your game, and as the texture creation is done on the GPU it is super fast. And so you can have complex decal, or fancy shader type effects without the need for custom shaders. You can also rescale the textures at anytime if you want.
Texture Studio has a complete Custom Window making creating your textures simple and fun, with options for scaling, moving, rotating the layers, or you can click and drag the control points for a layer to get the look you need. The editor window supports snapping and undo, and the Layer window allows for drag and drop reordering of layers with quick controls for locking layers or hiding them as need.
Texture Studio can also be used to merge multiple textures into one so is great for combining Specular, AO, Metallic and other maps into single textures for your shaders. Or just use it to adjust the colors of your current textures without having to back an forward to other programs.
Texture Studio works on all Unity platforms and on all Unity pipelines.
Features
General feature list of Texture Studio:
- Photoshop style Layer based Texture creator
- Import .psd and .psb files
- Bake out .psd files quickly to textures
- GPU Based
- Create any size textures
- Update any part of the texture at runtime
- Use any number of layers to build up the texture
- Move any layer, rotate, scale
- Change layer shape via vertex controls
- Snap controls for easy positioning
- Zoomable texture editor window for fine control
- Easy click of layers for selection in Texture Editor
- Apply multiple Adjustments per layer
- Use Text Mesh Pro in layers
- Bend and Layer Change Layer shape
- Support for Sprite Atlases
- Support for Texture Atlas
- Mask areas
- Blend Areas
- Final Output color options
- GPU based texture builder for super fast editing
- Textures can be update and generated at runtime
- Param system for quick and easy changing of textures at runtime
- Fully featured Editor window for building your textures
- Drag and Drop of layers for easy mangement of draw orders
- Full Tooltips on every control
- Full Undo support
- Save to Textures or generate RenderTexture at anytime of any size
- 26 Photoshop Blendmodes
- Full texture channel swizzle support
- Combine textures great for roughness, specular, AO maps
- Change almost any option at runtime
- Great for adding names or numbers to objects, or skinning characters
- Easy Export of Map to UnityPackage
- Have endless Texture combinations without using loads of memory
- Faster loading times
- Smaller build size
- Works with Normal Maps as well
- Supports Built In, URP, HDRP and Custom Pipelines
- Works on all platforms
Per Layer Options:
- Color Tint
- Map
- Mask
- Mask Channel
- Sprite support
- Blend Mask Map
- Rotate Scale Position
- Pivot Alignment
- Remap Value
- Multiply
- Swizzle Channels
- Texture Atlas support
- Text from TMPro
- Text Color
- Font Style
- Font Size
- Outline Width
- Outline Color
- Bend
- Child Layers
- Photoshop Blend Modes
- Color LUT support
- Output Levels Adjust
- Hue
- Saturation
- Contrast
- Brightness Levels
- 8 Color Replacements per layer
- Choice of 26 blend modes
Installing
To install Texture Studio after purchase just locate the Texture Studio Asset in the package manager window like any other asset, click 'Download' and once that has completed click the 'Install' button. A window will open showing all the files in the package, click the Install button and Texture Studio will be added to your project.
It is also important if you plan on using any Text Mesh Pro objects in your maps to install the TMPro Essentials package before using Texture Studio.
Getting Started
To start using Texture Studio you will need to create a 'Composite Map'. To do this either go to the 'Assets/Create/Texture Studio' menu and click 'Composite Map' or right click in the Project panel where yo want to create the map and again select 'Create/Texture Studio/Composite Map'. A new Map asset will be added to your project, you should rename it.
To start to edit the map you can either double click the Map Asset, this will open the Texture Studio editor window and have the map ready to edit, or you can go to the 'Windows/Texture Studio' menu and select 'Texture Studio'.
You can now start to edit your texture.
When a new map is created it contains a single Layer called 'Base', to add a texture to the layer select it in the Layer Panel by left clicking, then in the Params panel open the 'Maps' section and click the 'Map' Select button and choose the texture you want for the layer, or drag and drop a texture from the project to the Map box. The selected texture will not be visible in the Texture Edit Window. Carry on adding Layers and maps to build up your final texture.
Texture Studio Basics
To start using Texture Studio you will need to create a 'Composite Map'. To do this either go to the 'Assets/Create/Texture Studio' menu and click 'Composite Map' or right click in the Project panel where yo want to create the map and again select 'Create/Texture Studio/Composite Map'. A new Map asset will be added to your project, you should rename it.
To start to edit the map you can either double click the Map Asset, this will open the Texture Studio editor window and have the map ready to edit, or you can go to the 'Windows/Texture Studio' menu and select 'Texture Studio'.
You can now start to edit your texture.
Texture Studio Window
The Texture Studio is made up of various different sections. You have the 'Layers' section, this is where the order of the various textures used to build the final result are created and selected. The final out of the map is built in the order of the layers as shown in this panel. The top of the Layer panel also has various icons for editing the Layer order and creating new layers etc.
Next to that is the Params panel, this is where you can change any of the values that define the layer. Also at the bottom of the Params section is a Final Output section which gives you more controls over the final result of the texture you are creating.
Then the main panel shows the texture as it is built, here you can select different layers by clicking on them and changing their positions, size, rotation, or drag the vertex control points to get the shape you need. At the top of the panel there are some quick helper options and some icons for interacting with the Layers. And at the bottom is an info bar and some further controls.
At the bottom of the window is the Map Selection area, this will show thumbnails of all the Composite Maps in your project for quick selection, you just need to click the map you wish to edit. You can scroll through the maps if the section is full.
You can drag the edges of the Layer window and the Params window to make them bigger or smaller.
We shall now go through each Panel in more detail.
Layers Panel
Texture Studio builds up the final output texture by combining Layers together. Each Layer can be a Texture, a Sprite, Text, or even Sprite and texture Atlases. You can define how big the layer is, where it is positioned and its angle. Texture Studio will run through the layers in order to build the final result so you can easily stack textures on top of one another and make use of Masks etc. to control the result.
The Layers panel will show a Hierarchical view of the layers. To create a new layer you can click the Icon at the top left of the Layers Panel, this will a new layer to the map. You can also create a layer by right clicking in the Layers Panel which will open a context menu, and then select Create Layer from there.
To rename a Layer double click it and a rename box will open up, you can change the name there. You can also change the name in the Params Panel as well.
Each Layer will show the Texture or Sprite it is using in the Map, or if you are adding text then a Text Mesh Pro Icon will be shown instead. Also if the Gizmo Color for the layer has been changed from the default white then the color will be shown as a small swatch on the left of the layer. This allows you to more easily identify layers in the Texture Window. You can change the Layer color in the General Params section.
The Layers can be deleted or duplicated via the Icons at the top left of the Layers Panel, hover the mouse over each icon to see a tool tip for it. You can also Delete and Duplicate layers by right clicking the Layer and using the Context menu.
As the order of the layers is key to the final texture you can freely drag and drop layers in the panel to change the order or to add a layer as a child of an existing layer or remove a child from a layer. When a layer is added a child to another layer you will see a small arrow next to the parent object name, clicking this arrow will show or hide the children of the layer in the layers panel.
On the left edge of the Layers panel are per layer toggles for whether the Layer is visible in the Texture or not, and also you can lock each layer so its position etc. can not be changed. If you hide a layer its child layers will also be hidden.
Finally at the top of the Layers Panel is a slider, this controls the size of each layer in the layer panel which might be useful if you have complex Maps or you want the texture thumbnails to be a bit larger.
Right Clicking in the Layers panel will bring up a Context menu, here you can select multiple options such as deleting, duplicating, creating a layer. You can also copy a layer values and paste them to another layer, or copy and paste to a new layer. You can also collapse the entire Layers hierarchy or expand it all. And finally you can choose to Reset the layers corners and or pivot positions.
Context Menu
If you right click in the Layers Panel a Context Menu will open this gives you various options each of which is outlined below.
Create Layer
This will create a new blank layer in the map, if a Layer is selected the new layer will be added as a child of that layer else it will be added at the bottom of the list.
Delete Layer
Deletes the currently selected layer.
Duplicate Layer
Creates a duplicate of the currently selected layer.
Duplicate Layer All
Creates a duplicate of the currently selected layer along with any child layers.
Clear Paste
Clears the paste buffer.
Cut
Removes the selected layer and puts it in the Paste Buffer.
Copy
Adds the selected layer to the paste buffer.
Paste As Layer
If there is a layer in the Paste Buffer then it will be added to the map.
Paste Values
Will paste the values of the layer in the paste buffer to the currently selected layer.
Paste Params
Will paste any params from the layer in the paste buffer to the params in the selected layer. If params are already present in the target then a window will open asking if you want to replace those params or add to them.
Reset
Resets the selected layers transform values.
Center Pivot
Moves the pivot for the selected layer to the center point.
Collapse All
Will close all the layers that have child layers that are open in the stack.
Expand All
Will open all the layers up in the stack.
Params Panel
The Params Panel is where you will edit all the different options available to you for each layer. The Panel is broken down in to several sections each can be opened and closed by clicking the title bar. The various sections are:
- General
- Adjust
- Blend
- Maps
- Mask
- Sprite
- Text
- Deform
- Params
- Final Map Output
Each panels options are explained below.
General Panel
The General panel holds values such as position, name, whether the layer is active etc.
Layer Name
The name of the layer. This is used in the Layer Panel and also for finding a layer from script so the names should be unique for the map.
Active
Whether or not this layer is used in the final map. This value can also be changed in the Layers panel side bar by clicking the eye icon. If you set a Parent Layer to not be active that will also disable all child layers as well.
Group Opacity
This value can be used to fade in and out the layer and all the child layers as well, this is handy if you want to switch between completely different looks in the map, using this you can fade the layers out while fading up another layer for a nice cross fade.
Locked
If the layer is locked then it means you can not change its position, angle, scale or corner positions in the Texture Window, this is useful for complex maps to avoid un intended moving of a layer.
Pos
This is the position of the layer pivot point in the texture, only X and Y values are used currently. The range is 0 to 1 with 0, 0 being the top left of the map and 1 1 being bottom right. This value is also changed if you drag the layer in the texture window or drag any of the layer corners.
Scale
The scale of the layer. This should generally be left as 1, 1. You can scale the layer directly in the texture window which is the better way to do it.
Angle
Each layer can be rotated around its pivot point with this value. The value is in degrees. Again you can also change this value in the texture Window.
Align
This changes the pivot point location relative to the corner points for the layer. You can choose middle, any of the corners, or any mid point of the layer edges.
Width Segs
This controls how many points are used across the layer for the rendering of the layer to the map. If you are just using rectangle shaped layers then this can be set to 1 but if you are going to have any odd shaped layers or plan on deforming the layer with the Bend option then you may need to increase this to get nicer results.
Height Segs
The same as the Width segs but for the vertical axis of the layer.
Match Parent Transform
Clicking this button will reset the layers transform values to match the parent layer.
Adjust Panel
The Adjust layer allows you to change the colors of the layer as well as changing its channel order and values. All the values will have tootlips if you hover the mouse over them in the window.
Tint
This will apply an overall color tint to the whole layer
Remap Low/High
The remap values allow you to change the range of the out values of the channels. This is for RGB channels only.
Multiply
Multiplies the channel values by this value.
Remap Alpha Low/High
Same as the remap values above but just for the Alpha channel.
Hue
Changes the Hue value of the layer.
Saturation
Changes the Saturation value of the layer.
Contrast
Changes the Contrast value of the layer.
Brightness
Changes the brightness of the layer.
Color Replace
Texture Studio allows up to 8 color replace values per layer. This is useful for changing team colors during a game or for painting parts of a car paint job different colors. The Replace Count slider sets the number of replacements to show for the layer. If you increase it you will see new Replace Options appear.
The From value is the original color on the layer texture you want to replace an the To value is the color you want to change it to.
The Range value can be used to define a wider range of values around the From color to replace. The Fuzzy value can be used to soften the edges around the selection similar to anti-aliasing. There is also a check box to disable the replace color to be used or not.
Levels
Photoshop type Levels adjustment for the output colors.
LUT
A Lookup Color table texture, This is a 32x32 with 32 levels texture to apply advanced baked lighting to the Layer output.
LUT Amount
How much of the LUT is applied to the layer.
Swizzle
You can change the channel order and values with the Sizzle channel, this is useful for turning of channels in a layer, negating them, or mapping say the Blue channel to the Red channel. If you are combining multiple maps such as Specular, Matallic, AO into a single output texture then these values are great for that. Each channel of the layer texture has its own Swizzle option. The per channel options are:
- R - Applies the Red channel values to this channel
- G - Applies the Green channel values to this channel
- B - Applies the Blue channel values to this channel
- A - Applies the Alpha channel values to this channel
- Om R - Applies 1 - R to this channel (Inverses)
- Om G - Applies 1 - G to the channel (Inverses)
- Om B - Applies 1 - B to this channel (Inverses)
- Om A - Applies 1 - A to this channel (Inverses)
- Zero - Sets the channel to 0
- One - Sets the channel to 1
- Half - Sets the channel t 0.5
Output Levels
You can limit the final output of each channel with these sliders.
Blend Panel
The Blend section allows you to use Photoshop style blending modes to mix the layer into the current background. If no blending mode is selected then Texture Studio will use a basic Alpha blending. The Blending modes included are:
- Burn
- Darken
- Difference
- Dodge
- Divide
- Exclusion
- Hard Light
- Hard Mix
- Lighten
- Linear Burn
- Linear Dodge
- Linear Light
- Linear Light Add Sub
- Multiply
- Negation
- Overlay
- Pin Light
- Screen
- Soft Light
- Subtract
- Vivid Light
- Overwrite
Blend Mode
The dropdown allows you to pick the blending mode from the list above.
Blend Amount
How much the layer is blended to the background.
Blend Mask
You can use a texture to also control the Blend Amount, select the texture here and use the channel select option top choose which channel to use to control the final blending amount.
Blend Channel
The channel from the mask texture to use for the blending control.
Maps Panel
This panel allows you to select the actual texture content you want to use for the layer.
Map
The texture to use for the layer, can be a Texture2D or can also be a Render Texture which can be useful for some fancy shader tricks.
Map Offset
The usual texture offset value, allows you control the area of the texture to use for the layer.
Map Tile
The usual tiling value, can be sued to repeat a texture on the layer of combined with the offset value above to select a region of the input texture to show.
Atlas
Texture Studio supports texture atlases so you can easily have multiple textures combined into a single atlas texture, if you want to use an atlas check this box. Note texture atlases regions are all the same size, if you need more control and need to different sized textures in an atlas type way then check the Sprite option below.
Rows
If Atlas mode is selected controls how many rows the atlas as.
Columns
If Atlas mode is selected controls how many columns the atlas as.
Decal
With Atlas mode on this value controls which texture from the atlas to use for the layer.
Mask Panel
Sometimes you don't want the layer to overwrite everything that is under it, for example a Car skin texture where you just want a layer to effect the paint work only, to do this you can use the Mask texture to control where the layer writes to. Note the layer will use the last mask found in any parent above it if no mask is actually selected for the layer, this is useful if you have a lot of different child layers of a parent and want to use the same mask for all of them.
Use Mask
Whether to use the mask on this layer or not.
Mask
The texture to use for the mask, note if any parent of this layer has a mask and this mask is null the parent mask will be used.
Mask Offset
The usual texture offset which can be used to control the area of the mask texture to use.
Mask Tile
The usual texture tile value which can be used to repeat the mask or with the offset value used to control the area of the mask to use.
Mask Channel
The channel of the mask texture to use.
Sprite Panel
Textures are great for layers but for some things like decals on objects, replacing sponsor logos, or new tattoos and scars on a character it would be handy to have all the different images in one place for easier editing and management. You can use the texture atlas system but Texture Studio allows the use of Sprites and sprite sheets as layer textures. Sprite sheets are useful as they can all sorts of different shapes and sizes so you are not limited to the one size of the atlas system. And changing the image used at runtime is as simple as changing a Sprite Index param.
When you select a sprite to use as a layer Texture Studio automatically finds all other sprites that share the sprite sheet with that sprite and makes them available to you.
Sprite
The Sprite to use from the project as the layer texture.
Sprite Index
When a sprite is part of a sprite sheet all the other sprites from that sheet are added to be available to the layer, changing this slider will change the sprite to use.
Text Panel
Another very handy feature of Texture Studio is being able to use the power of Text Mesh Pro to add text as layers to the map, this is great for say putting your players names on car paint or on signs etc. You can use any of the features of TMPro when adding your text so can pick your own font, sizes, spacing, outline, colors and fill textures and so on. And again you can change the text quickly and easily at runtime.
Text
This is the TMPro prefab that will be used to render the text. This allows you to have any number of predefined text styles ready to go. Some of the values below will be used to override the values, just means you don't need loads of TMPro prefabs for every color, size, outline align option etc. Again these values can be change at runtime directly in the layer or through the param system.
Text Color
The color of the text.
Str
The text string to render.
Font Size
The font size to use for this text.
Text Align
How the text is to be aligned.
Font Style
The style of the font i.e. Bold, Italic normal etc.
Outline Width
If the text object has outline setup then this value can be used to change the outline width.
Outline Color
If the text object has outline setup then this value can be used to change the outline color.
Text Render Size
By default Texture Studio will render text to the same size texture as the Map before applying it as a layer, but this may not always be needed and you may be able to get equal quality from a reduced render size, so here you can adjust the relative scaling of the Text render size, use as low a value as you are happy with.
Deform Panel
This panel allows you to control any deformations of the layer. Currently only a Bend option is available but we have plans to add a few more types. Bend can be useful for text layers for example. You can also deform the layer by dragging the corner control points. Note if you are seeing odd edges when you bend a layer then you may need to increase the Width and Height Segs values in the General Panel.
Bend
How much to bend the layer by in degrees.
Params Panel
Being able to build a texture for your project is one part of Texture Studio but another part is the ability to quickly change any param on any layer at runtime with very simple scripting. You are free to use the API and change the layer values directly from script but we have added a Param system along the lines of the Unity Material Set value API to allow you to setup and change values on each layer, so easily change a color of a layer, the texture used, the sprite, the text string, font, you name it.
To add a new param to a layer you just need to click the 'Add Param' button. You will then see a new param section added to the inspector, here you can set the name you want to use for the param such as 'Text Color' and this will then become the name you use when you want to change the param from a script. If you want to share a param across multiple layers then just add the param with the same name to any other layer and the value will be shared across those layers.
You can also directly change the values in the Layers from script if you want.
Param Name
The name of the param, used by the SetParam(name, value) API.
Param Type
This dropdown allows you to select the actual param on the layer this will alter, the current available options are:
- Active - Whether the layer is visible or not
- Angle - Rotation of the layer
- Bend - The bend amount of the layer
- Blend - The blend texture
- Blend Amount - How much to blend
- Blend Mode - Which mode to use
- Font Size - Size of the text font
- Map - The actual texture for the layer
- Mask - Change the mask texture
- Outline Width - Text outline width
- Outline Col - Color of the outline for text
- Sprite Index - If a sprite or texture atlas then the image to show from it
- Tint - The layer color
- Text - The string for the text object
- Text Align - TMPro text alignment
- Text Style - TMPro text Style
- Text Obj - The TMPro prefab to render the text
- Use Mask - Use the mask texture
- Replace Colors - The replace colors array
- Replace Count - The number of colors to replace
- Position - Layer position
- Scale - Layer scale
- Contrast - Layer contrast
- Saturation - Layer Saturation
- Opacity - How visible the layer and children are.
- ActiveCondition - Controls the whether the layer is visible or not via a conditional value
Depending on the param type an edit box for the value will also be shown.
If you are using the ActiveCondition then the inspector will show the statement that is required for the layer to be visible anything else and the layer will not be visible. For example:
If the value passed into SetParam equals 0 then the layer will shown, any other value and the layer will be turned off. This gives you the option to control the visibility of layers or groups of layers from a single value. The options are.
- Equals - Value must equal this to be visible
- NotEqual - If param value does not equal the value then the layer will be visible
- LessThan - If the param value is less than value then the layer will be visible
- GreaterThan - If the param value is greater than the value then the layer will be visible
- LessEqual - If the param value is less than or equal to the value then the layer will be visible
- GreaterEqual - If the param value is greater than or equal to the value then the layer will be visible.
When setting the Param for this you should be passing in an int value.
Final Map Output
This area controls the final output result of the Map, this is shown in every layer but its values are global to the whole map. Here you can choose the final size of the texture, the mode, select a target Render Texture to use and set final color adjustment values for the final texture.
Map Mode
Texture Studio has two modes, Texture for general color based textures and Normal which is used for combining Normal Maps or other non RGB based data. Normal mode removes some of the adjust options which aren't required.
Width
The width of the final texture.
Height
The height of the final texture.
Linked
If this is checked changing either the width or height value will update the other value to keep the texture the same aspect ratio.
Target Texture
You can choose to use the end result directly as a render texture on your materials, or you can tell Texture Studio to redirect to result to an already existing Render Texture in your project, if selected then the size of the target texture will be used.
Adjust Output
Check this to enable the color adjust values.
Hue
Changes the Hue of the end result.
Saturation
Changes the Saturation of the end result.
Contrast
Changes the Contrast of the end result.
Brightness
Changes the Brightness of the end result.
Levels
Changes the Levels of the end result.
LUT
You can apply a Color LUT to the texture, it should be a 32x32x32 LUT
LUT Amount
How much of the LUT to apply.
Apply Map to Materials
If you are using the map in your scene in the editor you can use this to update any materials you need when you edit the map. Check this to turn this feature on.
Add Material
Click this button the add a Material to this map to be updated with the final texture. When you click it will add a slot below it where you can fill in the material to apply the map to.
Material
Select the Material to apply this map to.
Texture Name
By default the texture name _MainTex will be used to apply the texture to the material, but if you are URP or HDRP you may need to change this to _BaseMap or off course you can use any texture param on any shader so you can set Normal maps, Metallic, AO or whatever you need.
Texture Edit Window
The main window area allows you to see the current end result of the texture you are building along with gizmos to select, position and edit the layers.
If you Right Click and drag you can move around the texture Edit Widow and using the Mouse wheel you can zoom in and out.
When you create a layer you will see a box appear in the Texture Edit Window this shows the extent of the layer. By default a new layer will be the size of the texture that is being built. The layer will have a line border connecting the 4 corners of the layer edge. And in the middle will be a Gizmo to allow you to select the layer and depending on the current selected tool move, rotate or scale the layer.
At each corner you will see a small circle gizmo if you left click and drag you will see the layer shape change. If you hold down the X or Y key while dragging you will limit the movement of the corner to that axis. You can also hold down the S key to turn on snapping. You can snap to other corners X or Y positions as well as the texture edge. Holding Alt will allow for finer control over the movement.
Halfway along each edge you will see a green gizmo, clicking and dragging this will move both corners. If you click and drag the pivot gizmo the layer can be dragged about and positioned. If the Layer has child layers then they will move as well. If you want to move the Layer without moving the child layers then hold down Shift while you drag.
At the top left of the Texture Edit Window you will five Icons, the first selects 'Move' mode, the next selects 'Rotate' mode, next is the 'Scale' mode, then comes the 'Pivot' mode where you can freely position the pivot of a layer and last is the 'Hand' tool which hides the other tools which is handy of the pivot is over a layer corner.
Move mode as been explained, in Rotate mode click the pivot location and dragging the mouse will rotate the layer around the pivot point, you can change the pivot point position using the 'Align' dropdown in the General Params section. Holding S will turn on Snapping and the Angle will snap to 5 degree increments. Holding Alt will allow for finer control.
In Scale mode clicking the pivot and dragging will scale the layer. Hold X or Y to limit the scale to that axis only. Holding Alt will give you finer control.
The Pivot mode allows you to drag the pivot point of a layer around without effecting the position of the layer. Once the pivot is moved the Align mode will be set to 'Free' and rotations and scaling will happen around the new pivot location.
At the top left of the window the current layer name of the layer being edited will be shown, the Layer will also be highlighted in Blue in the Layers panel for you.
On the top line you can also find a place to chose the map you wish to edit, you can also select that from the thumbnails at the bottom of the window. Next you can change the Texture mode. The you can find the Color option for the layer outline so you can pick a color best suited for the texture you are editing. The slider next to that will control the width of the layer line. Then there are options to change the size of the texture as well turning on and off the sRGB option for the texture and whether or not Mipmaps should be created. You can also disable the Layer Gizmos by clicking the Gizmos check box.
At the bottom of the window on the left is an Info area which again shows the layer being edited and next to that is a helper string for the key controls for the current tool mode.
And on the right at the bottom is a Repaint button, this will force a full repaint of the window if required. The Save button will allow you to save the current state of the map you are editing to a Texture file, you will be able to select the res and save name when you click the button, and then lastly an About button.
The Export button will export the current map being edited to a UnityPackage, it is easier to use this option if you want to copy a map between projects as it will only add the textures, sprites and objects being used by the map instead of Unitys export package which seems to include everything or nothing. When you click the export button you will be asked for a save file name and location as normal.
When using this window you can also press the keys W, E, R to select the Position, Rotate and Scale tools.
Context Menu
If you right click over a Layer Pivot point, vertex or other handle then a context menu will open, the options it contains are outlined below.
Hide
Hides the level so it is not included in the map.
Lock
Locks the layer so it cant be changed
Duplicate
Creates a copy of the layer and adds it to the map.
Duplicate All
Creates a copy of the layer and all children and adds it to the map.
Copy
Copies the layer to the Paste Buffer.
Paste
If the paste buffer has a layer then it will be added as a child of the layer.
Delete
Deletes thee layer from the map.
Reset
Reset the layers transform.
Map Select
At the bottom of the Texture Studio window you will find a row of thumbnails, this will show all the Composite Maps in your project and to edit any of them you just need to click the thumbnail and it will be moved to the edit window. Texture Studio saves the last edited layer and texture edit positions and scale so you will pick up editing of the map exactly where you left it.
If you right click over an empty thumbnail a context menu will open which will allow you to refresh the thumbnails. Thumbnails are only updated when the texture Studio window is opened or you select Refresh here. So if you have made big edits to a texture and want to change the thumbnail click this.
To edit a map directly from the project you just need to double click the Map asset which will open the Texture Studio window with the clicked map ready to go.
Photoshop Files
As well as being able to create your Composite Maps from scratch inside Unity you can also import Photoshop .psd and .psb files as Composite Maps to Texture Studio. This makes it very easy to use your favourite Art software to create your layers, save it as a .psd or .psb file and then use the Texture Studio 'PSD Import' window to import that to texture Studio.
To import a .psd file you just need to open the 'PSD Import' Window from the 'Windows/Texture Studio' menu. Once open you will see a 'Load PSD File' click that and a File Select dialog will open, navigate to your .psd file and click OK. The file will be read and then a list of all the layers in that .psd file will be shown in the Window. You will see a check box by each layer, this will control whether or not that layer will be added to the Composite Map. Texture Studio will automatically not select any layer that was hidden in the .psd file. You can choose to keep that or select or deselect any layer, or click the 'All' button at the bottom to add all the layers, or clear the selection with the 'None' button.
Also at the bottom of the window there are options to show the size of each layer as well as the position info for each layer.
Once you are happy with the layer selection click the green 'Import' button. Another Folder Dialog window will open allowing you to choose where in your project you want the new Composite Map to be created, the name of the map will be the same as the name of the .psd file. You can change this after import in the usual way. Once the folder has been selected click OK and Texture Studio will build the map for you. Once complete you will see the map in the project and you will see that all the textures used by the map are grouped with the Composite Map so keeping it all in one place.
You can now edit the Composite Map as you want, delete layers, hide them, add new ones, adjust the blending, colors or whatever you need.
Please note that the PSD import does not support all layer types yet of psd files. We are looking at adding some support for those but you can bake those to a layer in Photoshop. But layer types not currently supported are:
- Effects (Stroke, Drop Shadow etc.)
- Adjustment
- Shapes
- Fill
Also you may get an error on some photoshop psd files that were saved from older versions of PS, if you get an error, close the PSD Import window and re open it. Then use a newer version of Photoshop or Gimp etc to load the psd and re save it.
Composite Map
Texture Studio uses a Scriptable Object called Composite Map to hold all its data. To change values for a composite map you will use the Texture Studio Window. If you select a Composite Map asset in the project it will show the map current final state of the Map and below it there will be a section that shows the layers that make up the map as well as a list of all Params that are available for that map, its handy to have this info if you are scripting some changes to the map and need to quickly check layer names and param names. You can also click the 'Edit this Texture' button to open the Texture Studio Window with that map selected so you can alter any values.
Settings
Texture Studio has a few simple settings that can be set from various parts of the Texture Studio Window but you can also find the settings in the Editor Preferences section. The current preferences to be found here are:
Layer Size
Controls the size of the Layer section in the Layer Window, making them bigger makes it easier to see the thumbnails but if you get a complex map you can reduce the size for easier selection.
Thumbnail Size
The map select thumbnail size is controlled by this value.
Dont Show About
Stops the About window popping up when a new version is released.
API
Texture Studio has a simple API for interacting with the Maps and changing its values etc. Below are the currently available methods for the CompositeMap as well as the Layers it contains.
Composite Map Class
public Layer CreateLayer()
Call this to add a blank new layer to the Map.
Returns: Returns a new Layer.
public RenderTexture GetTexture()
Returns the built texture as a RenderTexture.
Returns: Returns the fully built Map as a RenderTexture.
public void UpdateTexture()
Rebuilds the map with the current set values.
public void CreateMapTexture(int width, int height, bool mipmaps = false, bool linear = false)
Rebuilds the map with the texture params passed in. To get the resulting map use the GetTexture() method after calling this.
- width - Width of the final texture.
- height - Height of the final texture
- mipmaps - Whether to create mipmaps
- linear - Is the map to be in linear space
public Layer FindLayer(string name)
Looks through the layers of the map for one called in the passed in name, if finds one it will be returned.
Returns: Returns the Layer if matching name is found else null.
public Layer FindLayerPath(string path)
This will find a layer by path through the hierarchy, so for example if you called this with 'Skins/War Paint/Tatoo' it will look through the base layers for a layer called 'Skins' then check its children for a layer called 'War Paint' and then finally look for a child layer called 'Tatoo'.
You need to use the '/' and the search is case insensitive.
public void SetParam(string param, Vector2 val)
public void SetParam(string param, string val)
public void SetParam(string param, float val)
public void SetParam(string param, bool val)
public void SetParam(string param, int val)
public void SetParam(string param, Texture val)
public void SetParam(string param, Color val)
public void SetParam(string param, ReplaceColor rcol, int index)
These methods are used to change the values of any params on the layers. When making the call all the layers of the map will be checked for any param that matches the passed in param name, if any are found their values are updated with the passed in value. There are numerous different types depending on the value type being passed in. Below is a list of the current Params that can be changed and the expected value type to use to change its value.
- Active - bool, true to turn on, false for off
- Angle - Float, value is in degrees
- Bend - Float, value is in degrees
- Blend - Texture
- BlendAmount - Float, 0-1
- BlendMode - String, name of the BlendMode to set
- FontSize - Float
- Map - Texture
- Mask - Texture
- OutlineWidth - Float
- OutlineCol - Color
- SpriteIndex - Int
- Tint - Color
- Text - String
- TextAlign - String, TMPro TextAlign enum name
- TextCol - Color
- TextStyle - String, TMPro Text Style enum name
- TextObj - GameObject, TMPro prefab
- UseMask - bool
- ReplaceColors - ReplaceColor and an int index
- Position - Vector2
- Scale - Vector2
- Contrast - Float
- Saturation - Float
public bool GetColourReplace(string layer, int index, ref ReplaceColor col)
Will return in the ReplaceColor col param the replace color info for the layer and index passed in. The index value is a value 0-8 for the replace color to return.
- layer - The name of the layer to get the color replace from
- index - the index of the replace color to get
- col - on return will contain the color replace info
This will return true if the layer is found, false if no layer found.
public bool SetColourReplace(string layer, int index, ReplaceColor col)
This can be used to change a color replace value on a layer. It will look for the Layer with the name, and set the replace color whose index is passed in to the values in the ReplaceColor col passed in.
- layer - The name of the layer to set the color replace from
- index - The index of the replace color to set
- col - New values for this color
- to - The new To color value
This will return true if the layer is found, false if no layer found.
public List<Layer> GetAllLayers()
Calling this will return a List of all the layers the map contains, the returned list will be in the order the layers are applied to the map.
public Texture2D CreateTexture(TSize width, TSize height)
Calling this will return a new Texture2D object made from the final map result, you pass in a Width and Height value for the new texture.
public void SetParent(Layer layer, Layer parent)
Sets the parent of the layer passed in to the parent value, this allows you to remove layers and reorder them as needed.
public bool SetLayerTransform(string name, Vector2 pos, float angle, Vector2 scale)
Will set the layer whose name is passed transform to pos, angle and scale.
Will return true if the layer has been positioned false if no layer matching the passed name is found.
public bool GetLayerTransform(string name, ref Vector2 pos, ref float angle, ref Vector2 scale)
Will return in pos, angle and scale the transform of the layer whose is passed in.
Will return true if the layer was found and false if no match for name is found.
CompositeMap Class
Below is a list of the public values in the CompositeMap class and what they control:
public List<Layer> layers;
The list of all base Layers, each Layer also has a list of its child Layers so this is not a complete List of all the layers for the map. Use the GetAllLayers() method if you want all the layers in the map.
public TSize width;
The width of the map.
public TSize height;
The height of the map.
public bool square;
Whether the map is square. If this is set the width value will also be the height value.
public bool srgb;
Is the Texture srgb.
public bool mipMaps;
Should mipmaps be made for the map.
public MapMode mapMode;
Whether the map is a Texture or a Normal map.
public Texture2D LUT;
Color LUT texture. 32x32 Format.
public float LUTAmount;
How much the LUT is applied.
public float hue;
Hue value for the map.
public float saturation;
Saturation value for the map.
public float contrast;
Contrast value for the map.
public float brightness;
Brightness value for the map.
public float levelsMin;
Min Levels value for the map.
public float levelsMax;
Max Levels value for the map.
public RenderTexture outputTexture;
A target render texture to send the end result to.
public bool adjustOutput;
Whether final map should use color adjustments.
Layer Class
Public values in the Layer class.
public string name;
Name of the layer, used by Find methods. Each name should be unique.
public bool active;
Is the layer used in the end map.
public Texture map;
Texture for this layer.
public bool useMask;
Should the layer use the mask value or any parent mask.
public Texture mask;
Mask texture for this layer.
public MaskChannel maskChannel;
The channel of the mask texture to use.
public Sprite sprite;
The Sprite to use for this layer.
public Texture blend;
Texture used to blend the layer to the map.
public MaskChannel blendChannel;
The channel to control the blending.
public Vector3 pos;
The position of the layer in map.
public Vector2 scale;
Scale of the layer in the map.
public float angle;
Rotation of the layer in the map.
public Color tint;
Color tint for the layer.
public float remapLow;
Low value to remap the colors to.
public float remapHigh;
High Value to remap the colors to.
public float multiply;
Multiple the colors by this value.
public float remapLowAlpha;
Low Remap value for the Alpha channel.
public float remapHighAlpha;
High remap value for the Alpha channel.
public Swizzle swizzleR;
The Swizzle option for the red channel.
public Swizzle swizzleG;
The Swizzle option for the green channel.
public Swizzle swizzleB;
The swizzle option for the blue channel.
public Swizzle swizzleA;
The swizzle option for the alpha channel.
public bool atlas;
Is the Map a texture atlas.
public int columns;
If an atlas the number of columns in the atlas.
public int rows;
If an atlas the number of rows in the atlas.
public Vector2 mapOff;
Map Texture UV offset value.
public Vector2 mapTile;
Map Texture UV Tile value.
public Vector2 maskOff;
Mask Texture UV Offset value.
public Vector2 maskTile;
Mask Texture UV Tile value.
public GameObject text;
TMPro prefab object to use for the text for this layer.
public string str;
The string to turn to TMPro Text.
public Color textCol;
Color of the text.
public Vector3[] corners;
The corner position in the map for the layer.
public float bend;
How much the bend the layer in degrees.
public AlignPivot align;
Where the pivot is located on the layer.
public List<Layer> children ;
List of any child layers this layer has.
public Layer parent;
The parent layer for this layer.
public BlendMode blendMode;
The Photoshop style blending mode for the layer.
public float blendAmount ;
How much to blend the layer.
public float fontSize;
The size of the font to use for the text.
public FontStyles fontStyle;
The TMPro fontstyle to use.
public TextAlignmentOptions textAlignment;
The TMPro textalignment option for the text.
public float outlineWidth = 0.0f;
The width of any outline.
public Color outlineColor;
The color of the outline.
public int spriteIndex;
If the texture is an atlas or a sprite is set this controls which image is actually displayed.
public TextTSize textTSize;
How much to change the text rendering size by.
public float LUTAmount;
How much to apply the LUT to this layer.
public Texture2D LUT;
The 32x32 format LUT texture.
public float rLevel;
The output level of the red channel.
public float gLevel;
The output level of the green channel.
public float bLevel;
The output level of the blue channel.
public float aLevel;
The output level of the alpha channel.
public float hue;
The layers Hue value.
public float saturation;
The layers saturation value.
public float contrast;
The layers contrast value.
public float brightness;
The layers brightness value.
public float levelsMin;
The layers levels min value.
public float levelsMax;
The layers levels max value.
public ReplaceColor[] replaceColors;
Array of the replace color values.
Code Examples
Some small script snippets to show how to interact with a map, more will be added.
Setting a Map Param
To set a param that has been defined on a Map layer or layers you just need to call the SetParam method with the name of the Param you want to set and the value to set. The param will need to have been added to any layers in the Texture Studio Window. After setting the value the map is told to Update and then finally we set the texture back to the material or materials that are using it.
void ChangeRaceNumber(int number)
{
map.SetParam("Race Number", number.ToString());
map.UpdateTexture();
mat.mainTexture = map.GetTexture();
}
Find A Layer
To find a layer you can either find by the layer name or you can find by a path. To find by a layer name you simply call the FindLayer method with the name of the layer you want and it will be returned if found or null returned if not found.
Layer find = map.FindLayer("Decals);
To find by path you pass in a string containing the path with '/' to separate the layer levels, this can be useful if you map contains multiple layers with the same name but you need a specific layer from the map.
Layer l = map.FindLayerPath("Livery 2/Roundels/Race Number Right");
Helper Scripts
To make using the Maps easier in your scene a simple MapManager script is included. With this script you can add the maps you are using in the scene to a list and then add a list of materials used by that map and when the scene starts the correct texture will be applied to the materials for you.
Add a new Map for each CompositeMap you plan on using in the scene, set the name of the texture param you want to apply the map to for the material and then add any material you wish to use the texture to the materials list. When the scene runs the materials will be updated with the composite map texture. If you make any changes to the Composite Map at runtime the materials will automatically show the changes.
Videos
Texture Studio Example
Quick video showing the process of making a map.
Video showing the Layers Panel
Showing how to import PSD or PSB files into Texture Studio
What each value does on the General Panel
What each value does on the Adjust Panel
What each value does on the Blend Panel
What each value does on the Map and Mask Panels
What each value does on the Sprite and Text Panels
What the Params panel does
Keys
Keys Used by Texture Studio
- W - Select Move Tool
- E - Select Rotate Tool
- R - Select Scale Tool
- T - Select the Pivot Move Tool
- X - Constrain Movement/Scaling to X Axis (Hold while moving mouse)
- Y - Constrain Movement/Scaling to Y Axis ( Hold while moving mouse)
- S - Snap Movement/Rotation (Hold while moving mouse)
- Alt - Finer control for mouse dragging
- Escape - Cancels dragging
- Del - Deletes current selected layer
- 1 - Cycles Sprite/Atlas images
- 2 - Cycles Sprite/Atlas images
- Ctrl+Z - Undo
- Ctrl+X - Cut Selected Layer
- Ctrl+C - Copy Selected Layer
- Ctrl+V - Paste copied layer as child to current selected layer
Release Notes
Version 1.11
Fixed the Final Output params section not being showed if you switched from Texture to Normal mode.
Version 1.10
Layer Hue value was missing from the Param system, this has been fixed.
Version 1.09
Fixed that the Mask texture Tiling and Offset values were not working.
Version 1.08
Update the MapManager script to find any CompositeMap in the build and update it so materials are correct on play and build. Note CompositeMaps used must be in a Resources folder to be included in the found. If not use the LinkMap option to add the maps to update.
Fixed materials not updating and going black when scene is saved and other changes.
Demo Scene has a Map Manager object setup.
Added a ApplyMap() method to the CompositeMap class, call this after calling UpdateTexture to apply the texture to the any materials setup in the map to use it.
Version 1.07
Fixed a major issue with the editor scripts not being able to locate the texture resources it uses givings errors. The folder is no in the correct location.
Version 1.06
Fixed an error when building with Unity 2022 and later regarding errors saving images are marked as DontSave.
Version 1.05
Fixed the height value being 0 when you go to save a texture.
The last save folder is now saved and is set as the directory for saves
Version 1.04
Fixed a bug where changing the Text object for a layer through a param wasn't working.
Version 1.03
Added Undo support for changing map width and height in the Texture window.
Version 1.02
Fixed an exception you could get if an object in the scene has a null material in its sharedMaterials list.
Version 1.01
Added system to update the maps in the scene when entering and exiting play/edit mode
Maps should also no not be reset when compiles happen.
Add a blur option to the Adjust panel, will blur whats under the layer.
Add Blur param to the Params section so it can be set using the SetParam method.
Version 1.0
Initial Release
Known Issues
When selecting a new map or a new color in the Params Window you may get a GUI error in the console, there is no problem it is just a wrong warning from Unity and can be ignored.
When using Sprites if the Align mode is not set to 'Middle' you may get some offset changes when moving the pivot.
Roadmap
Import of PSD Files - Done
Procedural Maps
Let us know of what you would like to see.
Contact Us
If you have any questions about texture Studio then please Email Me and I will get back to you. If you are using texture Studio and have found a bug or something not working quite right then please submit a support ticket at Support Desk Link
If you have an idea for a feature or an improvement please also get in touch, and we also have a Discord channel at Discord Link
If you like this asset please check out our other assets on the AssetStore, or check our website at West Racing for some more info or check out our Racing Game Project Ages of Speed.