Unity Shader基础(1):基础
一.Shaderlab语法
1.给Shader起名字
Shader "Custom/MyShader"
这个名称会出现在材质选择使用的下拉列表里
2. Properties (属性)
Properties
{
Name ("display name",ProperType)=DefaultValue
//更多属性
}
Name:用于Shader中访问的名字
display name:出现在材质面板的名字
ProperType:它的类型

3.SubShader
每一个Unity Shader文件可以包含多个SubShader语义块,但至少要有一个
SubShader {
//可选的
[Tags]
//可选的
[RenderSetup]
Pass{
}
//Other Pass
}
Pass尽量不要太多,太多往往会造成渲染性能的下降
(1)状态设置
下面是常见的状态设置选项

(2).Tags:是一个键值对(Key/Value Pair)
用来告诉Unity的渲染引擎:SubShader我希望怎么以及何时渲染这个对象
结构如下:
Tags {"TagName1"="Value1" "TagName2"="Value2"}
支持的标签类型如下:


(3)Pass语义块
Pass{
[Name]
[Tags]
[RenderSetup]
//Other code
}
1.Name:在Pass中定义该Pass的名称,我可以使用ShaderLab中的UsePass命令来直接使用其他Unity Shader中的Pass(使用大写形式的名字)
2.Pass中的标签(Tags):不同于SubShader中的标签
Pass中使用的标签类型如下:


3.Usepass:可以复用其他Unity Shader中的Pass
GrabPass:负责抓取屏幕并结果存储在一张纹理中,以用于后续的Pass处理(截屏)
4.Fallback(留一条后路)
如果上面所有的SubShader在这块显卡上不能运行,那么就使用这个最低级的Shader
Fallback "name"
当然你也可以不指定它(关闭这个功能),然后所有不能跑的话就不执行任何操作
5.CGPROGRAM和ENDCG
CGPROGRAM和ENDCG之间的代码是使用了CG/HLSL编写的,也就是说我们需要把CG/HLSL语言嵌套在ShaderLab语言中.
CG代码片段通常是位于Pass语义内部的
GlSL的代码嵌套在GLSLPROGRAM和ENDGLSL之间
6.#prama 编译指令
#pragma 编译指令:  #pargma 关键词 函数名 光照模型 [其它选项]
每个CG片段必须至少包含一个顶点程序和一个片段程序。因此需要#pragma vertex和#pragma fragment指令。
编译指令留着再写一篇博客:暂时还没写
二丶Unity Shader的形式
Shader "MyShader"
{
Properties
{
//所需的各种属性
}
SubShader
{
//真正意义上的Shader代码会出现在这里
//表面着色器(Surface Shader)或者
//顶点/片元着色器(Vertex/Fragment Shader)或者
//固定函数着色器(Fixed Function Shader)
}
SubShader
{
//和上一个SubShader类似
}
}
作者:Ligo丶
出处:https://www.cnblogs.com/Ligo-Z/
本文版权归作者和博客园共有,欢迎转载,但必须给出原文链接,并保留此段声明,否则保留追究法律责任的权利。
Unity Shader基础(1):基础的更多相关文章
- Unity Shader 基础(4) 由深度纹理重建坐标
		
在PostImage中经常会用到物体本身的位置信息,但是Image Effect自身是不包含这些信息的,因为屏幕后处其实是使用特定的材质渲染一个刚好填满屏幕的四边形面片(四个角对应近剪裁面的四个角). ...
 - 【Unity Shader】Shader基础
		
目录 Chapter3 Unity Shader 基础 Chapter3 Unity Shader 基础 概述 在Unity需要材质(Material)与Unity Shader配合使用来达到满意的效 ...
 - Unity Shader基础
		
