Unity Shader(一)

一、初识 Shader

本篇介绍了在Unity中创建Shader的基本步骤,以及Shader的结构分析。
上篇连接(Shader基础篇)

0x00 概述


  1. 启动Unity并创建一个新项目: File>New Project
  2. 创建Shader:Project(也就是Asset栏中)>右键>creat>Shader>UnlitShader((顶点片元着色器),SurfaceShader(表面着色器)) >根据自己的需求编辑内容>保存。
  3. 创建材质并添加Shader

  • Project>右键>creat>Material
  • 选中刚创建的Material在Inspector里选着对应的shader
  • 将材质附加到游戏对象:

    物体要带有三角网格

    • 创建游戏物体:在Hierarchy>右键>GameObject>3D Object>任意选择。
    • 将材质附加到物体上有一下几种方式:
      • 1、在Hierarchy中选中物体,在Project中拖动material到Inspector面板中。
      • 2、在Project中拖动material到Scene中的物体上(如果找不到物体,在Hierarchy中选中,然后在Scene中移动鼠标(不要单击)后按“F”键)。


  • 整体步骤图(从左到右):

    0x01 结构分析

    一个Unity Shader的基本结构如下所示:

    `  
    Shader "Unlit/MyShader"
    {
     Properties
     {
        //属性
        _Name("Display Name",PropertyType)=DefaultValue
     }
     SubShader//子着色器
     {
    
        Tags { "RenderType"="Opaque" }
        LOD 100
    
        Pass
        {
            CGPROGRAM
            ....
            ENDCG
        }
     }
    }`  
    
    接下来逐个介绍一下。
    • Shader "Unlit/MyShader"{}

      MyShader是创建时候自己起的名字。 Unlit是Inspector选择shader类型时候当前shader所在的文件夹(可以自行修改),如图:


    • Properties
      {
      //属性
      _Name("Display Name",PropertyType)=DefaultValue
      }

      _Name: 属性名,在代码中使用该名获取该属性的内容。
      Display Name:在外部Inspector上显示的名称(后面会附图)
      PropertyType:属性的类型,如下表:

      属性类型 例子 详解
      Color _Color(“Color”,Color)=(1,1,1,1) 颜色属性,由RGBA(红黄蓝透明)四个变量来定义
      Vector _Vector(“Vector”,Vector)=(2,3,5,1) 四维向量(x,y,z,w)
      Cube _Cube(“Cube”,Cube)=”while”{} 立方体纹理,简单说就是6张有联系的2D贴图的组合
      2D _2D(“2D”,2D)=”“{} 一张2的阶数大小(256,512之类)的贴图。
      3D _3D(“3D”,3D)=”black”{}
      Int _Int(“Int”,Int)=2 数字类型的属性,一个整数
      Float _Float(“Float”,Float)=1.5 数字类型的属性,一个浮点数
      Range(min,mix) _Range(“Range”,Range(0.0,5.0))=3.0 一个介于最小值和最大值之间的浮点数

      DefaultValue定义了这个属性的默认值。Color:以0~1定义的rgba颜色。比如(1,1,1,1)。2D,3D,Cube:可以是空字符窜或者是”white”,”black”,”gray”,”bump”中的一个。

    Tags标签,是一个键值对它的键和值都是字符串类型,Tags{“TagName”=”Valuel”“TagName2”=”Value2”}如下表:

    标签类型 说明 例子
    Queue 控制渲染顺序,指定该物体属于哪一个渲染队列 Tags{“Queue”=”Transparent”}
    RanderType 对着色器进行分类 Tags=”RanderType=”Opaque”
    DisableBatching 通过该标签来直接证明是否对该SubShader使用批量处理 Tags=”DisableBatching”=”True”
    ForceNoShadowCasting 控制使用该SubShader的物体是否会投影 Tags=”ForceNoShadowCasting”=”True”
    IgnoreProjector 通常用于半透明物体 Tags=”IgnoreProjector”=”True”
    CanUseSpriteAtlas 当该SubShader是用于Sprites时,将该标签设为“false” Tags=”CanUseSpriteAtlas”=”True”
    PreviewType 指明材质面板将如何预览该材质,默认情况下,材质将显示为一个球体。但我们可以自行设置 Tags=”PreviewType”=”Plane”

    LOD: 这个数值决定了我们能用什么样的Shader
    Pass:Cg的代码片段都写在里面。

    整体如下所示:

    0x02 摘要

    本篇为Unity Shader篇的最基础篇。主要讲述如何去创建Shader,如何创建材质球并附加Shader到材质,如何创建游戏对象并将材质附加到游戏对象。Shader的结构分析,会持续更新,欢迎一起学习。随时欢迎各位大佬前来指教,提出意见!!!☺☺☺

    猜你喜欢

    转载自blog.csdn.net/A_AiTing/article/details/81534159