哈喽,上次我们有分享过Diffuse漫反射的基本光照原理Unity | Diffuse Light漫反射光照,现在我们来聊一下另外一个反射,specular镜面或者高光反射。

在OpenGL中,光照使用的是简化的模型,即对现实的情况进行近似,这样处理起来会容易一些而且看起来效果也差不多。而这些光照模型都是基于我们对光的物理特性的理解。

要处理光照模型,我们有常见的三种多边形的着色方法,分别是Flat Shading,Gouraud Shading和Phong Shading。三种效果图如下:

1Flat Shading

Flat shading是最简单的着色模型,打光时每个多边形只会呈现一个颜色,这个颜色由面法向量和光照计算得来。

在该模型中,每个多边形中只有多边形的面存在法向量,而其各个顶点没有。所以早期的flat shading计算是按照面为单位来进行计算的,计算结果并不很准确。

2Gouraud Shading

Gouraud shading着色器模型,多边形的每个顶点都有一个法向量,它在着色时对每个法向量进行点乘反射计算,再通过双线性插值计算三角形区域中其它像素的颜色(比如中间像素的颜色)。

3Phong Shading

Phong shading是三者之中最复杂的着色方法。它的特点是结合了多边形物体表面反射光的亮度,并以特定位置的表面法线作为像素参考值,以插值方式来估计其他位置像素的色值。在这种情况下,多边形中每个顶点都有一个法向量,通过这些法向量与光照计算,来得到每个点的颜色。在使用有限数量的多边形时,对顶点法向量进行插值可以给出近似平滑的曲面效果,所以phong会计算更多的点乘反射,运行也比上面两种更加复杂。

相比之下,flat着色模型比较简单,但是后面两种计算方法虽然都需要应用多边形的法向量计算出其公共顶点的法向量,也都需要计算各顶点处的光强,但在逐像素计算上还是有所区别。

Phong shading在计算的时候会将插值以后的像素点对应的法向量再次与光照进行计算,得到其着色,而gouraud shading的计算只是对多边形的每个顶点计算好着色,然后再使用双线性插值方法对上面像素进行计算,不会再将其与光照进行反射计算。

4Obj File计算

上述三种模型在计算的时候法向量是从哪里来的呢,我们打开一个简单的obj格式的box文件如下;

V(Geometric vertices),表示物体中各个顶点的信息;

Vt(Texture vertices),表示贴图坐标点;

Vn(Vertex normals),顶点法线;

F(Face),所有顶点组成的面的信息

而这些数据中没有面法线的值,所以flat shading在计算光照的过程中,需要单独根据点法线对面法线进行计算。对GouraudShading 和 Phong Shading来说,就只需要取值然后一顿猛算就对了.

5Specular高光反射

Phong shading的模型主要由三个分量组成:环境(Ambient),漫反射(Diffuse)和镜面或者高光反射(Specular),所以下面这张图中,前三个加起来就会得到最后一个的效果。

环境光照指的是即使在黑暗的情况下,环境中也仍然有一些光亮,所以物体几乎永远不会是完全黑暗的,所以我们用这个环境光照来给物体一些颜色。

而diffuse已经在上次分享过原理以及计算过程了,所以只需要加上我们这次探讨的specular就可以完成phong的实现。

Specular是模拟光泽物体上面出现的亮点,而镜面光照的颜色相比于物体的颜色会更倾向于光的颜色。

如果我们的物体是一面镜子,无论从哪个方向去看,都会看到镜面光照的最大值,真相如图:

对于specular,我们计算的是反射向量和视线方向的角度差,如果夹角越小,那么镜面光的影响就会越大。它的作用效果就是,当我们去看光被物体所反射的那个方向的时候,我们会看到一个高光。而具体在shader graph中的计算过程,我留着下一节来聊叭。

- End -

