Unity shader 语法入门

简介

Shader 即着色器,是一种用于描述如何渲染图形和计算图形外观的程序
主要用于控制图形的颜色、光照、纹理和其他视觉效果

着色器通常由着色器语言编写,这些着色器语言提供了指令和语法,用于编写描述光照、纹理映射、阴影、反射等图形外观的代码

简单理解:Shader就是着色器,是用于编写图形表现效果程序代码 (可以类比理解为网页的CSS)

shader开发主要针对 几何阶段-顶点着色器光栅化阶段-片元着色器的数据进行自定义处理,进而决定最终的渲染效果

简单理解:通过Shader来处理数据,实现渲染效果

分类

unity中的3种shader

1、Fixed function shader:固定功能着色器,用于高级shader在老式显卡无法显示时的fallback。

2、Surface shader:表面着色器,unity推崇的shader类型,使用unity预制的光照模型来进行光照运算,只需要一个表面处理函数surf即可,使用CG/HLSL语法。

3、Vertex & Fragment shader:顶点&片段着色器,属于可编程渲染管线,使用CG/HLSL语法。

Shader程序的基本结构

shader 主要有三部分组成:Properties属性、N(N≥1)个子着色器、Fallback回滚。

Shader "Custom/myShader"{
	Properties{}
	
	SubShader{}
	
	Fallback "ShaderName"
}

属性,用来指定代码的输入数据;

子着色器是代码的主体,每一个子着色器中包含一个或者多个的Pass。在计算着色时,平台先选择最优先可以使用的着色器,然后依次运行其中的Pass,然后得到输出的结果;

回滚,保底手段,用来处理所有Subshader都不能运行时(比如目标设备实在太老,所有Subshader中都有其不支持的特性),会执行回滚中设置的 Shader 。ShaderName` 必须是系统提供或者自建存在的 shader,当有重名时考虑其目录名。

注:在实际开发过程中,主要在SubShader中编写代码

Shader程序实例

首先,新建一个Shader,可以在Project面板中找到,Create,选择Shader,然后将其命名为Diffuse Texture,打开刚才新建的Shader

代码如下:

Shader "Custom/Diffuse Texture" {
  Properties {
    _MainTex ("Base (RGB)", 2D) = "white" {}
  }

  SubShader {
    Tags { "RenderType"="Opaque" }
    LOD 200

    CGPROGRAM
    #pragma surface surf Lambert

    sampler2D _MainTex;

    struct Input {
      float2 uv_MainTex;
    };
  
    void surf (Input IN, inout SurfaceOutput o) {
      half4 c = tex2D (_MainTex, IN.uv_MainTex);
      o.Albedo = c.rgb;
      o.Alpha = c.a;
    }
    ENDCG
  } 
  FallBack "Diffuse"
}

Properties 属性

Properties{}中定义着色器属性,定义的属性作为输入提供给所有的子着色器。

属性定义的语法:

_Name("Display Name", type) = defaultValue[{options}]

分别对应:名称、显示名称、属性类型、默认值

举例说明:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值