0607_镜面反射(Specular)
参考:
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)相关推荐
- 庄懂着色器_L05_镜面反射
庄懂-BoyanTata的个人空间_哔哩哔哩_Bilibili 漫反射-Diffuse 镜面反射-Specular 常用向量 漫反射 跟Camera或者人眼的观察视角无关 镜面反射 跟Camera ...
- UnityShader——Phong光照模型 = Diffuse + Specular + Ambient
一.图形学颜色叠加乘法(各分量相乘) light(1, 1, 1) * stuff(0.2f, 0.3f, 0.5f) = (0.2f, 0.3f, 0.5f) 二.经验模型Phong Phong = ...
- 湖北经济学院的计算机是否强,graphics-ch11-真实感图形绘制_湖北经济学院:计算机图形学_ppt_大学课件预览_高等教育资讯网...
第十一章 真实感图形技术 1,简单光照明模型 2,多边形绘制方法 3,透明 4,整体观照明模型 5,光线跟踪算法 第十章 真实感图形绘制 光照模型 (Illumination Model):计算某 一 ...
- sBRDF空间双向反射分布函数完全解析
SBRDF空间双向反射分布函数解析 声明:本文大部分内容基于Ph.D David K. McAllister的博士论文<A GENERALIZED SURFACE APPEARANCE REPR ...
- MATLAB中的光照处理
在用MATLAB绘制三维图形时,不仅可以画出带光照模式的曲面,还能在绘图时指定光线的来源. 1.带光照模式的三维曲面 surfl命令用来画一个带光照模式的三维曲面图,该命令显示一个带阴影的曲面,结合了 ...
- UnityShader9:光照基础回顾
一.需要提前了解的 基于经验的基础光照,相比于后面物理光照的学习,简单不少: 光照基础:https://blog.csdn.net/Jaihk662/article/details/106624451 ...
- 美术 2.7 Metallic与Speculer流程
本篇参考B站视频[技术美术百人计划]美术 2.7 Metallic与Speculer流程_哔哩哔哩_bilibili 参考知乎链接:https://zhuanlan.zhihu.com/p/53086 ...
- 阿诺德给物体加描边_【C4DtoA 27】Arnold渲染器: Toon shader 1/3
Tips:共计约2400字,预计阅读用时8min,预计实践用时30+min: 内容提要:Toon Shader /卡通渲染 /赛璐珞着色法 /三渲二 多图预警. ------------------- ...
- CPT205 计算机图形 笔记
CPT205 计算机图形 笔记 函数查阅:windows 开发文档 week1 介绍课程 什么是computer graphics: 'Computer Graphics' is concerned ...
最新文章
- linux内核提供的内存操作函数
- gimp and screenshot
- Struts DispatchAction
- Silverlight初级教程-库
- java成绩查询_JavaWeb项目第三次总结_成绩查询的实现
- 10 有关业务/事件类型WQ在年2021的号码范围不存在
- js的正则表达,只允许数字和特殊
- C++优先队列priority_queue详解
- android studio第三方调试,Android Studio直接运行调试签名包
- linux sudo 配置文件,linux sudo使用和sudoers配置详解
- 八款最佳的远程桌面工具
- java碰撞检测代码_java 实现精确碰撞检测。
- 计算机键盘输入法基础知识,电脑基础知识:使用键盘打字
- 刚性捆绑,无线运营新模式
- kafka中的offset理解
- 时间复杂度和空间复杂度及多道例题讲解
- laravel-admin 批量操作
- DSPE-PEG-MMPs; PEG-MMPs-DSPE ;聚乙二醇-基质金属蛋白酶-磷脂 ;磷脂-聚乙二醇-基质金属蛋白酶
- Milking Cows【转帖】
- RHCSA第二天练习