unity Shader 内置函数_unity shader 函数-程序员宅基地

技术标签: Shader  

一、数学内置函数

1、Step(a,x):如果x<a返回0;如果x>或=a返回1

2、Clamp(x,a,b):如果x<a返回a;如果x>b返回b;如果在a和b之间就返回x

3、smoothstep(min,max,x):返回的值为–2*((min )/(max min ))3 +3*((min )/(max min ))2

4、lerp(a,b,f):线性插值函数,返回值为(1-f)*a+b*f

5、三角函数sin、cos

6、saturate(x): clamp x to range [0,1]。将x裁剪到0和1之间,大于1取1,小于0取0。在half-lambert中会经常用到

7、normalize(x): return a normalized vector。返回一个归一化的向量。通常在fragment shader中使用

8、dot(x, y): 两个向量的点乘结果。|a||b|cos(a)。光照计算中经常用到

9、mul(x, y): 矩阵乘法,结果依然为一个矩阵。[m, n] [n, q]=>[m,q],前行乘后列。坐标空间转换中经常使用

10、reflect(i, n): 得到反射光线的方向

11、refract(i, n,  R): 得到折射光线的方向。需要注意的是入射光线和法线都需要归一化,R为折射率,入射光线所在的介质和反射光线介质的投射比的比值

二、内置shader辅助函数定义在UnityCG.cginc文件中

顶点转换函数:

1、float4 UnityObjectToClipPos(float3 pos)

等价于:mul(UNITY_MATRIX_MVP, float4(pos, 1.0)) 把方向矢量从模型空间变化到世界空间中

2、float3 UnityObjectToViewPos(float3 pos)

等价于:mul(UNITY_MATRIX_MV, float4(pos, 1.0))

3、float3 WorldSpaceViewDir (float4 v)

参数是object space下的顶点坐标,取得world space下指向摄像机的方向,即视角方向

4、float3 ObjSpaceViewDir (float4 v)

同上,不过取到的视角方向是在object space上的

5、float2 ParallaxOffset (half h, half height, half3 viewDir)

为视差法线贴图计算UV偏移

6、fixed Luminance (fixed3 c)

将颜色转换为亮度(灰度)

7、fixed3 DecodeLightmap (fixed4 color)

从烘焙贴图解码,烘焙贴图生成的是EXR格式的HDR贴图,根据不同平台返回RGBM或dLDR

8、float4 EncodeFloatRGBA (float v)

把float编码到RGBA8

9、float3 WorldSpaceLightDir(float4 v)

输入一个模型空间中的顶点位置,返回世界空间中从该点到光源的光照方向。内部使用了UnityWorldSpaceLightDir,没有被归一化

float3 UnityObjectToWorldDir(float3 dir)    

把方向矢量从模型空间变化到世界空间中
float3 UnityObjectToWorldNormal(float3 dir)    

把法线方向从模型空间转换到世界空间中
float3 UnityWorldToObjectDir(float3 dir)    

把方向矢量从世界空间变化到模型空间
float3 WorldSpaceViewDir(float4 v)    

输入一个模型空间中的顶点位置,返回世界空间中从该顶点到摄像机的观察空间方向。 内部使用了UnityWorldSpaceViewDir函数
float3 UnityWorldSpaceViewDir(float4 v)    

输入一个世界空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向
float3 ObjSpaceViewDir(float4 v)  

 输入一个模型空间中的顶点位置,返回模型空间中从改点到摄像机的观察方向
float3 WorldSpaceLightDir(float4 v)    

输入一个模型空间中的顶点位置,返回世界空间中从该点到光源的光照方向。内部使用了UnityWorldSpaceLightDir,没有被归一化
float3 UnityWorldSpaceLightDir(float4 v)    

输入一个世界空间中的顶点位置,返回世界空间中从该点到光源的光照方向。没有被归一化
float3 ObjSpaceLightDir(float4 v)  

 输入一个模型空间中的顶点位置,返回模型空间从该点到光源的光照方向。没有被归一化
 

三、仅用于前向渲染

1、float3 WorldSpaceLightDir (float4 v)

参数是object space下的顶点坐标,取得world space下指向光源的方向

