手册:https://docs.unity3d.com/Manual/SL-BuiltinFunctions.html
UnityCG.cginc中一些常用的帮助函数:
Function Name | Description |
---|---|
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) | 输入一个模型空间中的顶点位置,返回模型空间从该点到光源的光照方向。没有被归一化 |
float3 UnityObjectToWorldDir(float3 dir) | 把方向矢量从模型空间变化到世界空间中 |
float3 UnityObjectToWorldNormal(float3 dir) | 把法线方向从模型空间转换到世界空间中 |
float3 UnityWorldToObjectDir(float3 dir) | 把方向矢量从世界空间变化到模型空间 |
一些相关代码:
// Computes world space light direction, from world space position
inline float3 UnityWorldSpaceLightDir( in float3 worldPos )
{
#ifndef USING_LIGHT_MULTI_COMPILE
return _WorldSpaceLightPos0.xyz - worldPos * _WorldSpaceLightPos0.w;
#else
#ifndef USING_DIRECTIONAL_LIGHT
return _WorldSpaceLightPos0.xyz - worldPos;
#else
return _WorldSpaceLightPos0.xyz;
#endif
#endif
}
// Computes world space view direction, from object space position
inline float3 UnityWorldSpaceViewDir( in float3 worldPos )
{
return _WorldSpaceCameraPos.xyz - worldPos;
}