查看函数图像网站:https://graphtoy.com/
基础数学运算
- max(a, b) 返回较大的数
- min(a, b) 返回较小的数
- mul(a, b) 两变量相乘,常用于矩阵运算
- abs(a) 返回a的绝对值
- round (x) 返回与x最近的整数
- sqrt (x) 返回x的平方根
- rsqrt (x) 返回x的平方根的倒数
- degrees (x) 弧度转角度
- redians (x) 角度转弧度
- noise (x) 噪声
幂指对函数
- pow (x, y) x的y次幂
- exp (x) 返回e为底的指数函数
- exp2 (value x) 返回以2位底,x为指数幂
- ldexp (x, exp) 返回与2exp次方的乘积
- log (x) 返回指定值得以e为底数的对数
- log10 (x) 求以10为底的对数
- log2 (x) 求以2为底的对数
- frexp (x , out exp) 将浮点数分解成尾数和指数,x的返回值是尾数,exp参数返回的值是指数
三角函数和双曲线函数
- sin(x)、cos(x)、tan(x) 三角函数
- asin(x)、acos(x)、atan(x) 反三角函数
- sincos(x,out s,out c) 返回x的正弦和余弦
- tan(y,x) 返回y/x的正切
- atan2(y,x) 返回y/x的反正切
- sinh(x) 返回x的双曲正弦值
- cosh(x) 返回x的双曲余弦值
- tanh(x) 返回x的双曲正弦值
处理数值函数
- ceil(x) 返回>=x的最小整数(向下取整)
- floor(x) 返回<=x的最大整数(向上取整)
- step(x,y) x<=y返回1,否则返回0
- saturate(x) 返回将x钳制到[0,1]范围之间的值
- clamp(x,min,max) 将x限制在[min,max]范围的值,比min小返回min,比max大返回max
- fmord(x,y) 返回x对y取余的余数
- frac(x) 取x的小数部分
- modf(x,out ip) 将x分为小数和整数部分(输出的ip为整数部分,返回值为小数部分)
- lerp(x,y,s) 按照s在x到y之间插值,返回
- smoothstep(min,max,x) 如果x在[min,max]范围内,就返回介于[0,1]之间的平滑Hermite插值,使用smoothstep在两个值创建平滑过渡
条件判断函数
- all(x) 确定指定量的所有分量是否均为非零,均非零则返回true,否则返回false
- clip(x) 如果输入值小于零,则丢弃当前像素 常用于判定范围(不仅仅针对0,返回值为void) 常用于Alpha测试,如果每个分量代表到平面的距离,还可以用来模拟剪切平面
- sign(x) 返回x的正负性 如果x小于零返回-1,如果x等于零返回0,如果x大于零返回1
- isinf(x) 如果x参数为+ INF或-INF(无穷+无穷仍无穷,0x3f3f3f3f),返回true,否则返回False
- isfinite(x) 判断x参数是有限,即有界的,与isinf(x)相反
- isnan(x) 如果x参数为NAN(非数字),返回true,否则返回false
向量和矩阵函数
- length(v) 返回向量的长度
- normalize(v) 向量归一化
- distance(a,b) 返回两个向量之间的距离,不平行的两个向量应该为0,此处表示为根号下各分量之差的平方和
- dot(a,b) 返回a和b两向量的点积
- cross(a,b) 返回a和b两向量的叉积,返回值是向量,并且与a,b都垂直
- determinant(m) 返回指定浮点矩阵的按行列式方式计算的值
- transpose(m) 返回矩阵m的转置矩阵
光线预算函数
- reflect(i,n) 以i为入射向量n为法线方向的反射光
- refract(i,n,ri) 以i为入射向量n为法线方向,ri为折射率的折射光
- lit(n_dot_l,n_dot_h,m) 输入标量(normal,light,半角向量h,镜面反射系数m) 返回光照向量(环境光,漫反射光,镜面高光反射,1)该计算依据的是BlingPhong光照模型
- faceforward(n,i,ng) 得到面向视图方向的曲面法向量输入输出为同元向量,返回-n*sign(dot(i,ng))(normal,light,normal)
纹理查找函数
1D纹理查找函数
- tex1D(s, t) 普通一维纹理查找 返回纹理采样器s在标量t位置的color4
- tex1D(s,t,ddx,ddy) 使用微分查询一维纹理, t和ddxy均为vector
- tex1Dlod(s, t) 使用LOD查找纹理s在t.w位置的color4
- tex1Dbias(s, t) 将t.w决定的某个MIP层偏置后的一维纹理查找
- tex1Dgrad(s,t,ddx,ddy) 使用微分并指定MIP层的一维纹理查找
- tex1Dproj(s, t) 把纹理当做一张幻灯片投影到场景中,先使用投影纹理技术需要计算出投影纹理坐标t(坐标t.w除以透视值),然后使用投影纹理坐标进行查询
2D纹理查找函数
- tex2D(s, t) 普通二维纹理查找 返回纹理采样器s在vector t位置的颜色
- ex2D(s,t,ddx,ddy) 使用微分查询二维纹理,t和ddxy均为vector
- tex2Dlod(s, t) 使用LOD查找纹理s在t.w位置的color4
- tex2Dbias(s, t) 将t.w决定的某个MIP层偏置后的二维纹理查找
- tex2Dgrad(s,t,ddx,ddy) 使用微分并指定MIP层的二维纹理查找
- tex2Dproj(s, t) 把纹理当做一张幻灯片投影到场景中,先使用投影纹理技术需要计算出投影纹理坐标t(坐标t.w除以透视值),然后使用投影纹理坐标进行查询
3D纹理查找函数
- tex3D(s, t) 普通三维纹理查找 返回纹理采样器s在vector t位置的颜色
- ex3D(s,t,ddx,ddy) 使用微分查询三维纹理,t和ddxy均为vector
- tex3Dlod(s, t) 使用LOD查找纹理s在t.w位置的color4
- tex3Dbias(s, t) 将t.w决定的某个MIP层偏置后的三维纹理查找
- tex3Dgrad(s,t,ddx,ddy) 使用微分并指定MIP层的三维纹理查找
- tex3Dproj(s, t) 把纹理当做一张幻灯片投影到场景中,先使用投影纹理技术需要计算出投影纹理坐标t(坐标t.w除以透视值),然后使用投影纹理坐标进行查询
立体纹理查找
- texCUBE(s,t) 返回纹理采样器s在vector t位置的颜色
- texCUBE(s,t,ddx,ddy) 使用微分查询立方体维纹理 ,t和ddxy均为vector
- texCUBEDload(s,t) 使用LOD查找纹理s在t.w位置的color4
- texCUBEbias(s,t) 将t.w决定的某个MIP层偏置后的立方体纹理查找
- texCUBEgrad(s,t,ddx,ddy) 使用微分并指定MIP层的立方体纹理查找
- texCUBEproj(s,t) 使用投影方式的立方体纹理查找
偏导函数ddx和ddy
ddx(vector3)、ddy(vector3) ddx 和 ddy 用于求取相邻像素间某属性的差值
Core.hlsl
名称 | 说明 |
---|---|
GetVertexPositionInputs(float3 positionOS) | 获取输入顶点坐标信息 |
GetVertexNormalInputs(float3 normalOS) | 获取输入顶点法线信息 |
GetVertexNormalInputs(float3 normalOS, float4 tangentOS) | 获取输入顶点法线信息(重载) |
GetScaledScreenParams() | 获取屏幕缩放参数信息 |
NormalizeNormalPerVertex(real3 normalWS) | 逐顶点法线正交 |
NormalizeNormalPerPixel(real3 normalWS) | 逐像素法线正交 |
ComputeScreenPos(float4 positionCS) | 计算屏幕坐标信息 |
(real)ComputeFogFactor(float z) | 计算雾参数 |
(real)ComputeFogIntensity(real fogFactor) | 计算雾强度 |
(half3)MixFogColor(real3 fragColor, real3 fogColor, real fogFactor) | 混合雾颜色 |
(half3)MixFog(real3 fragColor, real fogFactor) | 混合雾 |
Lighting.hlsl
名称 | 说明 |
---|---|
DistanceAttenuation(float distanceSqr, half2 distanceAttenuation) | 距离衰减 |
AngleAttenuation(half3 spotDirection, half3 lightDirection, half2 spotAttenuation) | 角度衰减 |
GetMainLight()/GetMainLight(float4 shadowCoord) | 获取主光源 |
GetPerObjectLightIndex(int index) | 获取每个对象灯光Index |
GetAdditionalLightsCount() | 获取额外灯光数量 |
ReflectivitySpecular(half3 specular) | 高光反射率 |
OneMinusReflectivityMetallic(half metallic) | OneMinus金属反射率 |
InitializeBRDFData(half3 albedo, half metallic, half3 specular, half smoothness, half alpha, out BRDFData outBRDFData) | 初始化BRDF |
EnvironmentBRDF(BRDFData brdfData, half3 indirectDiffuse, half3 indirectSpecular, half fresnelTerm) | 环境BRDF |
DirectBDRF(BRDFData brdfData, half3 normalWS, half3 lightDirectionWS, half3 viewDirectionWS) | BRDF |
SampleLightmap(float2 lightmapUV, half3 normalWS) | 光照贴图 |
GlossyEnvironmentReflection(half3 reflectVector, half perceptualRoughness, half occlusion) | 环境光泽反射 |
GlobalIllumination(BRDFData brdfData, half3 bakedGI, half occlusion, half3 normalWS, half3 viewDirectionWS) | 全局光照 |
MixRealtimeAndBakedGI(inout Light light, half3 normalWS, inout half3 bakedGI, half4 shadowMask) | 实时烘培混合 |
LightingLambert(half3 lightColor, half3 lightDir, half3 normal) | 兰伯特模型 |
LightingSpecular(half3 lightColor, half3 lightDir, half3 normal, half3 viewDir, half4 specular, half smoothness) | 高光 |
LightingPhysicallyBased(BRDFData brdfData, half3 lightColor, half3 lightDirectionWS, half lightAttenuation, half3 normalWS, half3 viewDirectionWS)/LightingPhysicallyBased(BRDFData brdfData, Light light, half3 normalWS, half3 viewDirectionWS) | 基于物理的光照模型 |
VertexLighting(float3 positionWS, half3 normalWS) | 顶点光照颜色 |
LightweightFragmentPBR(InputData inputData, half3 albedo, half metallic, half3 specular,half smoothness, half occlusion, half3 emission, half alpha) | 轻量级片元PBR |
LightweightFragmentBlinnPhong(InputData inputData, half3 diffuse, half4 specularGloss, half smoothness, half3 emission, half alpha) | 轻量级片元布林·冯 |
Shadows.hlsl
名称 | 说明 |
---|---|
GetMainLightShadowStrength() | 获取主光源阴影强度 |
GetAdditionalLightShadowStrenth(int lightIndex) | 获取额外光源阴影强度 |
SampleScreenSpaceShadowmap(float4 shadowCoord) | 屏幕空间阴影贴图 |
SampleShadowmap(float4 shadowCoord, TEXTURE2D_SHADOW_PARAM(ShadowMap, sampler_ShadowMap), ShadowSamplingData samplingData, half shadowStrength, bool isPerspectiveProjection = true) | 阴影贴图 |
TransformWorldToShadowCoord(float3 positionWS) | 把顶点的世界坐标转换到阴影坐标 |
MainLightRealtimeShadow(float4 shadowCoord) | 主光源实时阴影 |
AdditionalLightRealtimeShadow(int lightIndex, float3 positionWS) | 额外光源实时阴影 |
GetShadowCoord(VertexPositionInputs vertexInput) | 获取阴影坐标信息 |
ApplyShadowBias(float3 positionWS, float3 normalWS, float3 lightDirection) | 应用阴影偏移 |
SpaceTransforms.hlsl
名称 | 说明 |
---|---|
TransformObjectToWorld(float3 positionOS) | 当前模型空间转世界空间矩阵,通常用于把顶点/方向矢量从模型空间转到世界空间 |
TransformWorldToObject(float3 positionWS) | 当前世界空间转模型空间矩阵,通常用于把顶点/方向矢量从世界空间转到模型空间 |
TransformWorldToView(float3 positionWS) | 当前世界空间转相机空间矩阵,通常用于把顶点/方向矢量从世界空间转到相机空间 |
TransformObjectToHClip(float3 positionOS) | 当前模型空间转裁剪空间矩阵,通常用于把顶点/方向矢量从模型空间转到裁剪空间 |
TransformWorldToHClip(float3 positionWS) | 当前世界空间转裁剪空间矩阵,通常用于把顶点/方向矢量从世界空间转到裁剪空间 |
TransformWViewToHClip(float3 positionVS) | 当前相机空间转裁剪空间矩阵,通常用于把顶点/方向矢量从相机空间转到裁剪空间 |
TransformObjectToWorldDir(real3 dirOS) | 把方向矢量从模型空间转换到世界空间中 |
TransformWorldToObjectDir(real3 dirWS) | 把方向矢量从世界空间转换到模型空间中 |
TransformWorldToViewDir(real3 dirWS) | 把方向矢量从世界空间转换到相机空间中 |
TransformWorldToHClipDir(real3 directionWS) | 把方向矢量从世界空间转换到裁剪空间中 |
TransformObjectToWorldNormal(float3 normalOS) | 把法线从模型空间转换到世界空间中 |
CreateTangentToWorld(real3 normal, real3 tangent, real flipSign) | 创建一个切线空间转为世界空间的3x3矩阵 |
TransformTangentToWorld(real3 dirTS, real3x3 tangentToWorld) | 当前切线空间转世界空间矩阵,通常用于把顶点/方向矢量从切线空间转到世界空间 |
TransformWorldToTangent(real3 dirWS, real3x3 tangentToWorld) | 当前世界空间转切线空间矩阵,通常用于把顶点/方向矢量从世界空间转到切线空间 |
TransformTangentToObject(real3 dirTS, real3x3 tangentToWorld) | 当前切线空间转模型空间矩阵,通常用于把顶点/方向矢量从切线空间转到模型空间 |
Comments NOTHING