2、float3 ObjSpaceLightDir (float4 v)

参数是object space下的顶点坐标,取得object space下指向光源的方向

3、float3 Shade4PointLights (...)

正向渲染中,最多有4个点光源会以逐顶点渲染的方式被计算。

四、仅用于per-vertex lit shaders

float3 ShadeVertexLights (float4 vertex, float3 normal)

参数为顶点跟法线,根据四个逐顶点光源跟环境光计算光照

 

六、有关深度的一些方法:

1、UNITY_TRANSFER_DEPTH(o):计算eye space的深度值,并写入变量o(float2)。

当需要渲染到一张深度贴图时,在vertex shader中使用该函数。

2、UNITY_OUTPUT_DEPTH(i)

 returns eye space depth from i (which must be a float2). Use it in a fragment programwhen rendering into a depth texture.

 

数学函数:

abs(x)                                                                 返回输入参数的绝对值
acos(x)                                                                 反余切函数,输入参数范围为[-1,1],返回[0,π]区间的角度值
all(x)                                                                   如果输入参数均不为0,则返回 ture;否则返回 flase。&&运算
any(x)                                                                 输入参数只要有其中一个不为 0,则返回 true。||运算
asin(x)                                                              反正弦函数,输入参数取值区间为[−1,1],返回角度值范围为[−π/2 ,π/2 ] 
atan(x)                                                               反正切函数,返回角度值范围为⎡−π/2 ,π/2 ⎤
atan2(y,x)                                                          计算 y/x 的反正切值。实际上和 atan(x)函数功能完全一样,至少输入参数不同。atan(x) = atan2(x, float(1))
ceil(x)                                                               对输入参数向上取整。例如:ceil(float(1.3)) ,其返回值为 2.0
clamp(x,a,b)                                                      如果 x 值小于 a,则返回 a;如果 x 值大于 b,返回 b;否则,返回 x
cos(x)                                                               返回弧度 x 的余弦值。返回值范围为[−1,1]
osh(x)                                                               双曲余弦(hyperbolic cosine)函数,计算 x 的双曲余弦值
cross(A,B)                                                        返回两个三元向量的叉积(cross product)。注意,输入参数必须是三元向量
degrees(x)                                                        输入参数为弧度值(radians),函数将其转换为角度值(degrees)
determinant(m)                                               计算矩阵的行列式因子
dot(A,B)                                                          返回 A 和 B 的点积(dot product)。参数 A 和 B 可以是标量,也可以是向量(输入参数方面,点

                                                                                               积和叉积函数有很大不同)
exp(x)                                                                   计算ex 的值,e= 2.71828182845904523536
exp2(x)                                                                 计算2x 的值
floor(x)                                                       对输入参数向下取整。例如 floor(float(1.3)) 返回的值为 1.0;但是 floor(float(-1.3))返回的值为-2.0。
fmod(x,y)                                                    返回 x/y 的余数。如果 y 为 0,结果不可预料 
frexp(x, out exp)              将浮点数 x 分解为尾数和指数,即 x = m* 2^exp,返回 m,并将指数存入 exp 中;如果 x 为 0,则尾数和指数都返回 0 
frac(x)                                                                 Returns the fractional portion of a scalar or each vector component 
isfinite(x)                     判断标量或者向量中的每个数据是否是有限数,如果是返回 true;否则返回 false;无限的或者非数据(not-a-number NaN)
isinf(x)                         判断标量或者向量中的每个数据是否是无限,如果是返回 true;否则返回 false; 
isnan(x)                       判断标量或者向量中的每个数据是否是非数据(not-a-number NaN),如果是返回 true;否则返回 false;
ldexp(x, n)                                   计算x∗2n 的值 
lerp(a, b, f)                           计算(1− f )∗ + ∗a b   f 或者a+ f ∗ −(b a)的值。即在下限 a 和上限 b 之间进行插值,f 表示权值。注 
                                             意,如果 a 和 b 是向 量,则权值 f 必须是标量或者等长的向量。

