当前位置: 首页 > news >正文

自己做背景的网站用asp做网站遇到的问题

自己做背景的网站,用asp做网站遇到的问题,公司简介怎么写 范文,无锡朝阳网站推广1 源码路径 Unity Shader 常量、变量、结构体、函数一般可以在 Unity Editor 安装目录下面的【Editor\Data\CGIncludes\UnityShader】目录下查看源码,主要源码文件如下: UnityCG.cgincUnityShaderUtilities.cgincUnityShaderVariables.cginc 2 Shader 常…

1 源码路径

        Unity Shader 常量、变量、结构体、函数一般可以在 Unity Editor 安装目录下面的【Editor\Data\CGIncludes\UnityShader】目录下查看源码,主要源码文件如下:

  • UnityCG.cginc
  • UnityShaderUtilities.cginc
  • UnityShaderVariables.cginc

2 Shader 常量

#define UNITY_PI            3.14159265359f
#define UNITY_TWO_PI        6.28318530718f
#define UNITY_FOUR_PI       12.56637061436f
#define UNITY_INV_PI        0.31830988618f
#define UNITY_INV_TWO_PI    0.15915494309f
#define UNITY_INV_FOUR_PI   0.07957747155f
#define UNITY_HALF_PI       1.57079632679f
#define UNITY_INV_HALF_PI   0.636619772367f

3 Shader 变量

        1)时间变量

// Time (t = time since current level load) values from Unity
float4 _Time; // (t/20, t, t*2, t*3)
float4 _SinTime; // sin(t/8), sin(t/4), sin(t/2), sin(t)
float4 _CosTime; // cos(t/8), cos(t/4), cos(t/2), cos(t)
float4 unity_DeltaTime; // dt, 1/dt, smoothdt, 1/smoothdt

        2)相机和光源的世界坐标

float3 _WorldSpaceCameraPos; // 相机的世界坐标
half4 _WorldSpaceLightPos0; // 光源的世界坐标

        3)投影参数

// x = 1 or -1 (-1 if projection is flipped)
// y = near plane
// z = far plane
// w = 1/far plane
float4 _ProjectionParams;

        4)屏幕参数

// x = width
// y = height
// z = 1 + 1.0/width
// w = 1 + 1.0/height
float4 _ScreenParams;

        5)MVP 矩阵

float4x4 UNITY_MATRIX_M, unity_ObjectToWorld; // [模型空间->世界空间]的变换矩阵M
float4x4 UNITY_MATRIX_V, unity_MatrixV; // [世界空间->观察空间]的变换矩阵V
float4x4 UNITY_MATRIX_P, glstate_matrix_projection; // [观察空间->裁剪空间]的变换矩阵P
float4x4 UNITY_MATRIX_MV, unity_MatrixMV; // [模型空间->观察空间]的变换矩阵MV
float4x4 UNITY_MATRIX_VP, unity_MatrixVP; // [世界空间->裁剪空间]的变换矩阵VP
float4x4 UNITY_MATRIX_MVP, unity_MatrixMVP; // [模型空间->裁剪空间]的变换矩阵MVP
float4x4 UNITY_MATRIX_I_V, unity_MatrixInvV; // V矩阵的逆矩阵
float4x4 UNITY_MATRIX_T_MV, unity_MatrixTMV; // MV矩阵的转置
float4x4 UNITY_MATRIX_IT_MV, unity_MatrixITMV; // MV矩阵的逆转矩阵
float4x4 unity_WorldToObject; // [世界空间->模型空间]的变换矩阵M

        说明:unity_ObjectToWorld 与 unity_WorldToObject 互为逆矩阵。

4 Shader 结构体

        1)appdata_base

struct appdata_base {float4 vertex : POSITION; // 局部坐标系下顶点坐标float3 normal : NORMAL; // 局部坐标系下法线向量float4 texcoord : TEXCOORD0; // 纹理坐标UNITY_VERTEX_INPUT_INSTANCE_ID
};

        2)appdata_tan

struct appdata_tan {float4 vertex : POSITION; // 局部坐标系下顶点坐标float4 tangent : TANGENT; // 局部坐标系下切线向量float3 normal : NORMAL; // 局部坐标系下法线向量float4 texcoord : TEXCOORD0; // 纹理坐标UNITY_VERTEX_INPUT_INSTANCE_ID
};

        3)appdata_full

