在Unity中,Shader是渲染图形的核心,而点光源则是实现光照效果的关键。通过掌握点光源的制作,你可以轻松打造出真实感十足的游戏场景。本文将带你一步步学习Unity Shader点光源的制作,让你在游戏开发的道路上更加得心应手。
一、点光源基础
1.1 点光源概念
点光源是一种从单个点向四周发射光线的光源。它适用于模拟手电筒、灯泡等小型光源。
1.2 点光源特点
- 光线从中心点向四周发散;
- 光照范围有限,距离中心点越远,光照强度越弱;
- 可以设置光照颜色、强度和衰减等属性。
二、Unity Shader点光源制作
2.1 创建Shader
- 打开Unity编辑器,选择“Assets”>“Create”>“Shader”>“Standard Surface”。
- 将创建的Shader重命名为“PointLightShader”。
2.2 编辑Shader
- 双击“PointLightShader”,打开ShaderLab编辑器。
- 在ShaderLab编辑器中,找到“Properties”部分,添加以下属性:
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1)
_Intensity ("Intensity", Range(0, 100)) = 50
_Range ("Range", Range(0, 100)) = 10
}
- 在“SubShader”部分,添加以下代码:
SubShader
{
Tags { "RenderType"="Opaque" }
LOD 100
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float3 worldPos : TEXCOORD1;
float4 vertex : SV_POSITION;
};
sampler2D _MainTex;
float4 _Color;
float _Intensity;
float _Range;
v2f vert (appdata v)
{
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
return o;
}
fixed4 frag (v2f i) : SV_Target
{
float distance = length(i.worldPos - unity_LightPosition.xyz);
float attenuation = smoothstep(_Range, _Range - 1, distance);
fixed4 col = tex2D(_MainTex, i.uv) * _Color * _Intensity * attenuation;
return col;
}
ENDCG
}
}
2.3 应用Shader
- 创建一个Cube对象,并将其材质设置为“PointLightShader”。
- 在Cube对象的“Light”组件中,选择“Point”类型,并设置相应的属性。
三、总结
通过本文的学习,你已成功掌握了Unity Shader点光源的制作方法。在实际应用中,你可以根据需求调整Shader代码,实现更多光照效果。祝你游戏开发之路越走越远!
