//漫反射 半兰伯特 diffuse = (c.m)(0.5(n.i)+0.5)
//模型背光面有可以有明暗变化
Shader "Unity shader book/Chapter 6/HalfLambert" {
    Properties{
        _Diffuse("Diffuse",Color) = (1,1,1,1)
    }
        SubShader{
            Pass{
                Tags{"LightMode" = "ForwardBase"} //指定光照模式,只有定义正确的光照模式,才能得到unity内置光照变量 比如——LIghtColor0
                CGPROGRAM
    #pragma vertex vert
    #pragma fragment frag
    #include "Lighting.cginc"

fixed4 _Diffuse;//定义和属性类型匹配的变量
            //定义顶点着色器输入和输出结构体;float最高精度浮点值,32位;fixed最低浮点值,11位存储,范围-2.0到2.0;
        struct a2v {
            float4 vertext :POSITION;
            float3 normal : NORMAL;
        };
        struct v2f {
            float4 pos : SV_POSITION; //结构体必须包含顶点在剪裁空间的坐标位置信息
            float3 worldNormal:TEXCOORD0;
        };

v2f vert(a2v i) {
            v2f o;
            o.pos = mul(UNITY_MATRIX_MVP, i.vertext);
            o.worldNormal = UnityObjectToWorldNormal(i.normal);
            return o;
        }

fixed4 frag(v2f i) :SV_Target{
            fixed3 ambient = UNITY_LIGHTMODEL_AMBIENT.xyz;
            fixed3 worldNormal = normalize(i.worldNormal);
            fixed3 worldLightDir = normalize(_WorldSpaceLightPos0.xyz);

fixed3 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"
}

6.2 漫反射-半兰伯特相关推荐

  1. Shader学习3——半兰伯特

    半兰伯特其实就是把暗的地方提亮了一些,在数值上就是获取到的光源强度* 0.5 + 0.5,也就是原来是0的会变成0.5,原来是1的还是1. 半兰伯特:漫反射颜色 = 光源颜色 x 材质的漫反射颜色 x ...

  2. 漫反射:兰伯特和半兰伯特

    兰伯特定律(Lambert is law); 反射光线的强度与表面法线和光源方向之间夹角的余弦值成正比: 漫反射公式:C diffuse=(C light * M diffuse)max(0, < ...

  3. Unity shader学习-漫反射-兰伯特光照模型和半兰伯特光照模型

    兰伯特漫反射公式:Diffuse = 直射光颜色 *物体颜色* max(0,cos夹角(光和法线的夹角) ) 下面给出顶点漫反射代码:   Shader "Unlit/005" { ...

  4. Unity shader 使用 半兰伯特 (Half-Lambert)漫反射会使得模型在没有直射光的情况下漆黑一片

    问题: Unity shader 使用 半兰伯特 (Half-Lambert)漫反射会使得模型在没有直射光的情况下漆黑一片,原因不得而知. 使用半兰伯特漫反射代码如下: *************** ...

  5. Unity Shader漫反射光照模型与半兰伯特光照模型

    文章目录 一.基础光照模型中漫反射部分的计算公式 二.逐顶点光照实现 逐顶点代码 逐顶点效果图 三.逐像素光照模型实现 逐像素代码 逐像素效果图 四.半兰伯特光照模型实现 广义半兰伯特光照模型公式 半 ...

  6. 9.半兰伯特光照模型

    前情提要:前面一节的漫反射实际上是根据兰伯特光照模型来进行实现的 但这种做法有个缺点就是顶点法线和光的夹角大于90度的时候的成色是完全黑的这和我们生活中见到的事物是不一样的.所以就有了新的光照模型-- ...

  7. U3D Shader半兰伯特模型

    兰伯特光照模型--在平面某点漫反射光的光强与该反射点的法向量和入射光角度的余弦值成正比.逐像素光照可以得到更加哦平滑的光照效果.但是,即便使用了逐像素漫反射光照,有一个问题仍然存在.在光照无法达到的区 ...

  8. 兰伯特光照模型(Lambert Lighting)和半兰伯特光照模型(Half-Lanbert)

    关于漫反射 光打到凹凸不平的平面上,光线会被反射到四面八方,被称为漫反射 关于这种模型,由于光线由于分散,所以进入人眼的光线强度和观察角度没有区别 在A点和B点接收到的光线强度是一样的 在漫反射下,光 ...

  9. 【Unity Shader】(2)半兰伯特模型 构建光照

    在unity的Shader中使用半兰伯特模型来构建光照 在认识半兰伯特模型之前,建议查看一下我之前的兰伯特模型构建光照 兰伯特光照模型 半兰伯特光照模型 由于兰伯特模型的计算公式仅截取了[0,1]的光 ...

最新文章

  1. python关于包的题怎么做_Python自定义包引入
  2. 奇妙的安全旅行之国密算法
  3. 【浙江大学PAT真题练习乙级】1009 说反话 (20分)真题解析
  4. 智能优化算法:基于Powell优化的鸽群优化算法
  5. 自制一个简单的操作系统
  6. filter 无效不起作用
  7. 网页提示https“证书错误:导航已阻止”,无法跳转解决办法
  8. abp moveto mysql_abp 使用 hangfire结合mysql
  9. VBA代码实例---Msgbox函数及应用实例
  10. SD卡变成RAW格式怎么办?SD卡RAW格式的解决办法
  11. flv.js播放视频时遇到的问题
  12. python之flappy bird(飞扬的小鸟)小游戏分享,内附源码哦~
  13. ElasticSearch:Reindex数据迁移使用
  14. JavaScript阻塞与非阻塞
  15. vue子组件通过.sync修饰符修改props属性
  16. AtCoder Grand Contest 012 E Camel and Oases 状压dp
  17. php 的几种运行方式
  18. Cannot find module coa/compile.js
  19. python实现监听键盘
  20. HCIA-1、存储接口及接口协议

热门文章

  1. *通配符与微信小程序的WXSS
  2. 运维平台元数据稽核小结
  3. mac mini u盘安装系统_桔子系统U盘启动安装教程
  4. Ubuntu Conda创建环境
  5. 谈一谈曾经的中国互联网吧
  6. 梦幻岛:一场“艺术策展”与“WEB3”的梦幻联动
  7. MC7812BTG详细参数介绍
  8. c++ 每个类都有一张虚方法表
  9. 桌上有一空盘,最多允许存放一个水果。爸爸可向盘中放一个苹果或放一个桔子,儿子专等吃盘中的桔子,女儿专等吃苹果。 试用P、V操作实现爸爸、儿子、女儿三个并发进程的同步。
  10. 前端实现自动打印 批量打印