U3D Shader笔记(1)UnityShader组织形式

U3D Shader笔记(1)UnityShader组织形式

UniyShader的形态

surface shaders
vertex and fragment shaders
fixed function shaders

Shaderlab基本结构

shader "name"{
	[Properties]
	SubShaders
	[FallBack]
}

Properties

可以在材质监视面板上显示的属性
_Name(“Display Name”, type) = defaultBalue[{options}]

_Name

属性的名字,简单说就是变量名,在之后整个Shader代码中将使用这个名字来获取该属性的内容

Display Name

这个字符串将显示在Unity的材质编辑器中作为Shader的使用者可读的内容

type

这个属性的类型,可能的type所表示的内容有以下几种

COLOR颜色,由RGBA(红绿蓝和透明度)四个量来定义
2D一张2的阶数大小(256,512之类)的贴图。这张贴图将在采样后被转为对应基于模型UV的每个像素的颜色,最终被显示出来
Cube即Cube map texture(立方体纹理),简单说就是6张有联系的2D贴图的组合,主要用来做反射效果(比如天空盒和动态反射),也会被转换为对应点的采样
Rect一个非2阶数大小的贴图
Range(min, max)一个介于最小值和最大值之间的浮点数,一般用来当作调整Shader某些特性的参数(比如透明度渲染的截止值可以是从0至1的值等)
Float任意一个浮点数
Vector一个四维数
defaultValue

定义了这个属性的默认值,通过输入一个符合格式的默认值来指定对应属性的初始值(某些效果可能需要某些特定的参数值来达到需要的效果,虽然这些值可以在之后在进行调整,但是如果默认就指定为想要的值的话就省去了一个个调整的时间,方便很多)

COLOR以0~1定义的rgba颜色,比如(1,1,1,1)
2D,Rect,Cube对于贴图来说,默认值可以为一个代表默认tint颜色的字符串,可以是空字符串或者"white",“black”,“gray”,"bump"中的一个
Float ,Range(min, max)某个指定的浮点数
Vector一个4维数,写为 (x,y,z,w)
{option}

它只对2D,Rect或者Cube贴图有关,在写输入时我们最少要在贴图之后写一对什么都不含的空白的{},当我们需要打开特定选项时可以把其写在这对花括号内。如果需要同时打开多个选项,可以使用空白分隔。可能的选择有ObjectLinear, EyeLinear, SphereMap, CubeReflect, CubeNormal中的一个,这些都是OpenGL中TexGen的模式
属性案例代码:

Properties { Property [Property …] }
定义属性块,其中可包含多个属性,其定义如下:

name (“display name”, Range (min, max)) =number
定义浮点数属性,在检视器中可通过一个标注最大最小值的滑条来修改。

name (“display name”, Color) =(number,number,number,number)
定义颜色属性

name (“display name”, 2D) = “name” {options }
定义2D纹理属性

name (“display name”, Rect) = “name”{ options }
定义长方形(非2次方)纹理属性

name (“display name”, Cube) = “name”{ options }
定义立方贴图纹理属性

name (“display name”, Float) = number
定义浮点数属性

name (“display name”, Vector) =(number,number,number,number)
定义一个四元素的容器(相当于Vector4)属性

SubShader

为GPU编写的shder片段,可以有并必须有一个subshader,当有多个subshader显卡会选择一个subshader执行。由于硬件不同,所以会有多个subshader,当这个shader文件执行时会按顺序检测每个subshader是否能被良好的执行,如果可以则执行这个subshader,如果不能则检测下一个。

FallBack

如果我们定义的subshader在当前硬件都无法执行,则执行fallback所制定的着色器,往往时系统的比较简单的。

Unlit不发光。只是一个纹理,不被任何光照影响
VertexLit顶点光照
Diffuse漫发射
Normal mapped法线贴图,比漫反射更加昂贵:增加了一个或多个纹理(法线贴图)和几个着色器结构
Specular高光。增加了高光计算
Normal Mapped Specular高光法线贴图。比高光昂贵一点
Parallax Normal mapped视差法线贴图。增加了视差法线贴图计算
Parallax Normal Mapped Specular视差高光法线贴图。增加了视差法线贴图和镜面高光计算
Shader "Custom/NewSurfaceShader" {
	Properties {
		_Color ("Color", Color) = (1,1,1,1)
		_MainTex ("Albedo (RGB)", 2D) = "white" {}
		_Glossiness ("Smoothness", Range(0,1)) = 0.5
		_Metallic ("Metallic", float) = 0.0
	}
	SubShader {

	}
	FallBack "Diffuse"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值