struct appdata_full {float4 vertex : POSITION; // 局部坐标系下顶点坐标float4 tangent : TANGENT; // 局部坐标系下切线向量float3 normal : NORMAL; // 局部坐标系下法线向量float4 texcoord : TEXCOORD0; // 纹理坐标0float4 texcoord1 : TEXCOORD1; // 纹理坐标1float4 texcoord2 : TEXCOORD2; // 纹理坐标2float4 texcoord3 : TEXCOORD3; // 纹理坐标3fixed4 color : COLOR; // 顶点颜色UNITY_VERTEX_INPUT_INSTANCE_ID
};

        4)appdata_img

struct appdata_img
{float4 vertex : POSITION; // 局部坐标系下顶点坐标half2 texcoord : TEXCOORD0; // 纹理坐标UNITY_VERTEX_INPUT_INSTANCE_ID
};

        5)v2f_img

struct v2f_img
{// 作为顶点着色器输出时, pos指裁剪坐标系下的坐标; 作为片元着色器输入时, pos指屏幕坐标系下的坐标float4 pos : SV_POSITION;half2 uv : TEXCOORD0; // 纹理坐标UNITY_VERTEX_INPUT_INSTANCE_IDUNITY_VERTEX_OUTPUT_STEREO
};

        说明:作为顶点着色器输出时, pos指裁剪坐标系下的坐标; 作为片元着色器输入时, pos指屏幕坐标系下的坐标。

5 Shader 函数

5.1 基础函数

        1)数值计算 

sign(x)、abs(x) // 符号、绝对值
min(a, b)、max(a, b) // 最值函数
ceil(x)、floor(x)、round(x) // 取整函数
frac(x) // 取小数部分
fmod(x, y) // 取余数
rap(x) // 倒数(1/x)
sqrt(x)、pow(x) // 幂函数
exp(x)、exp2(x) // 指数函数(e^x、2^x)
log(x)、log10(x)、log2(x) // 对数函数
degrees(x)、radians(x) // 角度转换函数
sin(x)、cos(x)、tan(x)、asin(x)、acos(x)、atan(x) // 三角函数
sinh(x)、cosh(x)、tanh(x) // 双曲线函数
saturate(x) // 将x约束在0和1之间, 超过边界就取边界值
clamp(x, min, max) // 将x约束在min和max之间, 超过边界就取边界值
smoothstep (min, max, x) // 平滑比例, 公式: k=saturate((x-min)/(max-min)), y=k*k*(3-2*k)
lerp(a, b, f) // 插值, 公式: y=x+f*(y-x), a、b可以是向量

        2)向量计算

all(vec) // 如果vec中每个分量都是非零的则返回true, 否则返回false
any(vec) // 如果vec中存在一个分量是非零的则返回true, 否则返回false
distance(pos1, pos2) // 计算pos1与pos2之间的距离
length(vec) // 计算向量的模长
normalize(vec) // 计算向量的单位向量
dot(vec1, vec2) // 向量点乘
cross(vec1, vec2) // 向量叉乘
reflect(i, n) // 根据入射向量和法线向量计算反射向量

        3)矩阵计算

mul(M, N)、mul(M, v), mul(v, M) // M*N、M*v、M'*v
determinant(M) // 计算矩阵的行列式
transpose(M) // 矩阵转置

        4)纹理计算

tex2D(sampler2D, uv_Tex) // 查询纹理坐标对应的纹理值
UnpackNormal(color) // 根据法线纹理解析法线向量

5.2 坐标和向量变换

        1)坐标变换

// 模型空间->观察空间
float3 UnityObjectToViewPos(float3 pos) // mul(UNITY_MATRIX_MV, float4(pos, 1.0)).xyz
float3 UnityObjectToViewPos(float4 pos) // UnityObjectToViewPos(pos.xyz)
// 模型空间->裁剪空间
float4 UnityObjectToClipPos(float3 pos) // mul(UNITY_MATRIX_MVP, float4(pos, 1.0))
float4 UnityObjectToClipPos(float4 pos) // UnityObjectToClipPos(pos.xyz)
// 世界空间->观察空间
float3 UnityWorldToViewPos(float3 pos) // mul(UNITY_MATRIX_V, float4(pos, 1.0)).xyz
// 世界空间->裁剪空间
float4 UnityWorldToClipPos(float3 pos) // mul(UNITY_MATRIX_VP, float4(pos, 1.0))
// 观察空间->裁剪空间
float4 UnityViewToClipPos(float3 pos) // mul(UNITY_MATRIX_P, float4(pos, 1.0))

        2)向量变换

// 局部空间->世界空间
float3 UnityObjectToWorldDir(float3 dir) // normalize(mul((float3x3)unity_ObjectToWorld, dir))
// 世界空间->局部空间
float3 UnityWorldToObjectDir(float3 dir) // normalize(mul((float3x3)unity_WorldToObject, dir))

        3)法线变换