Unity Shader基础 先上代码,代码一般是这样的. void Initialization(){ //先从硬盘加载代码再加载到GPU中 string vertexShaderCode = Lo ...
 - Unity Shader入门精要学习笔记 - 第3章 Unity Shader 基础
		
来源作者:candycat http://blog.csdn.net/candycat1992/article/ 概述 总体来说,在Unity中我们需要配合使用材质和Unity Shader才能达 ...
 - 第二章 Unity Shader基础
		
[TOC] 1. Unity Shader 的基础: ShaderLab 学习和编写着色器的过程一直是一个学习曲线很陡峭的过程,通常情况下为了自定义渲染效果往往要和很多文件和设置打交道,这些设置很容易 ...
 - Unity Shader 基础
		
推荐: https://www.cnblogs.com/nanwei/p/7277417.html 上面链接作者的整个系列都写的不错 https://www.cnblogs.com/nanwei/ca ...
 - Unity3D学习(六):《Unity Shader入门精要》——Unity的基础光照
		
前言 光学中,我们是用辐射度来量化光. 光照按照不同的散射方向分为:漫反射(diffuse)和高光反射(specular).高光反射描述物体是如何反射光线的,漫反射则表示有多少光线会被折射.吸收和散射 ...
 - Unity Shader 基础(3) 获取深度纹理
		
Unity提供了很多Image Effect效果,包含Global Fog.DOF.Boom.Blur.Edge Detection等等,这些效果里面都会使用到摄像机深度或者根据深度还原世界坐标实现各 ...
 - Unity Shader 基础(1): RenderType & ReplacementShader
		
很多Shader中都会定义RenderType这个类型,但是一直搞不明白到底是干嘛的,官方文档是这样结解释的:Rendering with Replaced Shaders Rendering wit ...
 - Unity Shader入门精要学习笔记 - 第7章 基础纹理
		
转自 冯乐乐的 <Unity Shader 入门精要> 纹理最初的目的就是使用一张图片来控制模型的外观.使用纹理映射技术,我们可以把一张图“黏”在模型表面,逐纹素地控制模型的颜色. 在美术 ...
 
随机推荐
- [2019HDU多校第一场][HDU 6580][C. Milk]
			
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6580 题目大意:\(n\times m\)大小的方格上有\(k\)瓶水,喝完每瓶水都需要一定的时间.初 ...
 - BZOJ 4029 [HEOI2015] 定价 ( 数位DP/贪心 )
			
前言 最近学了数位DP,感觉挺简单又实用.这道题就比较水,可以用300B的贪心过掉-网上似乎大多是贪心的题解,我就写写DP的做法 题意 给出正整数区间[L,R][L,R][L,R],定义荒谬值为 (去 ...
 - DOM查找
			
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
 - 3、组件注册-@ComponentScan-自动扫描组件&指定扫描规则
			
3.组件注册-@ComponentScan-自动扫描组件&指定扫描规则 3.1 xml方式 benas.xml 导入context命名空间 <?xml version="1.0 ...
 - C语言学习系列(六)基本语法
			
一.C运算符 算术运算符(语法和java类似或基本一样略过不再描述) 关系运算符(略) 逻辑运算符(略) 位运算符 运算符 描述 实例 & 如果同时存在于两个操作数中,二进制 AND 运算符复 ...
 - 51nod 1086
			
https://www.cnblogs.com/TnT2333333/p/6879709.html 二进制优化多重背包 怎么用二进制优化多重背包,举一个例子就明白了. 如果要放n个苹果,可以将n个苹果 ...
 - Cogs 58. 延绵的山峰(st表)
			
延绵的山峰 ★★☆ 输入文件:climb.in 输出文件:climb.out 简单对比 时间限制:1 s 内存限制:512 MB 问题描述 有一座延绵不断.跌宕起伏的山,最低处海拔为0,最高处海拔不超 ...
 - 玩转orangpi 之frpc远程管理+pcd8544(nokia5110 屏幕) 显示运行状态
			
玩转orangpi 之frpc远程管理+pcd8544(nokia5110 lcd) 显示运行状态. 物件: orangepi一套(电源,网线,orangepiPC)110元 nokia 5110 l ...
 - WebGL的shader
			
WebGL的shader(着色器)有2种:vertexShader(定点着色器)和 fragmentShader(片段着色器) 顶点着色器:定义点的位置.大小 片元着色器:定义画出来的物体的材质(颜色 ...
 - SQL SERVER可重复执行建表、建字段语句
			
/*问题:type in (N'U') 中的N和U是什么意思? 答案:N是指Unicode编码,防止乱码:U是指用户表*/IF NOT EXISTS (SELECT * FROM sys.object ...