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 理解 ...
随机推荐
- 【C/C++】习题3-5 谜题/算法竞赛入门经典/数组和字符串
[题目] 有一个5*5的网络,恰好有一个格子是空的(空格),其他格子各有一个字母. 指令:A, B, L, R 把空格上.下.左.右的相邻字母移到空格中. [输入] 初始网格和指令序列(以数字0结束) ...
- Android 内存泄漏检测工具 LeakCanary(Kotlin版)的实现原理
LeakCanary 是一个简单方便的内存泄漏检测框架,做 android 的同学基本都收到过 LeakCanary 检测出来的内存泄漏.目前 LeakCanary 最新版本为 2.7 版本,并且采用 ...
- 如何用CodeBlocks调试?
一.简介 这篇文章我主要会介绍CodeBlocks的调试功能,并简单讲述如何使用它. 二.前言 大家好,最近和小伙伴们讨论修改程序的时候,我突然想到,授人以鱼不如授人以渔(指调试),于是这篇文章应运而 ...
- pipeline input步骤
目录 一.简介 二.input步骤复杂用法 三.获取上游pipeline信息 四.超时中止 一.简介 执行imput步骤会暂停pipeline,直到用户输入参数.这是一种特殊的参数化pipeline的 ...
- centos源码安装ruby
目录 一.简介 二.程序部署 一.简介 Ruby,一种简单快捷的面向对象(面向对象程序设计)脚本语言.rvm是ruby的管理器,可以切换ruby版本,下载ruby. 二.程序部署 1.下载ruby w ...
- [BUUCTF]PWN——roarctf_2019_easy_pwn(详解)
roarctf_2019_easy_pwn 附件 步骤: 例行检查,64位程序,保护全开 试运行一下程序,看看大概的情况,经典的堆块的菜单 64位ida载入,改了一下各个选项的函数名,方便看程序(按N ...
- [BUUCTF]REVERSE——新年快乐
新年快乐 附件 例行查壳儿,32位程序,upx加壳儿 利用网上找到的脱壳儿工具,拿到了去壳儿后的程序 32位ida打开,shift+f12查看程序里的字符串,得到了关于flag的提示 双击,ctrl+ ...
- 禁用copy on write实现全局EAT HOOK
以前写过一个,但是一不小心删除了,哎,就当再次复习复习吧. 首先抛出一个有意思的问题: 已知所有Windows可执行文件exe都会链接子系统ntdll.dll,那么真实内存中有几份ntdll.dll? ...
- python selenium 多账户自动登入163邮箱
pycharm一些快捷键: ' ctrl ' +' / ' :注释 ' Tab ' :同时缩进 ' shift ' +' Tab ' :左移 一次缩进 本文webinfo.txt路径:C:\Pytho ...
- P7990-[USACO21DEC]Closest Cow Wins S【堆,贪心】
正题 题目链接:https://www.luogu.com.cn/problem/P7990 题目大意 数轴上有\(k\)个点是草地,每个草地有不同收益,\(m\)个点是地方的点,现在你要放置\(n\ ...