• Unity3D -- shader常用函数和变量


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

    1、函数

    float3 WorldSpaceViewDir(float4 v)  //输入一个模型空间中的顶点位置,返回世界空间中从该点到摄像机的观察方向
    
    float3 ObjSpaceViewDir(float4 v)    //输入一个模型空间中的顶点位置,返回模型空间中从该点到摄像机的观察方向
    
    float3 WorldSpaceLightDir(float4 v) //仅用于前向渲染中(ForwardBase),输入一个模型空间中的顶点位置,返回世界空间中从该点到光源的光照方向,没有被归一化
    
    float3 UnityWorldSpaceLightDir(float4 v)    //仅可用于前向渲染中,输入一个世界空间的顶点位置,返回世界空间从该点到光源的光照方向,没有被归一化
    
    float3 ObjSpaceLightDir(float4 v)   //仅用于前向渲染中(ForwardBase),输入一个模型空间中的顶点位置,返回模型空间中从该点到光源的光照方向,没有被归一化
    
    float3 UnityObjectToWorldNormal(float3 norm)    //把法线从模型空间转换到世界空间中
    
    float3 UnityObjectToWorldDir(in float3 dir) //把方向矢量从模型空间转换到世界空间中
    
    float3 UnityWorldToObjectDir(float3 dir)    //把方向矢量从世界空间转换到模型空间中
    
    float3 Shade4PointLights(...)   //仅可用于前向渲染中,计算四个点光源的光照,它的参数是已经打包进矢量的光照数据。前向渲染通常会使用这个函数来计算逐顶点光照

    2、语义

    POSITION    //模型空间中的顶点位置,通常是float4类型
    
    NORMAL  //顶点法线,通常是float3类型
    
    TANGENT //顶点法线,通常是float4类型
    
    TEXCOORDn   //该顶点的纹理坐标,TEXCOORD0表示第一组纹理坐标,…,通常是float2或float4类型
    
    COLOR   //顶点颜色,通常是fixed4或float4类型
    
    SV_POSITION //裁剪空间中的顶点坐标,结构体中必须包含一个用该语义修饰的变量。等同于DirectX9中的
    POSITION,但是最好是使用SV_POSITION
    
    COLOR0  //输出第一组顶点颜色
    
    COLOR1  //输出第二组顶点颜色
    
    TEXCOORD0~TEXCOORD7    //输出纹理坐标
    
    SV_Target   //输出值将会存储到渲染目标(render target)中

    3、变量

    UNITY_MATRIX_MVP    //当前的模型*观察*投影矩阵,用于将顶点/方向矢量从模型空间转换到裁剪空间
    
    UNITY_MATRIX_MV //当前的模型*观察矩阵,用于将顶点/方向矢量从模型空间转换到观察空间
    
    UNITY_MATRIX_V  //当前的观察矩阵,用于将顶点/方向矢量从世界空间转换到观察空间
    
    UNITY_MATRIX_P  //当前的投影矩阵,用于将顶点/方向矢量从观察空间转换到裁剪空间
    
    UNITY_MATRIX_VP //当前的观察*投影矩阵,用于将顶点/方向矢量从世界空间转换到裁剪空间
    
    UNITY_MATRIX_T_MV   //UNITY_MATRIX_MV的转置矩阵
    
    UNITY_MATRIX_IT_MV  //UNITY_MATRIX_MV的逆转置矩阵,用于将发现从模型空间转换到观察空间,也可以用于得到UNITY_MATRIX_MV的逆矩阵
    
    unity_ObjectToWorld(_Object2World)  //当前的模型矩阵,用于将顶点/方向矢量从模型空间变换到世界空间
    
    unity_WorldToObject(_World2Object)  //用于将顶点/方向矢量从世界空间转换到模型空间

    4、摄像机和屏幕参数

    float3  _WorldSpaceCameraPos  //该摄像机在世界空间中的位置
    
    float4  _ProjectionParams    //x=1.0(或-1.0,如果正在使用一个翻转的投影矩阵进行渲染),y=Near,z=Far,w=1.0+1.0/Far,其中Near和Far分别是近裁剪平面和远裁剪平面到摄像机的距离
    
    float4  _ScreenParams   //x=width,y=height,z=1.0+1.0/width,w=1.0+1.0/height,其中width和height分别是该摄像机的渲染目标(render target)的像素宽度和高度
    
    float4  _ZBufferParams  //x=1-Far/Near,y=Far/Near,z=x/Far,w=y/Far,该变量用于线性化Z缓存中的深度值
    
    float4  unity_OrthoParams   //x=width,y=height,z没有定义,w=1.0(该摄像机是正交摄像机)或w=0.0(该摄像机是透视摄像机),其中width和height是正交投影摄像机的宽度和高度
    
    float4x4  unity_CameraProjection    //该摄像机的投影矩阵
    
    float4x4  unity_CameraInvProjection  //该摄像机的投影矩阵的逆矩阵
    
    float4  unity_CameraWorldClipPlanes[6]   //该摄像机的6个裁剪平面在世界空间下的等式,按左、右、下、上、近、远裁剪平面
    版权声明:阳仔原创,转载请注明出处。 https://blog.csdn.net/honey199396/article/details/54574254
  • 相关阅读:
    右建删除.svn
    Oracle 初始化 SEQUENCE附代码
    IE8支付宝密码控件
    JavaScript怎样读取Gridview控件的单元格的值
    IIS7 发布WCF
    C#创建后台服务注意事项
    Sqlserver中传递列参数需要注意的一个小细节
    JavaScript中针对中文参数的转编码
    VS2010里面调试后台服务
    href=#与href=javascriptvoid(0)的区别
  • 原文地址:https://www.cnblogs.com/nafio/p/9206578.html
Copyright © 2020-2023  润新知