Unity3d-地形制作教程(20191208142506)
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.彩色显示草和细节的总数。
UnityD游戏场景设计实例教程CHAPTERUnityD山体地形的制作
在“Terrain Data”节点中,找到 “Paint Texture”选项,可以看到之 前绘制的山体地形纹理。
设置纹理的属性,如颜色、透明度、 纹理混合等参数,以实现所需的最终 效果。
04
添加unityd山体地形植被
导入山体地形植被素材
搜集山体地形植被素材
通过网络、自然环境等途径获取山体地形植被的素材,如植 物、灌木、草丛等。
导入山体地形纹理素材
准备山体地形纹理素材,可以使用Unityd Asset Store或 其他资源网站上的现成素材,也可以自己制作。
将山体地形纹理素材导入Unityd项目,将其命名为 “terrain_texture”。
使用substance painter绘制山体地形纹理
01
在Unityd中创建一个新的terrain对象,进入其层级结构,选中“Terrain Data”节点。
unityd游戏场景设计实例 教程chapterunityd山体 地形的制作
目录
• unityd山体地形设计基础 • 创建unityd山体地形模型 • 设置unityd山体地形纹理 • 添加unityd山体地形植被 • 完善unityd山体地形环境 • 优化与导出unityd山体地形资源
01
unityd山体地形设计基础
添加草坪纹理
使用先前导入的草坪纹理,将其添加到山体地 形表面,以增加自然效果。
3
设置环境属性
根据需要,设置山体地形的属性,如高度、坡 度、粗糙度等参数,以进一步控制其外观和性 能表现。
06
优化与导出unityd山体地形 资源
优化山体地形资源
减少资源量
为了提高游戏性能,需要对山体地形资源进行优化。可以通过删除不必要的贴图、减少模 型面数、使用LOD技术等方法来减少资源量。
地形级实景三维制作流程
地形级实景三维制作流程地形级实景三维制作是一种基于实际地形数据和真实照片进行建模和渲染的过程,旨在创建出逼真的三维场景。
本文将介绍地形级实景三维制作的流程,并分为数据收集、建模、纹理贴图和渲染四个主要步骤进行讲解,希望能对读者有所启发。
一、数据收集数据收集是地形级实景三维制作的第一步,它是建模工作的基础。
常见的数据收集方式有以下几种:1.测量工具:使用测量工具进行实地测量,获取地形的海拔、坡度、高程等数据。
2.遥感数据:利用卫星、飞机等遥感数据获取器,获取高分辨率的地形图像和卫星测绘数据。
3.激光扫描:用激光扫描仪进行地形扫描,获取精确的地形数据。
4.数字高程模型(DEM):使用DEM数据集,以数字高程模型的形式提供地形数据。
二、建模建模是地形级实景三维制作的核心部分,它涉及到将收集到的地形数据转换为可视化的三维模型。
建模可以分为以下几个大的步骤:1.地形平滑:根据收集到的地形数据,使用平滑算法将地形数据中的高低起伏转化为平滑的曲线。
2.高程调整:根据实际地形数据,对地形模型进行高程调整,确保模型与实际地形相匹配。
3.地貌细节:根据实地调查和遥感数据,增加地形模型的细节,如山脉、峡谷、河流等。
4.三维模型:根据建模需求,使用专业建模软件(如3ds Max、Maya等)创建三维模型,如建筑物、植被等。
5.碰撞检测:对建立的三维模型进行碰撞检测,以确保模型的稳定性和可用性。
三、纹理贴图纹理贴图是地形级实景三维制作的重要一环,它能使模型更加逼真。
纹理贴图可以分为以下几个步骤:1.纹理收集:收集地形实景数据、卫星照片、飞行影像等,作为纹理来源。
2.纹理处理:使用图像编辑软件,对收集到的纹理数据进行处理,如去除噪点、颜色校正等。
3.纹理映射:将处理后的纹理数据映射到三维模型上,使其与地形模型相匹配。
4.纹理融合:对不同纹理层进行融合,使得过渡自然,地形更加真实。
5.镜面反射:根据光照的角度和纹理贴图的特性,为模型设置镜面反射效果,增强真实感。
unity3d中地形的制作
Unity3D手册中介绍了两种地形制作方法:一、在SceneView中使用height tools直接绘制二、使用外部工具制作的heightmaps直接绘制地形很简单,不过只适合小面积地图的制作,对于真实游戏项目来说,这样拉地形实在太复杂,一般我们都会使用外部工具,比如PS,比如max来制作高度图,然后导出为一张灰度图,在引擎中将其转换为地形。
Unity3D也支持了这种做法,即导入HeightMap的方式,不过对HeightMap的格式有一个限定,必须是16bit的RAW格式灰度图,但是除此之外手册中再没有更多的描述。
没关系,Unity3D提供了将地形导出为HeightMap的方法,我们可以做一张小地图将其导出来,看一看就知道了。
如下图所示,将地形长宽高都设定为2个单位,地形精度设定为33,这个数值是能够设置的最小值了。
这样就表示在一个单位内会有17个高度值,即16条边。
然后把这个地形导出为16bit Raw格式文件。
按照上面的数据,这个raw文件将会由33 * 33个16bit数据构成,所以文件大小应为16 * 16 * 2 = 2178字节。
导出来的文件也确实如此,证明我们的推断是正确的。
注意这里的Heightmap Resolution一定是2的n次幂加1,至于为什么会这样,找一个介绍HeightMap 的文档看一下就明白了。
既然验证了我们的推断是正确的,那试着在PS中创建一张HeightMap放到Unity3D中看看。
我们创建的HeightMap大小为129 * 129象素,如果我们让一个Unity3D单位由4个象素点构成,那么地图大小则为(129 – 1) / 4 = 32,即32 * 32,高度值不需要太大,高为12就够了。
导入到Unity3D中后刷上一层Texture,再种上几棵树,最终的效果看上去是这样:。
unity 3D 课件 第09章 地形与寻路技术
物理引擎中该地形的可碰撞厚度 是否显示花草树木 细节距离,与相机间的细节可显示的距离 细节的密集程度 允许出现的网格类型的树木的最大数量 吹过草地风的风速 草被风吹弯的弯曲程度 分辨率的设置 地形的总长度值 地形灰度度的精度
9.1 地形引擎
9.1.3 地形的纹理添加及设置参数
(10)Terrain Settings面板中的各项参数功能如表 9-9所列。该功能区中,开发人员可以对地形的整体 参数、分辨率进行详细地设置。
第7页
9.1 地形引擎
9.1.2 地形的基本操作
(4)除了Raise/Lower Terrain按钮可以调整地形的局部高度外,Paint Height按钮也可以实现该功能, 如图9-5所示。与前一个按钮不同的是,该按钮有一个参数可以设置地形高度值,被调整的局部地形高 度值不会超过该数值:
第8页
9.1 地形引擎
第20页
含义
基于地形的参数修改 是否进行阴影的投射 树木和花草等游戏对象 烘焙光照是否烘焙到树上 进行细节补丁的收集 树木的可视距离值 草的风向设置 模拟风可影响的范围大小 被风吹过时草的色调 地形的总宽度值 地形的总高度值 Draw
属性
是否显示地形
含义
Thickness Draw Detail Distance Detail Density Max Mesh Trees Speed Bending Resolution Terrain Length Heightmap Resolution
Fade Length
9.1 地形引擎
9.1.4 高度图的使用 ( 1)高度图是一张带有灰阶的图片,图片中的每个像素具有不同的灰度值, 这些灰度值代表了不同的高度。像素的灰度值越大,表示对应的高度越高,像 素的灰度值越小,表示对应的高度越低。 ( 2)开发人员可以在不同的开发工具上制作高度图,笔者利用的 Photoshop CS6(以下简称PS)。首先准备好一张彩色图片,将其导入进PS,步骤如图925所示。弹出的面板中选择准备好的图片导进PS(制作高度图的方法有好多种, 也可以采用其他方式)。 (3)导入完成后,点击工具栏中的图像→模式→灰度菜单,如图9-26所示。弹 出的面板选择“扔掉”按钮,此时整幅图片变为灰色,如图9-27所示。需要注 意的是,Unity中地形使用的高度图的分辨率为1+32*X,X为任意正整数,则高 度图最小的分辨率为33。
第二讲 Unity地形基础
植物的种植
接下来绘制草地,第六个工 具用来绘制细节。
植物的种植
选中第六个工具用来绘制草 地。添加一个草地的材质。
植物的种植
弹出下面的对话框,选择相应的草地。同时可以根据自 己的需要修改下面的参数值。也可以在绘制完后再进行 调整。点击Add按钮即可。
植物的种植
选中草之后,按住左键在场景中绘制。 我们也可以用PhotoShop进行草地的绘制,保存成.psd 格式,再导入到Unity中就可以使用了。
参数值分别是笔刷大小、树的密 度、树的颜色的随机性、树的高 度、高度的随机性、树的宽的、 宽的随机性。
植物的种植
在场景中进行树的种植时,不必担心树的悬浮或者插入 地面太深的问题,Unity引擎本身会根据地形的高度自 动调节。
植物的种植
如果想在场景中加入大量的树,可选用菜单Terrain>Mass Place Trees,弹出右下方的对话框,通过改变 Number Of Trees的数值来确定最终在场景中种植的树 目。还可以通过shift+左键去除不想要的树。
地形绘制
下面我们就来学习如何进行地形绘制。 第一步:创建一个地形 Terrain->Create Terrain;
地形绘制
为了方便进行凹处绘制,我们将地形的高度整体抬 高30个高度.选择Terrain-> Flatten Heightmap,弹出 右面的对话框,将Height的值设置为30,点击 Flatten按钮即可。
细节的实现
第六个工具是有关地形 的细节的设置。 具体的参数有网格优化 的容差,Map的距离, 光晕图的设置等。
细节的实现
将光线图设置为Lightmap, 并创建一个平行光。
细节的实现
利用高度图制作Unity3d地形制作
利用高度图制作Unity3d地形制作前言我们知道Unity3d的地形系统足够强大,一般的地形绘制直接使用内置的地形系统就可以完成,并且可以在绘制的地形上种树之类的,之前也有帖子说可以将三维软件中制作的地形直接导入unity3d,当成其地形系统产生的地形使用。
这个文章主要讲了利用一张黑白图来再结合unity3d的地形系统来实现一个较为自然的地形,此教程只适合非特定的地形,就是一般用在远处的随机的一个地形。
因为你如果直接手动去用笔刷去刷的话没有一定的时间肯定是刷的不够完美。
OK~下面开讲!一、准备工作首先我们需要打开Unity3d,然后选择创建一个新的地形。
OK!当完成这个步骤之后,我们下一步就是去绘制高度图了。
可以尝试下面的命令“Import Heightmap-Raw”,试试,出现的窗口是没错,它的格式为“raw”,这是一个相机格式,是一个源格式,并且此格式是不可逆转的。
下面摘录一段文字。
//RAW的原意就是“未经加工”。
可以理解为:RAW图像就是CMOS或者CCD图像感应器将捕捉到的光源信号转化为数字信号的原始数据。
RAW文件是一种记录了数码相机传感器的原始信息,同时记录了由相机拍摄所产生的一些原数据(Metadata,如ISO的设置、快门速度、光圈值、白平衡等)的文件。
RAW是未经处理、也未经压缩的格式,可以把RAW概念化为“原始图像编码数据”或更形象的称为“数字底片”。
//此段文字来自百度百科。
这样的一个格式除了自己拍或者别人发给你一般是很难弄到的。
但是我们现在就需要一张raw格式的图片,该去哪里找呢?聪明的朋友可能会发现,在上面的命令下,除了“Import Heightmap-Raw”还有一个“Export Heightmap-Raw”,是的,默认一张地形就已经包含了一张”raw “格式的高度图,只不过这张高度图是黑色的,所以地形才是全平的。
其实说到这里大部分朋友已经知道后续的工作了,但是我还是将教程写完吧。
Unity 3D 游戏场景设计实例教程CHAPTER 4 Unity3D山体地形的制作
图 4-1 利用三维软件制作的大型山地场景
利用游戏引擎编辑器制作场景地形其实分为两大部分—地表和山体, 地表是指游戏虚拟三维空间中起伏较小的地面模型,山体则是指起伏较大 的山脉模型。地表和山体是对引擎编辑器所创建同一地形的不同区域进行 编辑制作的结果,两者是统一的整体,并不是对立存在的。
引擎地图编辑器制作山脉的原理是将地表平面进行垂直拉高形成突出 的山体效果,这种拉高的操作如果让相邻地表高度差过大,就会出现地表 贴图拉伸撕裂严重的现象,所以地形山脉用来制作远景连绵起伏的高山效 果会非常好,如果要制作高耸的山体往往要借助 FORE 于三维模型才能实 现。如图 4-2 所示,场景中海拔过高的山体部分利用三维模型来制作,然 后将模型坐落在地形山体之上,两者相互配合实现了很好的效果。
图 4-8 对地形进行柔化处理
柔化笔刷工具可以让地形起伏趋于平滑,对于不想要的地形细节,可 以通过笔刷反复柔化并抹平。接下来利用绘制高度工具(Paint Height) 在地表山脉之间绘制一条平坦的道路,将绘制高度设置为 30,选择笔刷并 设置笔刷大小和力度,然后按住鼠标左键进行拖曳绘制,如图 4-9 所示。
图 4-2 利用三维模型制作的山体效果
在有些场景中地形也起到了场景衔接的效果,如图 4-3 所示,如果让 山体模型直接坐落在海水中,那么模型与水面相接的地方会非常生硬,利 用起伏的地形包围住山体模型,这样就能利用地表的过渡与水面进行完美 衔接。
图 4-3 山体模型和水面之间利用地形衔接过渡
在创建地形之前,我们首先要在 Unity 中建立场景项目,单击 Unity 文件(File)菜单选择 New Project,在弹出窗口的 Create New Project 选项卡下,可以选择新建项目的路径位置,下面的 Import the following packages 窗口可以选择导入 Unity 为我们提供的预置资源包,包括角色控 制器、预置天空盒、预置水系、光效和粒子等,可以按照自己的需要选择导入, 也可以全部导入,在进入 Unity 编辑器后我们还可以继续添加导入,最后我 们单击 Create 按钮就完成了新的项目场景的创建,如图 4-4 所示。
如何使用Unity编辑器制作场景地形
如何使用Unity编辑器制作场景地形第一章:Unity编辑器介绍Unity编辑器是一款功能强大的场景编辑器,用于创建和修改游戏场景中的地形。
它提供了丰富的工具和功能,以帮助开发者更轻松地创建逼真和多样化的地形。
第二章:Unity编辑器的基本操作2.1 场景视图和层级视图Unity编辑器的主要界面由场景视图和层级视图组成。
场景视图显示当前编辑的场景,而层级视图显示场景中的层次结构。
可以通过单击层级视图中的游戏对象,在场景视图中选择和编辑地形。
2.2 工具栏Unity编辑器的工具栏提供了各种工具和命令,用于创建和编辑地形。
其中包括移动、旋转和缩放等基本操作工具,还有绘制笔刷、平滑和导航等特定地形编辑工具。
2.3 场景视图和编辑模式在Unity编辑器中,场景视图可以处于多种编辑模式之一,例如地形编辑、物体放置、光照烘焙等。
在地形编辑模式下,可以使用不同的工具和命令来绘制、编辑和修改地形。
第三章:创建地形3.1 创建新的地形可以通过在菜单栏选择GameObject->3D Object->Terrain来创建新的地形。
在弹出的对话框中可以设置地形的尺寸和高度范围等参数。
3.2 导入地形高图可以将外部高度图导入到Unity中,以创建精确的地形。
只需在Inspector面板中选择Heightmap,然后点击Import Raw,选择高度图文件并设置相关参数即可。
3.3 预设地形Unity编辑器还提供了一些预设地形,可以快速创建各种自然和人工地貌。
可以通过菜单栏选择GameObject->3D Object->Terrain Tools->Create New Splatmap Terrain来访问这些预设。
第四章:编辑地形4.1 调整地形的尺寸和高度在地形编辑模式下,可以通过选择Terrain->Settings来调整地形的尺寸和高度范围。
在场景视图中,可以使用工具栏中的调整工具来修改地形的高度、平滑度和细节等。
Unity3D地形的创建
Unity3D地形的创建第一步:创建一个新项目。
打开Unity3D软件,它会自动载入上一次我们打开过的“Bootcamp Demo”项目文件。
不用管它,在软件打开之后点击——> ,在弹出的对话框中找到输入创建项目的文件夹地址,或者点击后面的选择一个文件夹地址(注:已创建Unity3D项目的文件夹,不能再当作新创建项目的文件夹来使用,否则会因无法找到文件而报错),然后在中选择要导入的项目文件包,每个文件包都带有一些插件功能,由于我们第一次创建项目文件,所以我们将所有的复选框都打上勾。
但这样会致使Unity3D在开始加载的时候速度偏慢,等以后我们大家对各个插件包的作用都熟悉了,在创建Unity3D项目文件的时候,我们只需要勾选需要使用到的插件包就可以了。
选项面板如图3.1所示:全部设置完成后,我们点击创建项目。
第二步:创建地形。
在创建一个新项目后,我们会看见新项目的各个面板中,只有Project【项目文件栏】包含了和两个文件夹,这两个文件夹里面装的就是在创建项目时导入项目文件包里的所有文件。
除此之外,其他版面都是空空如也。
不要着急,万丈高楼平地起,我们马上就利用文件包和系统功能来丰富各个版面的内容。
首先我们点击菜单栏上的——> ,创建一个带有地形属性的平面,如图3.2所示:第三步:添加摄像机。
创建好地形后,我们会发现Game【动画面板】中依然没有任何画面。
其实道理很简单,就像演唱会的实况直播一样。
场景都搭建好了,演员也在舞台上表演,却没有架上摄像机,电视机前的观众怎么能够看到现场的画面呢?接下来我们就创建一个摄像机。
点击——> ——> ,这样场景中就会创建一个摄像机,这是您就可以在Game【动画面板】中观看到摄像机所观察到的星象了。
如图3.3所示:第四步:调整地形大小。
系统创建的地形默认大小是2000*2000的面积,实际编辑的时候会显得很大,不方便操作,所以我们对创建的地形面积进行调整,以便我们后续的编辑。
我学院-Unity地形制作教程
Unity地形制作教程在Unity工作流程内,地形是一个不可缺少的重要元素,不论是游戏或虚拟现实都会使用到各种类型的地形效果,在这个教学中我们需要了解到地形的制作基本概念与,其中对于Unity的地形操作部分需要大量的操作练习.熟悉这些功能操作之后,相信对于游戏地形的制作与运用将会更得心应手。
创建一个新的專案目录,勾選Terrain Assets資源包(Tree Creator與Water可一併加入),按下Create 開始创建项目。
开始创建地形,按下Terrain > Create Terrain,窗口内自动产生一个平面,这是地形默认使用的基本原型。
选择Terrain > Set Resolution 功能可以检视默认的地形所设定的基本参数,在这个选单内提供多样化的设定方式:Terrain Width : 地形的宽度Terrain Height : 地形的高度Terrain Length : 地形的长度HeightMap Resolution:地形高度图片所使用的分辨率.Detail Resolution : 这个数值高低用来控制草地和添加细节模型的分辨率。
数值越高效果越好,不过会大量消耗内存,可能会造成严重的延迟,大多数我们将这个数值控制在128到256之间会取得一个测试地形的开始。
Detail Resolution Per Patch : 每一个面片的细节设定值Control Texture Resolution : 控制贴图纹理的分辨率。
Base Texture Resolution : 控制地型基本贴图纹理分辨率。
在第一次的练习中,我们先采用内定的标准数值来进行地形绘制,直接按下Set Resolution 完成确认。
在Inspector 面板中的Terrain ( Script ) 是关于整个地形的所有功能设定,最上面的七个按钮为主功能区,由左至右的按钮功能分别是:1.Raise and Lower Terrain –绘制地形表面凹凸程度,如在绘制过程按下Shift 则将地形向下凹陷。
unity3d地形生成
相关快捷键:Shif+Q,Shift+Y选择活动的地形工具逗号(,)和点号(.) 循环选择笔刷。
Shift+逗号(<),Shift+点(>)循环选择活动的树/纹理/细节对象。
不怎么好按。
按住Shift+笔刷的情况下可以擦除绘制在地形上的信息。
1地形创建如图方式创建地图。
前面3个分别控制地形的长宽高Terrain Width : 地形的宽度;Terrain Length : 地形的长度;Terrain Height : 地形的最大高度;HeightMap Resolution :高度图分辨率;(高度图可以用ps直接绘制,导入之后会形成3d 地形)Detail Resolution :控制草地和细节模型的地图分辨率,考虑性能这个值越低越好;Control Texture Resolution: 用于绘制到地形上混合不同纹理的溅斑贴图的分辨率;Base Texture Resolution:距离远了之后会用一张新的混合贴图代替溅斑贴图,这里代表这张替代贴图的分辨率。
3. Base Terrain 基本地形Pixel Error 像素容差:在显示地形网格时允许的错误数量。
这个其实是一个LOD配置。
当距离拉远之后,地形的复杂度会降低。
这个值控制复杂度变化远近的;Base Map Dist. 基本地图距离:需要显示高分辨率地图贴图的最大距离;Cast Shadows:控制是否投影;Material: 允许分配自定义的材质,这个材质呢必须是一个可以渲染地形的着色器。
比如说:Nature/Terrain/Diffuse (this shader is used if no material is assigned) or Nature/Terrain/Bumped Specular。
(这里在地形基本贴图没有设置的情况下将会使用这里的材质)Draw :是否绘制地形上的树木和草等细节;Detail Distance :细节的显示距离(当镜头距离细节物体多少米时开始显示细节物体);DetailDensity :细节的密度;一般定0.5;TreeDistance :树木显示距离(当镜头距离树木多少米时开始显示树木);BillBoardStart :树木开始使用广告牌的距离。
关于Unity中地形的创建
关于Unity中地形的创建地形创建Raw图⽚格式是Unity可以导出的图⽚格式Unity很强⼤,可以直接使⽤psd⽂件地形创建实例1.创建Unity⼯程和⽂件⽬录1:创建⼀个地形Terrain: GameObject---> 3D Object-->Terrain;2: 这个节点包含了两个组件,Terrain和Terrain Collider;3: Terrain Collider 地形与物理引擎⽅⾯的组件,实现了地形的物理模拟,似的其他的挂载了物理碰撞器的物体能够与地形进⾏物理交互;4: Terrain Collider的参数含义: Material: 该地形的物理材质, 通过改变参数可以分别开发出像⼽壁滩,软草地之类的效果;通过Create---->Physical Material来创建材质 Terrain Data: 地形数据,⽤户存储该地形的地势以及其他的信息; Enable Tree Colliders: 开启树⽊参与碰撞检测;5: Terrain 组件中有⼀排按钮分别对应了地形引擎的各项操作和设置;地形⾼度的编辑Raise And Lower Terrain(拉⾼和拉低地形)1: Brushes: 画笔样式,使⽤不同样式绘制对应的地形;2: Brush Size: 画笔⼤⼩,其实际含义为画笔直径长度,单位为m;3: Opacity: 画笔透明度,值越⼤,调整的强度越⼤,反之越⼩;4: 点击和拖动⿏标可以使得⿏标点过的地⽅突起,拖动的同时按下shift,可以实现下凹的功能;5: 没有经过操作的是没有办法拉低的,⽔平⾯是动不了的;Paint Height(绘制地形⾼度)1: Brushes: 画笔样式。
使⽤不同的画笔样式,可以绘制出相应样式的地形;2: BrushSize: 画笔的⼤⼩长度为⽶为单位;3: Opacity: 画笔的透明度,值越⼤,调整的强度越⼤,反之越⼩;4: Height: 制定⾼度值;5: Flatten: 使得整个地形的⾼度值都设置为指定的⾼度值,使得整个上移和下沉;Smooth Height(平滑地形⾼度)1: Smooth Height:在处理过程中某些地形⽐较突兀,⼭峰过于锐利,需要对地形做平滑处理2: Brushes: 画笔样式。
Unity自定义地形编辑器开发(一.快速创建基层模型地图)
Unity⾃定义地形编辑器开发(⼀.快速创建基层模型地图)废话不多说直接先看效果下⾯是步骤 1.弹窗 效果: 代码:public class InputImageToEditor : EditorWindow{public static InputImageToEditor instance;void OnEnable() { instance = this; }void OnDisable() { instance = null; }public Texture icon;string mapWidth="10", mapLength="0", mapPd="0";string savePath;string mapName;bool IsDefault = true;void OnGUI(){byte[] bytes = File.ReadAllBytes("Assets/Texture/LOGO.png");Texture2D texture = new Texture2D(200, 200);texture.LoadImage(bytes);icon = texture;EditorGUILayout.Space();GUILayout.BeginVertical();GUILayout.Space(10);bel(icon, GUILayout.Width(100), GUILayout.Height(100));//绘制图标bel.fontSize = 14;bel.fontStyle = FontStyle.Bold;bel("输⼊相应参数");bel.fontStyle = FontStyle.Normal;bel.fontSize = 12;GUILayout.Space(10);mapName = EditorGUILayout.TextField("设置地图名字", mapName);GUILayout.Space(10);mapWidth = EditorGUILayout.TextField("设置地图宽度", mapWidth);GUILayout.Space(10);EditorGUI.BeginDisabledGroup(true); //如果nextPath == null 为真,在Inspector⾯板上显⽰,承灰⾊(即不可操作)mapLength = EditorGUILayout.TextField("设置地图长度", mapWidth);EditorGUI.EndDisabledGroup();GUILayout.Space(10);IsDefault = EditorGUILayout.Toggle("是否使⽤默认定点密度", IsDefault);if (!IsDefault){GUILayout.Space(10);mapPd = EditorGUILayout.TextField("设置地图定点密度(建议为宽度X5)", mapPd);}else{mapPd = ""+int.Parse(mapWidth) * 5;}GUILayout.Space(10);if (GUILayout.Button("选择保存⽂件夹")){savePath = EditorUtility.OpenFolderPanel("选择保存的⽂件夹", "Assets/", "");}GUILayout.Space(10);GUILayout.EndVertical();GUILayout.BeginHorizontal();if (GUILayout.Button("确定")){if (mapWidth.Length > 0){XLZTerrainEditor.OpenImage(int.Parse(mapWidth), uint.Parse(mapPd), savePath,mapName); instance.Close();EditorUtility.DisplayDialog("创建结果", "创建成功", "确定");}else{Debug.LogError("请输⼊相应的值");}}GUILayout.Space(120);if (GUILayout.Button("取消")){instance.Close();}GUILayout.EndHorizontal();}} 2.调⽤弹窗选择图⽚并读取 效果 代码:using System;using System.Collections;using System.Collections.Generic;using System.IO;using System.Linq;using System.Runtime.InteropServices;using System.Text.RegularExpressions;using System.Xml.Linq;using UnityEditor;using UnityEngine;using UnityEngine.UI;using System.Windows;public class XLZTerrainEditor{[MenuItem("Tools/创建基本地形", false, 21)]static void CreateBasicTerrain(){EditorWindow.GetWindow<InputImageToEditor>(false, "InputImageToEditor", true).Show();}/// <summary>/// 发起Win会话读取选择的图⽚/// </summary>public static void OpenImage(int mapWidth,uint mapPD,string savePath,string mapName){string path= EditorUtility.OpenFilePanelWithFilters("选择⽂件", "C:\\Users\\Administrator\\Desktop", new string[] { "图⽚格式", "png,jpg,jpeg", "All files", "*" }); //创建⽂件读取流FileStream fileStream = new FileStream(path, FileMode.Open, FileAccess.Read);fileStream.Seek(0, SeekOrigin.Begin);//创建⽂件长度缓冲区byte[] bytes = new byte[fileStream.Length];//读取⽂件fileStream.Read(bytes, 0, (int)fileStream.Length);//释放⽂件读取流fileStream.Close();fileStream.Dispose();fileStream = null;Texture2D texture = new Texture2D(1, 1);bool isload = texture.LoadImage(bytes);//Sprite tempSp = Sprite.Create(texture, new Rect(0, 0, texture.width, texture.height), new Vector2(0, 0));//GameObject.Find("TestImage").GetComponent<Image>().sprite = tempSp;//GameObject tGO = new GameObject("testTerrain");//DrawMesh(tGO, texture, mapWidth, mapPD);XLZMapMesh xLZMap = new XLZMapMesh(mapName, texture, savePath);xLZMap.CreatMesh(mapWidth, mapWidth, mapPD, mapPD, -10, 10);}} 3.创建⽹格地图模型 代码:using UnityEngine;using System.Collections;using UnityEditor;using System.IO;public class XLZMapMesh{private GameObject mMesh;private Material mMaterial;private Texture2D mHeightImage;private Vector2 size;//长度和宽度public float minHeight = -10;//最⼩⾼度public float maxHeight = 10;//最⼤⾼度private Vector2 segment;//长度的段数和宽度的段数private float unitH;//最⼩⾼度和最⼤⾼度只差,值为正private Vector3[] vertexes;//顶点数private Vector2 uvs;//uvs坐标private int[] triangles;//三⾓形索引private string Name;private string SavePath="";public XLZMapMesh(string name, Texture2D hMap,string savePath){Name = name;mHeightImage = hMap;if (savePath!=null){SavePath = savePath;}}public void CreatMesh(float width, float height, uint segmentX, uint segmentY, int min, int max){size = new Vector2(width, height);maxHeight = max;minHeight = min;unitH = maxHeight - minHeight;segment = new Vector2(segmentX, segmentY);mMesh = new GameObject(); = Name;computeVertexes();DrawMesh();}private void computeVertexes(){int sum = Mathf.FloorToInt((segment.x + 1) * (segment.y + 1));//顶点总数float w = size.x / segment.x;//每⼀段的长度float h = size.y / segment.y;GetTriangles();int index = 0;vertexes = new Vector3[sum];for (int i = 0; i < segment.y + 1; i++){for (int j = 0; j < segment.x + 1; j++){vertexes[index] = new Vector3(j * w, GetHeight(mHeightImage,new Vector2(i/segment.x, j/ segment.y))* unitH, i * h);index++;}}}private void DrawMesh(){Mesh mesh = new Mesh(); = Name;mMesh.AddComponent<MeshFilter>();//⽹格mMesh.AddComponent<MeshRenderer>();//⽹格渲染器mMaterial = new Material(Shader.Find("MTE/Legacy/4 Textures/Diffuse"));//材质mMesh.GetComponent<Renderer>().material = mMaterial;/*设置mesh*/mesh.Clear();//更新mesh.vertices = vertexes;//mesh.uvmesh.triangles = triangles;mesh.RecalculateNormals();mesh.RecalculateBounds();mMesh.GetComponent<MeshFilter>().mesh= mesh;//SaveAll(mesh, mMaterial);}private void SaveAll(Mesh mesh, Material material){string localPath = SavePath.Substring(SavePath.IndexOf("Assets"));localPath += "/" + Name;Directory.CreateDirectory(localPath);Object prefabObj = PrefabUtility.SaveAsPrefabAssetAndConnect(mMesh,localPath + "/" + Name + ".prefab",InteractionMode.AutomatedAction); AssetDatabase.CreateAsset(mMaterial, localPath + "/" + Name + ".mat");AssetDatabase.CreateAsset(mesh, localPath + "/" + Name + ".asset");}private int[] GetTriangles(){int sum = Mathf.FloorToInt(segment.x * segment.y * 6);//三⾓形顶点总数triangles = new int[sum];uint index = 0;for (int i = 0; i < segment.y; i++){for (int j = 0; j < segment.x; j++){int role = Mathf.FloorToInt(segment.x) + 1;int self = j + (i * role);int next = j + ((i + 1) * role);//顺时针triangles[index] = self;triangles[index + 1] = next + 1;triangles[index + 2] = self + 1;triangles[index + 3] = self;triangles[index + 4] = next;triangles[index + 5] = next + 1;index += 6;}}return triangles;}private static float GetHeight(Texture2D texture, Vector2 uv){if (texture != null){Color c = GetColor(texture, uv);return c.r - 0.5f;}else{return 0.5f;}}private static Color GetColor(Texture2D texture, Vector2 uv){Color color = texture.GetPixel(Mathf.FloorToInt(texture.width * uv.x), Mathf.FloorToInt(texture.height * uv.y));return color;}}。
Unity3D动态创建地形网格(一)
Unity3D动态创建地形网格(一)最近一直都在搞flash3D,好像有点对不起Unity3D的朋友们了。
这次简单的写一个动态创建地形网格的脚本给大家分享一下。
这次是第一部分,仅仅实现了通过高度图动态生成地形的部分。
假如以后有心情和时间,再来慢慢的补充多通道刷地形材质、动态刷地形和保存高度图等的功能吧。
以前我都不喜欢公开脚本源码,都是一个个部分的单独讲解然后让朋友们自己去组合起来的,但最近时间实在是不多,所以还是直接提供源码,然后在源码上面写注释,大家自行的观看吧。
源码在最下面。
更多内容,请访问狗刨学习网首先直接把脚本拖到某物体上面,运行,就会出现了上图所示的一个面片。
这是因为为了方便大家测试,我在start里面调用了下面的SetTerrain方法。
这个方法会创建一个默认的地形面板。
长宽是100*100,段数是50*50,高度是-10米到10米的。
当然了,我们真正用的时候,是使用重载的SetTerrain方法自己制定长宽高和段数这些数值的,把start里面的方法注释掉就行了。
现在由于没有指定默认的地面材质和高度图,所以我写了个警告提示。
这两个变量就是材质和高度图了,大家可以自行想办法去赋值。
我现在写成public只是为了方便赋值测试,最好还是写get/set方法赋值。
还有一点,现在没有做地面的多通道材质,所以只是用了一个默认的shader。
以后假如需要混合通道材质,改这个shader。
好,先不管以后了,把一个有草地纹理的材质球付给脚本。
出来了一个草地我随便的用黑白图刷了一个高度图,然后扔进脚本。
注意的是,作为高度图的图片,是需要设置读写权限的,不然获取不到像素的颜色出现了一个小小的山坡了。
其实我这个脚本并不是必须针对黑白图的,我随便拿了一张木箱子贴图,一样可以做高度图的,这是因为我是做了灰度处理的,最后获取的是该图片像素点上的灰度值。
看,地形出来了。
实际效果功能是简单了点,这里提供了一点点的思路,有需要或者有兴趣的朋友可以参考一下做法,自行的扩展吧。
unity地形教程
unity地形教程Unity是一款功能强大的游戏开发引擎,可以创建各种类型的游戏。
其中一个非常重要的元素是地形。
地形在游戏世界中起到承载、装饰和交互的作用。
为了帮助开发者更好地了解如何使用Unity创建地形,下面将介绍一些基本的Unity地形教程。
首先,你需要了解Unity中的地形工具。
在Unity编辑器中,你可以通过选择 "Terrain"-> "Create Terrain" 来创建地形。
创建地形后,会在场景中添加一个地形对象,你可以在Inspector 面板中调整地形的各种属性,如大小、高度、纹理等。
接下来,你需要学习如何调整地形的高度。
Unity通过所谓的"高度图"来定义地形的高度。
在Inspector面板中,你可以选择"Raise/Lower Terrain" 工具来调整地形的高度。
你可以使用鼠标在地形上绘制,或者通过调整工具选项来精确地修改地形的高度。
同时,你还可以使用"Flatten"工具来平整地形,使其更容易进行地形细节的设计。
接下来,你需要学习如何添加纹理和细节到地形上。
在Unity的地形编辑器中,你可以通过选择 "Paint Texture" 工具来绘制纹理。
你可以从素材库中选择不同的纹理,然后在地形上绘制。
此外,你还可以添加细节纹理来增加地形的真实感。
例如,你可以添加草地、岩石和树木等细节纹理,以丰富地形的外观。
此外,Unity还提供了一些特殊效果来增强地形的表现力。
例如,你可以使用"Water"工具来在地形上添加水体,使游戏世界更加真实。
你还可以使用"Tree"工具来添加树木,并使用"Detail"工具来添加更多的细节物体。
通过将这些特殊效果与地形的纹理和细节相结合,你可以创造出一个令人惊叹的游戏场景。
Untiy 3D软件中数字地图的地形制作技巧
Untiy 3D软件中数字地图的地形制作技巧【摘要】Untiy 3d软件是一个能够轻松创作的多平台游戏开发软件,但在数字地图的制作中也常常被选为整合工具。
换句话说也就是在3D Max中建模完成后,在Untiy 3d中完成后期整合制作工作。
其中建筑物模型的制作基础工作是在3D Max中完成的,但地形的制作是复杂的,在3D Max中一般仅仅完成地形的基础模型制作和相应的地上小品的制作,其他诸如基础地形创建、草皮、植物生成,地上小品添加安置等大量工作是在Untiy 3D软件中完成的。
这些环节的过程以及技术要点正式本文讨论的内容。
【关键词】虚拟现实;Untiy 3D;数字地图;地形制作0.引言三维数字地图是以三维电子地图数据库为基础,按照一定比例对现实世界或其中一部分的一个或多个方面的三维、抽象的描述。
网络三维电子地图不仅通过直观的地理实景模拟表现方式,为用户提供地图查询、出行导航等地图检索功能,同时集成生活资讯、电子政务、电子商务、虚拟社区、出行导航等一系列服务。
1.三维数字地图及其制作流程目前三维数字地图分为实景三维地图和虚拟三维地图两大类。
制作三维数字地图需要将采集来的地形和建筑物信息,通过计算机建成模型,最后生成城市的立体图像,从而为人们认识和管理城市提供一种信息技术手段。
首先采集现场照片和地理信息,同时通过图片分析得到现实场景的建筑物结构信息和地形信息,以及以后三维数字地图中需要的贴图素材。
在3DS max软件中根据获得的信息中做出相应的建筑物模型和地形,并按照现实场景制作并赋予其贴图。
之后在选定的Unity数字平台中添加地形,树木,建筑物等内容,并制作动画和特效,利用数据库和脚本等来实现三位数地图的最终效果。
从制作流程上可以看出在三维数字地图的制作中,除了那些典型的标志性的建筑物,剩余的部分就是环境。
因此三维数字地图制作中环境的构建也是一个非常重要的环节。
环境构建主要包括地形,廊架,亭台,天空,阳光等内容,另外还有一些建筑物之外的公共设施或附属物,比如:路灯,指示牌,广告牌,消火栓,井盖,垃圾箱等。