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的结构分析,会持续更新,欢迎一起学习。随时欢迎各位大佬前来指教,提出意见!!!☺☺☺

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值