由于逐顶点光照依赖于线性插值来得到像素光照,因此,当光照模型中有非线性的计算,逐顶点光照会出现问题。
由于逐顶点光照会在渲染图元内部对顶点颜色进行插值,这会导致渲染图元内部的颜色总是暗于顶点处的最高颜色值,这在某些情况下会有明显的棱角现象。
逐像素中,我们以每个像素为基础,得到他的法线,然后进行光照模型的计算。
效果:
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'
// Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'
//逐像素光照
Shader "Diffuse Pixel-Level"
{
Properties
{
_Diffuse("Diffuse", Color) = (1,1,1,1)
}
SubShader
{
Pass
{
Tags{"LightModel" = "ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
float4 _Diffuse;
struct a2v
{
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f