逐象素的Spot Light的实现

时间:2021-09-14 18:54:47
先得到象素到光源的向量, 与光源方向, 求夹角, 然后在平滑的插值作为强度了返回,
CG代码如下:
float InSpot(float3 LightPos,
   float3 LightVec,
   float3 PixelPos)
{
  float3 vec1 = normalize(PixelPos - LightPos);
  float cosangle = dot(LightVec, vec1);
  return smoothstep(0.707f, 1.0f, cosangle);
}

使用时,这样处理 color.xyz = (emissive + ambient + diffuse + specular)*InSpot(lightPosition, lightVec, P);
color.w = 1;