Unity3D教程宝典之Shader篇:第十五讲 光照基础

转载自风宇冲Unity3D教程学院

简单的说,带光照的Shader的最终颜色输出为 材质颜色 * 光颜色,其中

材质颜色:之前已经提到过,固定格式tex2D (_MainTex, i.uv)

光颜色:光颜色 = 自发光 + 环境光 + 漫反射光 + 镜面光

下面详细讲解这四种光

一:自发光

由物体表面向四面八方发出的光

emissive = colorEmissive

colorEmissive 自发光的颜色

二:环境光

物体表面接收的来自四面八方发出的光, 然后向四面八方反射

ambient = Ka * colorAmbient

Ka 环境光系数

colorAmbient 环境光颜色

什么是法线?

法线,normal line,是始终垂直于某平面的一条向量,公正无私,像个法官一样,故取名为法线。

曲面上某一点的法线指的是经过这一点并且与该点切平面垂直的那条直线(即向量)。

法线是有方向的:一般来说,由立体的内部指向外部的是法线正方向,反过来的是法线负方向。

 

三:漫反射光

漫反射与镜面反射的主要区别是法线的分布。如果物体完全光滑的话,那么法线完全垂直于平面,例如镜面及锃亮的金属表面。 而很多看起来很光滑平整的物体,如纸,桌面,衣服等,实际上,用放大镜仔细观察,就会看到其表面是凹凸不平的。法线并不与肉眼看见的面垂直,而是与实际的面平行。

漫反射:光射到粗糙表面时,表面会把光线向着四面八方反射,所以即使入射线平行,由于各点的法线方向不一致,造成反射光线向不同的方向无规则地反射。这种反射光称为漫反射光。

漫反射的计算

diffuse = Kd x colorLight x max(N*L,0)

Kd 漫反射系数

colorLight 光的颜色

N 单位法线向量

L 由点指向光源的单位向量

其中N与L点乘,如果结果小于等于0,则漫反射为0

四:镜面反射光

镜面反射:光射到表面光滑平整,法线均匀的物体表面上,这种反射光称为镜面反射光。

Ks 镜面系数

colorLight 光的颜色

N 单位法线向量

L 由点指向光源的单位向量

V 由点指向观察者的单位向量

H (L+V)向量的单位化向量,即normalize(L+V)

shininess 镜面强度系数,值越小,高光越分散;值越高,高光越集中。

facing 如果N与L的点乘大于0,则facing为1,如果小于等于0,则facing为0

 

漫反射与镜面反射

光的反射方式主要是由物体表面的材质决定的。

如果来自相同单一光源,那么计算时两者的光源颜色colorLight是相同的。

核心都是单位法线参与的点乘运算。

漫反射只与光的入射角度有关

镜面反射与光的入射角度及观察者的角度都有关

Surface Shader里的光照模型
            
简而言之, Lambert是漫反射,BlinnPhong含镜面反射。相关定义可以在Lighting.cginc里查看

Blinn-Phong:

Phone Reflection模型的一个衍变光照模型。OpenGl及D3D固定管线的默认光照模型,光照在顶点阶段就已经计算完毕,之后顶点间像素的值通过插值获取。
http://en.wikipedia.org/wiki/Blinn–Phong_shading_model

Lambert:
仅有漫反射,与观察者(摄像机)视角无关.

时间: 2024-11-10 01:03:19

Unity3D教程宝典之Shader篇:第十五讲 光照基础的相关文章

Unity3D教程宝典之Shader篇:第五讲LOGO闪光效果

