0
我为每个顶点着色和其他每片段着色都写了两个着色器,这两个着色器都模拟点光漫射照明,两个着色器都在不弹出错误的情况下工作,但渲染的per-frag模型着色器看起来与每个顶点的结果相同,我的意思是顶点之间的per-frag平滑效果看起来与每个顶点线性内插结果相同的百分之百。每个片段着色失败
所以,,,,我的代码出了什么问题,或者我误解了一些东西,是否有任何区别texcoord set 0 1 2 3 4?
每顶点着色器:
Shader "Custom/neo2" {
Properties {
_LightPosX("lightposx",float) = 14
_LightPosY("lightposy",float) = 14
_LightPosZ("lightposz",float) = 14
}
SubShader {
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
float _LightPosX;
float _LightPosY;
float _LightPosZ;
struct tex{
float4 tex0:TEXCOORD0;
float4 tex1:TEXCOORD1;
};
struct col{
float4 col;
};
col vert(float4 pos:POSITION,out float4 oPos:SV_POSITION,float3 normal:Normal){
oPos = mul(UNITY_MATRIX_MVP,pos);
col c;
float3 normalDir = normalize((mul(_Object2World,float4(normal,0))).xyz);
float3 lightDir = normalize(float4(_LightPosX,_LightPosY,_LightPosZ,1) - mul(_Object2World,pos));
c.col = float4(1,1,1,1)*dot(normalDir,lightDir);
return c;
}
float4 frag(col c):COLOR{
return c.col;
}
ENDCG
}
}
FallBack "Diffuse"
}
每个片段着色器:
Shader "Custom/neo3" {
Properties {
_LightPosX("lightposx",float) = 14
_LightPosY("lightposy",float) = 14
_LightPosZ("lightposz",float) = 14
}
SubShader {
Pass{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
float _LightPosX;
float _LightPosY;
float _LightPosZ;
struct tex{
float4 tex0:TEXCOORD0;
float4 tex1:TEXCOORD1;
};
tex vert(float4 pos:POSITION,out float4 oPos:SV_POSITION,float3 normal:Normal){
oPos = mul(UNITY_MATRIX_MVP,pos);
tex t;
t.tex0 = mul(_Object2World,pos);
t.tex1= normalize(mul(_Object2World,float4(normal,0)));
return t;
}
float4 frag(tex t):COLOR{
float3 lightDir = normalize(float3(_LightPosX,_LightPosY,_LightPosZ) - t.tex0);
float4 col = float4(1,1,1,1)*dot(t.tex1,lightDir);
return col;
}
ENDCG
}
}
FallBack "Diffuse"
}