unity3d贴图说明

合集下载

3D游戏常用技巧NormalMapping(法线贴图)原理解析——基础篇

3D游戏常用技巧NormalMapping(法线贴图)原理解析——基础篇

3D游戏常⽤技巧NormalMapping(法线贴图)原理解析——基础篇1、法线贴图基本概念 在制作3D游戏时,常常遇到这样⼀个问题:⼀个平⾯,这个平⾯在现实中并不是⼀个“平”⾯,例如砖墙的表⾯带有⽯质浮雕等等。

这种情况下如果只是简单的做⼀个平⾯,则让⼈感觉严重失真,如图1所⽰;⽽如果⽤很密集的三⾓形去表⽰这类略有凹凸的表⾯,则性能上⼤⼤下降。

研究⼈员发现,⼈眼对物体的凹凸感觉,很⼤程度上取决于表⾯的光照明暗变化,如果能通过⼀张贴图在⼀个平⾯上表现出由凹凸造成的明暗变化,则可以让⼈眼感觉这个平⾯是凹凸不平的(虽然这个平⾯还是平的)。

法线贴图正是为了这个⽬的⽽产⽣的。

图1 不同细节程度的蜡烛 准确的说,法线贴图是Bump Mapping(凹凸贴图)的其中⼀种。

第⼀个Bump Mapping由Blinn在1978年提出,⽬的是以低代价给予计算机⼏何体以更丰富的表⾯信息。

30年来,这项技术不断延展,尤其是计算机图形学成熟以后,相继出现了不少算法变体,法线贴图就是其中很重要的⼀种。

研究⼈员对法线贴图进⼀步改进,出现了Parallax Mapping(视差贴图), Relief Mapping等技术,实现了更逼真的效果。

本⽂仅针对法线贴图进⾏介绍。

⼀条法线是⼀个三维向量,⼀个三维向量由x, y, z等3个分量组成,在法线贴图中,把(x, y, z)当作RGB3个颜⾊的值存储(如图2),并将其每个分量映射到[-1, 1]。

例如,对于x, y, z各有8位的纹理,[0, 128, 255]表⽰法向量(-1, 0, 1)。

图2 利⽤彩⾊通道存储法线贴图2、切线空间 法线贴图中存储的法线最初是定义在世界空间中,但在实际中,这种⽅式很少见,因为只要物体移动,法线贴图则不再有效。

另⼀种⽅式就是将法线存储在物体的局部空间中,物体可以进⾏刚体变换(平移,旋转,缩放),法线贴图依旧有效,但是这种⽅法并不能应对任何⽅式的变换,并且法线贴图不能在不同物体进⾏复⽤,增加了美⼯的负担。

我学院:unity3d修改Cube每个面的贴图UV方法

我学院:unity3d修改Cube每个面的贴图UV方法

unity3d修改Cube每个面的贴图UV方法修改一个Cube中每个面的贴图UV,也就是贴图中有多个矩形贴图,需要程序从贴图中读取一部分赋值给Cube每个面。

