// 这里指定shader的名字,不要求跟文件名保持一致
Shader "Test/UnityShader结构"
{
Properties
{
// 属性
_Color("Color",Color)=(1,1,1,1) //float4
_Vector("Vector",Vector)=(1,2,3,4) //float4
_Int("Int",Int)= 34234 //float
_Float("Float",Float) = 4.5 //float
_Range("Range",Range(1,11))=6 //float
_2D("Texture",2D) = "red"{} //sampler2D
_Cube("Cube",Cube) = "white"{} //samplerCube
_3D("Texure",3D) = "black"{} //sampler3D
// 内部变量名("界面名称",属性类型)=属性默认值;
}
//SubShader(子着色器)可以写很多个 显卡运行效果的时候,从第一个SubShader开始,如果第一个SubShader里面的效果都可以实现,那么就使用第一个SubShader,如果显卡这个SubShader里面某些效果它实现不了,它会自动去运行下一个SubShader
SubShader
{
// 着色器修饰 硬件将通过判定这些标签来决定什么时候调用该着色器。包括以下类型:
// RenderType渲染方式
// Opaque:不透明(法线、自发光、反射、地形Shader)
// Transparent:半透明(透明、粒子、字体、地形添加通道Shader)
// TransparentCutout:遮罩透明(透明裁切、双通道植物Shader)
// Background:天空盒Shader
// Overlay:GUI纹理、光晕、闪光Shader
// TreeOpaque:地形引擎——树皮
// TreeTransparentCutout:地形引擎——树叶
// TreeBillboard:地形引擎——公告牌(始终面向摄像机)式树木
// Grass:地形引擎——草
// GrassBillboard:地形引擎——公告牌(始终面向摄像机)式草
// Queue 指定渲染顺序队列:
// Background 通常用于SkyBox;
// Geometry 最常用的一种,用来渲染非透明物体(普通情况下,场景中的绝大多数物体应该是非透明的)
// AlphaTest - 用来渲染经过Alpha Test的像素,单独为AlphaTest设定一个Queue是出于对效率的考虑
// Transparent 以从后往前的顺序渲染透明物体
// Overlay 用来渲染叠加的效果,是渲染的最后阶段(比如镜头光晕等特效)
// “ForceNoShadowCasting”=”True” 从不产生阴影
Tags { "RenderType"="Opaque" }
// LOD是Level of Detail的缩写,在这里例子里我们指定了其为200(其实这是Unity的内建Diffuse着色器的设定值)。这个数值决定了我们能用什么样的Shader。
// VertexLit及其系列 = 100
// Decal, Reflective VertexLit = 150
// Diffuse = 200
// Bumped VertexLit = 250
// Bumped, Specular = 300
// Bumped Specular = 400
// Parallax = 500
// Parallax Specular = 600
LOD 100
//至少有一个Pass
Pass
{
// 这里还会标注RenderState.设定显示各种状态:
// Cull ( Back,Front,Off) 设置多边形剔除模式
// ZTest (Less,Greater,LEqual,GEqua,Equal,NotEqual,Always) 默认是LEqual.
// ZWrite (On,Off) 设置深度写模式,是否此物体的像素深度会被记录(默认记录) Off,通常用于半透明物体。
// AlphaTest(Less,Greater,LEqual,GEqual,Equal,NotEqual,Always) 开启alpha测试
// Blend SourceB./endMode DestB/endMode 设置alpha混合模式。(以下为相关属性说明)
// One 值为1,使用此设置来让源或是目标颜色完全的通过。
// Zero 值为0 ,使用此设置来删除源或目标值。
// SroColor 此阶段的值是乘以源颜色的值。
// SrcAlpha 此阶段的值是乘以源alpha的值。
// DstColor 此阶段的值是乘以帧缓冲区源颜色的值。
// DstAlpha 此阶段的值是乘以帧缓冲区源alpha的值。
// OneMinusSrcColor 此阶段的值是乘以(1-source color)
// OneMinusSrcAlpha 此阶段的值是乘以(1-source alpha)
// OneMinusDstColor 此阶段的值是乘以(1-destination color)
// OneMinusDstAlpha 此阶段的值是乘以(1-destination alpha)
//在这里编写shader代码 HLSLPROGRAM
CGPROGRAM//使用CG语言编写shader代码
// 声明一个以vert为名字的函数的顶点程序
#pragma vertex vert
// 声明一个以frag为名字的函数的片元程序。
#pragma fragment frag
// 可选
// #pragma surface name 声明一个以name为名字的函数表面shader;
// #pragma vertex name 声明一个个以name为名字的函数的顶点程序
// #pragma fragment name- 声明一个个以name为名字的函数的片段程序。
// #pragma fragmentoption option - 添加选项到编译的OpenGL 片段程序。 通过 ARB 片段程序 可以查询到所允许的规范的选项列表。 这个指令对顶点程序或者不是以OpenGL为编译目标的程序无效。
// #pragma target name -着色器目标编译。详情请参考 着色器目标。
// #pragma only_renderers space separated names - 仅用给定的渲染器编译着色器。默认情况下用所有的渲染器都编译着色器。
// #pragma exclude_renderers space separated names -不用给定的渲染器编译着色器。 默认情况下用所有的渲染器都编译着色器。
// #pragma glsl - 用桌面OpenGL平台编译着色器时,转换成GLSL里面的Cg/HLSL(而不是默认设置的ARB顶点/片段程序)。
// #pragma surface surf Standard fullforwardshadows
// Use shader model 3.0 target, to get nicer looking lighting
// #pragma target 3.0 //编译着色器模式3.0
// Mac上的位置 /Applications/Unity/Unity.app/Contents/CGIncludes
// Win上的位置 Unity的安装路径/Data/CGIncludes
#include "UnityCG.cginc"
// 结构体
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
// 结构体
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _MainTex_ST;
// 顶点入口函数
v2f vert (appdata v)
{
v2f o;
// 内置函数http://blog.csdn.net/qingshui37/article/details/51476404
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = TRANSFORM_TEX(v.uv, _MainTex);
return o;
}
// 片元入口函数
fixed4 frag (v2f i) : SV_Target
{
// sample the texture
fixed4 col = tex2D(_MainTex, i.uv);
return col;
}
// 结束CG程序
ENDCG
}
}
Fallback "VertexLit" //返回值
}
UnityShader学习笔记—UnityShader结构
©著作权归作者所有,转载或内容合作请联系作者
- 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
- 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
- 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
推荐阅读更多精彩内容
- 概述 新接触 React Native,本文算是个笔记 环境配置 React Native中文网的环境配置http...
- [机器学习入门] 李宏毅机器学习笔记-24(introduction of Structured Learning...
- [机器学习入门] 李宏毅机器学习笔记-27(Structured SVM part 2;结构化支持向量机 part...