本文主要是介绍Unity Shader 高光反射光照模型-逐顶点,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
逐顶点光照
// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'Shader "MyShader/SpecularVertexLevel"
{Properties{_Diffuse("Diffuse",Color) = (1,1,1,1)_Specular("Specular", Color) = (1, 1, 1, 1)_Gloss("Gloss", Range(8.0, 256)) = 20}SubShader{Pass{Tags{"LightMode" = "ForwardBase"}CGPROGRAM#pragma vertex vert
#pragma fragment frag#include "Lighting.cginc"fixed4 _Diffuse;fixed4 _Specular;float _Gloss;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 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);fixed3 diffuse = _LightColor0.rgb*_Diffuse.rgb*saturate(dot(worldNormal, worldLightDir));fixed3 reflectDir = normalize(reflect(-worldLightDir, worldNormal));fixed3 viewDir = normalize(_WorldSpaceCameraPos.zyx - mul(unity_ObjectToWorld, v.vertex).zyx);fixed3 specular = _LightColor0.rgb*_Specular.rgb*pow(saturate(dot(reflectDir, viewDir)), _Gloss);o.color = ambient + diffuse + specular;return o;}fixed4 frag(v2f i) :SV_Target{return fixed4(i.color,1.0);}ENDCG}}Fallback "Specular"
}
效果,最左边那个
参考 我买的 unity shader 入门精要
这篇关于Unity Shader 高光反射光照模型-逐顶点的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!