看下最终效果图:废话不多说,贴上代码using Unity Engine;using System.Collections;[ExecuteInEditMode]public class CustomUVS : MonoBehaviour {public Vector2 topPoint;public Vector2 bottomPoint;public Vector2 leftPoint;public Vector2 rightPoint;public Vector2 frontPoint;public Vector2 backPoint;private Mesh m_mesh;public enum CubeFaceType{Top,Bottom,Left,Right,Front,Back};// Use this for initializationvoid Start () {MeshFilter meshFilter = GetComponent();if (meshFilter == null) {Debug.LogError("Script needs MeshFilter component");return;}#if UNITY_EDITORMesh meshCopy = Mesh.Instantiate(meshFilter.sharedMesh) as Mesh; // Make a deep copy = "Cube";m_mesh = meshFilter.mesh = meshCopy; // Assign the copy to the meshes#elsem_mesh = meshFilter.mesh;#endifif (m_mesh == null || m_mesh.uv.Length != 24) {Debug.LogError("Script needs to be attached to built-in cube");return;}UpdateMeshUVS();}// Update is called once per framevoid Update (){#if UNITY_EDITORUpdateMeshUVS();#endif}void UpdateMeshUVS(){Vector2[] uvs = m_mesh.uv;// FrontSetFaceTexture(CubeFaceType.Front, uvs);// TopSetFaceTexture(CubeFaceType.Top, uvs);// BackSetFaceTexture(CubeFaceType.Back, uvs);// BottomSetFaceTexture(CubeFaceType.Bottom, uvs);// LeftSetFaceTexture(CubeFaceType.Left, uvs);// RightSetFaceTexture(CubeFaceType.Right, uvs);m_mesh.uv = uvs;}Vector2[] GetUVS(float originX, float originY){Vector2[] uvs = new Vector2[4];uvs[0] = new Vector2(originX / 3.0f, originY / 3.0f);uvs[1] = new Vector2((originX + 1) / 3.0f, originY / 3.0f);uvs[2] = new Vector2(originX / 3.0f, (originY + 1) / 3.0f);uvs[3] = new Vector2((originX + 1) / 3.0f, (originY + 1) / 3.0f); return uvs;}void SetFaceTexture(CubeFaceType faceType, Vector2[] uvs) {if (faceType == CubeFaceType.Front) {Vector2[] newUVS = GetUVS(frontPoint.x, frontPoint.y);uvs[0] = newUVS[0];uvs[1] = newUVS[1];uvs[2] = newUVS[2];uvs[3] = newUVS[3];}else if (faceType == CubeFaceType.Back) {Vector2[] newUVS = GetUVS(backPoint.x, backPoint.y);uvs[10] = newUVS[0];uvs[11] = newUVS[1];uvs[6] = newUVS[2];uvs[7] = newUVS[3];}else if (faceType == CubeFaceType.Top) {Vector2[] newUVS = GetUVS(topPoint.x, topPoint.y);uvs[8] = newUVS[0];uvs[9] = newUVS[1];uvs[4] = newUVS[2];uvs[5] = newUVS[3];}else if (faceType == CubeFaceType.Bottom) {Vector2[] newUVS = GetUVS(bottomPoint.x, bottomPoint.y); uvs[12] = newUVS[0];uvs[14] = newUVS[1];uvs[15] = newUVS[2];uvs[13] = newUVS[3];}else if (faceType == CubeFaceType.Left) {Vector2[] newUVS = GetUVS(leftPoint.x, leftPoint.y);uvs[16] = newUVS[0];uvs[18] = newUVS[1];uvs[19] = newUVS[2];uvs[17] = newUVS[3];}else if (faceType == CubeFaceType.Right) {Vector2[] newUVS = GetUVS(rightPoint.x, rightPoint.y);uvs[20] = newUVS[0];uvs[22] = newUVS[1];uvs[23] = newUVS[2];uvs[21] = newUVS[3];}}}使用的贴图给一个Cube添加改图片材质。

Unity3d-地形制作教程

Unity3d-地形制作教程

Unity3d-地形制作教程Using Terrains 使用地形Creating a new Terrain创建一个新的地形A new Terrain can be created from Terrain->Create Terrain. This will add a Terrain to your Project and Hierarchy Views. 如要创建地形,点击Terrain->Create Terrain. 如下图所示Your new Terrain will look like this in the Scene View: 刚创建好的地形在场景视图中如下图.A new Terrain in Scene ViewIf you would like a differently sized Terrain, choose Terrain->Set Resolution from the menu bar. There are a number of settings that related to Terrain size which you can change from this dialog.点击Terrain->Set Resolution,可以设置地形的大小.如下图所示.从上而下依次为地形的宽度,高度,长度,高度图像素,细节像素-草或其它细节贴图,像素,贴图像素—对应第二个及其之后的贴图,底层贴图像素-对应第一个贴图.Setting the resolution of your terrain.On the above image, there are values that can be changed.These values are:∙Terrain Width: The width of the Terrain in units.∙Terrain Height: The height of the Terrain in units.∙Terrain Length: The length of the Terrain in units.∙HeightMap Resolution: The HeightMap resolution for the selected Terrain.∙Detail Resolution: The resolution of the map that controls grass and detail meshes. For performance reasons (to save on draw calls) the lower you set this number the better.∙Control Texture Resolution: The resolution of the splat map used to layer the different textures painted onto the Terrain.∙Base Texture Resolution: The resolution of the composite texture that is used in place of the splat map at certain distances.Navigating the TerrainTerrains work a bit differently than other GameObjects. Most notably, there is no Transform Gizmo that allows you to position the Terrain. Instead, you use Brushes to paint and manipulate your Terrain. If you do want to reposition a Terrain, you can modify its Transform Position values in the Inspector. This allows you to move your Terrain around, but you cannot rotate or scale it.地形对象与其他游戏对象有点不同,它没有转换轴,不可以通过鼠标直接改变它的坐标.如果要改变坐标,可以通过在属性面板修改.不过不可以旋转和缩放.While your Terrain is selected in the Hierarchy, you can gracefully navigate the terrain with the F (focus) key. When you press F, wherever your mouse is positioned will be moved to the center of the Scene View. This allows you to touch up an area, and quickly zoom over to a different area and change something else. If your mouse is not hovering over an area of the Terrain when you press the F key, the entire Terrain will be centered in your Scene View.地形被选择后,按F按可以以鼠标点击位置为中心察看地形.如果没有用鼠标点击任何一点,会以整个地形为中心察看地形.Editing the Terrain 编辑地形With the Terrain selected, you can look at the Inspector to see some incredible new Terrain editing tools.选择地形后,在属性面板会出现7个按钮以方便地形的编辑.从左到右依次为高度工具.特定高度工具.平滑工具.贴图工具.画树工具.细节工具.其他设置.如下图所示.Terrain Editing Tools appear in the InspectorEach rectangular button is a different Terrain tool. There are tools to change the height, paint splat maps, or attach details like trees or rocks. To use a specific tool, click on it. You will then see a short description of the tool appear in text below the tool buttons.点击任何一个按钮,按钮下面都会出现关于此按钮的说明及相关的快捷键.Most of the tools make use of a brush. Many different brushes are displayed for any tool that uses a brush. To select a brush, just click on it. The currently selected brush will display a preview when you hover the mouse over the terrain, at the size you have specified.每个工具都有不同的笔刷.选取笔刷后,在地形上都会出现蓝色图形表示笔刷的范围.You will use all of these brushes in the Scene View to paint directly onto your Terrain. Simply choose the tool and brush you want, then click & drag on the Terrain to alter it in real-time. To paint height, textures, or decorations, you must have the Terrain selected in the Hierarchy View.花点时间熟悉这些工具.选取一个工具及笔刷,用拖放的方式就可以实时地编辑地形.F键,多用用这个键,你会发现没有它,修改地形是件困难与痛苦的事.享受它带来的方便吧…Note: When you have a brush selected, move your mouse over the Terrain in the Scene View and press F. This will center the Scene View over the mouse pointer position and automatically zoom in to the Brush Size distance. This is the quickest & easiest way to navigate around your Terrain while creating it.Terrain Keyboard Shortcuts 地形编辑的快捷键While Terrain Inspector is active, those keyboard shortcuts can be used for fast editing (all of them customizable in Unity Preferences): 以下是地形编辑的快捷键.只有在地形被选取后才可用.∙Shift-Q to Shift-Y selects active terrain tool. Shift-Q 到Shift-Y 对应从左到右六个工具∙Comma (,) and dot (.) cycle through active brush. 逗号和句号向前或向后选取笔刷∙Shift-comma (<) and Shift-dot (>) cycle through active tree/texture/detail object. Shift-逗号和Shift-句号向前或向后选取树/贴图/细节物体.以下是对各个工具的详细说明.Height 地形高度工具Using any of the Terrain editing tools is very simple. You will literally paint the Terrain from within the Scene View. For the height tools and all others, you just have to select the tool, and click the Terrain in Scene View to manipulate it in real-time.使用地形工具画地形是很简单的.你所要做的就是选取工具,再用鼠标在地形上拖拽就可以实时地画出地形.不然,要画出游戏级别的地形,还要一张原画以及多多的练习.总体的思路就是先画高度,再分出层次,画贴图,画树以及增加细节.Raising & Lowering HeightThe first tool on the left is the Raise Height tool .第一个工具:地形高度工具.With this tool, you paint brush strokes that will raise the height of the Terrain. Clicking the mouse once will increment the height. Keeping the mouse button depressed and moving the mouse will continually raise the height until the maximum height is reached.使用这个工具,可以依据笔刷的类型及强度画出隆起或凹陷的地形(初始时不可用).按鼠标一次,就会隆起地形.按住鼠标同时拖拽,可以不断隆起地形.直到达到最大高度.如下图所示.You can use any of the brushes to achieve different results 使用不同的笔刷可以得到不同的效果.If you want to lower the height when you click, hold the Shift key. 如要凹陷地形,按住Shift 键.如下图所示在做地形时,一个很重要的按键就是F键.多多用这个键吧.Note:When you have a brush selected, move your mouse over the Terrain in the Scene View and press F. This will center the Scene View over the mouse pointer position and automatically zoom in to the Brush Size distance. This is the quickest & easiest way to navigate around your Terrain while creating it.Paint HeightThe second tool from the left is the Paint Height tool .第二个工具,最大高度工具. 可以设定最大高度,当达到这个高度后,地形就不再加高.周围高度一样时,就会变平.这个工具用于分出地形高度的层次.Shift键在这个工具上的用途是选取最大高度.This tool allows you to specify a target height, and move any part of the terrain toward that height. Once the terrain reaches the target height, it will stop moving and rest at that height.To specify the target height, hold Shift and click on the terrain at the height you desire. You can also manually adjust the Height slider in the Inspector.Now you've specified the target height, and any clicks you make on the terrain will move the terrain up or down to reach that height. 下图所示,最大高度工具的应用.Smoothing HeightThe third tool from the left is the Smoothing Height tool . 第三个工具是高度平滑工具.用于再个不高度地形之间的过渡部分.这样地形不会有棱有角.如下图所示.This tool allows you to soften any height differences within the area you're painting. Like the other brushes, paint the areas you want to smooth in the Scene View.Working with Heightmaps 高度图创建地形If you like, you can import a greyscale Heightmap created in Photoshop, or from real-world geography data and apply it to your Terrain. To do this, choose Terrain->Import Heightmap - Raw..., then selectthe desired RAW file. You'll then see some import settings. These will be set for you, but you have the option of changing the size of your Terrain from this dialog if you like. When you're ready, click the Import button. Once the Heightmap has been applied to the Terrain, you can edit it normally with all the Tools described above. Note that the Unity Heightmap importer can only import grayscale raw files. Thus you can't create a raw heightmap using RGB channels, you must use grayscale.用Photoshop或其他3D软件导出灰度图可以使用灰度图来创建地形.灰度图的格式应为RAW格式.点击, Terrain->Import Heightmap – Raw 出现对话框,可以修改地形的大小.点击Import就可以创建地形了.创建好后,你可以使用所有的地形工具再进行编辑. Unity可以支持16位的灰度图.可以通过Photoshop,Bryce,Terragen这几个软件来创建灰度图.同样,可以在Unity中导出灰度图.在Terrain->Import Heightmap - Raw...对话框中,点击Export.就OK. 通过Terrain->Flatten....命令可以将地形整体设置一个高度.这个命令最好在最初使用.不然,做好的地形会变成平面.需要重新编辑.Unity works with RAW files which make use of full 16-bit resolution. Any other heightmap editing application like Bryce, Terragen, or Photoshop can work with a Unity Heightmap at full resolution.You also have the option of exporting your Heightmap to RAW format. Choose Terrain->Import Heightmap - Raw... and you'll see a export settings dialog. Make any changes you like, and click Export to save your new Heightmap.Unity also provides an easy way to flatten your terrain. Choose Terrain->Flatten.... This lets you flatten your terrain to a height you specify in the wizard.Textures 给地形加贴图Decorate the landscape of your terrain by tiling Terrain Textures across the entire terrain. You can blend and combine Terrain Textures to make smooth transitions from one map to another, or to keep the surroundings varied. 地形贴图就如角色贴图一样,是地形整体风貌.出于游戏整体性能和地形引擎数据结构的原因.地形的贴图数最好是4的倍数.Terrain Textures are also called splat maps. What this means is you can define several repeating high resolution textures and blend between them arbitrarily, using alpha maps which you paint directly onto the Terrain. Because the textures are not large compared to the size of the terrain, the distribution size of the Textures is very small.Note: Using an amount of textures in a multiple of four provides the greatest benefit for performance and storage of the Terrain alpha maps.To being working with textures, click on the Paint Textures button下图所示就是贴图画笔in the Inspector.Adding a Terrain Texture为地形增加贴图Before you can begin painting Terrain Textures, you will add at least one to the Terrain from your Project folder. Click the Options Button->Add Texture.... 如图所示, Options Button->Add Texture....你需要为地形增加贴图,才能用贴图来画地形.第一个地形会作用于整个地形.第二个之后的贴图才能用笔刷画.重复以上步骤就可以为地形增加需要的贴图了.如果要更换贴图,就在当前贴图选取后(被选取的贴图会以高亮蓝色表示),点击Edit Texture,之后就可以重新选取贴图.另一个Remove Texture 就是移除贴图.贴图尺寸越小,过渡会越自然.反之亦然.This will bring up the Add Terrain Texture dialog.The Add Terrain Texture dialog 在Splat 中选取需要的贴图文件.第二三个参数是贴图的尺寸大小.From here, select a tileable texture in the Splat property. You can either drag a texture to the property from the Project View, or choose one from the drop-down.Now, set the Tile Size X and Tile Size Y properties. The larger the number, the larger each "tile" of the texture will be scaled. Textures with large Tile Sizes will be repeated fewer times across the entire Terrain. Smaller numbers will repeat the texture more often with smaller tiles.Click the Add Button and you'll see your first Terrain Texture tile across the entire Terrain.Repeat this process for as many Terrain Textures as you like.Painting Terrain Textures 画地形贴图Once you've added at least two Terrain Textures, you can blend them together in various ways. This part gets really fun, so let's jump right to the good stuff. 为地形增加了两个或以上贴图后,就可以使用贴图画地形了.选取贴图和笔刷,用鼠标在地形上拖拽,画贴图就是如此简单.画贴图时记得使用F和Alt键,这样的效率会更高.Select the Terrain Texture you want to use. The currently selected Terrain Texture will be highlighted in blue.Select the Brush you want to use. The currently selected Brush will be highlighted in blue.Select the Brush Size, Opacity, and Target Strength.Click and drag on the terrain to draw the Terrain Texture.上图从上而下参数为:笔刷大小,透明度,笔刷强度Use a variety of Textures, Brushes, Sizes, and Opacities to create a great variety of blended styles.不同的笔刷,大小和透明度可以得到不同的效果.Note:When you have a brush selected, move your mouse over the Terrain in the Scene View and press F. This will center the Scene View over the mouse pointer position and automatically zoom in to the Brush Size distance. This is the quickest & easiest way to navigate around your Terrain while creating it.TreesUnity's Terrain Engine has special support for Trees. You can put thousands of trees onto a Terrain, and render them in-game with a practical frame rate. This works by rendering trees near the camera in full 3D, and transitioning far-away trees to 2D billboards. Billboards in the distance will automatically update to orient themselves correctly as they are viewed from different angles. This transition system makes a detailed tree environment very simple for performance. You have complete control over tweaking the parameters of the mesh-to-billboard transition so you can get the best performance you need.You can easily paint lots of trees for beautiful environments like thisAdding Trees 增加树木Select the Place Trees button in the Inspector.Before you can place trees on your terrain, you have to add them to the library of available trees. To do this, click the Edit Trees button->Add Tree. You'll see the Add Tree dialog appear.The Add Tree dialogSelect the tree from your Project View and drag it to the Tree variable. You can also edit the Bend Factor if you want to add an additional bit of animated "bending in the wind" effect to the trees. When you're ready, click Add. The tree will now appear selected in the Inspector.The newly added tree appears selected in the InspectorYou can add as many trees as you like. Each one will be selectable in the Inspector for you to place on your Terrain.The currently selected tree will always be highlighted in blue增加树和增加贴图是一样的,所不同的只是Blend factor 这个参数,如果要有树在风中摇摆的效果,就设置为1 或以上,不要风的效果就设置为0. 按住Shift, 可以移除树.还是两个快捷键F键和Alt键.可以提高效率.Painting TreesWhile still using the Place Trees tool, click anywhere on the Terrain to place your trees. To erase trees, hold the Shift button and click on the Terrain.Painting trees is as easy as using a paintbrush toolThere are a number of options at your disposal when placing trees. 树的参数如下Brush Size Radius in meters of the tree placing brush. 以米为单位,树的半径.一次画多少棵树Tree Spacing Percentage of tree width between trees.树与树之间的百分数Color Variation Allowed amount of color difference between each tree. 树与树之间颜色差的范围Tree Height Height adjustment of each tree compared to the asset.场景中树与模型之间高度比Height Variation Allowed amount of difference in height between each tree.树与树之间的高度比Tree Width Width adjustment of each tree compared to the asset. 场景中树与模型之间宽度比Width Variation Allowed amount of difference in width between each tree. 树与树之间的宽度比Tree Painting Tips 技巧:不同区域选用不同的笔刷类型.通过树之间的距离(Tree Space)来表现树的疏密.Different Brush sizes cover different area sizesAdjust Tree Spacing to change the density of the trees you're paintingEditing Trees通过Edit Trees button->Edit Detail 或双击树,会出现对话框,可以设置树的参数.To change any import parameters for an added tree, select the detail and choose Edit Treesbutton->Edit Detail. Or double-click the tree you want to edit. You will then see the Edit Tree dialog, and you can change any of the settings.Mass Placement If you don't want to paint your trees and you just want a whole forest created, you can use Terrain->Mass Place Trees. Here, you will see the Mass Place Trees dialog. You can set the number of trees you want placed, and they'll be instantly positioned. All the trees added to your Terrain will be used in this mass placement. 通过Terrain->Mass Place Trees, 可以一次增加数量巨大的树.下图一次增加一万棵树.树的类型以当前选取的为准.10,000 Trees placed at onceRefreshing Source AssetsIf you make any updates to your tree asset source file, it must be manually re-imported into the Terrain. To do this, use Terrain->Refresh Tree and Detail Prototypes. This is done after you've changed your source asset and saved it, and will refresh the trees in your Terrain immediately.如果使用第三方软件修改树的模型.需要使用Terrain->Refresh Tree and Detail Prototypes.来更新Creating Trees 自定义树Every tree should consist of a single mesh with two Materials. One for the trunk and one for the leaves. For performance reasons, triangle count should be kept below 2000 for an average tree. The fewer triangles the better. The pivot point of the tree mesh must be exactly at the root of the tree, that is at the point where the tree should meet the surface it is placed on. This makes it the easiest to import into Unity and other modelling applications.树的模型由一个网格加两个材质组成.一个材质用于树干,另一材质用于树叶.基于性能上的考虑,一棵树的三角面数应少于2000.越少性能越好.树的轴中心应刚好在树根.树干的材质文件命名为:树的文件名+Bark,树叶的命名为树的文件名+Branch.模型文件以FBX格式存放.如需一次画一棵以上的树,需再做一个模型,把好几棵树放在一个FBX文件里.模型文件名与文件夹的名称要一致.可以参考官方的模型,之后再创建模型.Trees must use the Nature/Soft Occlusion Leaves and Nature/Soft Occlusion Bark shader. In order to use those shaders you also have to place the tree in a special folder that contains the name "Ambient-Occlusion". When you place a model in that folder and reimport it, Unity will calculate soft ambient occlusion specialized for trees. The "Nature/Soft Occlusion" shaders need this information. If you don't follow the naming conventions the tree will look weird with completely black parts.树需要使用Nature/Soft Occlusion Leaves和Nature/Soft Occlusion Bark shader 这两个效果.把树的整个文件夹放到Trees Ambient-Occlusion夹内.在Unity 项目面板里找到自定义树的FBX文件,在属性面板可以看到shader 选取项.在下拉菜单为树干选取Nature/Soft Occlusion Bark 效果.为树叶选取Nature/Soft Occlusion Leaves 效果. 从官方网站上可以下载到Terrain Demo.unitypackage, 这个资源包里有不少树,可以商用.如果真的需要自定义树模型,最好也好好看看官方的树是怎么建模,明白之后再进行建模.Unity also ships with several high quality trees in the "Terrain Demo.unitypackage". You can use those trees readily in your game. Even if you don't want to use the builtin trees, we strongly recommend that you take a look at those trees as an example on how to model trees.Using Low Poly Trees 低模树创建One branch with leaves is done with only six triangles and shows quite a bit of curvature. You can add more triangles for even more curvature. But the main point is: When making trees, work with triangles not with quads. If you use quads you basically need twice as many triangles to get the same curvature on branches. 一个树叉用六个三面效果还不错,如果要更好,可以增加三角面.重点就是需三角而不是四角来创建模型.如果用四角,可以把它分成两个三角面.,The tree itself wastes a lot of fillrate by having large polygons but almost everything is invisible due to the alpha. This should be avoided for performance reasons and of course because the goal is to make dense trees. This is one of the things that makes Oblivion's trees look great. They are so dense you cant even see through the leaves. 树的模型如有大多边形时,因透明通道的原因.会很浪费内存,同时会导致不可见.这是必须避免的,以提高性能.更重要的是,我们的目标是通过三角面做茂密的树.茂密得可以我们的眼睛都没法穿透它.Setting up Tree Collisions设置树的碰撞.If you'd like your trees to make use of colliders, it's very easy. When you've imported your Tree asset file, all you need to do is instantiate it in the Scene View, add a Capsule Collider and tweak it, and make the GameObject into a new Prefab. Then when you're adding trees to your Terrain, you add the tree Prefab with the Capsule Collider attached. You can only use Capsule Colliders when adding collisions with trees. 设置树的碰撞是件很简单的事情.只需要把树拖入场景,加上Capsule Collider这个碰撞,再做成预制就可以了.在加树的时候选取这个预制就OK.Grass 画草工具The Paint Foliage button allows you to paint grass, rocks, or other decorations around the Terrain. To paint grass, choose Edit Details button->Add Grass Texture. You don't need to create a mesh for grass, just a texture. 如上图就是画草的工具.当然它还可以画石头,或其他可以作为地形装饰的东西.同样,需要先加草的贴图之后才能画.以下是它的参数.The Add Grass Texture dialogAt this dialog, you can fine-tune the appearance of the grass with the following options:Detail Texture The texture to be used for the grass.草的贴图Min Width Minimum width of each grass section in meters.以米为单位,草的最小宽度Max Width Maximum width of each grass section in meters. 以米为单位,草的最大宽度Min Height Minimum height of each grass section in meters. 以米为单位,草的最小高度Max Height Maximum height of each grass section in meters. 以米为单位,草的最大高度Noise Spread The size of noise-generated clusters of grass. Lower numbers mean less noise .树叶变黄生成器的大小,数值越小,变黄范围越小.Healthy Color Color of healthy grass, prominent in the center of Noise Spread clusters.健康叶的颜色.树叶中心的颜色Dry Color Color of dry grass, prominent on the outer edges of Noise Spread clusters.树叶干枯的颜色.树叶变黄外围的颜色Grayscale Lighting If enabled, grass textures will not be tinted by any colored light shining on the Terrain.灯光灰度.如果设置为可用,树叶会以灰度图渲染.Lightmap Factor How much the grass will be influenced by the Lightmap. Lightmap的影响范围Billboard If checked, this grass will always rotate to face the main Camera.如可用,草会总以主摄像机为中心旋转After you've clicked the Add button, you'll see the grass appear selectable in the Inspector.The added grass appears in the Inspector上图为在属性面板上加入草贴图后的效果Painting Grass 画草.方法和上面的工具一样.就不多言了.同样记得F键和Alt键.Painting grass works the same as painting textures or trees. Select the grass you want to paint, and paint right onto the Terrain in the Scene ViewPainting grass is easy as pieNote:When you have a brush selected, move your mouse over the Terrain in the Scene View and press F. This will center the Scene View over the mouse pointer position and automatically zoom in to the Brush Size distance. This is the quickest & easiest way to navigate around your Terrain while creating it.Editing Grass 草的编辑和树的一样.对比下图.修改参数最小/最大高/宽度来让它来点变化To change any import parameters for a particular Grass Texture, select it choose Edit Detailsbutton->Edit. You can also double-click it. You will then see the Edit Grass dialog appear, and be able to adjust the parameters described above.You'll find that changing a few parameters can make a world of difference. Even changing the Max/Min Width and Height parameters can vastly change the way the grass looks, even with the same number of grass objects painted on the Terrain.Grass created with the default parameters默认参数下的草The same number of painted grass objects, now wider and taller 修改宽度和高度的效果Detail Meshes 细节网格Any Terrain decoration that is not trees or grass should be created as a Detail Mesh. This is perfect for things like rocks, 3D shrubbery, or other static items. To add these, use the Paint Foliage button. Then choose Edit Details button->Add Detail Mesh. You will see the Add Detail Mesh dialog appear.在加草的工具上还可以增加细节网格物体.比如石头或其他可以装饰的物体.以下是其参数The Add Detail Mesh dialogDetail The mesh to be used for the detail.用作细节的网格物体.Noise Spread The size of noise-generated clusters of the Detail. Lower numbers mean less noise 细节燥波的大小..Random Width Limit for the amount of width variance between all detail objects.随机宽度Random Height Limit for the amount of height variance between all detail objects.随机高度Healthy Color Color of healthy detail objects, prominent in the center of Noise Spread clusters.细节物体的健康色.细节物体中心的颜色Dry Color Color of dry detail objects, prominent on the outer edges of Noise Spread clusters 细节物体的干燥色.细节物体外围的颜色..Grayscale Lighting If enabled, detail objects will not be tinted by any colored light shining on theTerrain.灰度灯的设置开关.可用的话,细节物体不带颜色.Lightmap Factor How much the detail objects will be influenced by the Lightmap.Lightmap的影响范围Render Mode Select whether this type of detail object will be lit using Grass lighting or normal Vertex lighting. Detail objects like rocks should use Vertex lighting.细节物体渲染的方式.用草的灯光渲染或用正常的锥形灯渲染After you've clicked the Add button, you'll see the Detail mesh appear in the Inspector. Detail meshes and grass will appear next to each other. 画细节的和草是一样的.就不多说了.The added Detail mesh appears in the Inspector, beside any Grass objectsPainting Detail MeshesPainting a Detail mesh works the same as painting textures, trees, or grass. Select the Detail you want to paint, and paint right onto the Terrain in the Scene View.Painting Detail meshes is very simpleNote: When you have a brush selected, move your mouse over the Terrain in the Scene View and press F. This will center the Scene View over the mouse pointer position and automatically zoom in to the Brush Size distance. This is the quickest & easiest way to navigate around your Terrain while creating it.Editing Details 修改细节物体.双击或用Edit Details button->Edit.To change any import parameters for a Detail Mesh, select it and choose Edit Details button->Edit. You will then see the Edit Detail Mesh dialog appear, and be able to adjust the parameters described above.Refreshing Source Assets如果用第三方软件修改细节网格后,需要用Terrain->Refresh Tree and Detail Prototypes.来更新.If you make any updates to your Detail Mesh asset source file, it must be manually re-imported into the Terrain. To do this, use Terrain->Refresh Tree and Detail Prototypes. This is done after you've changed your source asset and saved it, and will refresh the Detail Meshes in your Terrain immediately.Lightmaps 灯光贴图You can create and use a Lightmap, based on the Lights in your Scene. You should almost always use Lightmaps. A Lightmapped terrain looks substantially better than Vertex lit. On top of that a Lightmapped terrain also runs faster than a Vertex lit terrain! 基于场景里的灯光,可以创建灯光贴图.要做好地形,灯光贴图是必须的.对比下面两张图.第一张没有灯光贴图.第二张用了灯光贴图.A mountain view without a LightmapThe same mountain, now using a Lightmap. Much better!Creating a LightmapTo create a Lightmap, make sure you have at least one Directional Light in your scene. Then choose Terrain->Create Lightmap from the menu. Here you can set various options like the Resolution of the Lightmap, choose the Lights used in the Lightmap, Shadows, and Shadow Sampling.为了创建灯光贴图.场景中必须至少要有一个平行灯.通过Terrain->Create Lightmap 就可以创建灯光贴图.可以设置的参数比如分辩率,阴影,阴影取样.Toggling LightmapTo enable or disable the active Lightmap, select your Terrain and click the Terrain Settings tab. In Lighting popup, choose Lightmap or Pixel lighting mode.通过地形设置选项:如下图可以开启和关闭灯光贴图.灯光贴图必须使用平等灯才可用.Note: You must use a Directional Light to create the lightmap. Point and Spot Lights will not be taken into account when creating the lightmap.Other Settings 地形设置最后一个按键.参数如下There are a number of options under the Terrain Settings buttonin the Terrain Inspector.All additional Terrain SettingsBase TerrainPixel Error Amount of allowable errors in the display of Terrain Geometry. This is essentially a LOD setting. 地形容差.Base Map Dist.The distance that Terrain Textures will be displayed in high-resolution.高分辨率下显示地形贴图的距离.Lighting Terrain lighting mode:地形灯光模式.Vertex Terrain is lit by lights in vertex lit mode. 顶点灯光模式Lightmap Terrain uses lightmap and is not affected by lights.灯光贴图模式Pixel Terrain is lit by pixel & vertex lights up close, and fades out to lightmap in thedistance. Close by it can also receive shadows. 像素灯光模式Cast Shadows Should terrain cast shadows?地形是否显示阴影Tree & Detail Settings树与细节的设置Draw If enabled, all trees, grass, and detail meshes will be drawn .是否可画.可用的话所有树,草和细节都渲染.必须为可用,不然看不到树,草和细节Detail Distance Distance from the camera that details will stop being displayed.离摄像机多远之后不显示细节Tree Distance Distance from the camera that trees will stop being displayed. The higher this is, the further-distance trees can be seen.同上,不过这个是关于树的Billboard Start Distance from the camera that trees will start appearing as Billboards instead of Meshes.离摄像机多远树开始以图片而不是网格来显示Fade Length Total distance delta that trees will use to transition from Billboard orientation toMesh orientation.树的图片和网格方式显示距离.Max Mesh Trees Total number of allowed mesh trees to be capped in the Terrain.地形网格显示的最大数Wind Settings风的设置Speed The speed that wind blows through grass. 风的速度Size The areas of grass that are affected by wind all at once. 风可影响的范围Bending Amount that grass will bend due to wind.受风影响的树的数量Grass Tint Overall tint amount for all Grass and Detail Meshes.彩色显示草和细节的总数。

Unity 渲染教程(03):使用多张纹理贴图

Unity 渲染教程(03):使用多张纹理贴图

Unity 渲染教程(三):使用多张纹理贴图译者:张乾光(星际迷航)审校:崔国军(飞扬971)•对多张纹理贴图进行采样。

•使用细节纹理贴图。

•在线性空间中处理颜色•使用splat贴图。

这是关于渲染基础的系列教程的第三部分。

前面两个部分介绍了着色器和纹理。

我们已经看到了如何使用单个纹理来让平坦表面看起来更复杂。

现在我们继续向前进,试下同时使用多个纹理。

这个系列教程是使用Unity 5.4.0开发的,这个版本目前还是开放测试版本。

我使用的是build5.4.0b10版本。

同时使用多个纹理。

细节贴图纹理对于渲染的效果是很好的,但是纹理也有自己的局限性。

纹理的像素数目是固定数量的,无论它们显示出来的尺寸是什么。

如果它们被渲染得很小的时候,我们可以使用mipmap来尽量让纹理看起来还不错。

但是当纹理被渲染得很大的时候,它们会变得模糊。

我们不能无条件地提供额外的细节,所以没有办法处理放大的问题。

或者是否有其他办法可以处理纹理被放大的问题?当然,我们肯定可以使用更大的纹理。

而更多的纹理的像素意味着更多的细节。

但是纹理的大小有限制。

而且存储大量额外的数据是很浪费的,这些数据只能在用户很靠近的时候才会注意到。

增加纹理的像素密度的另一种方法是平铺纹理。

然后你可以得到你所期望的一个很小的纹理,但你会明显得到一个重复的模式。

虽然这可能在很靠近看的时候不是很明显。

毕竟,当你站在你的鼻子就能触到一堵墙的位置的时候,你只会看到整个墙一个非常小的一部分。

因此,我们应该能够通过将一个没有进行平铺操作的纹理与一个进行了平铺操作的纹理组合来添加细节。

为了尝试这个组合效果,让我们使用具有明显重复模式的纹理。

这是一个方格网格。

下载得到它,并把它放到你的项目中去,使用默认的导入设置。

我稍微了扰乱了下网格线,使它更加的有趣,也能感知到它处于平铺模式。

网格线稍微扭曲下的纹理贴图。

复制My First Shader 里面的代码到新的文件里面并将它命名为TexturedWith Detail 。

Unity3D光照效果优化教程

Unity3D光照效果优化教程

Unity3D光照效果优化教程引言Unity3D是一款在游戏开发领域广受欢迎的引擎,它提供了丰富的特效和光照效果,能够创建更加逼真的游戏世界。

然而,光照效果是游戏中耗费计算资源的重要组成部分之一。

在本篇文章中,我们将探讨如何优化Unity3D的光照效果,以提高游戏的性能和质量。

第一章:光照贴图的使用光照贴图是一种预计算的光照信息,可以用于实时渲染中。

通过使用光照贴图,我们能够节省大量计算资源。

在Unity3D中,我们可以使用Lightmap来生成光照贴图。

在导入场景中的模型时,勾选“Generate Lightmap UVs”选项,Unity会自动生成Lightmap UVs,并将光照信息保存在Lightmap中。

通过合理利用光照贴图,我们能够大幅度提高游戏的渲染效率。

第二章:光照贴图分辨率的调整在Unity3D中,我们可以通过调整光照贴图的分辨率来优化光照效果。

在场景中,我们可以选择将重要的物体与不重要的物体分开,为不同的物体设置不同的光照贴图分辨率。

对于较为重要的物体,我们可以使用较高的分辨率,以获得更加细腻的光照效果。

而对于一些不太重要的物体,可以使用较低的分辨率。

通过合理分配光照贴图的分辨率,我们能够在保证游戏质量的情况下提高游戏的性能。

第三章:灯光设置的优化在Unity3D中,灯光是影响光照效果的关键因素之一。

对于场景中的灯光,我们可以进行一些优化设置以提高游戏性能。

首先,我们可以限制灯光的数量,特别是对于无效或不可见的灯光。

其次,我们可以使用Shadow Distance选项来控制阴影的渲染距离,避免无效渲染。

此外,对于不需要阴影的灯光,可以关闭阴影渲染以提高性能。

通过灯光设置的优化,我们能够有效减少光照效果对游戏性能的影响。

第四章:动态光照的使用和优化在一些特殊的情况下,游戏中需要使用动态光照,以提供更加真实的光照效果。

然而,动态光照会对游戏性能产生较大的影响。

为了提高性能,我们可以采取一些优化措施。

unity 贴花原理

unity 贴花原理

Unity中的贴花(Decal)是一种在游戏场景中动态添加纹理的技术。

贴花可以用于在物体表面上添加各种效果,比如弹痕、血迹、污渍等,从而增加场景的真实感和细节。

贴花的原理是通过在物体表面上添加一个平面或者几何体,然后将贴花纹理投影到该平面或几何体上。

这个过程可以分为以下几个步骤:
1. 创建贴花纹理:首先需要创建一个贴花纹理,可以是一个透明的PNG图片,其中包含了需要添加到物体表面的效果,比如弹痕、血迹等。

2. 创建贴花对象:在Unity中,可以通过创建一个空物体或者一个平面来表示贴花对象。

贴花对象需要放置在需要添加贴花效果的物体表面上。

3. 投影贴花纹理:将贴花纹理投影到贴花对象上。

这可以通过将贴花纹理作为材质的贴花贴图属性(decal texture)来实现。

贴花贴图属性可以通过在Shader中使用贴花纹理的UV坐标来将纹理投影到贴花对象上。

4. 调整贴花效果:可以通过调整贴花对象的位置、旋转和缩
放来调整贴花效果。

还可以通过调整贴花材质的透明度、颜色和混合模式等属性来进一步改变贴花效果。

需要注意的是,贴花是一种动态效果,可以根据游戏中的情况进行添加、删除和更新。

在实时渲染中,贴花的性能开销较大,因此需要合理使用和管理贴花对象,避免过多的贴花导致性能下降。

Unity3D脚本:Unity贴图动画的实现

Unity3D脚本:Unity贴图动画的实现

Unity3D脚本:Unity贴图动画的实现
Posted on 2013年02月06日 by U3d / Unity3D脚本/插件/被围观 401 次将脚本新建保存,然后建一个cube或者平面,把脚本拖上,然后设置动画的贴图,然后play就可以测试了。

Unity3D脚本如下:
var frames : Texture[];
//声明一个数组,存放贴图,声明后,在inspector会看到一个frames的数组,
//数组的长度可以自己填,填1,就代表只有1张图,可以把一张texture拖进去,填2就代表2张,以此类推
var framesPerSecond = 10; //声明fps,每秒播放几帧,影响动画的速度。

function Update() {
var index : int = (Time.time * framesPerSecond) % frames.Length;
//数组的索引,根据时间改变,当前时间乘以fps与总帧数取余,就是播放的当前帧,随着update更新
= frames[index]; //渲染这个贴图
}
s。

Unity3D教程:导入贴图和模型

Unity3D教程:导入贴图和模型

Unity3D教程:导入贴图和模型Unity资源导入:对于游戏中资源导入可以导入图片,网格等。

Project面板右键—〉import new asset图片:导入图片后再Project面板选中,会在Inspector面板出现其属性设置。

说说几个重要的:TextureType:贴图类型,这会影响选择类型贴图时候有限选择。

AlphafromGrayscal:使用灰度创建Alpha,当需要unity为贴图创建一条alpha通道,使用它转换得到的灰度值来渲染透明度,可以开启它。

WrapMode:所谓的包裹模式,决定贴图会无限次平铺还是只会一次。

Repeat就是重复平铺。

Clamp会让贴图的边缘拉升并在改变大小时候填满任何缝隙。

FilterMode:所谓的图像过滤模式,在拉伸时候对贴图过滤,比如[Point]点过滤,在很近看贴图时候,可能感觉不均。

Bilinear它会时近看贴图显得模糊。

Trilinear它会在不同mipmap层次之间模糊。

AnisoLevel:设置各项异性过滤器的级别,同属的可以理解为当你从一个比较陡的角度来看,贴图现实的可以有多细腻,渲染的等级越高,越占内存。

想要确定贴图页面会占用多大内存,可以长X宽,再乘以他的位深度[bpp,每像素位数],如果贴图包含mipmap,还需要扩大1.33倍。

Unity3D教程手册网格:网格就是那些Maya ,C4D,3DSMAX,C3D,LW等软件导出的文件。

比如导入一个.fbx文件。

选中后,在Inspector面板中。

看到居多属性。

慢慢解释吧。

ScaleFactor:缩放系数,使用这个属性在导入资源后设置其大小,调整资源在场景现实过大,或者过小的问题。

MeshCompression:网格压缩的比例[Off,Low,Medium,High]不可否认,压缩时可以节约内存的。

OptimizeMesh:为提高GPU性能记录网格顶点和索引。

GenerateColliders:是否在场景中让网格对象具有碰状体表现,通俗的说就是实心的,不可以穿体而过。

Unity3d实验指导书

Unity3d实验指导书

6.试验6 Unity3d 根本操作1 试验目的通过本试验的学习,使学生把握利用软件开发工具unity 3d进展三维模型的创立,以及把握Unity 3d软件的根本操作方法。

2 试验环境Windows10操作系统、Unity2022.1.13 试验内容Unity3D 操作方法,地形、树、草的绘制,天空盒、雾及影子效果的添加方法,材质贴图的编辑,地形中贴图的编辑设置4 试验步骤〔1〕. 在菜单栏GameObject->3D Object->Terrain 里创立地形,在右面的来修改地形的Inspector 设置面板里点击面积,选择一个适宜的大小〔如图〕。

图4- 1 地形示意图〔2〕. 在菜单栏GameObject->Light->Directional light 里创立平行光〔如以下图〕创立工程的时候默认会添加一个,假设没有就手动添加一个。

图4- 2 平行光示意图〔3〕.选中地形对象,在右边的Inspector 面板里面设置Terrain 参数,Terrain菜单栏有一行图标于建立无极限高的山峰,,其中该图标用该图标比第一个图标多了一个参数值Height,设置该参数可以限定山的高度,因此可以创立高地平台,使用该图标可平滑山峰,通过转变BrushSize 和Opacity 的参数建立不同的山峰〔如图3〕;图4- 3 山峰水池示意图〔4〕. Terrain 菜单栏里面的图标可用于给地形贴图,点击Assets->Importpackage->Environment->TerrainAssets 导入软件自带的地形的贴图数据库,点击材料进展贴图〔如以下图〕;选择Add Texture 选择已导入的贴图图4- 4 贴图示意图〔5〕. 该图标分别可用于给场景添加树木和草,方法为点击菜单Assets->Importpackage->SpeedTree 和TerrainAssets 分别导入树木和草的数据库,点击点击或,选择Add Tree 在弹窗中来添加已导入的树木和草材料〔如以下图所示〕;草材料通过Edit Detail 添加,属于细节局部,放大前方可观察。

Unity3D 美术资源规范

Unity3D 美术资源规范

Unity3D 美术资源规范一.单位,比例统一在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例。

统一单位为米。

二.模型规范⒈所有角色模型最好站立在原点。

没有特定要求下,必须以物体对象中心为轴心。

⒉面数的控制。

移动设备每个网格模型控制在300-1500个多边形将会达到比较好的效果。

而对于桌面平台,理论范围1500-4000。

如果游戏中任意时刻内屏幕上出现了大量的角色,那么就应该降低每个角色的面数。

比如,半条命2对于每个角色使用2500-5000个三角面。

正常单个物体控制在1000个面以下,整个屏幕应控制在7500个面以下。

所有物体不超过20000个三角面。

⒊整理模型文件,仔细检查模型文件,尽量做到最大优化,看不到的地方不需要的面要删除,合并断开的顶点,移除孤立的顶点,注意模型的命名规范。

模型给绑定之前必须做一次重置变换。

⒋可以复制的物体尽量复制。

如果一个1000面的物体,烘焙好之后复制出去100个,那么他所消耗的资源基本和一个物体消耗的资源一样多。

三.材质贴图规范⒈我们目前使用的Unity3D软件作为仿真开发平台,该软件对模型的材质有一些特殊的要求,在我们使用的3dsMax中不是所有材质都被Unity3D软件所支持,只有standard(标准材质)和Multi/Sub-Objiect(多维/子物体材质)被Unity3D软件所支持。

注:Multi/Sub-Objiect(多维/子物体材质)要注意里面的子材质必须为standard(标准材质)才能被支持。

⒉Unity3D目前只支持Bitmap贴图类型,其它所有贴图类型均不支持。

只支持DiffuseColor(漫反射)同self-Illumination(自发光,用来导出lightmap)贴图通道。

Self-Illumination(不透明)贴图通道在烘焙lightmap后,需要将此贴图通道channel 设置为烘焙后的新channel,同时将生成的lightmap指向到self-Illumination。

unity3d绘画手册-------地形各个参数解释

unity3d绘画手册-------地形各个参数解释

unity3d绘画⼿册-------地形各个参数解释关于Unity3D是什么。

我就不多做解释了。

由于⼯作原因,该系列原创教程不定期更新。

每⽉必然有更新。

谢谢各位。

Unity地形::新建地形:<ignore_js_op>如图在菜单中新建⼀个地形。

就会在<ignore_js_op>中看到Terrain对象。

如果要修改地形参数,可以在Terrain菜单下的SetResolution中设置。

<ignore_js_op>6597408416238626275.jpg如上图所⽰。

地形的参数设置:TerrainWidth:全局地形总宽度。

其单位为Unity统⼀单位-⽶。

TerrainHeight:全局地形允许的最⼤⾼度,单位为Unity统⼀单位。

TerrainLength:全局地形总长度,单位为Unity统⼀单位。

Heightmap Resolution:全局地形⽣成的⾼度图的分辨率。

Detail Resolution:全局地形所⽣成的细节贴图的分辨率,所以数字越⼩性能越好。

但是质量也要考虑。

ControlTestureResoulution:全局把地形贴图绘制到地形上时所使⽤的贴图分辨率。

BaseTextureResoution:全局⽤于远处地形贴图的分辨率。

unity定制地形:如果有美术⼈员制作好的⾼度图。

那么可以直接导⼊,但是unity仅⽀持.RAW格式。

图像⼤⼩要求是2的幂。

导⼊⽅法:Terrain-〉Import Heightmap-Raw。

选中需要的资源后。

会弹出如下属性设置框:<ignore_js_op>6597408416238626276.jpgDepth:由⽂件格式来设置,8位或者16位。

Width:⾼度图的宽度,根据图像本⾝⼤⼩获得。

Height:⾼度图的⾼。

ByteOrder:根据⽂件格式来设置。

Mac或者Wndows。

使⽤这个⽂件编码时所⽤的顺序。

图文详解Unity3D中Material的Tiling和Offset是怎么回事

图文详解Unity3D中Material的Tiling和Offset是怎么回事

图文详解Unity3D中Material的Tiling和Offset是怎么回事阅读目录(Content)Tiling和Offset概述3DS格式解析Offset是什么意思Tiling是什么意思总结图文详解Unity3D 中Material的Tiling和Offset是怎么回事回到顶部(go to top)Tiling和Offset概述Tiling表示UV坐标的缩放倍数,Offset表示UV坐标的起始位置。

这样说当然是隔靴搔痒。

下面用*.3ds文件作为模型,介绍Tiling和Offset到底是怎么回事。

回到顶部(go to top)3DS格式解析比如我有这样一个tank_player.3ds模型。

右侧的'select'处的图片就是贴图。

*.3ds文件最基本的内容包括顶点列表Vertices、贴图坐标列表UVs、面列表Faces。

其中Vertices和UVs的数目相等。

下面就是用文本描述的tank_player.3ds文件的内容,这是一个树结构,用先序遍历即可将其改写为二进制的3ds文件。

这个XML结构就是从二进制的tank_player.3ds分析来的。

1 &lt;_MainChunk Length="8386"&gt;2 &lt;_CVersion Length="10"&gt;3&lt;/_CVersion&gt;3 &lt;__3DEditorChunk Length="8370"&gt;4 &lt;_ObjectBlock Length="8364"&gt;5 &lt;StringLength="16"&gt;Tank_PlayerMesh&lt;/String&gt;6 &lt;_TriangularMesh Length="8342"&gt;7 &lt;_VerticesList Length="3776"&gt;8 &lt;numVertsLength="2"&gt;314&lt;/numVerts&gt;9 &lt;Vector X="0.7707" Y="52.527"Z="104.4209" Length="12" /&gt;10 &lt;Vector X="6.2672" Y="58.6059"Z="104.4909" Length="12" /&gt;11 …12 &lt;Vector X="-0.4168" Y="65.2885"Z="104.4949" Length="12" /&gt;13 &lt;/_VerticesList&gt;14 &lt;_MappingCoordinatesList Length="2520"&gt;15 &lt;TexCoordCountLength="2"&gt;314&lt;/TexCoordCount&gt;16 &lt;TexCoord u="0.7052" v="0.9314"Length="8" /&gt;17 &lt;TexCoord u="0.7434" v="0.9053"Length="8" /&gt;18 …19 &lt;TexCoord u="0.7701" v="0.9442"Length="8" /&gt;20 &lt;/_MappingCoordinatesList&gt;21 &lt;_FacesDescription Length="2040"&gt;22 &lt;numIndicesLength="2"&gt;254&lt;/numIndices&gt;23 &lt;triIndex v1="0" v2="1" v3="2" Length="8" /&gt;24 &lt;triIndex v1="0" v2="2" v3="3" Length="8" /&gt;25 …26 &lt;triIndex v1="4" v2="5" v3="6" Length="8" /&gt;27 &lt;/_FacesDescription&gt;28 &lt;/_TriangularMesh&gt;29 &lt;/_ObjectBlock&gt;30 &lt;/__3DEditorChunk&gt;31 &lt;/_MainChunk&gt;这里面的_VerticesList 是顶点坐标列表,每个Vector都是3D 模型中的一个顶点;_MappingCoordinatesList是贴图坐标列表UVs,每个TexCoord都是在贴图上的一个坐标点。

unity3d游戏开发之UV贴图教程

unity3d游戏开发之UV贴图教程

UV贴图教程一、理解UV贴图UVs是驻留在多边形网格顶点上的两维纹理坐标点,它们定义了一个两维纹理坐标系统,称为UV纹理空间,这个空间用U和V两个字母定义坐标轴。

用于确定如何将一个纹理图像放置在三维的模型表面。

本质上,UVs是提供了一种模型表面与纹理图像之间的连接关系,UVs负责确定纹理图像上的一个点(像素)应该放置在模型表面的哪一个顶点上,由此可将整个纹理都铺盖到模型上。

如果没有UVs,多边形网格将不能被渲染出纹理。

通常在创建MAYA原始对象时,UVs一般都被自动创建(在创建参数面板上有一个Create UVs选项,默认是勾选的),但大部分情况下,我们还是需要重新安排UVs,因为,在编辑修改模型时,UVs不会自动更新改变位置。

重新安排UVs,一般是在模型完全做好之后,并且在指定纹理贴图之前进行。

此外,任何对模型的修改都可能会造成模型顶点与UVs的错位,从而使纹理贴图出现错误。

更多精彩请点击【狗刨学习网】二、UVs和纹理映射NURBS表面与多边形网格的贴图机制不同,NURBS表面的UV是内建的(已经自动定义出U、V),这些UV不能被编辑,移动CV将会影响纹理贴图。

而多边形的UVs并非一开始就存在,还必须明确地创建并且可以随后进一步修改编辑。

三、UV贴图为一个表面创建UVs的过程叫UV贴图(UV mapping)。

这个过程包括创建、编辑。

其结果是明确地决定图像如何在三维模型上显示,这项技术的熟练程度直接影响模型的最后表现。

四、创建UVsMaya中有很多UVs创建工具:如,自动UV工具、平面UV工具、圆柱UV工具、球形UV工具、用户自定义UV工具等。

每种创建工具都是使用一种预定的规则将UV纹理坐标投射到模型表面,自动创建纹理图像与表面的关联。

通常,对自动产生的UV还必须使用UV编辑器进一步编辑才能达到所需要的效果。

因为每次对模型的修改(如挤压,缩放,增加、删除等等)都会造成UVs错位,所以最好的工作流程是等模型完全设计好了之后,再开始创建UVs。

unity3D的介绍

unity3D的介绍

[图文教程]Unity3D—强大的跨平台3D游戏开发工具众所周知,Unity3D是一个能够实现轻松创作的多平台的游戏开发工具,是一个全面整合的专业游戏引擎。

在现有的版本中,其强大的游戏制作功能已经达到让人瞠目结舌的地步。

尤其是它在3.0版本里面制作的那款第一人称战争游戏,画质效果丝毫不逊色于当下十分流行的《穿越火线》、《战地之王》等主流第一人称射击游戏。

下图为Demo中的显示效果:看到如此绚丽的效果,让我马上走进精彩的Unity3D世界吧!首先要下载Unity3D,在官网上就可以完成。

Unity3D的官方网站:Unity3D的下载地址:/unity/download/下载好之后,必须要到官方网站上注册一个邮箱,才能获得30天的试用时间。

试用后如果您对这款软件满意,还可以在购买后继续使用。

当然,如果您购买了Pro版本的Unity3D,将会获得更多的功能。

第一章Unity3D的基本界面介绍Unity3D的基本界面非常简单,几个窗口就可以实现几乎全部的编辑功能。

主界面如图1.1所示:场景面板:该面板为Unity3D的编辑面板;您可以将您所有的模型、灯光、以及其他材质对象拖放到当前场景中。

构建游戏中所能呈现的景象。

动画面板:与场景面板不同,该面板是用来渲染场景面板中的景象的。

该面板不能用作编辑,但却可以呈现完整的动画效果。

显示的内容取决于场景摄像机的设置。

层次清单栏:该面板主要功能是显示放在场景面板中的所有的物体对象。

项目文件栏:该面板主要功能是显示该项目文件中的所有资源列表。

除了模型、材质、字体等,还包括该项目的各个场景文件。

对象属性栏:该面板栏会呈现出任何对象的固有属性,包括三维坐标、旋转量、缩放大小、脚本的变量和对象等等。

2、Edit【编辑】3、Assets【资源】4、GameObject【游戏对象】8、Help【帮助】第二章Unity3D的简单预览每个Unity3D版本都会自带一个Demo源文件。

Unity3D命令手册(下)

Unity3D命令手册(下)

第三章 Assets(资源)Reimport 重新导入重新导入资源Create 创建创建物件--Folder 创建文件夹--JavaScript 创建JAVA脚本--C Sharp Script 创建C Sharp脚本--Boo Script 创建Boo脚本--Shader 创建着色脚本--Prefab 创建预置--Animation 创建动画==Compressed 压缩==Sample Rate 采样频率==Wrap Mode 换行模式==Default 默认==Once 一次==Loop 循环==PingPong 反复==ClampForever 永远--Material 材质球--Cubemap 立方体贴图--Lens Flare 光晕--Custom Font 自定义字体--Physic Material 自然材质球--GUI Skin GUI皮肤Show in Explorer 在资源管理器中显示在资源管理器中显示文件的位置Open 打开(打开脚本)打开一个脚本文件Import New Asset... 导入新的资源导入新的资源文件Refresh 刷新刷新Import Package... 导入资源包导入资源包Export Package... 导出资源包导出资源包Select Dependencies 选择相关选择与物件相关的链接文件Export ogg file 导出OGG文件导出OGG文件Reimport All 重新导入所有重新导入所有资源Sync VisualStudio Project 同步视觉工作室项目同步视觉工作室项目第四章 GameObject(游戏对象)Create Empty 创建一个空的游戏对象创建一个空的游戏对象Create Other 创建其他组件创建其他组件-Particle System 粒子系统-Camera 摄像机-GUI Text 图形文本-GUI Texture 图形纹理-3D Text 3D文字-Point Light 点光源-Spotlight 聚光灯-Directional Light 平行光-Cube 立方体-Sphere 球体-Capsule 药丸体-Cylinder 圆柱体-Plane 平面-Ragdoll 布娃娃(不准)--Root 根--Left Hips 左臀部--Left Knee 左膝--Left Foot 左脚--Right Hips 右臀部--Right Knee 右膝--Right Foot 右脚--Left Arm 左臂--Left Elbow 左肘--Right Arm 右臂--Right Elbow 右肘--Middle Spine 中央脊柱--Head 头--Total Mass 总质量--Strength 气力--Flip Forward 倒装转发(不准)Center On Children 子物体归位到父物体中心点将子物体归位到父物体中心点Make Parent 创建子父集创建子父集关系Clear Parent 取消子父集取消子父集关系Apply Changes To Prefab 应用变更为预置应用当前变更为预置Move To View 移动物体到视窗的中心点移动物体到视窗的中心点Align With View 移动物体与视窗对齐移动物体与视窗对齐Align View to Selected 移动视窗与物体对齐移动视窗与物体对齐第五章 Component(组件)Mesh 网格--Mesh Filter 网格过滤器--Text Mesh 文字网格--Mesh Renderer 网格渲染(网格生成器)--Combine Children 结合子物体Particles 粒子--Ellipsoid Particle Emitter 椭球粒子发射器--Mesh Particle Emitter 网格粒子发射器--Particle Animator 粒子动画--World Particle Collider 世界粒子碰撞机--Particle Renderer 粒子渲染--Trail Renderer 径渲染Physics 物理--Rigidbody 刚体--Character Controller 字符控制器--Box Collider 盒子碰撞机--Sphere Collider 球体碰撞机--Capsule Collider 胶囊碰撞机--Mesh Collider 网格碰撞机--Wheel Collider 轮体碰撞机--Raycast Collider 光线投射碰撞机--Hinge Joint 关键骨节--Fixed Joint 固定骨节--Spring Joint 弹性骨节--Character Joint 字符骨节--Configurable Joint 联合骨节--Constant Force 恒力Audio 音频--Audio Listener 音频监听--Audio Source 音频源Rendering 渲染--Camera 摄像机--Light 灯光--Projector 投影机--Halo 晕染--Lens Flare 光晕--GUI Texture 图形纹理--GUI Text 图形文本--Skybox 天空盒--GUI Layer 图形层--Flare Layer 闪光层--Halo Layer 晕染层Miscellaneous 杂项--Animation 动画--Line Renderer 线渲染--Network View 网络浏览--Terrain Collider 地形碰撞机Scripts 脚本--Activate Trigger 激活触发--Drag Rigidbody 刚体拖动--FPSWalker 新鲜粮食店(不准)--Terrain 地形--Timed Object Destructor 定时对象的析构--Water Simple 水简诉Camera-Control 摄像机控制--Mouse Look 鼠标查看--Mouse Orbit 鼠标轨道--Smooth Follow 光滑后续--Smooth Look At 光滑预览第六章 Terrain(地形)Create Terrain 创建地形创建一个新的地形Import Heightmap - Raw...导入高度图导入已存地形的高度图Export Heightmap - Raw...导出高度图导出当前地形的高度图Set Resolution...设置分辨率设置分辨率(设置地形的大小比例等)Create Lightmap...创建光影图创建光影图Mass Place Trees...批量种植树批量的在地形上种植树Flatten Heightmap...展平高度图在一个高度上展平地形Refresh Tree and Detail Prototypes 刷新树及预置细节刷新树和预置的细节第七章 Window(窗口)Next Window 下个窗口显示下一个窗口Previous Window 前窗显示最前的窗口Layouts 布局布局模式--2 by 3 2和3--4 Split 4视窗--Tall 单视窗--Wide 宽屏--Save Layout 保存布局--Delete Layout 删除布局--Revert Factory Settings 恢复出厂设置Scene 场景窗口显示场景窗口Game 游戏窗口显示游戏窗口Inspector 检视窗口显示检视窗口Hierarchy 层次窗口显示层次窗口Project 工程窗口显示工程窗口Animation 动画窗口显示动画窗口Profiler 探查窗口显示探查窗口Asset Server 资源服务器显示资源服务器Console 控制台显示控制台第八章 Help(窗口)About Unity 关于Unity显示关于Unity的信息Enter serial number 输入序列号输入软件序列号Unity Manual Unity手册显示Unity使用手册Reference Manual 参考手册显示Unity参考手册Scripting Manual 脚本手册显示Unity脚本手册Unity Forum Unity论坛显示Unity论坛Welcome Screen 欢迎窗口显示欢迎窗口Release Notes 发行说明显示发行说明Report a Problem 问题反馈提交问题反馈。

Unity3D之Lightmap入门、烘焙贴图、场景技巧

Unity3D之Lightmap入门、烘焙贴图、场景技巧

Unity3D之Lightmap入门作者:李志健Unity内置的光照贴图烘培工具是Illuminate Labs 的Beast。

烘培光照贴图流程被完美的整合到Unity中。

这就意味着使用Beast可以根据你的网格物体,材质贴图和灯光属性的设置来烘培你的场景,从而得到完美的光照贴图。

同时也意味着光照图将作为渲染引擎的一部分。

只要你烘培一次光照贴图你就不需要其他任何操作。

光照图将自动指定到物体上。

准备需要烘培的光照贴图的场景从菜单栏选择Window – Lightmapping打开光照图工具窗口。

1.检查你将要烘培的模型上是否存在一个合适的用来定位光照贴图的UVs。

你也可以从mesh import settings面板中的勾选Generate Lightmap UVs选项来生成一个用于定位光照图UV的集。

2.在物体面板中将要烘培光照贴图的物体设置为Static(静态),这样Unity就会知道哪些物体是需要被烘培的。

3.在Bake面板下调整Resolution的值控制光照贴图的分辨率。

(在Scene View面板里勾选上小窗口LightmapDisplay中的Show Resolution选项可以帮助你更直观的查看贴图分辨率设置)。

4.点击Bake(烘培)5.在Unity编辑器底部的状态栏的右边会出现一个进度条。

6.当烘培结束时,你可以从光照图编辑器的底部预览窗口中查看所有烘培好的贴图。

场景和游戏窗口将会更新。

现在在你的场景中已经可以看到光照贴图效果了!Tweaking Bake Settings 调节烘焙设置最终场景的渲染效果取决与你对灯光和烘培选项的更多设置。

让我们来看一个通过基础设置改进光照的质量的小例子。

这是一个简单的场景,包含一组立方提和一个位于场景中心的点光源。

灯光产生硬阴影,看起来这个效果十分的晦暗和不自然。

Selecting the light and opening the Object pane of the Lightmapping window exposes Shadow Radius and Shadow Samples properties. Setting Shadow Radius to 1.2, Shadow Samples to 100 and re-baking produces soft shadows with wide penumbra - our image already looks much better.选择灯光打开物体面板,展开阴影范围和阴影采样属性。

unity3D学习之光照贴图

unity3D学习之光照贴图

光照贴图完全集成到Unity 中,可在编辑器(Editor) 中创建整个关卡,然后对其进行光照映射,让所有材质自动获取光照贴图,无需手动进行。

对Unity 中的光照贴图来说,所有灯光属性会直接映射到Beast 光照烘培贴图工具中并烘培到纹理,提高性能。

Unity 专业版扩展了全局照明(Global Illumination) 功能,可烘培出真实、美观的光照,实时的相反操作则不可行。

此外,Unity 专业版提供天光和发光材质,使场景照明更加有趣。

在本页中,您将看到光照贴图(Lightmapping) 窗口中出现的所有属性的深入描述。

要打开光照贴图(Lightmapping) 窗口,请选择窗口(Window) –光照贴图(Lightmapping) 选项。

检视器顶部有三个场景筛选器(Scene Filter) 按钮,供用户将操作应用到所有对象或限制在灯光或渲染器内。

对象(Object)每个对象的灯光、网格渲染器和地形烘培设置根据当前的选择而定。

单击场景筛选器(Scene Filter) 按钮可在层级视图(Hierarchy) 中轻松看到灯光、渲染器或地形。

文章来自【狗刨学习网】网格渲染器和地形(Mesh Renderers and Terrains):静态光照贴图(Lightmap Static) 网格渲染器和地形(Mesh Renderers and Terrains) 须标为静态才能进行烘培。

光照贴图比率(仅用于网格渲染器(Mesh Renderers))值越大,网格渲染器的分(Scale In Lightmap) 辨率越高。

最终分辨率将成比例(光照贴图缩放(Scale))*(对象的世界坐标空间所占面积)*(全局烘培设置分辨率(Resolution) 值)。

值设置为0 将不烘培对象(但仍会影响其他烘培对象)。

光照贴图大小(Lightmap Size) (仅用于地形)地形实例的光照贴图大小。

地形不与其他对象共用图集,而是有自己的光照贴图。

Unity3D模型制作标准

Unity3D模型制作标准

Unity3D模型制作规范Posted on 2013年03月21日 by U3d / Unity3D 基础教程/被围观 519 次Unity3D模型制作规范一.单位,比例统一在建模型前先设置好单位,在同一场景中会用到的模型的单位设置必须一样,模型与模型之间的比例要正确,和程序的导入单位一致,即便到程序需要缩放也可以统一调整缩放比例。

统一单位为米。

二.模型规范⒈所有角色模型最好站立在原点。

没有特定要求下,必须以物体对象中心为轴心。

⒉面数的控制。

移动设备每个网格模型控制在300-1500个多边形将会达到比较好的效果。

而对于桌面平台,理论范围1500-4000。

如果游戏中任意时刻内屏幕上出现了大量的角色,那么就应该降低每个角色的面数。

比如,半条命2对于每个角色使用2500-5000个三角面。

正常单个物体控制在1000个面以下,整个屏幕应控制在7500个面以下。

所有物体不超过20000个三角面。

⒊整理模型文件,仔细检查模型文件,尽量做到最大优化,看不到的地方不需要的面要删除,合并断开的顶点,移除孤立的顶点,注意模型的命名规范。

模型给绑定之前必须做一次重置变换。

⒋可以复制的物体尽量复制。

如果一个1000面的物体,烘焙好之后复制出去100个,那么他所消耗的资源基本和一个物体消耗的资源一样多。

三.材质贴图规范⒈我们目前使用的Unity3D软件作为仿真开发平台,该软件对模型的材质有一些特殊的要求,在我们使用的3dsMax中不是所有材质都被Unity3D软件所支持,只有standard(标准材质)和Multi/Sub-Objiect(多维/子物体材质)被Unity3D软件所支持。

注:Multi/Sub-Objiect(多维/子物体材质)要注意里面的子材质必须为standard(标准材质)才能被支持。

⒉Unity3D目前只支持Bitmap贴图类型,其它所有贴图类型均不支持。

只支持DiffuseColor(漫反射)同self-Illumination(自发光,用来导出lightmap)贴图通道。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Unity3D美术方面贴图我们都知道,一个三维场景的画面的好坏,百分之四十取决于模型,百分之六十取决于贴图,可见贴图在画面中所占的重要性。

在这里我将列举一些贴图,并且初步阐述其概念,理解原理的基础上制作贴图,也就顺手多了。

我在这里主要列举几种UNITY3D中常用的贴图,与大家分享,希望对大家有帮助。

01首先不得不说的是漫反射贴图:漫反射贴图diffuse map漫反射贴图在游戏中表现出物体表面的反射和表面颜色。

换句话说,它可以表现出物体被光照射到而显出的颜色和强度。

我们通过颜色和明暗来绘制一幅漫反射贴图,在这张贴图中,墙的砖缝中因为吸收了比较多的光线,所以比较暗,而墙砖的表面因为反射比较强,所以吸收的光线比较少。

上面的这张图可以看出砖块本身是灰色的,而砖块之间的裂缝几乎是黑色的。

刨去那些杂糅的东西,我们只谈明显的,漫反射贴图表现了什么?列举一下,物体的固有色以及纹理,贴图上的光影。

前面的固有色和纹理我们很容易理解,至于后面的光影,我们再绘制漫反射贴图的时候需要区别对待,比如我们做一堵墙,每一块砖都是用模型做出来的,那么我们就没有必要绘制砖缝,因为这个可以通过打灯光来实现。

可是我们如果用模型只做了一面墙,上面的砖块是用贴图来实现,那么就得绘制出砖缝了。

从美术的角度,砖缝出了事一条单独的材质带外,还有就是砖缝也是承接投影的,所以在漫反射图上,绘制出投影也是很有必要的,如下图:没有什么物体能够反射出跟照到它身上相同强度的光。

因此,让你的漫反射贴图暗一些是一个不错的想法。

通常,光滑的面只有很少的光会散射,所以你的漫反射贴图可以亮一些。

漫反射贴图应用到材质中去是直接通过DiffuseMap的。

再命名规范上它通常是再文件的末尾加上“_d”来标记它是漫反射贴图。

凹凸贴图Bump maps凸凹贴图可以给贴图增加立体感。

它其实并不能改变模型的形状,而是通过影响模型表面的影子来达到凸凹效果的。

再游戏中有两种不同类型的凸凹贴图,法线贴图(normalmap)和高度贴图(highmap)。

Normal maps法线贴图法线贴图定义了一个表面的倾斜度或者法线。

换一种说法,他们改变了我们所看到的表面的倾斜度。

法线贴图把空间坐标的参数(X,Y,Z)记录在像素中(R,G,B),上面的范例图就是这个意思。

有两种制作法线贴图的方法:1.从三维的模型渲染出一张法线贴图(用高模跟低模重叠在一起,把高模上的细节烘焙到低模的UV上,这里需要低模有一个不能重叠的UV)2.转换一张高度贴图成为一个法线贴图。

(是用NVIDIA的PS插件来转换一张图成为法线贴图)Height maps高度贴图什么是HeightMap呢?所谓高度图实际上就是一个2D数组。

创建地形为什么需要高度图呢?可以这样考虑,地形实际上就是一系列高度不同的网格而已,这样数组中每个元素的索引值刚好可以用来定位不同的网格(x,y),而所储存的值就是网格的高度(z)。

我们在这里叙述高度图,其实也是为了更好的绘制法线贴图,很多情况下我们的法线贴图只能在已有的漫反射贴图作为素材进行绘制,这样就是需要由一个HeightMap转换成法线贴图的一个过程,明白了这个原理,做起来也就可以更好的驾驭其效果。

高度贴图是一种黑白的图像,它通过像素来定义模型表面的高度。

越亮的地方它的高度就越高,画面越白的地方越高,越黑的地方越低,灰色的在中间,从而表现不同的地形。

当然在UNITY中也是有HightMap出现的,比如在Terrain菜单中,就有导入和导出HightMap的命令。

高度贴图通常是在图形处理软件中绘制的。

他们通常没有必要渲染这些,再DOOM3游戏中高度贴图是被转换成法线贴图来使用的。

使用高度贴图仅仅是为了适应简单的工作流程。

高度贴图通常通过“Heightmap”函数来调用到3D软件中去的,我们通常再文件名后面加一个"_h"来标示它。

Normal maps vs. height maps法线贴图和高度贴图一般来说,Normal Map来自于Height Map。

具体生成的方法如下:把Height Map的每个像素和它上面的一个像素相减,得到一个高度差,作为该点法线的x值;把Height Map的每个像素和它右边的一个像素相减,得到一个高度差,作为该点法线的y值;取1作为该点法线的z值。

推导过程如下:x方向,每个像素和它下面的一个像素相减,得到向量<1, 0, hb - ha>,其中ha是该像素的高度值,hb 是下一行的高度值;y方向,每个像素和它左边的一个像素相减,得到向量<0, 1, hc - ha>,其中ha是该像素的高度值,hb是左一列的高度值;两个向量Cross,得到简单来说,就是取两个方向的切线向量,对它们做Cross得到该点的法线向量。

还有另外一种做法,是根据每个象素四边的点计算,而该点象素本身不参与计算。

没有试过,不知道哪种好一些。

而且我觉得这种计算只适合于单块的HeightMap、NormalMap,像是DOOM3中的NormalMap就无法由HeightMap计算出来了。

所以最好还是在美工建模的时候同时生成NormalMap和HeightMap而不是利用HeightMap生成NormalMap。

DOOM3游戏引擎可以把法线贴图和高度贴图合成在一张凸凹贴图上。

通常我们绘制一张具有足够细节的高度贴图要比建立一个足够细节的模型然后渲染成相应的法线贴图要实际的多。

法线和高度的凸凹贴图可以通过Addnormals函数来合并到一种材质中。

毫无疑问,高度贴图大多数游戏引擎中出现的不多。

他们只是给电脑一种方法来计算曲面法线当使用动态灯光的时候。

这说明实际上,一张高度贴图被转换成一张法线贴图,以此可以计算出相邻两块不同高度的位置之间的倾斜面。

高度贴图永远不能像法线贴图这样具有足够的细节,这是被肯定的。

很明显只有灰度的高度贴图并不能很好的表现应该有的细节,因为它是黑白的,RGB颜色就会遭到浪费,并且因此你只能只用256层级的强度。

相比较来言法线贴图的每一个图像通道都可以利用到,显而易见,法线贴图能够更好的来表现凸凹。

Specular maps高光贴图什么是高光贴图?高光贴图是用来表现当光线照射到模型表面时,其表面属性的.(如金属和皮肤、布、塑料反射不同量的光)从而区分不同材质.高光贴图再引擎中表现镜面反射和物体表面的高光颜色。

材质的反光程度就越强。

(强弱度度是指,如果将这张Specularmap去色成为黑白图,图上越偏向RGB0,0,0,的部分高光越弱,越偏向RGB255,255,255的部分高光越强.)我们建立高光贴图的时候,我们使用solid value来表现普通表面的反射,而暗的地方则会给人一种侵蚀风化的反射效果。

(你头脑中要有很清晰的物件不同材质之间高光强弱的关系:高光最强的是那个部分,最弱的是那个部分,处在中间级别的是哪些部分.一般来说:金属的高光>塑料>木头>皮肤>不料,但是这个只是一个大致的分类,不要把它作为高光的指导.有时,你处理的物件可能是如上图一样,绝大部分都是同一类型材质的,比如布料,这时你也要小心的去分辨不同材料之间的高光强度的区别.切记,在这个阶段一定要保持清晰的头脑,不要急着去添加那些细节.在大的强弱关系还没有决定之前,就去添加那些细节会影响你的判断,而最后得到一张层次不清晰很“花”的高光.很多时候,我们容易范这样的毛病,就是将物件的高光处理的太过单一.)上面的贴图有个问题,砖的表面与砖缝相比将会有比较少的反光,但是砖缝的位置其实应该几乎是没有反光的。

(确定好整体高光的强弱之后,就开始在高光上叠加细节:比如金属划痕,金属倒角高光,锈渍周围的裸金属亮点,油渍,灰尘等.这时,你会发现,如果你在Diffusemap的绘制过程中,保留了纹理,划痕或以上提到过的细节的图层,你只需要将Diffusemap中的相应图层拖曳到Specularmap中,然后根据这些细节应该反映出来的高光强度调节就可以了.So,良好的图层管理习惯是非常必要的.)颜色再高光贴图中将会用来定义高光的颜色,组成砖的材料应该是一些沙子,他们将会反射出一些微笑的具有质感的光,这些在上面的例子中已经展示了出来。

(为了丰富高光贴图,我们有很多方法:做局部高光的细微变化,添加纹理(这个纹理要和材质本身的纹理区分开),叠加彩色图层(谨慎用))高光贴图是通过Specularmap函数调用到引擎中的,通常我们再贴图的后面加一个"_s"来区别它。

凸凹贴图可以通过高光贴图来改进成相当漂亮的贴图。

(要记住的是,单单凭借高光贴图是无法充分的表现材质特性的,只有Didffuse,Normal,和Specular三张配合才能充分的表现材质特性.)在UNITY中,高光贴图通常放在漫反射贴图的透明通道里,我们是用相关的SHANDER就可以达到高光的效果。

AO贴图Ambient Occlusiont简称AO贴图,中文一般叫做环境阻塞贴图。

是一种目前次时代游戏中常用的贴图技术,很多朋友将其与全局光烘焙贴图混淆,其实二者本质是完全不同的。

首先,我们从简单的AO贴图的算法来讲:AO贴图的计算是不受任何光线影响的,仅仅计算物体间的距离,并根据距离产生一个8位的通道。

如下图所示,计算球形物体的AO贴图的时候,程序使每个像素,根据物体的法线,发射出一条光,这个光碰触到物体的时候,就会产生反馈,比如球右下方的一些像素锁发射的光,碰触到了旁边的政法提,产生反馈,标记这里附近有物体,就呈现黑色。

、而球上方的像素所发射的光,没有碰触到任何物体,因此标记为白色。

简单了解算法后,大家就明白,全局光的烘焙师模拟GI(全局光)所呈现的阴影效果,而AO贴图时模拟模型的各个面之间的距离。

二者性质是完全不一样的。

我举例简单对比AO贴图和GI阴影贴图的区别。

根据这个低模,右边计算出的AO贴图的黑白关系,是根据物体模型距离产生的,不存在任何光源效果的影响,边缘部分等比较密集的结构,正确的产生了深色,强化了模型结构,在游戏引擎中,与其他通道贴图混合,可以提升游戏的效果。

右边的是全局光烘焙贴图的效果,是用MAX的天光计算结果进行烘焙,其阴影效果是模拟自然光线下的模型光影关系,在有结构接近的区域(比如裤袋、袖口)由于GI得光线跟踪计算会使其弱化,符合自然界光线效果,但是不是游戏所需要的效果。

在unity中,我们有两个地方可以调整AO,一个是在光照贴图渲染器中,有一个调整AO的参数,这个是确实渲染了一层AO。

还有一个就是通过摄影机特效,有一个屏幕空间环境阻塞的特效screen speace amb ient occlusion(SSAO).这两个都可以实现部分的AO效果,有兴趣的朋友可以自己尝试一下。

相关文档
最新文档