Skip to content

Commit

Permalink
update readme.
Browse files Browse the repository at this point in the history
  • Loading branch information
hecomi committed May 22, 2017
1 parent 49daa7a commit d415174
Showing 1 changed file with 184 additions and 1 deletion.
185 changes: 184 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,193 @@
uShaderTemplate
===============

**uShaderTemplate** is a editor plugin to create shader templates.
**uShaderTemplate** is an editor asset to create shader from templates.

Install
-------

Download the latest .unitypackage from [Releases](https://github.com/hecomi/uShaderTemplate/releases) page,
then import it.

Usage
-----

1. Prepare **Shader Template** file.
2. Create **Generator** from *Create > Shader > uShaderTemplate > Generator*.
3. Input *Shader Name* and select *Shader Template* from the inspector.
4. Edit items in *Conditions*, *Variables*, and codes in code editors.
5. Press *Export (Ctrl+R)* button to create a shader from the Generator.

Overview
--------

Generator is an asset file that manages a generated shader, save parameters,
and provide you an interface to customize the shader with some rules
written in **shader template**. The following image is an example of a Generator
inspector which is from shader template.

![Inspector](https://raw.githubusercontent.com/wiki/hecomi/uShaderTemplate/inspector.png)

The interface is generated from
*uShaderTemplate > Examples > Editor > Resources > ShaderTemplates > 1. VertFrag.txt*.
This is the content of this file:

**1. VertFrag.txt**

```shader
Shader "Custom/<Name>"
{
Properties
{
@block Properties
_MainTex("Texture", 2D) = "white" {}
@endblock
}
SubShader
{
Tags { "Queue"="<Queue=Geometry|Transparent>" "RenderType"="<RenderType=Opaque|Transparent>" }
LOD <LOD=100>
CGINCLUDE
#include "UnityCG.cginc"
struct v2f
{
float2 uv : TEXCOORD0;
@if UseFog : true
UNITY_FOG_COORDS(1)
@endif
float4 vertex : SV_POSITION;
};
@block VertexShader
sampler2D _MainTex;
float4 _MainTex_ST;
v2f vert(appdata_full v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
UNITY_TRANSFER_FOG(o,o.vertex);
return o;
}
@endblock
@block FragmentShader
fixed4 frag(v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv);
UNITY_APPLY_FOG(i.fogCoord, col);
return col;
}
@endblock
ENDCG
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
@if UseFog : true
#pragma multi_compile_fog
@endif
ENDCG
}
}
CustomEditor "uShaderTemplate.MaterialEditor"
}
```

You might have found some grammars like `@if foo`, `<Bar>`, `@block baz`,
and these are special grammmars available in template file.
Shader variant like `#pragma multi_compile` and `#pragma shader_feature`
cannot customize the section outside `CGPROGRAM`, but with these grammar,
you can customize the all parts of the shader.

If you put template files like this in *Resources > ShaderTemplates*,
they are automatically detected and shown in the *Shader Template* field
in *Basic* section.

Grammars in Shader Template
---------------------------

```shader
// Condition:
// A toggle filed labeled "Hoge Hoge" will appear in Conditions section.
// Only when checked, the content will be output.
@if HogeHoge
#define HOGEHOGE
@endif
// You can use else block and give a default condition.
@if HogeHoge2 : false
#define HOGEHOGE2
@else
#define HOGEHOGE3
@endif
// Variable:
// The name with <> will appear in Variables section as a text field.
// You can give a default value with =, and =| will be pull-down list.
#define Hoge <Hoge>
#define Fuga <Fuga=Hoge> //
#define Piyo <Piyo=Hoge|Fuga|Piyo>
// Block:
// The content will be a code editor.
// Output shader has block like // @block ~ // @endblock and
// if you edit the content directly with your own editor like Vim,
// the result will be applied to the code editor in inspector.
@block Moge
float Moge2() { return _Move * _Moge; }
@endblock
```

Buttons
-------

![Buttons](https://raw.githubusercontent.com/wiki/hecomi/uShaderTemplate/buttons.png)

* **Export(Ctrl+R)**
* Export shader from Generator. You can use *Ctrl + R* as a shortcut key
instead of pressing this button.
* **Create Material**
* Create material from the generated shader.
* **Reset to Default**
* Reset all parameters to the default parameters written in template.
* **Update Template**
* If you edit the template file, please press this before the export.
* **Reconvert All**
* Convert all generated shaders forcedly. This is useful when you edit
template file and want to apply the change to all shaders.


Constants
---------

![Constants](https://raw.githubusercontent.com/wiki/hecomi/uShaderTemplate/constants.png)

Instead of inputting variables in each inspector, you can use **Constants** asset
as a shared variables among multiple Generators.

Select *Create > Shader > uShaderTemplate > Constants* and add *Name* and *Value*
pair to *Values* field of the created Constants asset. Then, drag and drop it to
the *Constants* field of Generators which you want to apply the parameters to.
Please remember that if you modify a parameter in Constants,
you have to *Reconvert All* to apply the change to all generated shaders.

License
-------

The MIT License (MIT)

Copyright (c) 2017 hecomi
Expand Down

0 comments on commit d415174

Please sign in to comment.