Shader "Custom/LightPoint" {
Properties {
_MainTex ("Main Tex", 2D) = "white" {}
_Color ("Color Tint", Color) = (1, 1, 1, 1)
}
SubShader {
Tags {"Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" "DisableBatching"="True"}
Pass {
Tags { "LightMode"="ForwardBase" }
ZWrite On//深度写入
Blend SrcAlpha OneMinusSrcAlpha//开启混合模式
Offset 0,-10000
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Lighting.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
fixed4 _Color;
struct a2v {
float4 vertex : POSITION;
float4 texcoord : TEXCOORD0;
fixed4 texcoord1 : TEXCOORD1;
float3 color:COLOR;
};
struct v2f {
float4 pos : SV_POSITION;
float2 uv : TEXCOORD0;
};
v2f vert (a2v v) {
v2f o;
float scaleX = unity_ObjectToWorld[0][0];//先用3个变量对变换的分量进行记录
float scaleY = unity_ObjectToWorld[1][1];
float scaleZ = unity_ObjectToWorld[2][2];
unity_ObjectToWorld[0][0] = 1;
unity_ObjectToWorld[1][1] = 1;
unity_ObjectToWorld[2][2] = 1;
v.texcoord1.x = v.texcoord.x * scaleX;//将第二套uv坐标进行缩放
v.texcoord1.y = v.texcoord.y * scaleY;
float3 centerOffs = float3(float2(0.5, 0.5)*scaleX - v.texcoord1.xy, 0);//得保证面片是整体缩放
float3 centerLocal = v.vertex.xyz + centerOffs.xyz;
centerLocal.x = v.vertex.x*scaleX + centerOffs.x;
centerLocal.y = v.vertex.y*scaleY + centerOffs.y;
centerLocal.z = v.vertex.z*scaleZ + centerOffs.z;
float4 centerWolrd = mul(unity_ObjectToWorld, float4(centerLocal.xyz, 1.0));
float4 centerView = mul(UNITY_MATRIX_V, centerWolrd);
float4 viewP = centerView + float4(centerOffs.xy, 0.0, 0.0);//这里改成-,底下就不用翻转
o.pos = mul(UNITY_MATRIX_P, float4(viewP.xyz, 1));
o.uv = TRANSFORM_TEX(v.texcoord,_MainTex);
o.uv.y=1-o.uv.y;//上下翻转图像
return o;
}
fixed4 frag (v2f i) : SV_Target {
fixed4 c = tex2D (_MainTex, i.uv);
c.rgb *= _Color.rgb;
return c;
}
ENDCG
}
}
FallBack off
}