UnityShader初级篇——使用半兰伯特光照模型
来源:互联网 发布:电脑不能打开淘宝网 编辑:程序博客网 时间:2024/06/05 00:21
1.使用半兰博光照模型
计算公式:
漫反射光照 = (光照颜色与强度 * 漫反射颜色)* (dot(法线方向 ,光照方向) * 0.5 + 0.5);
作用:
解决背光面阴暗无细节的问题,但仅仅是视觉加强,没有任何物理依据。
Shader "Unity Shaders Book/Chapter 6/HalfLambert"{Properties{ //定义属性,控制材质的漫反射颜色_Diffuse ("Diffuse", Color)=(1,1,1,1)}SubShader{Pass{ //指明该Pass的光照模式 Tags{"LightMode"="ForwardBase"} CGPROGRAM//告诉Unity我们定义的定点着色器和片远着色器的名字#pragma vertex vert#pragma fragment frag// 包含引用内置文件#include "Lighting.cginc"//引用属性,定义一个与该属性类型相匹配的变量fixed4 _Diffuse;//定义顶点着色器的输入和输出结构体struct a2v{float4 vertex : POSITION;float3 normal : NORMAL;//存储模型法线信息};struct v2f{float4 pos : SV_POSITION;float3 worldNormal : TEXCOORD0;};//在顶点着色器中只需将模法线传递给片元着色器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_Target{ //获取环境光 fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz; //获取世界空间下的法线并归一化 fixed3 worldNormal = normalize(i.worldNormal); //获取世界空间下的光照方向 fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz); //计算半兰伯特值 = dot(法线方向 ,光照方向)*0.5 +0.5; fixed halfLambert = dot(worldNormal, worldLightDir) * 0.5 + 0.5; //计算漫反射光照模型 fixed3 diffuse = _LightColor0.rgb * _Diffuse.rgb * halfLambert; fixed3 color = ambient + diffuse; return fixed4(color,1.0);}ENDCG}}Fallback "Diffuse"}
阅读全文
0 0
- UnityShader初级篇——使用半兰伯特光照模型
- UnityShader初级篇——BlinnPhong光照模型
- UnityShader初级篇——实现逐顶点漫反射光照模型
- UnityShader初级篇——实现逐像素漫反射光照模型
- UnityShader初级篇——实现逐顶点高光反射光照模型
- UnityShader初级篇——实现逐像素高光反射光照模型
- unityShader前篇之光照模型
- UnityShader初级篇——单张纹理
- UnityShader初级篇——凹凸映射
- UnityShader初级篇——渐变纹理
- UnityShader初级篇——透明度测试
- UnityShader初级篇——透明度混合
- UnityShader——球谐光照
- 学习UnityShader入门精要笔记2——标准光照模型
- UnityShader初级篇——使用假色彩图像调试代码
- UnityShader初级篇——遮罩纹理
- UnityShader从入门到放弃(五)漫反射—逐片元光照
- UnityShader初级篇——最简单的顶点/片元着色器
- hud-1596-find the safest road
- java的简单排序算法
- 【1701H1】【穆晨】【171015】连续第五天总结
- javaweb(七)——HttpServletResponse对象(一)
- 欢迎使用CSDN-markdown编辑器
- UnityShader初级篇——使用半兰伯特光照模型
- 电脑能上qq等软件但是浏览器打不开网页
- Python入门(五)——备份文件全过程
- queue队列-printer queue
- HDU 3954 Level up
- javaweb(八)——HttpServletResponse对象(二)
- Cordova开机画面
- poj 1745
- javaweb(九)—— 通过Servlet生成验证码图片