lit(NdotL, NdotH, m)        N 表示法向量;L 表示入射光向量;H 表示半角向量;m 表示高光系数。 
                                     函数计算环境光、散射光、镜面光的贡献,返回的 4 元向量: 
                                         1.位表示环境光的贡献,总是 1.0;
                                      2.位代表镜面光的贡献,如果 N •L <0,则为0;否则为 N •L;
                                           3.位代表镜面光的贡献,如果N •L<0或者 N •H <0 ,则位 0;否则为(N •H)m ; 
                                      W 位始终位 1.0 
log(x)                    计算ln(x)的值,x 必须大于 0 
 log2(x)               计算log(2x) 的值,x 必须大于 0
log10(x)            计算log10(x) 的值,x 必须大于 0
max(a, b)          比较两个标量或等长向量元素,返回 大值
min(a,b)           比较两个标量或等长向量元素,返回 小值

 

 modf(x, out ip)        
      mul(M, N)        
计算两个矩阵相乘,如果 M 为 AxB 阶矩阵,N 为 BxC 阶矩阵,则返回 AxC 阶矩阵。下面两个函数为其重载函数。
      mul(M, v)       计算矩阵和向量相乘
      mul(v, M)       计算向量和矩阵相乘 
      noise( x)        噪声函数,返回值始终在 0,1 之间;对于同样的输入,始终返回相同的值(也就是说,并不是真正意义上的随机噪声)。
      pow(x, y)        
      radians(x)       函数将角度值转换为弧度值 
      round(x)       Round-to-nearest,或 closest integer to x 即四舍五入
      rsqrt(x)        X 的反平方根,x 必须大于 0 
      saturate(x)        
如果 x 小于 0,返回 0;如果 x 大于 1,返回1;否则,返回 x
      sign(x)        
如果 x 大于 0,返回 1;如果 x 小于 0,返回01;否则返回 0。
      sin(x)        输入参数为弧度,计算正弦值,返回值范围为[−1,1] 
      sincos(float x, out s, out c)        该函数是同时计算 x 的 sin 值和 cos 值,其中 s=sin(x),c=cos(x)。该函数用于“同时需要计算 sin 值和cos 值的情况”,比分别运算要快很多!
      sinh(x)        计算双曲正弦(hyperbolic sine)值。
      smoothstep(min, max, x)       
值 x 位于 min、max 区间中。如果 x=min,返回 0;如果 x=max,返回 1;如果 x 在两者之间,按照下列公式返回数据: 
                x−min                  x−min
−2*()3 +3*(  )2 
        max−min                 max−min

 

   step(a, x)       如果 x<a,返回 0;否则,返回 1。
      sqrt(x)        求 x 的平方根, x ,x 必须大于 0。
      tan(x)        输入参数为弧度,计算正切值 
      tanh(x)       计算双曲正切值
      transpose(M)        M 为矩阵,计算其转置矩阵

 

几何函数(Geometric Functions)

   distance( pt1, pt2)        两点之间的欧几里德距离(Euclidean distance)
      faceforward(N,I,Ng)       如果Ng I• < 0 ,返回 N;否则返回-N。
      length(v)        返回一个向量的模,即 sqrt(dot(v,v)) 
      normalize( v)        归一化向量 
      reflect(I, N)        根据入射光方向向量 I,和顶点法向量 N,计算反射光方向向量。其中 I 和 N 必须被归一化,需要非常注意的是,这个 I 是指向顶点的;函数只对三元向量有效
      refract(I,N,eta)        计算折射向量,I 为入射光线,N 为法向量,eta 为折射系数;其中 I 和 N 必须被归一化,如果 I 和 N 之间的夹角太大,则返回(0,0,0),也就是没有折射光线;I 是指向顶点的;函数只对三元向量有效

纹理映射函数(Texture Map Functions)

                                    函数 
      
tex1D(sampler1D tex, float s)                         一维纹理查询
      
tex1D(sampler1D tex, float s, float dsdx, float dsdy)       使用导数值(derivatives)查询一维纹理
      
Tex1D(sampler1D tex, float2 sz)                     一维纹理查询,并进行深度值比较
      
Tex1D(sampler1D tex, float2 sz, float dsdx,float dsdy)      使用导数值(derivatives)查询一维纹理, 并进行深度值比较
      
Tex1Dproj(sampler1D tex, float2 sq)                 一维投影纹理查询
      
