Shader之学习笔记一
2016-04-27 17:56
656 查看
//在inspector的shader列表中显示名字 Shader "Custom/shader_1" { //shader的属性 也就是当前shader可操作的属性 和C++中类的属性一样 这里是通过关键字Properties来定义相关的属性的 Properties { _Color ("Color", Color) = (1,1,1,1)//颜色属性,在可视化界面中是一个颜色面板;Color:显示在UI界面上的,用户可见,_Color:颜色变量,程序使用; _MainTex ("Albedo (RGB)", 2D) = "white" {}//texture 在UI界面中选择的贴图,white:默认颜色是白色,可以换成其他(black,黑色); _Glossiness ("Smoothness", Range(0,1)) = 0.5//光滑系数,数值越大越光滑,范围是从 0 到 1 值为1的时候,形成了一个光点 _Metallic ("Metallic", Range(0,1)) = 0.0//金属光泽度,数值越大光泽度越强,范围是从 0 到 1 } //子着色器 SubShader { //渲染类型 Opaque:不透明 Tags { "RenderType"="Opaque" } //它是Level of Detail的缩写,在这里例子里我们指定了其为200(其实这是Unity的内建Diffuse着色器的设定值)。 //这个数值决定了我们能用什么样的 Shader。在Unity的Quality Settings中我们可以设定允许的最大LOD,当设定的LOD小于SubShader所指定的LOD时, //这个SubShader将不可用。Unity 内建Shader定义了一组LOD的数值,我们在实现自己的Shader的时候可以将其作为参考来设定自己的LOD数值,这样在之后调整根据设备图形性能 //来调整画质时可以进行比较精确的控制。 LOD 200 //这是一个开始标记,表明从这里开始是一段CG程序 CGPROGRAM // Physically based Standard lighting model, and enable shadows on all light types //surface – 声明的是一个表面着色器 surf函数 #pragma surface surf Standard fullforwardshadows // Use shader model 3.0 target, to get nicer looking lighting #pragma target 3.0 //sampler2D:贴图类型 由于这这里是在CG程序里面 要访问Properties中定义的变量 需要再次声明 并且名字要一样 sampler2D _MainTex; struct Input { //float2:float可以跟1个2到4的数字,表示打包在一起的同类型的2到4个数 //如果你对3D开发稍有耳闻的话,一定不会对uv这两个字母感到陌生。UV mapping的作用是将一个2D贴图上的点按照一定规则映射到3D模型上, //是3D渲染中最常见的一种顶点处理手段。在CG程序中,我们有这样的约定,在一个贴图变量(在我们例子中是_MainTex)之前加上uv两个字母, //就代表提取它的uv值(其实就是两个代表贴图上点的二维坐标 )。我们之后就可以在surf程序中直接通过访问uv_MainTex来取得这张贴图当前需要计算的点的坐标值了。 float2 uv_MainTex; }; //half:半精度浮点数 half _Glossiness; half _Metallic; fixed4 _Color; //只能够有2个参数 第一个参数是Input(输入)结构,inout输出结构 void surf (Input IN, inout SurfaceOutputStandard o) { // Albedo comes from a texture tinted by color //tex2D:CG程序中用来在一张贴图中对一个点进行采样的方法,返回一个float4 fixed4 c = tex2D (_MainTex, IN.uv_MainTex) * _Color; o.Albedo = c.rgb; // Metallic and smoothness come from slider variables //金属光泽度 o.Metallic = _Metallic; //平滑 o.Smoothness = _Glossiness; //透明度 o.Alpha = c.a; } //表明CG程序到此结束。 ENDCG } //在没有执行以上shader的时候 会默认执行回滚 FallBack "Diffuse" } //struct SurfaceOutput { //half3 Albedo; //像素的颜色 //half3 Normal; //像素的法向值 //half3 Emission; //像素的发散颜色 //half Specular; //像素的镜面高光 //half Gloss; //像素的发光强度 //half Alpha; //像素的透明度 //};
相关文章推荐
- unity实现多点触控代码
- 在Unity中实现动画的正反播放代码
- Unity UGUI教程之实现滑页效果
- unity实现摄像头跟随
- Unity3D上路_01-2D太空射击游戏
- Unity3D上路_02-第一视角射击游戏
- Unity3D上路_03-塔防游戏
- Unity3D上路_04-基础资源介绍
- Unity3D上路_05-网络相关
- [软件资讯]Unity已支持将3D游戏导出成Flash
- ShaderLab: Pass
- Unity 武器拖尾效果
- unity常见问题之20题
- 反编译ARB program to GLSL shader日记
- Unity3D动画存储插件
- unity 赛车相机跟随物体移动
- uLua中遇到的问题
- Unity3d 协程、调用函数、委托
- Unity3d摄像机Camera参数详解
- Unity3d多线程