7.1.1简单纹理光照
Shader "Custom/chap7.1.1/single-texture"
{
Properties
{
_MainTex("Main Texture", 2D) = "White" {}
_Color ("Color Tint", Color) = (1.0,1.0,1.0,1.0)
}
SubShader
{
pass {
Tags { "RenderPipeLine"="UniversalRenderPipeline" "RenderType"="Opaque" "LightMode"="UniversalForward"}
HLSLPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Lighting.hlsl"
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/SpaceTransforms.hlsl"
CBUFFER_START(UnityPerMaterial)
sampler2D _MainTex;
float4 _MainTex_ST;
float4 _Color;
CBUFFER_END
struct a2v {
float4 vertex: POSITION;
half3 normal: NORMAL;
float4 texcoord: TEXCOORD0;
};
struct v2f {
float4 pos: SV_POSITION;
half3 worldNormal: TEXCOORD0;
float3 worldPos: TEXCOORD1;
half2 uv: TEXCOORD2;
};
v2f vert(a2v v) {
v2f o;
o.pos = TransformObjectToHClip(v.vertex);
o.worldNormal = TransformObjectToWorldNormal(v.normal);
o.worldPos = TransformObjectToWorldDir(v.vertex.xyz);
o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
return o;
}
float4 frag(v2f i) : SV_Target {
half3 ambient = _GlossyEnvironmentColor.xyz;
Light worldLight = GetMainLight();
half3 worldLightDir = TransformObjectToWorldDir(worldLight.direction);
half3 lightColor = LightingLambert(worldLight.color.rgb, worldLightDir, i.worldNormal);
half3 albedo = tex2D(_MainTex, i.uv).rgb * _Color.rgb;
return float4((albedo * lightColor + ambient * albedo),1.0);
}
ENDHLSL
}
}
}