一、打开unity3d软件,通过单击菜单栏中的gameobject,再单击create other ,再单击cube选项,在场景中创建许多立方体;同时创建一个平行光。
二、选择相应的立方体,在检视窗口中,勾选该对象的static复选框。
三、单击菜单栏中的window,再单击lightmapping选项,会d出lightmapping窗口。选择场景中的平行光,在lightmapping窗口的object标签下会出现该光源的设置。
四、在lightmapping窗口中的bake标签下,将mode选择为single lightmaps类型。更改bounce数字为2。调整resolution(分辨率)为70,让光影更精细些。
五、单击lightmapping窗口右下角的bake scen 按钮,即开始生成lightmaps。同时,主窗口右下角会出现进度条,待进度条完成后,就会在场景窗口中显示烘焙效果。
十四讲我们实现了基本的Surface Shader,十五讲讲了光照模型的基础知识。这一讲说的是如何写光照模型。自定义光照模型主要分为4步:
(0)架设框架,填写需要的参数
(1)计算漫反射强度
(2)计算镜面反射强度
(3)结合漫反射光与镜面反射光
代码配有中文注释,配合上上讲的光照公式,一步一步实现即可。
//
Author: 风宇冲
Shader "Custom/T_customLightModel" {
Properties
{
_MainTex ("Texture", 2D) = "white" {}
}
Subshader
{
//alpha测试,配合surf中的o.Alpha = c.a
AlphaTest Greater 0.4
CGPROGRAM
#pragma surface surf
lsyLightModel
//命名规则:Lighting接#pragma suface之后起的名字
//lightDir :点到光源的单位向量
viewDir:点到摄像机的单位向量
atten:衰减系数
float4 LightinglsyLightModel(SurfaceOutput s, float3 lightDir,half3 viewDir, half atten)
{
float4 c
//(1)漫反射强度
float diffuseF = max(0,dot(s.Normal,lightDir))
//(2)镜面反射强度
float specF
float3 H = normalize(lightDir+viewDir)
float specBase = max(0,dot(s.Normal,H))
// shininess 镜面强度系数,这里设置为8
specF = pow(specBase,8)
//(3)结合漫反射光与镜面反射光
c.rgb = s.Albedo * _LightColor0 * diffuseF *atten + _LightColor0*specF
c.a = s.Alpha
return c
Unity5在图形仿真和光照特效方面做了重大改变。自从3.0版本开始,Unity的光照效果一直局限于烘焙好的光照贴图。但后续的时间里,我们在全局光照领域有了很大的提升与改进,现在,是时候将其中部分美好的特性从Unity的沙盒中开放出来了。其中之一的新图形特性就是基于新的和极大改善的光照流程基础上的全局实时光照。这也是本文的重点。什么是全局光照?
GI算法是基于光传输的物理特性的一种模拟。他是一种模拟光在3D场景中各表面之间的传输的有效方式,他会极大的改善你游戏的仿真度。不仅如此,他还可以传达一种意境,如果巧妙的使用,可以有效得改善你的游戏体验。GI算法不仅考虑光源的直射光,而且还考虑场景中其他材质表面的反射光。传统上,在游戏中,由于实时性的约束,间接光照的模拟因性能消耗过大而被弃置一旁。
这些都是源于下面这个浅显的方程:
这个很简单。从某一观察点看到的光是从场景中物体表面点入射的光(Le)与从观察点上方的半球入射的光的叠加。Li描述的是从半球上某一角度w’ 入射的光。反射项p描述的是光线如何反射到观察点,这项的取值依赖于入射角w’和观察者的角度w。
细心的读者可能已经发现L(x,w)在方程的两边,而且有一个还在在积分式中。如果不是这种情形,我们也许已经计算出全局光照的结果。由于物理规律是不太可能去修改的,研究协会提出了一套解决方案。
其中最流行(最古老的)的是光线跟踪算法。这个算法从根本上改善了GI算法,在算法最困难的部分使用了一些比较耗时的技巧。光线跟踪在电影或者电视的CGI上使用了很多。尽管该领域涌现了大量的研究成果,但是一张图像的渲染还是要花费数秒的时间(哪怕使用非常先进的GPU)。
光线跟踪通常使用的是屏幕空间,所以,一张图像每一帧都需要重新渲染。这意味着,他完全支持完全动态的场景:灯光、材料、几何形状自由变换的动画。这也是一个缺点,因为每当摄像机移动的时候,一张新的图片需要被渲染,而这张新图像的收敛融合需要花费数秒钟的时间。这也导致他无法适用于游戏场景。
一张没有完全收敛融合的图像会有很多噪点,而且他是时间不相干的,所以,图像在完全收敛融合之前会有严重的闪烁。可以使用滤波来降低这种影响,但是不能彻底消除。下面是一些在不同收敛融合程度的图像。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)