UnityShader学习笔记—UnityShader结构

// 这里指定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" //返回值
}
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容