转载自风宇冲Unity3D教程学院 这个效果在很多LOGO及广告宣传中都会用到.商业开发的做法应该是拿一张闪光的图,对其做uv移动,然后和原图两张图混合,这样运算会小很多,需要储存的变量也会小很多.本讲不用图而完全通过计算得出闪光区域,主要是借此加深uv计算实现特殊效果的实现,以及计算uv的方法.代码注释配合图解已经比较详细了,跟着做就行,随便找一张半透明的图来做地图即可. Shader "Custom/logo" { Properties { _MainTex ("Text

Unity3D教程宝典之Shader篇:第十六讲自定义光照模型

转载自风宇冲Unity3D教程学院   十四讲我们实现了基本的Surface Shader,十五讲讲了光照模型的基础知识.这一讲说的是如何写光照模型. 自定义光照模型主要分为4步: (0)架设框架,填写需要的参数 (1)计算漫反射强度 (2)计算镜面反射强度 (3)结合漫反射光与镜面反射光 代码配有中文注释,配合上上讲的光照公式,一步一步实现即可. //Author: 风宇冲 Shader "Custom/T_customLightModel" { Properties { _Main

Unity3D教程宝典之Shader篇:第十三讲 Alpha混合

转载自风宇冲Unity3D教程学院 Alpha Blending,中文译作Alpha混合 Blending就是控制透明的.处于光栅化的最后阶段. 这里例如我们给一个模型贴一个材质,那么在某个点计算出来颜色值称为源,而该点之前累积的颜色值,叫目标. 语法 Blend Off     不混合 Blend SrcFactor DstFactor  SrcFactor是源系数,DstFactor是目标系数 最终颜色 = (Shader计算出的点颜色值 * 源系数)+(点累积颜色 * 目标系数) 属性(往

Unity3D教程宝典之Shader篇:第十二讲 Alpha测试

转载自风宇冲Unity3D教程学院 引言:本讲和下一讲主要讲Alpha即透明通道有关的内容.RGBA,其中最终在屏幕上显示的只有RGB即 红绿蓝组成的颜色,Alpha并没有任何颜色显示.A只是辅助颜色运算特别是多图层运算而已.例如在单图层的情况下(1,1,1,0.8)输出的是(1,1,1)*0.8即 浅灰色(0.8,0.8,0.8),和(0.8,0.8,0.8)是等价的.但是假如不再是单图层而背景为绿色(0,1,0,1)的时候,(0.8,0.8,0.8)就不知道怎么去运算了,而(1,1,1,0.

Unity3D教程宝典之Shader篇:第十讲 雾化

转载自风宇冲Unity3D教程学院 Fog,即雾化.本质是离屏幕越远的物体,就越趋向于某种颜色.通常是远处,即离屏幕远的地方,趋向于白色或者浅灰色. 全局雾化: 在Edit->RenderSettings里设置,具体如下 Fog: 激活或不激活Fog Color:雾的颜色,仅RGB起作用. Fog Mode: Linear线性,Exp指数,Exp2 指数2 Fog Density:雾化的强度 Linear Fog Start:开始距离 Linear Fog End:结束距离 部分雾化: 三种Sh

Unity3D教程宝典之Shader篇:第十四讲Surface Shader

转载自风宇冲Unity3D教程学院 用Shader来实现光照是比较复杂的,有不同的光类型,不同的阴影选项,不同的Render Path(forward和Deferred). Unity只是把光照模型封装处理了,Shader的代码还是用CG/HLSL编写的. 例一:最简单的Surface Shader Shader "Custom/T_3_0" { Properties { _MainTex ("Base (RGB)", 2D) = "white"

Unity3D教程宝典之Shader篇:第二十讲法线贴图

转载自风宇冲Unity3D教程学院 上一讲我们讲了凹凸贴图以及生成法线贴图. 这一讲来谈谈怎么使用法线贴图. 一:法线贴图的原理 二:法线贴图的实现 三:法线贴图的使用 四:法线贴图的格式 一:法线贴图的原理 光照效果很大程度上是由垂直于物体表面的法线决定的,因为法线影响反射光的方向.均匀垂直的法线是镜面贴图.但是有时候我们会给一个平面使用砖墙贴图,砖墙应该是凹凸不平的,而如果让砖墙使用该平面的法线的话,画面就会很假,神马?一面墙像镜子一样反光=.= 而如果按真实砖墙去做模型的话,即做高精度模型

Unity3D教程宝典之Shader篇:第二十四讲Reflection Mapping

转载自风宇冲Unity3D教程学院 简介 Reflection Mapping,又叫Environment Mapping.对应TexGen的SphereMap和CubeReflect.是最快的reflect周围环境的算法 最早出现的是Sphere Mapping,之后被Cube Mapping取代.Reflection Mapping比射线追踪(Ray Tracing)高效得多 Reflection Mapping的前提是2个假设 (1)入射线来自无限距离 (2)物体是凸的,没有自身的相互反射

Unity3D教程宝典之Shader篇:第二十六讲ImageEffects_Twirl

转载自风宇冲Unity3D教程学院 Twirl是一个全屏画面扭曲的效果,新仙剑的战斗切换有用到这个效果. 主要有三个设置: center  扭曲的中心点 radius 扭曲的范围 angle 扭曲的角度 用到了如下函数 Matrix4x4.TRS(Vector3 pos, Quaternion rotate,Vector3 scale) 创建一个包括位移,旋转,缩放的矩阵 Matrix4x4 rotationMatrix = Matrix4x4.TRS(Vector3.zero, Quatern