参考:
three.js各种材质的实现源码
phong-demo
blinn-phone

镜面反射(Specular)

因其反射有明显方向性,所以观察者的视角决定了反射光线的有无,明暗;

实现方式:

  • Phong (r dot v),即光反射方向和视角方向越重合,反射越强;
  • Blinn-Phong (n dot h),即法线方向和半角方向越重合,反射越强;

效果(只有镜面光照):

Phong和Blinn-Phong顶点着色代码相同vs:

varying vec3 nDir;
varying vec3 vertPos;
uniform vec3 lightPos;
varying vec3 lDir;void main() {nDir = normalize( normalMatrix * normal.xyz );vertPos = vec3(modelViewMatrix * vec4(position, 1.));lDir = normalize( normalMatrix * lightPos );gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );
}

1、Phong

// 顶点的法线
varying vec3 nDir;
// 顶点位置
varying vec3 vertPos;
// 光照方向
varying vec3 lDir;uniform float Ks;
uniform float shininessVal;
uniform vec3 specularColor;void main() {vec3 N = nDir;vec3 L = normalize(lDir);// Lambert's cosine lawfloat lambertian = max(dot(N, L), 0.0);if(lambertian > 0.0) {// Reflected light vectorvec3 R = reflect(-L, N);// Vector to viewervec3 V = normalize(-vertPos);// Compute the specular termfloat specAngle = max(dot(R, V), 0.0);float specular = pow(specAngle, shininessVal);gl_FragColor = vec4(Ks * specular * specularColor, 1.0);}
}

2、Blinn-Phong

n dot h

h是v与l的角分线。

// 顶点的法线
varying vec3 nDir;
// 顶点位置
varying vec3 vertPos;
// 光照方向
varying vec3 lDir;uniform float Ks;
uniform float shininessVal;
uniform vec3 specularColor;void main() {vec3 N = nDir;vec3 L = normalize(lDir);// Lambert's cosine lawfloat lambertian = max(dot(N, L), 0.0);if(lambertian > 0.0) {vec3 V = normalize(-vertPos);vec3 H = normalize(L+V);float specAngle = max(dot(H,N), 0.0);float specular = pow(specAngle, shininessVal);gl_FragColor = vec4(Ks * specular * specularColor, 1.0);}
}

0607_镜面反射(Specular)相关推荐

  1. 庄懂着色器_L05_镜面反射

    庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 漫反射-Diffuse  镜面反射-Specular 常用向量 漫反射 跟Camera或者人眼的观察视角无关 镜面反射  跟Camera ...

  2. UnityShader——Phong光照模型 = Diffuse + Specular + Ambient

    一.图形学颜色叠加乘法(各分量相乘) light(1, 1, 1) * stuff(0.2f, 0.3f, 0.5f) = (0.2f, 0.3f, 0.5f) 二.经验模型Phong Phong = ...

  3. 湖北经济学院的计算机是否强,graphics-ch11-真实感图形绘制_湖北经济学院:计算机图形学_ppt_大学课件预览_高等教育资讯网...

    第十一章 真实感图形技术 1,简单光照明模型 2,多边形绘制方法 3,透明 4,整体观照明模型 5,光线跟踪算法 第十章 真实感图形绘制 光照模型 (Illumination Model):计算某 一 ...

  4. sBRDF空间双向反射分布函数完全解析

    SBRDF空间双向反射分布函数解析 声明:本文大部分内容基于Ph.D David K. McAllister的博士论文<A GENERALIZED SURFACE APPEARANCE REPR ...

  5. MATLAB中的光照处理

    在用MATLAB绘制三维图形时,不仅可以画出带光照模式的曲面,还能在绘图时指定光线的来源. 1.带光照模式的三维曲面 surfl命令用来画一个带光照模式的三维曲面图,该命令显示一个带阴影的曲面,结合了 ...

  6. UnityShader9:光照基础回顾

    一.需要提前了解的 基于经验的基础光照,相比于后面物理光照的学习,简单不少: 光照基础:https://blog.csdn.net/Jaihk662/article/details/106624451 ...

  7. 美术 2.7 Metallic与Speculer流程

    本篇参考B站视频[技术美术百人计划]美术 2.7 Metallic与Speculer流程_哔哩哔哩_bilibili 参考知乎链接:https://zhuanlan.zhihu.com/p/53086 ...

  8. 阿诺德给物体加描边_【C4DtoA 27】Arnold渲染器: Toon shader 1/3

    Tips:共计约2400字,预计阅读用时8min,预计实践用时30+min: 内容提要:Toon Shader /卡通渲染 /赛璐珞着色法 /三渲二 多图预警. ------------------- ...

  9. CPT205 计算机图形 笔记

    CPT205 计算机图形 笔记 函数查阅:windows 开发文档 week1 介绍课程 什么是computer graphics: 'Computer Graphics' is concerned ...

最新文章

  1. linux内核提供的内存操作函数
  2. gimp and screenshot
  3. Struts DispatchAction
  4. Silverlight初级教程-库
  5. java成绩查询_JavaWeb项目第三次总结_成绩查询的实现
  6. 10 有关业务/事件类型WQ在年2021的号码范围不存在
  7. js的正则表达,只允许数字和特殊
  8. C++优先队列priority_queue详解
  9. android studio第三方调试,Android Studio直接运行调试签名包
  10. linux sudo 配置文件,linux sudo使用和sudoers配置详解
  11. 八款最佳的远程桌面工具
  12. java碰撞检测代码_java 实现精确碰撞检测。
  13. 计算机键盘输入法基础知识,电脑基础知识:使用键盘打字
  14. 刚性捆绑,无线运营新模式
  15. kafka中的offset理解
  16. 时间复杂度和空间复杂度及多道例题讲解
  17. laravel-admin 批量操作
  18. DSPE-PEG-MMPs; PEG-MMPs-DSPE ;聚乙二醇-基质金属蛋白酶-磷脂 ;磷脂-聚乙二醇-基质金属蛋白酶
  19. Milking Cows【转帖】
  20. RHCSA第二天练习

热门文章

  1. 基于STM32的五子棋游戏
  2. 微信运动服务器多久同步一次,微信运动多久更新一次步数(微信运动刷新时间表)...
  3. Trino 本地编译搭建 standalone 模式
  4. 大数据剖析:想与北上争雄,深圳到底还差在哪儿?
  5. Android 4.4 Kit Kat 源码下载
  6. 系统集成十大项目管理(1)
  7. 舞象云出席泰华商城智慧营销系统上线发布会,问道传统百货新未来
  8. kali之vulhub,medium_socnet
  9. 腾讯位置服务定位组件实现周边公用厕所远近排序分布图
  10. iOS 直播类,交友类,陪玩类 app 上架攻略