简介

lambert 光照模型可以说是最简单的光照模型了. 主要考虑了 漫反射. 漫反射也单单考虑了经验模型.

主要观察 面片渲染器(我是这么叫的)

参考链接

https://zhuanlan.zhihu.com/p/191561026

https://zhuanlan.zhihu.com/p/144681176

code

#version 420
out vec4 FragColor;
in vec3 pos;
in vec3 color;
uniform int colormode = 1;
uniform int drawmode = 1;
void main() {
if(colormode == 0){
FragColor = vec4(color,1.0);
} else if (colormode == 1) {
if(drawmode == 0){
FragColor = vec4(0.25,0.25,0.25,1.0);
} else {
vec3 n = normalize(cross(dFdx(pos),dFdy(pos)));
vec3 lposition = vec3(0.0f,0.0f, 255f);
vec3 viewposition = vec3(0.0f,0.0f, 0.5f); float f = 0.6f;
float ambient_light_coefficient = 0.4f;
vec3 ambient = vec3(0.6f, 0.6f, 0.6f);
vec3 lightDir = normalize(lposition - pos);
vec3 color_diffuse = ambient * max(0.0, dot(n, lightDir)) * f; FragColor = vec4(color_diffuse,1.0);
}
} else {
FragColor = vec4(1.0, 0.0, 0.0, 1.0);
}
}

核心代码讲解

vec3 color_diffuse = ambient * max(0.0, dot(n, lightDir)) * f;

漫反射 = 光照强度(环境光) * 光照向量和物体表面法向量的余弦值 * 反射系数;

注: 余弦值是正值, 最小值为0, 表示没有光照影响.

注: 余弦值的计算为 两个单位向量的点乘.

\[diffuse = light_{ambient} * | cos \theta | * f;
\]

image

Lambert 光照模型的更多相关文章

  1. Unity3D ShaderLab Half Lambert光照模型

    Half Lambert光照模型 说到Half Lambert ,就不得不说反恐精英了,在制作反恐精英的过程中,为了防止物体的背面光丢失而显得太过平面化,就用了这个称之为half lambert的技术 ...

  2. Lambert(朗伯)光照模型 和Half Lambert的区别

    Lambert-它不包括任何任何镜面属性,对粗糙物体来说,这项属性是非常有用的,它不会反射出周围的环境.Lambert材质可以是透明的,在光线追踪渲染中发生折射,但是如果没有镜面属性,该类型就不会发生 ...

  3. Lambert (兰伯特)光照模型

    Lambert (兰伯特)光照模型 是光源照射到物体表面后,向四面八方反射,产生的漫反射效果.这是一种理想的漫反射光照模型.如下图:这个是顶点函数处理后的该光照模型,因此看起来像素不够平滑. 漫反射 ...

  4. [CG编程] 基本光照模型的实现与拓展以及常见光照模型解析

    0.前言 这篇文章写于去年的暑假.大二的假期时间多,小组便开发一个手机游戏的项目,开发过程中忙里偷闲地了解了Unity的shader编写,而CG又与shaderLab相似,所以又阅读了<CG教程 ...

  5. Unity3D ShaderLab 自定义光照模型

    接着上一篇BasicMyDiffuse的代码来说,这次要说明的就是自定义的光照模型,Ctrl+D>BasicMyDiffuse. 1.>//#pragma surface surf Lam ...

  6. 【Unity Shaders】使用CgInclude让你的Shader模块化——创建CgInclude文件存储光照模型

    本系列主要參考<Unity Shaders and Effects Cookbook>一书(感谢原书作者),同一时候会加上一点个人理解或拓展. 这里是本书全部的插图. 这里是本书所需的代码 ...

  7. Unity shader学习之逐像素漫反射光照模型

    shader如下: Shader "Custom/Diffuse Fragment-Level" { Properties { _Diffuse (,,,) } SubShader ...

  8. (转)光照模型及cg实现

    经典光照模型(illumination model) 物体表面光照颜色由入射光.物体材质,以及材质和光的交互规律共同决定. 由于环境光给予物体各个点的光照强度相同,且没有方向之分,所以在只有环境光的情 ...

  9. Lambert模型

    [Lambert模型] 漫反射光的强度近似地服从于Lambert定律,即漫反射光的光强仅与入射光的方向和反射点处表面法向夹角的余弦成正比. 由此可以构造出Lambert漫反射模型:Idiffuse = ...

  10. Unity Shader入门教程(三)自制光照模型

    光照模型的概念目前还不明晰,因为笔者也是一个初学者,所以请小心对待笔者介绍的内容.笔者认为光照模型是规定光照算法的模型,比如说前面提到的Lambert光照模型,规定了材质表面的光线的表达式为 环境光+ ...

随机推荐

  1. bat脚本之启动MySQL服务

    @echo off :: 获取管理员权限 %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute(&quo ...

  2. ESP-IDF教程1 开发环境

    1.开发环境 对于 ESP32 系列芯片的开发环境主要有如下几种方式: ESP-IDF(Espressif IoT Development Framework) Arduino PlatformIO ...

  3. 【docker】4种网络模式

    bridge模式 使用--net=bridge指定,Docker的默认设置,这种模式创建出来的docker容器链接到Dcoker网桥上(docker0网桥或者其它自定义的网桥): 1)创建一对虚拟网卡 ...

  4. Spring基于XML AOP事务控制

    Spring基于XML AOP事务控制 源码 代码测试 pom.xml <?xml version="1.0" encoding="UTF-8"?> ...

  5. vue3 基础-Vuex 全局数据状态管理

    针对页面间, 组件间的数据共享问题, Vue 提供一个数据管理框架 Vuex, 早期主要是用于 Vue2 , 而现在用 Vue3 也是可以正常使用, 但在 Composition API 下则会感到这 ...

  6. HarmonyOS数据防泄漏服务(DLP)开发实战

    系统级数据防护的核心能力解析 在企业级文档管理.教育课件分发.金融合同处理等场景中,数据泄露风险贯穿文件生命周期.HarmonyOS提供的数据防泄漏服务(DLP),通过沙箱隔离.端云协同认证.细粒度权 ...

  7. docker容器安装TensorFlow_gpu 版本遇到的坑。。。

    运行并挂载docker镜像 docker run -it -v E:/workspace/docker:/dl -p 8888:8888 8d78dd1e1b64 /bin/bash 安装jupyte ...

  8. 网络编程:reactor反应堆_TCP字节流处理和HTTP协议实现

    buffer对象 buffer对象:顾名思义,就是一个缓冲区对象,缓存了从套接字接收来的数据以及需要发往套接字的数据. 如果是从套接字接受来的数据,事件处理回调函数在不断地往buffer对象增加数据, ...

  9. MySQL的表空间释放

    概述 最近为了对 MySQL 数据库磁盘占用瘦身,对一张近100GB表的历史数据进行了 delete 删除,删除了约2/3的数据,删除后发现该表占用的空间并未减少.通过下面语句查看该表的磁盘占用情况: ...

  10. SSI注入

    .stm,.shtm和.shtml后缀文件中可以如此执行命令 <!--#exec cmd="ls"-->