Unity——ShaderLab基础
1.格式
Shader "Custom/MyShader" //命名+右键创建shader路径
{
//属性必须在代码里声明才能使用
Properties{ //属性,会出现在inspector面板
_MainTex("Main Tex",2D) = "white"{} //名称("面板显示名称",数据类型) = 初始化
}
//针对不同显卡可以有不同subshader,对应不同品质的渲染
SubShader{
Tags{"LightMode"="ForwardBase"} //tags,定义渲染的设置
ZWrite Off //RenderSetup,渲染设置
Pass{ //通道pass,一个subshader可以有多个pass
Name = "MyPass" //pass可以命名,在其他subshader引用UsePass大写
CGPROGRAM //开始CG代码-和ENDCG成对
#pragma vertex vert //定义渲染函数,顶点
#pragma fragment frag //片元
#pragma surface surf Lambert //表面
#include "Lighting.cginc" //包含方法库
sample2D _MainTex; //声明变量
float4 _MainTex_ST;
struct a2v //自定义结构体
{
float4 vertex : POSITION; //变量类型 变量名:语义说明(语言规定)
float3 normal: NORMAL;
}
v2f vert (appdata v) //函数体
{ v2f o;
return o;
}
ENDCG
}
}
SubShader{...}
FallBack "Diffuse" //以上subshader显卡都不支持,默认返回漫反射
}
uniform修饰词;
Name = "MyPass"
——UsePass "Unlit/Outline/MYPASS" //必须大写
——GrapPass //抓取屏幕结果存储在一张纹理中
2.属性

属性对应的变量类型,声明变量使用;属性中类型和变量中类型不一定一致;

3.语义
SV_开头表示System-Value——系统定义的语义变量;



4.Tags
1)SubShader可用
Queue——渲染队列

(1)”Opaque”:绝大部分不透明的物体都使用这个;
(2)”Transparent”:绝大部分透明的物体、包括粒子特效都使用这个;
(3)”Background”:天空盒都使用这个;
(4)”Overlay”:GUI、镜头光晕都使用这个;
(5)还有其他可参考Rendering with Replaced Shaders;用户也可以定义任意自己的RenderType字符串;
(6)”TransparentCutout“:透明测试使用;
IgnoreProjector = “True”——忽略投影器影响,AlphaTest和AlphaBlend使用;
ForceNoShadowCasting = “True”——表示不接受阴影;
2)Pass可用
"LightMode"="ForwardBase"

5.RenderSetup
1)Cull剔除
Cull Front/Back/Off
2)深度测试和写入
ZWrite Off
ZTest Off
3)Blend——透明混合设置


Blend效果

6.方法






UnityCG.cginc常用结构体


