极端常用:

UnityObjectToClipPos(v.vertex);

最基本的顶点变换,模型空间 ==》裁剪空间

mul(unity_ObjectToWorld, v.vertex);

顶点:模型空间 ==》世界空间,多用于顶点着色器

UnityObjectToWorldNormal(v.normal);

法线:模型空间 ==》世界空间,多用于顶点着色器,float3(归一化后fixed3)

UnityWorldSpaceLightDir(i.worldPos.xyz);

仅前向渲染,世界空间顶点位置 ==》世界空间光源方向,多用于片元着色器,一般会顺带归一化(fixed3)

UnityWorldSpaceViewDir(i.worldPos.xyz);

世界空间顶点位置 ==》世界空间视线方向,多用于片元着色器,一般会顺带归一化(fixed3)

P.S.一般[0,1]范围内的尽量用低精度fixed类型,如单位矢量,颜色等

Tags{"lightmode"="forwardbase"}(字符串不区分大小写,编译时会自动转为所有字母大写)

指示光照模型为前向渲染的基本模式

#include "UnityCG.cginc"(字符串不区分大小写,编译时会自动转为所有字母大写)

包含大量基本内置函数,宏等,一般自带

#include "lighting.cginc"(字符串不区分大小写,编译时会自动转为所有字母大写)

包含基本光照属性,如 _LightColor0

UNITY_LIGHTMODEL_AMBIENT(使用大写)

环境光,一般取前三个分量rgb(xyz);基本光照模型需要有环境光,漫反射,高光等

基本纹理&法线贴图:

TRANSFORM_TEX(v.uv, _MainTex);

基本纹理变换,用于顶点着色器,相当于v.uv*_MainTex_ST.xy + _MainTex_ST.zw;(其中xy存缩放,zw存偏移,对应面板参数);_MainTex_ST需额外定义

tex2D(_MainTex, i.uv);

基本纹理采样,用于片元着色器;一般会定义染色属性并与之相乘得到反射率(albedo),反射率作为环境光和漫反射计算的因子

UnpackNormalWithScale(packedNormal, _BumpScale);

反映射法线贴图采样结果得到顶点空间中的法线方向,同时计算凹凸映射的缩放;packedNormal为法线贴图直接采样结果,_BumpScale为凹凸缩放值;法线贴图必须进行导入设置为Normal Map

UnityObjectToWorldDir(v.tangent.xyz);

方向(切线):模型空间 ==》世界空间,多用于顶点着色器

cross(worldNormal, worldTangent)*v.tangent.w

计算副法线,cross(,)两个向量叉积,用于得知两个坐标轴求第三个坐标轴朝向,w控制朝向的正负;知道三个朝向就可以构造变换矩阵了

TANGENT_SPACE_ROTATION

得到从模型空间到顶点空间的变换矩阵rotation,随后可直接进行如下计算,例如:

mul(rotation, ObjSpaceLightDir(v.vertex));

模型空间顶点位置 ==》模型空间光源方向==》顶点空间光源方向

mul(rotation, ObjSpaceViewDir(v.vertex));

模型空间顶点位置 ==》模型空间视线方向==》顶点空间视线方向

多光源&前向渲染&光照衰减:

Tags{"lightmode"="forwardbase"}(第一个Pass,全局性通用计算,只计算一次,不用开启混合)

Tags{"lightmode"="forwardadd"}(第二个Pass,根据光源数目不同可能多次计算,需开启混合)

前向渲染的两种标签,分别位于不同的两个Pass,指示每个Pass的光照模式

#pragma multi_compile_fwdbase

#pragma multi_compile_fwdadd

前向渲染的两种指令,只有每个Pass配置正确指令才可能得到正确的光照变量,如光照衰减值

UNITY_LIGHT_ATTENUATION(atten, i, i.worldPos.xyz);

用于第二个Pass分别计算每个光源的衰减,atten为输出的衰减值,i为片元着色器的输入结构体,其内部数学运算根据各个光照的类型不同复杂度不一,具体可参考:https://github.com/candycat1992/Unity_Shaders_Book/issues/47

接收投影:

SHADOW_COORDS(idx)

声明阴影纹理采样的坐标,用于顶点着色器输出结构体,idx为下一个可用插值寄存器(TEXCOORD)的索引值

TRANSFER_SHADOW(o);

用于在顶点着色器中计算阴影纹理坐标,并输出到结构体中,o为输出的结构体;

因为这个宏中使用了v.vertex和a.pos,故须保证:1.顶点着色器的输入结构体名为v;2.输入结构体中顶点变量名为vertex;3.输出结构体中顶点变量名为pos

SHADOW_ATTENUATION(i);

用于在片元着色器中通过阴影纹理采样的坐标计算阴影值,i为输入的结构体

#include "AutoLight.cginc"

包含计算阴影所用的宏,例如上述三种

