- 设置编辑器
打开unity3d项目,点击菜单“Edit”。在菜单中选择“Preferences“,进入属性设置界面。
选择左边的”External Tools“。
在右边的“External Script Editor”选择“Visual Studio”。
- 创建shader
project栏右键create可创建shader。双击该shader文件可以在编辑器中进行编码。
Shader "MyShaderName"{
Properties{
//
//属性
//
}
SubShader{
Pass{
CGPROGRAM
//该代码片段的编译指令
#pragma vertex vert
#pragma fragment frag
//
//CG代码
//
ENDCG
//
//其他设置
//
}
//
//其它需要的Pass
//
}
//
//其它SubShader
//
//上述SubShader都失败后用于回调的Unity Shader
Fallback "VertexLit"
}
- Unity中的包含文件
后缀为.cginc
在windows上,CGIncludes文件夹的位置在:Unity的安装路径/Data/CGIncludes
Lighting.cginc:包含各种内置的光照模型。如果编译的是Surface Shader的话会自动包含进来
HLSL_Support.cginc:在编译Unity Shader时会被自动包含进来,声明了很多跨平台编译的宏和定义
UnityShaderVariables.cginc:在编译Unity Shader时会被自动包含进来,包含了许多内置的全局变量(如:访问时间、光照、雾效、环境光等)
UnityCG.cginc:包含了最常用的函数、宏、结构体。(常见结构体:包含了顶点位置&顶点法线&第一组纹理坐标的appdata_base、包含了顶点位置&顶点法线&定点切线&第一组纹理坐标的appdata_tan、包含了顶点位置&顶点法线&定点切线&四组或更多纹理坐标的appdata_full、包含了顶点位置、第一组纹理坐标的appdata_img等)
- Unity支持的CG/HLSL语义
语义:semantics
一个Unity中早已规定好的字符串,用来让Unity知道数据的读取和输出
通常是大写字母+阿拉伯数字的形式
语义 | 描述 |
POSITION | 【模型空间】中的顶点位置,通常:float4 |
NORMAL | 顶点法线,通常:float3 |
TANGENT | 顶点切线,通常:float4 |
TEXCOORDn | n表示第n组纹理坐标,在appdata_full中最多使用了6个纹理坐标组,通常:float2或float4 |
COLOR | 顶点颜色,通常:fixed4 / float4 |
语义 | 描述 |
SV_POSITION | 【裁剪空间】中的顶点坐标,结构体中【必须】包含用该语义修饰的变量。 |
COLOR0 | 通常用于输出第一组顶点颜色,非必须 |
COLOR1 | 通常用于输出第二组顶点颜色,非必须 |
TEXCOORD0(最多为7) | 通常用于输出纹理坐标,但非必须 |
除SV_POSITION外,其余语义对变量的含义没有明确规定。需要把一些自定义的数据从顶点着色器传递给偏远着色器时,一般选用TEXCOORD0
语义 | 描述 |
SV_Target | 输出值将会存储到渲染目标(render target)中 |
以上语义绝大部分用于描述标量或矢量类型的变量。
- 系统数值语义
系统数值语义:system-value semantics
以SV开头,如:SV_POSITON
- 天空盒
Window->Rendering->Lighting->Environment
- 场景环境光
Window->Rendering->Lighting->Environment
或UNITY_LIGHTMODEL_AMBIENT