书写建议:
1.移动平台的shader尽可能使用精度低的变量:fixed-half-float
2.错误:片元中大量计算导致寄存器不足——提高shaderTarget等级
3.尽量不要使用分支语句
4.不要除以0
Unity——ShaderLab基础的更多相关文章
- Unity ShaderLab学习总结
http://www.jianshu.com/p/7b9498e58659 Unity ShaderLab学习总结 Why Bothers? 为什么已经有ShaderForge这种可视化Shader编 ...
- Unity3D ShaderLab 基础的高光实现
Unity3D ShaderLab 基础的高光实现 关于高光: 在一个物体表面的高光属性就是为了描述它是如何表现光泽.这种类型的效果在着色器的世界中通常称为视点相关效果. 之所以这样说,是因为为了实现 ...
- Unity Shader基础
Unity Shader基础 先上代码,代码一般是这样的. void Initialization(){ //先从硬盘加载代码再加载到GPU中 string vertexShaderCode = Lo ...
- Unity Shader 基础(4) 由深度纹理重建坐标
在PostImage中经常会用到物体本身的位置信息,但是Image Effect自身是不包含这些信息的,因为屏幕后处其实是使用特定的材质渲染一个刚好填满屏幕的四边形面片(四个角对应近剪裁面的四个角). ...
- Unity Shader 基础(3) 获取深度纹理
Unity提供了很多Image Effect效果,包含Global Fog.DOF.Boom.Blur.Edge Detection等等,这些效果里面都会使用到摄像机深度或者根据深度还原世界坐标实现各 ...
- Unity Shaderlab: Object Outlines 转
转 https://willweissman.wordpress.com/tutorials/shaders/unity-shaderlab-object-outlines/ Unity Shader ...
- Unity Shader入门精要学习笔记 - 第3章 Unity Shader 基础
来源作者:candycat http://blog.csdn.net/candycat1992/article/ 概述 总体来说,在Unity中我们需要配合使用材质和Unity Shader才能达 ...
- 第二章 Unity Shader基础
[TOC] 1. Unity Shader 的基础: ShaderLab 学习和编写着色器的过程一直是一个学习曲线很陡峭的过程,通常情况下为了自定义渲染效果往往要和很多文件和设置打交道,这些设置很容易 ...
- Unity UI 基础【译】
https://unity3d.com/cn/learn/tutorials/topics/best-practices/fundamentals-unity-ui?playlist=30089 理解 ...
随机推荐
- 【分布式】ZooKeeper权限控制之ACL(Access Control List)访问控制列表
zk做为分布式架构中的重要中间件,通常会在上面以节点的方式存储一些关键信息,默认情况下,所有应用都可以读写任何节点,在复杂的应用中,这不太安全,ZK通过ACL机制来解决访问权限问题,详见官网文档:ht ...
- 【Java 8】Stream通过reduce()方法合并流为一条数据示例
在本页中,我们将提供 Java 8 Stream reduce()示例. Stream reduce()对流的元素执行缩减.它使用恒等式和累加器函数进行归约. 在并行处理中,我们可以将合并器函数作为附 ...
- DT10功能介绍--DT10多波示波器
功能介绍 有些嵌入式软件方面的问题,利用传统的调试器可能无法解决,而通过逻辑分析器则能有效地解决.请仔细阅读本文, 看我们如何一步一步地讲解在这种情况下所需的配置. 但是,从传统意义上讲,逻辑分析器是 ...
- selenium: where to get ChromeDriver?
address: http://npm.taobao.org/mirrors/chromedriver
- GIT基本使用理解
基本区域介绍 git是一种代码管理工具,所以我们需要知道代码所在位置.分为4个区域: Workspace:工作区 Index / Stage:暂存区 Repository:本地仓库 Remote:远程 ...
- hitcontraining_magicheap
拿到题目例行检查 程序是64位的程序 保护几乎全开,试运行一下程序 十分明显的堆溢出的界面,将程序放入ida中,shift+f12发现了后门程序 进入main主函数进行查看 可以看到当,v3==486 ...
- [BUUCTF]REVERSE——[BJDCTF2020]JustRE
[BJDCTF2020]JustRE 附件 步骤: 例行查壳儿,无壳儿,32位程序 32位ida载入,main函数没看懂,shift+f12检索了一下程序里的字符串,发现了一个类似于flag的字符串 ...
- [BUUCTF]PWN——bjdctf_2020_router
bjdctf_2020_router 附件 步骤: 例行检查,64位程序,开启了NX保护 本地试运行一下程序,看看大概的情况 会让我们选择,选择4.root,没什么用,但是注意了,这边选1会执行pin ...
- Windows 10 彻底关闭 Antimalware Service Executable 降低内存占用
概述 最近给内网的一台电脑安装 Windows 10 专业版系统,由于此电脑不会涉及到不安全因素,所以杀毒软件非必须. 以最大限度节省系统资源考虑,默认安装的 Micoroft Defender 占用 ...
- 【cs231n笔记】assignment1之KNN
k-Nearest Neighbor (kNN) 练习 这篇博文是对cs231n课程assignment1的第一个问题KNN算法的完成,参考了一些网上的博客,不具有什么创造性,以个人学习笔记为目的发布 ...