Unity Shader常用函数,标签,指令,宏总结(持续更新)的更多相关文章

  1. PHP常用函数总结(180多个)[持续更新中...]

    PHP常用函数总结 本文源文件(markdown): https://github.com/yanglr/AlgoSolutions/blob/master/PHP常用函数总结(160多个).md 数 ...

  2. unity shader 常用函数列表

    此篇博客转自csdn的一位大牛. 中间排版出了一些问题 Intrinsic Functions (DirectX HLSL) The following table lists the intrins ...

  3. Python3常用函数、方法总结(持续更新…)

    最近刷LeetCode,自己自娱自乐完之后去discussion看大佬们的各种巧妙解法,总是止不住的双击666--加上最近Python3用的比较多(虽然Python实在不推荐跑算法题目,一是运行效率太 ...

  4. [Unity Shader] 常用的数值类型和语义

    书看到第八章,跟随写了一些例子,但有些数值类型的使用还是需要特别注意,经常需要查阅,在这里做一下总结. 1 ShaderLab属性类型和Cg变量类型的匹配关系 Color.Vector:float4, ...

  5. Unity3D -- shader常用函数和变量

    最近在学习Unity Shader,写Shader的时候总是忘记Unity为我们提供的函数.变量怎么写的,这里整理一下,方便自己查阅,也提供给网友,学习Shader不易. 1.函数 float3 Wo ...

  6. 【前端】Util.js-ES6实现的常用100多个javaScript简短函数封装合集(持续更新中)

    Util.js (持续更新中...) 项目地址: https://github.com/dragonir/Util.js 项目描述 Util.js 是对常用函数的封装,方便在实际项目中使用,主要内容包 ...

  7. Python常用组件、命令大总结(持续更新)

    Python开发常用组件.命令(干货) 持续更新中-关注公众号"轻松学编程"了解更多. 1.生成6位数字随机验证码 import random import string def ...

  8. CG Shader常用函数

    为了方便自己记忆,将常用的CG函数写于此 转载于 http://www.cppblog.com/lai3d/archive/2008/10/23/64889.html Name Syntax Desc ...

  9. mysql与oracle常用函数及数据类型对比00持续补充

    最近在转一个原来使用oracle,改为mysql的系统,有些常用的oracle函数的mysql实现顺便整理了下,主要是系统中涉及到的(其实原来是专门整理过一个详细doc的,只是每次找word麻烦). ...

随机推荐

  1. git commit 报错 There was a problem with the editor 'vi'

    今天提交代码git  commit -a的时候出现了这个错误 上网查了一下,说是Vim的返回值出错了,出错的原因还在翻译英文, 先贴出解决方案吧 git config --global core.ed ...

  2. 配置文件——App.config文件读取和修改

    作为普通的xml文件读取的话,首先就要知道怎么寻找文件的路径.我们知道一般配置文件就在跟可执行exe文件在同一目录下,且仅仅在名称后面添加了一个.config 因此,可以用Application.Ex ...

  3. win10家庭版连接不上远程桌面

    解决方案来自于:https://blog.csdn.net/weixin_39129504/article/details/80303615 这个解决方案的关键: done!不知是否侵权  如有侵权 ...

  4. 计算机的组成 —— PCI(PCIE)、PCB

    1. PCI PCI 是 Peripheral Component Interconnect(外设部件互连标准)的缩写,它是目前个人电脑中使用最为广泛的接口,几乎所有的主板产品上都带有这种插槽. PC ...

  5. WPF C#之读取并修改App.config文件

    原文:WPF C#之读取并修改App.config文件 简单介绍App.config App.config文件一般是存放数据库连接字符串的.  下面来简单介绍一下App.config文件的修改和更新. ...

  6. python3 基本使用多线程

    #coding=utf-8 import threading #进口threading from time import sleep import time def task1(): print (& ...

  7. Word 公式排版(使用制表符)

    公式的构成: 公式: 右编号: 法一:使用 3 行 1 列的表格 Word论文写作如何实现公式居中.编号右对齐_百度经验 修改三个单元格之间的长度比例关系时,其位置是在: [表格属性]⇒ [单元格]选 ...

  8. Python 绘图利器 —— ggplot

    安装: 命令行:pip install ggplot 1. 杂项 NameError: name 'ggsave' is not defined. Python ggplot- ggsave func ...

  9. 【Java】Java中的数据类型

    Java 语言是一种强类型语言.通俗点说就是,在 Java 中存储的数据都是有类型的,而且必须在编译时就确定其类型.Java 数据类型分为两类,如图: 在 Java 的领域里,基本数据类型变量存的是数 ...

  10. Http请求格式(在Linux下使用telnet亲测,通过这篇我才明白)

    命令行窗口中用telnet测试HTTP协议请求消息格式响应消息格式1. 命令行窗口中用telnet测试HTTP协议 HTTP消息是由普通ASCII文本组成.消息包括消息头和数据体部分.消息头以行为单位 ...