本文主要是介绍shader- 之高光反射,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
Shader "Shadertest/test1Shader" {
Properties {
_Diffuse ("Diffuse", Color) = (1,1,1,1)
}
SubShader {
//Tags { "RenderType"="Opaque" }
//顶点/片元着色器代码需要卸载pass
pass{
Tags{"LightMode" = "ForwardBase"} //定义光照模式
CGPROGRAM
fixed4 _Diffuse;
#pragma vertex vert //定义顶点着色器
#pragma fragment frag // 定义片元着色器
#include "Lighting.cginc" //unity 内置变量
//输入结构体
struct a2v
{
float4 vertex : POSITION; //顶点信息
float3 normal : NORMAL; //法线信息
};
//输出结构体也是片元着色器的输入结构体
struct v2f
{
float4 pos : SV_POSITION;//保存片元着色器中的顶点在裁剪空间中的坐标
fixed3 color : COLOR;//接收片元着色器中计算出来的光照颜色
};
v2f vert(a2v v)
{
v2f o;
//保存顶点在裁剪空间中的坐标信息
o.pos = UnityObjectToClipPos(v.vertex);
//得到环境光部分
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
//把顶点法线转换到世界空间中
fixed3 worldnormal = normalize(mul(v.normal,(float3x3)unity_WorldToObject));
//光源方向归一化
fixed3 worldlight = normalize(_WorldSpaceLightPos0.xyz);
//光源颜色和强度、漫反射属性、顶点法线、光源方向,利用公式计算
fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * saturate(dot(worldnormal,worldlight));
//环境光 + 漫反射光 = 最终光照结果
o.color = ambient + diffuse;
return o;
}
//片元着色器
fixed4 frag(v2f i) : SV_Target
{
return fixed4(i.color,1.0);
}
ENDCG
}
}
FallBack "Diffuse"
}
//
这篇关于shader- 之高光反射的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!