Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unity3D入门级教程17——渲染与贴图 #19

Open
Veinsvx opened this issue Oct 26, 2020 · 0 comments
Open

Unity3D入门级教程17——渲染与贴图 #19

Veinsvx opened this issue Oct 26, 2020 · 0 comments

Comments

@Veinsvx
Copy link
Owner

Veinsvx commented Oct 26, 2020

一、简介
渲染和光照是Unity中图形模块的两个重要模块,本周我们来学习渲染的相关知识,下周学习光照相关知识。
在Unity中渲染一个物体,最重要的三个概念是材质(Material),贴图(Texture),着色器(Shader)。
材质通过使用贴图,Tiling参数,颜色参数等来定义物体表面应该如何呈现。材质的可配置参数取决于材质使用的着色器。
着色器是一段代码,基于场景的光照信息和材质的配置,计算物体最终渲染的顶点位置和颜色。着色器决定了材质上面的可配置参数。
贴图是位图图像。材质可以对贴图进行引用,然后着色器在计算GameObject的表面颜色时可以使用贴图中的信息。除了GameObject表面的基本颜色(Albedo)外,贴图还可以丰富材质表面的许多其他方面,例如自发光、表面凹凸等。

这三者之间的关系是:
• 一个材质只能使用一种着色器,一种着色器可以被多个材质使用。 
• 一个材质可能需要多张不同的贴图(基本的漫反射贴图、法线贴图、高光贴图等),一张贴图可以被多个不同的材质复用。 
• 材质可以和网格Mesh关联起来,网格的表面最终会显示成对应材质的样子。 

对于大多数的写实渲染需求(角色、场景、环境等),使用内置的Standard着色器通常是最好的选择。

二、Texture(贴图)
通常情况下,物体的Mesh网格只给出了物体的大概形状,大部分细节都由贴图提供。贴图是绘制在物体网格表面的图像。你可以把贴图想象成有弹性的壁纸,这个壁纸可以通过拉伸、压缩贴到网格的表面。通常贴图的定位(UV信息)是通过3D建模软件完成的。
1. 3D模型的贴图
一张贴图要想贴到模型上,必须先将贴图赋予一个材质,然后将材质与模型关联。
贴图有不同类型和用途,例如:
• Albedo(反照率)贴图:一个材质最基础的贴图,能表示材质表面反射的颜色及比率。
image
• 法线贴图:一种特殊的贴图通过贴图的方式来实现模型表面的凸凹,增加模型的细节
image
其他用途的贴图,在讲Unity内置的Standard Shader时会讲解。
一个材质可以使用多张贴图,比如同时使用漫反射贴图和法线贴图,就能让模型有基本颜色的基础上,细节更加丰富。
贴图的尺寸应该尽可能使用2的n次幂的大小,比如256x256,512x1024等尺寸 。
2. 2D图形
2D游戏中,贴图需要设置为Sprite。在场景中绘制时类似一个纸片的形式,没有厚度。
一般情况2D游戏的角色需要一系列的图片来实现角色的不同状态或者动画。
3. GUI
使用Unity内置的GUI系统时,用到的图片需要设置为Sprite。
游戏的图形用户界面(GUI)可以让玩家查看信息、进行交互。例如,显示游戏当前得分、游戏菜单是游戏中常见的GUI。虽然界面的图片与模型表面的贴图有很大不同,但是都是使用的图片资源。
4. 粒子
网格非常适合表示实体物体,但对于魔法遗留的火焰,烟雾和火花等效果并不适合。粒子系统可以更好地处理这种特效。粒子一般用来表示很小的东西,比如液体或气体。当大量粒子一起运动时,可以产生非常逼真的效果。例如,可以将火焰贴图的粒子从中心点以极快的速度发射出去来模拟爆炸;可以用大量高速向下运动的水珠来模拟瀑布。

@Veinsvx Veinsvx added this to 系列教程 in Unity3D Oct 27, 2020
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
Unity3D
系列教程
Development

No branches or pull requests

1 participant