// 局部空间->世界空间
float3 UnityObjectToWorldNormal(float3 norm) {
#ifdef UNITY_ASSUME_UNIFORM_SCALING // 统一缩放(x、y、z分量缩放系数一致)return UnityObjectToWorldDir(norm); // normalize(mul((float3x3)unity_ObjectToWorld, norm))
#elsereturn normalize(mul(norm, (float3x3)unity_WorldToObject)); // mul(IT_M, norm) => mul(norm, I_M)
#endif
}

        法线由切线计算而来,在局部空间中 A 点的切线向量为 v1,法线向量为 n1,经过模型变换(矩阵 M)后,切线向量为 v2,法线向量为 n2,假设法线向量的变换矩阵为 G,因此存在以下关系:

        Unity 中线性变换主要有平移、旋转、缩放,由于向量不受平移变换影响,因此,对于法线向量而言,只受旋转和缩放影响。

  • 当 M 只包含旋转变换时,M 是正交矩阵,M^{-1} = M^T,因此 G = M;
  • 当 M 只包含统一缩放变换时,M = k·E,因此 G = 1/k·E = 1/(k^2)·M,由于法线向量只需要方向,后面会进行归一化,因此可以简写 G = M;
  • 当 M 只包含旋转变换和统一缩放变换时,G = 1/(k^2)·M,由于法线向量只需要方向,后面会进行归一化,因此可以简写 G = M;

        4)其他变换

// 观察空间->裁剪空间
float2 TransformViewToProjection (float2 v) // mul((float2x2)UNITY_MATRIX_P, v)
float3 TransformViewToProjection (float3 v) // mul((float3x3)UNITY_MATRIX_P, v)

5.3 计算指向相机和光源的向量 

        1)计算顶点指向相机的向量

// _WorldSpaceCameraPos.xyz - worldPos
float3 ObjSpaceViewDir(float4 v) // 输入: 局部坐标, 输出: 局部坐标
float3 WorldSpaceViewDir(float4 localPos) // 输入: 局部坐标, 输出: 世界坐标
float3 UnityWorldSpaceViewDir(float3 worldPos) // 输入: 世界坐标, 输出: 世界坐标

        2)计算顶点指向光源的向量

// mul(unity_WorldToObject, _WorldSpaceLightPos0).xyz - v.xyz
float3 ObjSpaceLightDir(float4 v) // 输入: 局部坐标, 输出: 局部坐标
float3 WorldSpaceLightDir(float4 localPos) // 输入: 局部坐标, 输出: 世界坐标
float3 UnityWorldSpaceLightDir(float3 worldPos) // 输入: 世界坐标, 输出: 世界坐标
http://www.yayakq.cn/news/532128/

相关文章:

  • 安徽省房地产开发项目管理系统百度seo优化排名软件
  • 重庆做个网站多少钱seo网站外链工具
  • wordpress网站地图插件企业邮箱格式怎么填写才正确
  • 2015年做哪个网站能致富网站建设项目成本估算表
  • 微网站建设包括哪些内容云南网络推广公司
  • 网站建设 599做网站去哪里备案
  • ps做网站大小绵阳网站建设联系电话
  • wap网站不流行商城展示网站
  • 用家里网络做网站网站备案找回密码
  • 做网站以前出名的公司电商网站设计模板
  • 当涂 微网站开发公司哪项不属于网站架构
  • html5制作网站首页wordpress中文 apP
  • 电子政务门户网站建设的教训做美食网站的图片素材
  • 百度做网站吗国外购物网站欣赏
  • iis默认网站怎么设置梧州论坛网
  • 图片展示 网站福州论坛哪个比较好
  • 静态网站源文件下载建设银行指定网站
  • 襄汾县住房和建设局网站青县网站制作
  • 做行业网站广告能赚多少钱新手怎么做网站优化
  • 网站开发课程的心得迅捷视频剪辑软件
  • 商业网站有什么作用wordpress完成静态化
  • 网站建设虚拟qq腾讯官网登录入口
  • 徐州哪家做网站好vue下一页
  • 淘客怎么建网站做推广网址生成app一键生成器
  • 网站源码上传安装ih5网站制作平台
  • 天天联盟广告网站如何做网络游戏加盟合作
  • 网站开发协议自己搭建云平台
  • 网站ueo百度seo建议
  • 做网站项目团队口号建设项目环境影响评价验收网站
  • 牛天下网站建设安徽省经工建设集团公司网站