首页 > 分享 > Shader(五) 逐顶点 逐像素 和 Lambert 光照模型案例

Shader(五) 逐顶点 逐像素 和 Lambert 光照模型案例

最新推荐文章于 2024-07-24 22:11:54 发布

会思考的猴子 于 2020-03-05 18:24:53 发布

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

Shader "Unlit/Chapter6-DiffuseVertexLevel"

{

Properties{

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

}

SubShader{

Pass{

Tags{"LightMode" = "ForwardBase"}

CGPROGRAM

#include pragma vert

#include pragma frag

#include "Lighting.cginc"

fixed4 _Diffuse;

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 WorldSpaceLightDir = normalize(_WorldSpaceLightPos0.xyz);

fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb *saturate(dot(worldNormal,WorldSpaceLightDir));

o.color = ambient + diffuse;

return o;

}

fixed4 frag(v2f i): SV_TARGET0{

return fixed4(i.color,1.0);

}

ENDCG

}

}

Fallback "Diffuse"

}

Shader "Unlit/PixelShader"

{

Properties{

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

}

SubShader{

Pass{

Tags{"LightModel" = "ForwardBase"}

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#include "Lighting.cginc"

struct a2v{

float4 vertex:POSITION;

float4 normal:NORMAL0;

};

struct v2f{

float4 pos:SV_POSITION;

float3 worldNormal:TEXCOORD0;

};

fixed4 _Diffuse;

v2f vert(a2v v){

v2f o;

o.pos = UnityObjectToClipPos(v.vertex);

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

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.rbg*saturate(dot(worldNormal,worldLightDir));

fixed3 color = ambient +diffuse;

return fixed4(color,1.0);

}

ENDCG

}

}

}

Shader "Unlit/HalfLambert"

{

Properties{

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

}

SubShader{

Pass{

Tags{"LightModel" = "ForwardBase"}

CGPROGRAM

#pragma vertex vert

#pragma fragment frag

#include "Lighting.cginc"

struct a2v{

float4 vertex:POSITION;

float4 normal:NORMAL0;

};

struct v2f{

float4 pos:SV_POSITION;

float3 worldNormal:TEXCOORD0;

};

fixed4 _Diffuse;

v2f vert(a2v v){

v2f o;

o.pos = UnityObjectToClipPos(v.vertex);

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

return o;

}

fixed4 frag(v2f i):SV_TARGET0{

fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;

fixed3 worldNormal = normalize(i.worldNormal);

fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);

fixed halfLambert = dot(worldNormal,worldLightDir) * 0.5 + 0.5;

fixed3 diffuse = _LightColor0.rgb *_Diffuse.rbg*halfLambert;

fixed3 color = ambient + diffuse;

return fixed4(color,1.0);

}

ENDCG

}

}

}

相关知识

无光照可调节透明通道Shader(unity3d)
关于花逐的诗词
photoshop CS3教程: 制作逐帧动画开花效果
音乐剧《逐梦》亮相上海国际艺术节 讲述铁路工人逐梦之路
逐本东方疗愈之道艺术展开幕,重唤内里平衡之美 卸下纷扰,逐本就好
Unity Shader 之 环境光
模型案例:| 大豆虫害识别模型!
追光逐影乐在其中
逐浪立楷字体下载 逐浪立楷字体 字体下载
逐本东方疗愈之道艺术展开幕 重唤内里匀和之美

网址: Shader(五) 逐顶点 逐像素 和 Lambert 光照模型案例 https://m.huajiangbk.com/newsview707783.html

所属分类:花卉
上一篇: 鲜活案例分享:光照程序对蛋鸡有多
下一篇: 第177集 PR调整效果之光照效