specular图使用方法_Unity| Specular高光反射初探(上)相关推荐

  1. specular图使用方法_KeyShot中Poliigon贴图的使用方法整理

    Poliigon是国外著名的优质贴图资源站. > Their wide array of high quality textures are rich in detail, can be use ...

  2. specular图使用方法_【太干货】八猴中角色和材质的设置瞬间提升作品逼格。(图文教程)...

    原标题:[太干货]八猴中角色和材质的设置瞬间提升作品逼格.(图文教程) 八猴中角色和材质的设置 作者: Anton Kozlov https://www.artstation.com/antonkoz ...

  3. 问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(2.2)——高光反射(specular reflection)

    和diffuse reflection对应的是specular reflection.一直以来,本人都将"specular reflection"理解为"镜面反射&quo ...

  4. unity入门精要之第6 章 Unity 中的基础光照---实现高光反射光照模型

    Unity系列文章目录 文章目录 Unity系列文章目录 前言 参考 前言 在6.2.4 节中,我们给出了基本光照模型中高光反射部分的计算公式: 从公式可以看出,要计算高光反射需要知道4 个参数:入射 ...

  5. Unity Shader 高光反射光照模型

    高光反射光照模型计算公式如下: 需要四个参数:入射光线的颜色和强度,材质的高光反射系数,视角方向,反射方向. 反射方向可以由表面法线和光源方向计算而得: 也可以直接使用CG提供的计算反射方向的函数re ...

  6. Unity Shader知识点(三)高光反射Shader

    前言 此文及专栏系是以Shader入门精要为基础整理的Unity Shader学习笔记,尽量以初学者视角还原(其实半年前我就是初学者),错误还需指正. 本篇是实操部分的第三个Shader,即高光反射S ...

  7. Unity制作二次元卡通渲染角色材质——3、高光反射与ILM贴图

    Unity制作二次元材质角色 回到目录 大家好,我是阿赵. 这里继续来讲二次元角色的材质.上次讲了光影的色阶化问题,这次继续讲光照模型效果的问题. 之前我们说过,光照模型的最后效果是: 环境色+漫反射 ...

  8. shader基础学习摘要(三)高光反射

    高光反射 理论推导 代码实践 Phone光照模型 逐顶点 逐像素 Blinn-Phong光照模型 内置函数 理论推导 在6.2.4节中,我们给出了基本光照模型中高光反射部分的计算公式 高光反射求的夹角 ...

  9. Unity Shader标准光照模型——高光反射

    高光反射 顶点高光反射 Shader "Unlit/HighLightReflection" {Properties{_diffuse("diffuse",Co ...

最新文章

  1. 推荐一款UI设计软件Balsamiq Mockups
  2. 2018年7月5日笔记
  3. 编写一个程序,从10亿个数字的数组中找出100个最大的数字
  4. C# 判断程序是否已经在运行
  5. 计算机开机提示dll,电脑开机提示找不到iertutil.dll的解决妙招
  6. 超强合集:OCR文本检测干货汇总(含论文、源码、demo等资源)
  7. 唯众中职人工智能专业解决方案
  8. chrome浏览器调试时阻止图片的加载
  9. nodejs爬虫网络图片
  10. MOS管当开关控制时,为什么一般用PMOS做上管NMOS做下管?
  11. 尚硅谷新版Web前端HTML5+CSS3知识点集合篇【p1-p8】
  12. 未来小七:AI缩小教育差距,让孩子快乐成长
  13. 2022年漏洞事件盘点
  14. C++语言学习(十四)——C++类成员函数调用分析
  15. layui-vertify不生效
  16. 2019-01-25T01:30:00.000+0000 java取出的问题
  17. vue 记住密码下次自动登录
  18. 怎么实现全国IP自动更换?
  19. 容器服务Kubernetes或jenkins 414问题
  20. 千与千寻动画场景Mac动态壁纸

热门文章

  1. Django学习之十: staticfile 静态文件
  2. Vs2012调试本地windows服务
  3. android的ListView做表格添加圆角边框
  4. HLSL Tips 1:如何把输入映射到输出像素
  5. 2-算法 矩阵 数组类
  6. 为什么mysql没有io多路复用_Redis凭啥可以这么快
  7. Python之进程+线程+协程(并发与并行、GIL锁、同步锁、死锁、递归锁)
  8. python权威指南 pdf_Ansible权威指南pdf txt mobi下载及读书笔记
  9. Python查找包含指定字符串的所有Office文档
  10. 1000道Python题库系列分享14(1道代码阅读题)