Tex1Dproj(sampler1D tex, float3 szq)                一维投影纹理查询,并比较深度值
      
Tex2D(sampler2D tex, float2 s)                       二维纹理查询
      
Tex2D(sampler2D tex, float2 s, float2 dsdx, float2 dsdy)     使用导数值(derivatives)查询二维纹理
      
Tex2D(sampler2D tex, float3 sz)                     二维纹理查询,并进行深度值比较
      
Tex2D(sampler2D tex, float3 sz, float2 dsdx,float2 dsdy)  使用导数值(derivatives)查询二维纹理,并进行深度值比较
      
Tex2Dproj(sampler2D tex, float3 sq)                 二维投影纹理查询
      
Tex2Dproj(sampler2D tex, float4 szq)                二维投影纹理查询,并进行深度值比较
      texRECT(samplerRECT tex, float2 s)
      texRECT (samplerRECT tex, float2 s, float2 dsdx, float2 dsdy)  
      texRECT (samplerRECT tex, float3 sz) 
      texRECT (samplerRECT tex, float3 sz, float2 dsdx,float2 dsdy) 
      texRECT proj(samplerRECT tex, float3 sq) 
      texRECT proj(samplerRECT tex, float3 szq) 
      
Tex3D(sampler3D tex, float s)                          三维纹理查询
      
Tex3D(sampler3D tex, float3 s, float3 dsdx, float3 dsdy)       结合导数值(derivatives)查询三维纹理
      
Tex3Dproj(sampler3D tex, float4 szq)                   查询三维投影纹理,并进行深度值比较
      
texCUBE(samplerCUBE tex, float3 s)                    查询立方体纹理
      
texCUBE (samplerCUBE tex, float3 s, float3 dsdx, float3 dsdy)    结合导数值(derivatives)查询立方体纹理
      
texCUBEproj (samplerCUBE tex, float4 sq) 查询投影立方体纹理

 

偏导函数(Derivative Functions)
 

                          函数                            功能 
                          ddx(a)            参数 a 对应一个像素位置,返回该像素值在 X 轴上的偏导数 
                          ddy(a)            参数 a 对应一个像素位置,返回该像素值在 X 轴上的偏导数 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u012909508/article/details/87708858

智能推荐

html程序员表白前端网页源码 3D动态相册制作html_web前端网站源码-程序员宅基地

文章浏览阅读77次。网站文件方面:html网页结构文件、css网页样式文件、js网页特效文件、images网页图片文件;网页编辑方面等任意html编辑软件进行运行及修改编辑等操作)。其中:(1)html文件包含:其中index.html是首页、其他html为二级页面;(2) css文件包含:css全部页面样式,3D动态效果,雪花飘落等等(3) js文件包含:页面炫酷效果实现。_web前端网站源码

android menu枚举,Android 修改Menu字体颜色和背景-程序员宅基地

文章浏览阅读581次。我们知道,在Android中修改TextView的字体颜色,一般是通过setTextColor()方法。虽说Android的Menu菜单项的每一项都是由TextView组成,但是Android的sdk并没有给出具体设置Menu的颜色的api。一般我们只能通过修改Theme来间接修改Menu的样式,但如果需要对单独的某一个Menu修改颜色,这种方法又不行了。stackoverflow上提出了另外一种..._android studio修改menu菜单背景

mybatis三种批量插入方式对比_mybatis properties插入表-程序员宅基地

