首页 分享 Shader(六) 高光 Phont 和 BlinnPhone 光照模型案例

Shader(六) 高光 Phont 和 BlinnPhone 光照模型案例

来源:花匠小妙招 时间:2024-11-28 23:15

Shader "Unlit/GrossVertex"

{

Properties{

_Diffuse("Diffuse",Color) = (1,1,1,1)

_Specular("Specular",Color) = (1,1,1,1)

_Gloss("Gross",Range(1.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: NORMAL0;

};

struct v2f{

float4 pos: SV_POSITION;

float3 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.xyz - mul(unity_ObjectToWorld,v.vertex).xyz);

fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir,viewDir)),_Gloss);

o.color = ambient +diffuse +specular;

return o;

}

fixed4 frag(v2f i):SV_TARGET0{

return fixed4(i.color,1.0);

}

ENDCG

}

}

Fallback "Diffuse"

}

Shader "Unlit/PixelLight"

{

Properties{

_Diffuse("Diffuse",Color) = (1,1,1,1)

_Specular("Specular",Color) = (1,1,1,1)

_Gloss("Gross",Range(1.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: NORMAL0;

};

struct v2f{

float4 pos: SV_POSITION;

float3 worldNormal: TEXCOORD0;

float3 worldPos: TEXCOORD1;

};

v2f vert(a2v v){

v2f o;

o.pos = UnityObjectToClipPos(v.vertex);

o.worldNormal = mul(v.normal,(float3x3)unity_WorldToObject);

o.worldPos = mul (unity_WorldToObject,v.vertex).xyz;

return o;

}

fixed4 frag(v2f i):SV_TARGET0{

fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;

fixed3 worldNormal = normalize(i.worldNormal);

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.xyz - i.worldPos.xyz);

fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir,viewDir)),_Gloss);

return fixed4(ambient +diffuse + specular,1.0);

}

ENDCG

}

}

}

Shader "Unlit/BlinnPhone"

{

Properties{

_Diffuse("Diffuse",Color) = (1,1,1,1)

_Specular("Specular",Color) = (1,1,1,1)

_Gloss("Gross",Range(1.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: NORMAL0;

};

struct v2f{

float4 pos: SV_POSITION;

float3 worldNormal: TEXCOORD0;

float3 worldPos: TEXCOORD1;

};

v2f vert(a2v v){

v2f o;

o.pos = UnityObjectToClipPos(v.vertex);

o.worldNormal = mul(v.normal,(float3x3)unity_WorldToObject);

o.worldPos = mul (unity_WorldToObject,v.vertex).xyz;

return o;

}

fixed4 frag(v2f i):SV_TARGET0{

fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;

fixed3 worldNormal = normalize(i.worldNormal);

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.xyz - i.worldPos.xyz);

fixed3 halfDir = normalize(worldNormal +viewDir);

fixed3 specular = _LightColor0.rgb * _Specular.rgb * pow(saturate(dot(reflectDir,viewDir)),_Gloss);

return fixed4(ambient +diffuse + specular,1.0);

}

ENDCG

}

}

}

相关知识

Unity Shader 之 环境光
无光照可调节透明通道Shader(unity3d)
在新加坡,大模型在GAIR 2023上迎来高光时刻
模型案例:| 大豆虫害识别模型!
【一个案例带你熟悉D5渲染器】第二节:环境光照
室外光照和场景设置
基于MOPSO和TOPSIS的多目标优化温室黄瓜光环境调控模型
中国大模型图鉴:深度解读《2023大模型落地应用案例集》
光照常用设置&经验总结
“农业+大模型”的八大应用场景及成功案例

网址: Shader(六) 高光 Phont 和 BlinnPhone 光照模型案例 https://www.huajiangbk.com/newsview768415.html

所属分类:花卉
上一篇: 开发商因房屋设计缺陷被判补偿2万
下一篇: 【量子催眠案例分享】把光照进人的

推荐分享