首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > 移动开发 >

Unity3D游戏制作(二)——怎么渲染3D角色

2012-09-12 
Unity3D游戏制作(二)——如何渲染3D角色本系列文章由 Amazonzx 编写,欢迎转载,转载请注明出处。http://blog.c

Unity3D游戏制作(二)——如何渲染3D角色

本系列文章由 Amazonzx 编写,欢迎转载,转载请注明出处。

http://blog.csdn.net/amazonzx/article/details/7935341


本文主要介绍一下如何利用Shader来渲染游戏中的3D角色,以及如何利用Unity提供的Surface Shader来书写自定义Shader。


一、       从Shader开始

1、通过Assets->Create->Shader来创建一个默认的Shader,并取名“MyShader”。

Unity3D游戏制作(二)——怎么渲染3D角色

2、将MyShader打开即可看见Unity默认的Shader代码



4、接下来我们将以此默认Shader作为蓝本,编写出自定义的Shader。另外,该Shader所用到的参数,我们将在下一章节进行说明。


二、       实现多种自定义渲染效果

1、  BumpMap效果

如果想实现Bump Map效果,可对上述的Shader做如下修改:

1.1  在属性Properties中加入:


然后,根据Base图来创建其Normal Map图,并拖入到BumpMap中即可。BumpMap的效果显示如下:

Unity3D游戏制作(二)——怎么渲染3D角色

说明:

(1)首先是title的解释



(2)其次是Properties

Properties可通过如下语义进行声明:

name ("displayname", property type) = default value

l  “name” 是与Shader脚本中对应的名字

l  “display name”是在材质视图中所显示的名字

l  “propertytype”是指该property的类型,一般可有如下几种类型:Range,Color,2D,Rect,Cube,Float和Vector

l  “defaultvalue”是指该property的默认值

这里需要注意的是,如果你在Properties中加入了新的属性,那么你需要在CGPROGRAM中的SubShader中加入同样名字的参数。


(3)接下来是“LOD”语义词的解释。

这里的“LOD”主要是指Shader的LOD程度,即对于超出该范围的物体将不再通过该Shader进行渲染,具体的Shader LOD说明可以参见:http://blog.csdn.net/amazonzx/article/details/7614399


(4)我们在SubShader中还加入了

其中,_BumpMap是为了关联Properties中的_BumpMap属性。

而uv_BumpMap,是为了获取BumpMap图中的uv坐标。


(5)最后,我们在surf函数中获取每个顶点的纹理信息以及法线信息,这些信息将被应用于接下来的Vertex Fragment和Pixel Fragment。

void surf (Input IN, inout SurfaceOutput o) {half4 c = tex2D (_MainTex, IN.uv_MainTex);o.Albedo = c.rgb;o.Alpha = c.a;o.Normal = UnpackNormal (tex2D (_BumpMap, IN.uv_BumpMap));}

其中,tex2D函数可以读取纹理_MainTex中的IN.uv_MainTex坐标位置的像素颜色值。

Albedo和Alpha分别获取该像素的RGB值和Alpha值,其中“Albedo”是一个漫反射参数,它表示一个表面的漫反射能力,即一个表面上出射光强与入射光强的比值。具体介绍可见:http://en.wikipedia.org/wiki/Albedo。


2、  Blinn-Phong效果

如果想实现Blinn-Phong效果,可对上述的Shader做如下修改:

2.1  在属性Properties中加入:


其显示效果如下:

Unity3D游戏制作(二)——怎么渲染3D角色


3、  边缘光照(Rim Light)和卡通渲染(Toon Shading)

可以通过对上述Shader做以下改进,来达到这种效果:

3.1  在属性Properties中加入:

Unity3D游戏制作(二)——怎么渲染3D角色

其显示效果如下:

Unity3D游戏制作(二)——怎么渲染3D角色

可以看出边缘光照的效果,同时还可以看出明显的明暗变化的卡通渲染效果。


三、       小结

综上所述,本文已经给出了人物的几种基本渲染方法及其Shader实现,在这里我并没有去分析每种渲染效果的原理,而仅是从实际出发,直接给出对应的简单实现方法。如果想要对光照模型进行深入理解,可以Google搜索其原理进行了解。最后,给出各种渲染方法的对比图,显示如下:

Unity3D游戏制作(二)——怎么渲染3D角色






热点排行