当前位置:网站首页>半兰伯特光照模型
半兰伯特光照模型
2022-08-09 00:08:00 【ThomasQxx】
Shader "QStudyShader/Per_Fragment_HalfLambertLaw"
{
Properties{
}
SubShader{
Pass{
Tags{
"LightModel" = "ForwardBase"}
CGPROGRAM
#include "Lighting.cginc"
#pragma vertex Vertex
#pragma fragment Fragment
struct a2v {
float4 vertex : POSITION;
float3 normal : NORMAL;
};
struct v2f {
float4 pos : SV_POSITION;
float3 worldNormal : TEXCOORD0;
};
v2f Vertex(a2v v) {
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.worldNormal = UnityObjectToWorldNormal(v.normal);
return o;
}
fixed4 Fragment(v2f i) : SV_TARGET{
//世界空间下的法线方向
fixed3 worldNormal = normalize(i.worldNormal);
//世界空间下的光照方向
fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);
//环境光
fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
//半兰伯特光照公式
fixed halfLambert = dot(worldNormal, worldLightDir) * 0.5 + 0.5;
//漫反射强度
fixed3 diffuse = _LightColor0.xyz * halfLambert;
return fixed4(diffuse + ambient, 1.0);
}
ENDCG
}
}
}
边栏推荐
猜你喜欢
随机推荐
C--《C和指针》第8章读书笔记之效率问题
AcWing 173 矩阵距离 bfs
为什么依赖注入出现的频率这么高?
JS基础知识
C# this.Invoke()的作用与用法
AutoX安途杯中山大学程序设计校赛(同步赛)
基于单片机测量空气粘滞系数方案
sessionStorage值改变后,页面利用window.sessionStorage.getItem()获取到的值不会更新
flutter loading、Progress进度条
Mysql Workbench用.sql文件将数据导入数据库
穿越派如何续购相关产品功能
ES6入门基础知识
C#数据流
Task19_14_最长公共前缀
Mysql Workbench导出sql文件出错:Error executing task: ‘ascii‘ codec can‘t decode byte 0xd0 in position 26:
如何快速简单的设置你的vscode背景图
vs2012快捷键
第一章 数据库系统概述
IDEA常用插件及代快捷键模板整理
C--《C和指针》第七章读书笔记