UnityShader学习01

本文介绍了Unity中Shader的基础知识,包括Surface Shaders、Vertex and Fragment Shaders以及Fixed Function Shaders。重点讲解了Fixed Function Shader,它是通过一系列命令来实现物体着色,速度快且硬件支持良好。在Unity中,ShaderLab语法被用于编写Shader,其结构包含SubShader、Tags、Pass等,并涉及material属性如diffuse、specular等。

Shader基本

  • surface shaders(是对下一种shader的包装)
  • vertex and fragment shaders
  • fixed function shaders

Unity使用ShaderLab syntax语法
不区分大小写
Shader lab基本结构

Shader "Custom/ShaderName"{ 
  //Custom为使用Shader时的分类目录,ShaderName为Shader名
  Properties
  {
    //属性
    //这里的属性会在Material的面板里显示
    _Color ("Color", Color) = (1,1,1,1)
    //_Color是Shader里的变量名,"Color"是在Material里的变量名,后一个Color是ShaderLab里的类型,即Color类型,登号后面为默认值,使用0~1表示
    _MainTex ("Albedo (RGB)", 2D) = "white" {}
    _Glossiness ("Smoothness", Range(0,1)) = 0.5
    _Metallic ("Metallic", Range(0,1)) = 0.0
  }
  SubShader
  {
    //在这里编写Shader代码,至少需要有一个SubShader
    //如果有多个SubShader,会自顶向下寻找第一个能运行的SubShader
    
  }
  FallBack "Diffuse"
  //当所有的SubShader都失败时,指定一个Unity内置Shader

}

Shader组成

  • SubShader Tags 标签
  • pass 渲染通道
    • material
      • diffuse
      • ambient
      • Specular
      • Shininess
      • Emission
    • culling and depth testing
    • Blending
    • PassTag
    • Stencil
    • Name
    • Legacy Lighting
    • Legacy Texture Combiners
    • Legacy Alpha Testing
    • Legacy Fog
    • Legacy BindChannels
  • usepass
  • grabpass
Fixed function shader

使用一系列命令进行物体的着色
实现特定功能,运行快,硬件支持良好

Shader "Custom/Test2"
{
	Properties
	{
	    
		_Color("MainColor",color) = (1,1,1,1)
		_Ambient("Ambient",color) = (0.3,0.3,0.3,0.3)
		_Specular("Specular",color) = (1,1,1,1)
		_Shininess("Shininess",range(0,8)) = 4
		_Emission("Emission",color) = (1,1,1,1)
		_Constant("ConstantColor",color) = (1,1,1,0.3)
		_MainTex("MainTex",2D)=""
		_SecondTex("SecondTex",2D) = ""
		//如果下面有非贴图类型则需要把""改成"XXX"{}
		
	}
	SubShader
	{
	    //ShaderLab: SubShader Tags。这里设置的是渲染队列
	    //简单来说是让远的物体先渲染,近的物体后渲染覆盖在上面
		Tags { "Queue" = "Transparent"}
		//通道块
		pass
		{
		    //ShaderLab: Blending 
		    //Blending 决定游戏对象的渲染如何和已经渲染的物体(环境)相作用进行渲染,和PS的混合模式相似
		    //这里启用了透明度混合
			Blend SrcAlpha OneMinusSrcAlpha
			//取消下一行注释将直接使用color进行渲染,一般不用
			//color[_Color]
			material
			{
			    //主颜色
				diffuse[_Color]
				//环境光影响颜色
				ambient[_Ambient]
				//高光颜色
				Specular[_Specular]
                //高光
				Shininess[_Shininess]
				//自发光
				Emission[_Emission]
			}
			//启用顶点?光照
			lighting on
			//高光将在贴图渲染后再渲染
			Separatespecular on

            //设置贴图
			Settexture[_MainTex]
			{
			    //combine是关键词,texture指传参_MainTex,primary是指在material里计算的结果
			    //因为texture和primary数值都是0~1,相乘后将变暗,所以用double提高亮度
				combine texture*primary double
			}
			Settexture[_SecondTex]
			{
			    //添加一个传参,只能为Color类型
				constantColor[_Constant]
				//previous是指上一个计算结果(这里是Settexture[_MainTex])
				//,之后是指Alpha的通道将被单独计算
				combine texture*previous double,texture*constant
			}
		    //Settexture次数是有上限的,一般最少为2次,硬件越好可以混合越多次
		}
	}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值