shader学习笔记

1,渲染流水线

1,流水线


流水线.jpg

2,模板测试通常用于限制渲染的区域,也可用于渲染阴影、轮廓渲染等。
3,关闭混合操作后,通过测试的颜色会直接覆盖颜色缓冲区中的值,适用于不透明的物体。
4,批处理思想:将多个小的DrawCall合并成一个大的DrawCall

2,UnityShader基础

1,UnityShader 结构
基本结构

Shader "Shader名称"
{
  Properties
  {//属性
  }
  SubShader
  {//显卡A使用的子着色器
  }
  SubShader
  {//显卡B使用的子着色器
  }
  FallBack "VertexLit"
}

进一步

Shader "命名空间\Shader名称"
{
  Properties
  {
    //属性
    Name("display name",PropertyType) = DefaultValue
    //eg. _Color("Main Color",Color) = (1,1,1,1)
  }
  SubShader //显卡A使用的子着色器
  {
    [Tags{"标签1"="值1" "标签2"="值2"}] //可选
    //eg. Tags{"Queue"="Transparent" "RenderType" = "Opaque" }
    [RenderSetUp] //可选,状态同样可在Pass块中声明,如果在SubShader中声明,则适用于所有Pass
    //eg. Cull off
    Pass
     {
      [Pass名称] //可选
      [Tags] //可选
      [RenderSetUp] //可选,同上面RenderSetUp
      
      CGPROGRAM
      //编译指令,如:
      #pragma vertex funName1  //告诉Unity哪个函数(funName1)包含了顶点着色器的代码
      #pragma fragment funName2  //告诉Unity哪个函数(funName2)包含了片元着色器的代码
      
      //Cg代码
      
      ENDCG
     }
  }
  SubShader
  {//显卡B使用的子着色器
  }
  FallBack "VertexLit"
}

(1)Property类型


20200907104855415.png

(2)SubShader中的标签(Tags)


47f06600-e791-4154-bcee-dbf2d5f2f706.jpg

(3)渲染状态设置(RenderSetUp)


66de7ac8-994c-47e6-bc7f-1f47e6219add.jpg

(4)Pass中的标签


20200907155113146.png

2,Pass结构
    Pass
     {
      [Pass名称] //可选
      [Tags] //可选
      [RenderSetUp] //可选,同上面RenderSetUp
      
      CGPROGRAM
      //编译指令,如:
      #pragma vertex funName1  //告诉Unity哪个函数(funName1)包含了顶点着色器的代码
      #pragma fragment funName2  //告诉Unity哪个函数(funName2)包含了片元着色器的代码
      
      //Cg代码
      //定义结构体
      struct 结构体名称                          
      { 
        类型1 名称1:语义1
        类型2 名称2:语义2
        ...
      }   
      //eg.
      //struct a2v
      //{
      //  float4 vertex:POSITION
      //  float3 normal:NORMAL
      //  ...
      //}                                              

      // 通过语义POSITION告诉Unity将模型顶点坐标填充到v中,模型顶点数据来自于定义的结构体
      // 通过语义SV_POSITION告诉Unity该函数输出的是裁剪空间下的顶点坐标
      float4 funName1(float4 v:POSITION):SV_POSITION
      {
        return mul(UNITY_MATRIX_MVP,v);
      }      
      
      fixed4 funName2():SV_Target
      {
        return fixed4(1.0,1.0,1.0,1.0);
      }
      ENDCG
     }

(1)给Pass起名后可在其他Shader中通过UsePass "Pass名称"命令引用该Pass,但Pass名称需大写,如UsePase "MyShader\PASSNAME"
(2)Unity支持的语义:
从应用阶段传递到顶点着色器:
POSITION、TANGENT、NARMAL、COLOR、TEXCOORDn
从顶点着色器传递到片元着色器:
SV_POSITION、COLOR0、COLOR1、TEXTURE0~TEXTURE7
输出语义:
SV_Target

3,属性
(1)属性并不是必须在Properties中声明才可使用的,在CG代码中定义后即可使用
(2)在Properties中声明属性只是为了将其在材质面板中可视化
(3)在CG中定义属性时,名称和类型需与在Properties中声明的保持一致,如声明并使用一个名称为“_Color”的属性(Properties中类型为Color对应CG中类型为fixed4):

Shader "MyShader"
{
  Properties
  {
     _Color("颜色",Color)=(1,1,1,1)
  }
  SubShader
  {
    Pass
    {
      CGPROGRAM
      fixed4 _Color;
      ......
      ENDCG
    }
  }
}
变量类型
3,标准光照模型

输出=自发光+环境光+高光反射+漫反射
(1)漫反射

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

推荐阅读更多精彩内容