文章浏览阅读1w次,点赞5次,收藏17次。准备: 1.表结构CREATE TABLE `t_user` ( `id` varchar(32) CHARACTER SET utf8 NOT NULL COMMENT '主键', `name` varchar(50) CHARACTER SET utf8 DEFAULT NULL COMMENT '用户名', `del_flag` char(1) CHARACTER SE..._mybatis properties插入表

把做好html文件如何发到桌面,如何新建html文件-程序员宅基地

文章浏览阅读1k次。新建html文件的方法:首先在电脑桌面新建一个记事本文件,并打开;然后在里面输入HTML语言;接着点击左上角的“文件-另存为”,在“保存类型”中选择“所有文件”;最后将文件名更改成“XXXX.html”的格式即可。本文操作环境:windows7系统、HTML5版,DELL G3电脑。首先,在电脑桌面新建一个记事本文件,然后打开。接着,在里面输入HTML语言,记得开头第一行要加上,缩进以一个“tab..._怎么把html放到桌面

Redis Fastjson进行序列化和反序列化_jacksonr 和 fastjson的redis反序列化-程序员宅基地

文章浏览阅读6.5k次。之前写过redis相关的代码,发现只有Jackson的序列化方式,而Fastjson的序列化和反序列化速度是高于Jackson的,所以这里需要自己实现Fastjson的序列化方式。1、fastjson序列化类/** * @Classname: com.openailab.oascloud.datacenter.common.serializer.FastJson2JsonRedisSe..._jacksonr 和 fastjson的redis反序列化

android 开发笔记 (黎活明)_android 开发 黎活明-程序员宅基地

文章浏览阅读928次。android 笔记 1.android UI布局方式: LinearLayout (线性布局)、AbsoluteLayout(绝对布局)、RelativeLayout(相对布局)、TableLayout(表格布局)、FrameLayout(帧布局) 2.android 拨号器: 2.1 manifest 配置拨号器权限: _android 开发 黎活明

随便推点

删除数据库恶意脚本-程序员宅基地

文章浏览阅读72次。USE DataBaseNameGODECLARE @MAXID INTDECLARE @ID INTDECLARE @SQL NVARCHAR(MAX)DECLARE @TableName NVARCHAR(100)SET @ID = 0SELECT TOP 1 @MAXID = id FROM sysobjects WHERE [type] = 'U' ORDER BY id..._数据库恶意脚本

SQLite入门到精通之八:条件语句(Where|AND/OR|Like|Limit)_sqlite 条件选择语句-程序员宅基地

文章浏览阅读2.4k次。SQLiteWhere 子句SQLite的WHERE子句用于指定从一个表或多个表中获取数据的条件。如果满足给定的条件,即为真(true)时,则从表中返回特定的值。您可以使用 WHERE 子句来过滤记录,只获取需要的记录。WHERE 子句不仅可用在 SELECT 语句中,它也可用在 UPDATE、DELETE 语句中,等等,这些我们将在随后的章节中学习到。语法SQLite ..._sqlite 条件选择语句

nginx设置跨域_nginx access-control-allow-origin-程序员宅基地

文章浏览阅读3.7k次,点赞2次,收藏5次。1.CORS是一个W3C标准,全称是跨域资源共享(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。当前几乎所有的浏览器(Internet Explorer 8+, Firefox 3.5+, Safari 4+和 Chrome 3+)都可通过名为跨域资源共享(Cross-Origi..._nginx access-control-allow-origin

android中TextView中文字体粗体的方法 (android:textStyle="bold"来使字体显示为粗体,但是这只对英文有效)_andriod xml texview blod-程序员宅基地

文章浏览阅读1.7w次。TextView在xml中可以定义android:textStyle="bold"来使字体显示为粗体,但是这只对英文有效,当你的TextView要显示中文的时候要在code中设置粗体的paint来实现,如下:1 TextView title = new TextView(context);//或从xml导入2 TextPaint paint = title.getPaint();_andriod xml texview blod

qumu方式安装虚拟机-程序员宅基地

文章浏览阅读863次。方法一:qemu-system-aarch64 -m 2048 -cpu cortex-a57 -smp 2 -M virt -bios QEMU_EFI.fd -nographic -drive if=none,file=ubuntu-19.04-server-arm64.iso,id=cdrom,media=cdrom -device virtio-scsi-device -device scsi-cd,drive=cdrom -drive if=none,file=centos7-arm64.img_qumu

centos7安装mysql5.6教程_centos 7.5 安装 mysql 5.6-程序员宅基地

文章浏览阅读734次。一、安装MySQL1、下载安装包mysql-5.6.34-linux-glibc2.5-x86_64.tar(可前往官网自行下载:http://dev.mysql.com/downloads/mysql/)(本人使用sftp将存放在widows上的mysql5.6上传至服务器)2、卸载系统自带的Mariadb打开Terminal终端: [root@localhost ~]# r..._centos 7.5 安装 mysql 5.6

推荐文章

热门文章

相关标签