美文网首页
内置函数的总结

内置函数的总结

作者: 李偌闲 | 来源:发表于2019-03-19 21:53 被阅读0次
image

为了把顶点或方向矢量从观察空间变换到模型空间


// 方法一, 使用transpose 函数对UNITY_MATRIX_IT_MV 进行转置,
// 得到UNITY_MATRIX_MV 的逆矩阵,然后进行列矩阵乘法,
// 把观察空间中的点或方向矢量变换到模型空间中
float4 modelPos = mul(transpose(UNITY_MATRIX_ IT_MV), viewPos);
 
// 方法二, 不直接使用转置函数transpose ,而是交换mul 参数的位置,使用行矩阵乘法
// 本质和方法一是完全一样的
float4 modelPos = mul(viewPos, UNITY_MATRIX_IT_MV);
TIM截图20190319215436.png
TIM截图20190319215502.png

TRANSFORM_TEX(v.texcoord, _MainTex);
TRANSFORM_TEX方法比较简单,就是将模型顶点的uv和Tiling、Offset两个变量进行运算,计算出实际显示用的定点uv。

该方法可以在UnityCG.cginc文件中找到,内容也很简单:
// Transforms 2D UV by scale/bias property

define TRANSFORM_TEX(tex,name) (tex.xy * name##_ST.xy + name##_ST.zw)

配合使用时的代码:
o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);

其中
v是appdata_base类型,v.texcoord就是模型顶点的uv数据。
_MainTex是使用的图片。
name##_ST实际上就是_MainTex_ST。
name##_ST.xy就是Tiling的xy值。
name##_ST.zw就是Offset的xy值。


tex2D(_MainTex, i.uv); 对图片进行采样 参数1 是采样图片
// Use the refract dir in world space to access the cubemap
fixed3 refraction = texCUBE(_Cubemap, i.worldRefr).rgb * _RefractColor.rgb; 这是一个立方体的采样,

//CG 的refract函数来计算折射方向 参数1 入射光线方向(必须归一),2:表现法线,法线方向归一,3:入射光线所在介质的折射率和折射光线所在介质的折射率之间的比值
o.worldRefr = refract(-normalize(o.worldViewDir), normalize(o.worldNormal), _RefractRatio);

image

以上这些函数都没有归一化
WorldSpaceLightDir、UnityWorldSpaceLightDir 和ObjSpaceLightDir,稍微复杂一些,这是因为, Unity 帮我们处理了不同种类光源的情况。需要注意的是,这3 个函数仅可用于前向渲染(关于什么是前向渲染会在9.1 节中讲到)。这是因为只有在前向渲染时,这3 个函数里使用的内置变量 _WorldSpaceLightPos0 等才会被正确赋值。

光照 阴影使用的函数
SHADOW_ COORDS 、TRANSFER_SHADOW 和SHADOW_ATTENUATION 是计算阴影时的“三剑客”。这些内置宏帮助我们在必要时计算光源的阴影
在前向渲染中, 宏
SHADOW_COORDS
实际上就是声明了一个名为** _ShadowCoord的阴影纹理坐标变量。而TRANSFER_SHADOW的实现会根据平台不同而有所差异。如果当前平台可以使用屏幕空间的阴影映射技术(通过判断是否定义了UNITY_NO_SCREENSPACE_SHADOWS来得到) , TRANSFER_SHADOW 会调用内置的ComputeScreenPos 函数来计算
_ShadowCoord** ;如果该平台不支持屏幕空间的阴影映射技术, 就会使用传统的阴影映射技术,TRANSFER_SHADOW 会把顶点坐标从模型空间变换到光源空间后存储到ShadowCoord 中。然后,** SHADOW_ATTENUATION** 负责使用ShadowCoord 对相关的纹理进行采样,得到阴影信息。

参考:https://blog.csdn.net/laverfever/article/details/23962411
官方 shader API:https://docs.unity3d.com/Manual/SL-BuiltinFunctions.html
https://docs.unity3d.com/ScriptReference/Shader.html

TANGENT_SPACE_ROTATION 宏 相当于嵌入如下两行代码:
  float3 binormal = cross( v.normal, v.tangent.xyz ) * v.tangent.w;
  float3x3 rotation = float3x3( v.tangent.xyz, binormal, v.normal );
也就是构造出 tangent space 的坐标系, 定义转换world space的向量到tangent space的rotation 矩阵。

Hidden Shader的

表示是内置shader,不能在材质球的下拉列表里看到。一般你要覆盖内置shader的时候才会这么写,一般是覆盖默认地形shader 相关的 地面 草 广告牌 等…

相关文章

  • SQL内置函数使用手册

    SQL中有很多特别棒的内置函数。本文SQL内置函数手册中总结了SQL中常用的内置函数,包含通用聚合函数、安全检测函...

  • Swift常用内置函数介绍

    Swift包含了74个内置函数,这里针对几个我常用的内置函数做一些总结。(内置函数是指无需引入任何Module就可...

  • Swift 常见内置函数

    Swift包含了74个内置函数,这里针对几个我常用的内置函数做一些总结。(内置函数是指无需引入任何Module就可...

  • 【小白福利、快速入门Python】之内置函数

    欢迎大家关注公众号【哈希大数据】python的内置函数――基础介绍总结篇68个内置函数python3内置了68个常...

  • 内置函数的总结

    为了把顶点或方向矢量从观察空间变换到模型空间 TRANSFORM_TEX(v.texcoord, _MainTex...

  • python内置函数总结

    1、abs()函数返回数字的绝对值。 abs()用法:abs(x) x是数值表达式,可以是整数,浮点数,复数(j)...

  • Hive内置函数总结

    1、相关帮助操作函数 2、学习内置函数的终极心法 3、测试内置函数的快捷方式 第一种方式:直接使用,不用from语...

  • Python:内置函数

    python的内置函数,匿名函数 内置函数 内置函数就是python给你提供的,拿来直接用的函数,比如print,...

  • 二级Python----Python的内置函数及标准库(DAY

    Python的内置函数 嵌入到主调函数中的函数称为内置函数,又称内嵌函数。 python的内置函数(68个) Py...

  • 刺猬教你量化投资(三) :函数的概念

    内置函数与自定义函数 内置函数也叫自带函数,是Python已经定义好的函数,比如之前提过的sort()。 内置函数...

网友评论

      本文标题:内置函数的总结

      本文链接:https://www.haomeiwen.com/subject/nvckpqtx.html