unity3D加载贴图

合集下载

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修改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添加改图片材质。

Unity从Resources中动态加载Sprite图片的操作

Unity从Resources中动态加载Sprite图片的操作

Unity从Resources中动态加载Sprite图⽚的操作我就废话不多说了,⼤家还是直接看代码吧~public Sprite LoadSourceSprite(string relativePath){//Debug.Log("relativePath=" + relativePath);//把资源加载到内存中Object Preb = Resources.Load(relativePath, typeof(Sprite));Sprite tmpsprite = null;try{tmpsprite = Instantiate(Preb) as Sprite;}catch ( System.Exception ex ){}//⽤加载得到的资源对象,实例化游戏对象,实现游戏物体的动态加载return tmpsprite;//return Resources.Load(relativePath, typeof(Sprite)) as Sprite;}补充:Unity运⾏时动态加载本地图⽚⼀、Unity运⾏时加载本地⽂件夹下所有图⽚的⽅法⽤于在使⽤图⽚前加载完成//引⼊命名空间using System;using System.IO;/// <summary>/// 加载图⽚的Byte[]数组/// </summary>/// <param name="filesName">地址</param>public List<byte[]> LoadImage(string filesName){List<byte[]> list = new List<byte[]>();string tempPath ="E:\"+filesName; // 图⽚所在⽂件夹地址List<string> filePaths = new List<string>();string imgtype = "*.BMP|*.JPG|*.PNG";string[] ImageType = imgtype.Split('|');for (int i = 0; i < ImageType.Length; i++){//⽂件夹下所有的图⽚路径string[] dirs = Directory.GetFiles(tempPath, ImageType[i]);for (int j = 0; j < dirs.Length; j++){filePaths.Add(dirs[j]);}}for (int i = 0; i < filePaths.Count; i++){byte[] bs = getImageByte(filePaths[i]);list.Add(bs);}return list;}#endregion/// <summary>/// 根据图⽚路径返回图⽚的字节流byte[]/// </summary>/// <param name="imagePath">图⽚路径</param>/// <returns>返回的字节流</returns>private byte[] getImageByte(string imagePath){FileStream files = new FileStream(imagePath, FileMode.Open,FileAccess.Read);files.Seek(0,SeekOrigin.Begin);byte[] imgByte = new byte[files.Length];files.BeginRead(imgByte,0,(int)files.Length,CallBack,files);return imgByte;}/// <summary>/// 异步加载/// </summary>/// <param name="ar"></param>void CallBack(IAsyncResult ar){FileStream fs = ar.AsyncState as FileStream;fs.Close();fs.Dispose();}⽤的时候:List<byte[]> data=new List<byte[]>(); //临时接收图⽚数据流List<Texture2D> turList=new List<Texture2D>(); //保存图⽚data=加载类.LoadImage("测试图⽚");foreach (byte[] item in data){Texture2D tex = new Texture2D(100, 100, TextureFormat.RGBA32, false);tex.LoadImage(item); //建议哪⾥调⽤哪⾥转还可转精灵turList.Add(tex);}⼆、临时加载⼀张图⽚public static class ImageLoad {public static Texture2D LoadImageByte(string path){FileStream files=new FileStream (PathSet.dataPath+path,FileMode.Open,FileAccess.Read);files.Seek(0,SeekOrigin.Begin);byte[] imgByte=new byte[files.Length];//少量临时加载会红问号//files.BeginRead(imgByte,0,(int)files.Length,CallBack,files);files.Read(imgByte,0,imgByte.Length);files.Close();Texture2D tx=new Texture2D (512,512);tx.LoadImage(imgByte);return tx;}static void CallBack(IAsyncResult ar){FileStream fileStream=ar.AsyncState as FileStream;fileStream.Close();fileStream.Dispose();}}以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

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导入模型贴图材质丢失的问题

解决unity3d导⼊模型贴图材质丢失的问题今天导⼊了⼀个模型,但是模型贴图丢失了,⽽且Inspector⾯板中处于不能编辑的状态
虽然可以通过重新创建材质来替换,但是这样会⽣成⼀个新的prefab,觉得不太好做出如下更改,将对应材质填⼊即可
补充:Unity光照贴图丢失的坑
最近项⽬出版本的时候出现了部分建筑光照贴图不正常的情况,⽽且仅仅是部分模型,这部分模型都是有多个场景会⽤到的,所以都是单独出来打包的。

然后以为是模型上⾯的光照信息丢失了,通过测试,并没有丢失,可以通过获取模型上的MeshFilter打印出来,部分丢失的话,也与光照贴图没有关系,只可能是模型的UV2通道⾥⾯烘焙的数据错了,或者是模型通过依赖打包的Unity做了什么操作把依赖的模型的UV2通道删除了,后来问了下群⾥的⼩伙伴,有⼈说可能是
这个选项的锅,然后我把这个选项勾选掉之后光照就正常了,这个选项会把材质中没有⽤到的UV,Normal等通道⾃动的在打包的时候剔除,猜测可能是Unity认为被单独打包的模型没有⽤到UV2,就⾃动剔除了,没有管这个模型是否会在场景中使⽤,所以在打包的时候,当场景通过依赖进⾏合并模型时,这时候加载进来的单独打包的模型实际上他的UV2通道已经被剔除了,所以导致光照丢失。

⼤家可以在⾃⼰的项⽬中尽量不要勾选这个选项,据说会导致很多问题,还是⾃⼰⼿动剔除好点。

解决⽅法:
⽅法1:取消勾选这个选项,这会导致包体变⼤60M。

⽅法2:在模型导⼊的时候⾃动把模型的UV3,UV4,Tangent,等剔除。

需要美术在MAX中提前⽣成UV2通道。

以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。

如有错误或未考虑完全的地⽅,望不吝赐教。

unity3d rendertexture 原理 -回复

unity3d rendertexture 原理 -回复

unity3d rendertexture 原理-回复Unity3D的RenderTexture是一种用于在渲染过程中存储图像信息的技术。

它可以作为纹理贴图或者用于捕捉屏幕截图和实时渲染的数据。

RenderTexture的原理很简单。

当Unity进行渲染时,它首先将图形信息绘制到其中一个或多个RenderTexture中。

然后,将RenderTexture中的图像数据传输到屏幕上或者其他需要使用的地方。

RenderTexture可以用作纹理贴图在屏幕上显示,也可以用于离屏渲染,比如用于图像处理、特效、反射等其他用途。

首先,我们需要创建一个RenderTexture对象。

在Unity中,可以通过使用代码或者通过Editor界面来创建RenderTexture。

在代码中,可以使用`RenderTexture texture = new RenderTexture(width, height, depth, format, readWrite)`来创建一个RenderTexture对象。

其中,width和height是Texture的尺寸,depth决定了渲染纹理的位深度,format指定了图像的颜色格式(如RGBA32,ARGB32),readWrite决定渲染纹理是否可读写。

在Editor界面中,可以通过右击Hierarchy面板-> Create -> Render Texture来创建一个RenderTexture。

接下来,我们需要将RenderTexture设置为相机的目标渲染纹理。

在Unity 中,每个相机都有一个TargetTexture属性,用于指定该相机将图像输出到哪个RenderTexture上。

可以通过脚本或者在Inspector面板中设置TargetTexture属性来将RenderTexture绑定到相机上。

例如,在脚本中可以使用`camera.targetTexture = texture`来设置RenderTexture为相机的目标渲染纹理。

图文详解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贴图说明

unity3d贴图说明

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Unity通过代码设置贴图导入压缩格式

Unity通过代码设置贴图导入压缩格式
TextureImporterPlatformSettings ti_iPhone = ti.GetPlatformTextureSettings(m_platform); bool isModify = false; if (ti_iPhone.overridden) {
if (ti_iPhone.format == TextureImporterFormat.PVRTC_RGB4) {
我发现了一个情况就是我注册这个声网以后没有给我送音频或者视频播放的流量都是0会不会因为这个所以加入不了频道
Unity通 过 代 码 设 置 贴 图 导 入 压 缩 格 式
各平台如果不勾选 override 将不会应用单独设置而是现实默认设置。
Compression 只有 Default 设置里才能设置,Compression 与 Format 之间是映射关系。如果不勾选 override,Compression 的设置不同,在不同平台将会默认显示不同的压Fra bibliotek格式对比如下:
缩格式。
TextureImporter ti = AssetImporter.GetAtPath(m_texturePathList[i]) as TextureImporter; if (ti == null) { continue; } if (ti.textureType == TextureImporterType.Sprite) { continue; } // 排除 Sprite
ti_iPhone.format = TextureImporterFormat.ASTC_RGB_4x4; isModify =true; } else if (ti_iPhone.format == TextureImporterFormat.PVRTC_RGBA4) { ti_iPhone.format = TextureImporterFormat.ASTC_RGBA_4x4; isModify =true; } } else if (ti_pressionQuality == (int)TextureCompressionQuality.Normal) //默认就会是PVRTC { ti_iPhone.overridden = true; ti_iPhone.format = ti.DoesSourceTextureHaveAlpha() ? TextureImporterFormat.ASTC_RGBA_4x4 : TextureImporterFormat.ASTC_RGB_4x4; isModify =true; } if (isModify) { ti.SetPlatformTextureSettings(ti_iPhone); ti.SaveAndReimport(); // 应用并重新导入 AssetDatabase.ImportAsset(m_texturePathList[i]); Debug.LogFormat("Texture:{0}", m_texturePathList[i]); count++; }

unity3d烘焙场景设置注意事项

unity3d烘焙场景设置注意事项

unity3d烘焙场景设置注意事项Fbx、贴图导入Unity时的注意事项:在导出Fbx之前,Maya中已经对物体连接了正确的贴图,并且贴图文件名不能更改。

把Fbx和贴图放在同一文件夹内,直接把此文件加拖入Unity内。

此时Diffuse贴图应能自动识别。

此时,对贴图修改后,在Unity中更新贴图(删除老贴图,导入新贴图,并保持命名,路经一致),模型能够自动更新。

假如Unity中删除贴图,关闭Unity,再打开Unity,导入之前删除的贴图,模型不会自动更新贴图。

------------------------------------------------------i3D的这篇教程中的模型比例有问题,先根据Unity官方帮助文档中的内容说一下:Unity官方帮助文档中认为,模型的缩放尺寸是非常重要的。

特别是涉及到一些物理特效模拟的时候。

Unity认为,在理想状态下,不要更改模型的Transforms Scale 值,保持Scale值为(1,1,1)。

(这样的话,模型在Maya中制作时需要freeze,使缩放值为(1,1,1))。

原因是,额外的缩放数值会增加不必要的计算量。

Unity首先推荐模型在创建时使用真实尺寸。

其次是在Unity的Import Settings中更改尺寸。

Unity在进行场景优化时会根据物体尺寸来进行优化。

当在Unity中把一个物体parent到另外一个物体时,最好父级物体的坐标值是(0,0,0),否则之后会遇到不少头痛问题。

Unity的粒子系统不受Transforms Scale值的影响。

物体的不均匀缩放值在Parent后会产生不良后果(这个情况和Maya中是一样的)Unity中,1个单位尺寸代表1米。

即在Unity中创建一个Cube的尺寸是1x1x1米大小。

Unity推荐把人的身高定为大约2个Unity单位高度(2米)。

在Max中,只要正确设置单位尺寸(系统单位尺寸设置以及输出时单位尺寸设置)成厘米后,得到的效果是一致的。

unity中解决导入的模型贴图透明问题

unity中解决导入的模型贴图透明问题

unity中解决导入的模型贴图透明(法线)问题解决方法涉及
unity中的shader知识
3ds max中法线的知识
解决方法1
在max中打开模型
选择在unity中见不到的面的对象

选中此人手臂
然后在可编辑多边形中选择面级别
选择该模型上的所有面
在编辑多边形里面点翻转,那么法线就翻转了
此时打开UNITY就不会有透明的现象了
解决方法2
在unity中渲染的时候,默认情况下是只有朝向摄像机的面才会被渲染,我们可以告诉Unity,我想渲染哪一个朝向的面,使用Cull命令在计算体积阴影的时候会用到对Cull的操作来计算和物体相交的投影(通常情况下双面渲染不要开,除非贴图真的有问题,或者无法解决,cull off的话就会使此面的计算增加一倍,降低了效率)Cull 有三种
Cull Off 不剔除
Cull Back 剔除背面(背向摄像机的面)
Cull Front 剔除前面(朝向摄像机的面)
那么我们可以新建一个shader材质
将模型上的贴图附上去
然后在文件夹中打开,这个.shader的文件可以用任意文档编辑器打开
然后
我们在第8行添加Cull Off
将这个材质放入模型中,那么面就能显示啦。

unity3d 视频播放教程

unity3d 视频播放教程

By:CloverGao整理
Unity 支持影片贴图,也就是说可以导入影片并附加到游戏对象上,基本上您计 算机上的 Quick Time 播放器能播的,大致上都能播,已知的支持的影片格式有 下列几
种: .mov, .mpg, .mpeg, .mp4, .avi, .asf
唯一一点要注意的是,Unity 并不会自动播放影片,必需要新增一行或数行脚本 才能进行播放,提供以下二种播放方式供参考: 1.游戏执行立即播放: 代码: 选择全部
function Update ()
{
renderer.material.mainTexture.Play();
}
2.自定按键进行播放: 代码: 选择全部
function Update () {
if (Input.GetButtonDown ("Jump"))
{ if (renderer.material.mainTexture.isPlaying)
{
renderer.material.mainTexture.Pause();
}
else
{
renderer.material.mainTexture.Play();
}
}
}
使用方法: 1.导入影片
2.将影片附加至游戏对象上(此范例使用 plane)
3.新增空白 JavaScript 并贴上程序代码 (范例码 1)
4.新增空白 JavaScript 并贴上程序代码 (范例码 2)
5.将脚本附加至游戏对象
6.影片播放
提示:必须安装quicktime,安装完后需要重新启动程序!重新汇入视频!。

3Dmax材质贴图导入和应用教程:导入和应用贴图的方法

3Dmax材质贴图导入和应用教程:导入和应用贴图的方法

3Dmax材质贴图导入和应用教程:导入和应用贴图的方法3Dmax是一款常用的三维建模和渲染软件,而材质贴图对于制作逼真的三维模型来说是非常重要的。

本文将为大家详细介绍3Dmax中导入和应用贴图的方法,希望能对初学者有所帮助。

一、准备贴图素材1.在互联网上寻找合适的贴图素材,可以是纹理、图片或者是其他类型的图片文件,确保贴图的分辨率适合你的场景需求。

二、导入贴图素材1.打开3Dmax软件,在主界面上找到“材质编辑器”面板。

2.在材质编辑器面板中找到“贴图贴图”按钮,点击打开贴图浏览器。

3.在贴图浏览器中选择你准备好的贴图素材。

4.点击“打开”按钮,将贴图素材导入到3Dmax软件中。

三、应用贴图到对象1.选中你要应用贴图的对象,例如一个方块。

2.在材质编辑器面板中,找到导入的贴图素材,将其拖动到方块对象上。

3.方块对象将会立即显示贴图的效果。

四、调整贴图的映射方式1.在材质编辑器面板中,点击贴图下方的按钮,打开贴图映射调整面板。

2.在贴图映射调整面板中,可以选择不同的映射方式,如平铺、拉伸、缩放等。

3.通过调整不同的参数,来改变贴图在对象上的映射效果。

五、调整贴图的透明度和反射等属性1.在材质编辑器面板中,可以找到贴图的透明度和反射等属性调节面板。

2.通过调整透明度的数值,可以实现贴图的透明效果。

3.通过调整反射的数值,可以改变贴图在不同光照条件下的反射效果。

六、使用UVW编辑器调整贴图坐标1.在材质编辑器面板中,点击贴图下方的按钮,打开UVW编辑器。

2.在UVW编辑器中,可以通过拖动顶点、边和面来调整贴图在对象上的位置和旋转。

3.通过调整不同的参数,可以实现更精确的贴图映射效果。

七、使用贴图渲染器进行渲染1.在3Dmax软件中,找到渲染设置面板,选择合适的渲染器。

2.在渲染设置面板中,可以调整渲染参数,如分辨率、光照、阴影等。

3.点击渲染按钮,开始渲染贴图后的场景。

八、保存和导出贴图1.在贴图编辑器面板中,点击贴图右上方的保存按钮,将贴图保存到本地。

3Dmax材质贴图导入教程:导入和应用材质贴图的方法

3Dmax材质贴图导入教程:导入和应用材质贴图的方法

3Dmax材质贴图导入教程:导入和应用材质贴图的方法3Dmax是一款非常强大的三维建模软件,能够创建出非常逼真的场景和动画。

在使用3Dmax制作场景时,材质贴图的导入和应用是非常重要的步骤。

本文将详细讲解在3Dmax中导入和应用材质贴图的方法。

步骤一:准备材质贴图文件在开始导入和应用材质贴图之前,首先我们需要准备好材质贴图的文件。

通常,材质贴图文件格式可以是JPEG、PNG、BMP等常见的图片格式。

确保你已经准备好你想要使用的材质贴图文件。

步骤二:创建一个物体在3Dmax中,首先我们需要创建一个物体来应用材质贴图。

可以选择一个基础的几何体,比如立方体或球体,或者使用任何已经存在的物体。

你也可以根据自己的需求创建一个自定义的物体。

步骤三:打开“材质编辑器”在3Dmax的界面中,找到“材质编辑器”面板。

通常可以在右侧或左侧的工具栏中找到。

点击该面板以打开材质编辑器。

步骤四:创建一个新材质在材质编辑器中,我们需要创建一个新的材质来应用到物体上。

右键单击材质编辑器中的空白区域,选择“新材质”来创建一个新的材质。

步骤五:导入材质贴图文件在新创建的材质中,可以看到一些参数和选项。

找到“漫反射贴图”(Diffuse Map)选项栏,点击其右侧的小方框来选择导入材质贴图文件。

在弹出的文件浏览器中,找到并选择你想要导入的材质贴图文件,并点击“确定”按钮完成导入。

步骤六:调整材质贴图的参数一旦材质贴图文件导入成功,你可以在材质编辑器中看到预览效果。

根据你的需要,可以调整材质贴图的参数来获得想要的效果。

比如,你可以调整材质的亮度、对比度、色调等。

步骤七:应用材质到物体上在材质编辑器中,你会看到一个“示例球”(Sample Sphere)的预览区域。

这个球体就是用来预览材质效果的。

你可以将材质应用到物体上,然后在预览区域中观察效果。

步骤八:选择物体并应用材质回到3Dmax的主界面,选择你想要应用材质的物体。

在物体选中的状态下,返回到材质编辑器,在新创建的材质上点击右键,选择“将材质应用到选定对象”来应用材质。

Unity3D性能优化之资源导入标准和属性设置篇

Unity3D性能优化之资源导入标准和属性设置篇

Unity3D性能优化之资源导⼊标准和属性设置篇⼀、Unity使⽤的资源1、外部资源:不是Unity创建,⽽是外部⼯具做的模型以及贴图或通⽤的格式资源。

例如图⽚资源、模型资源、动画资源、视频和声⾳资源。

2、内部资源:Unity创建的,并且只有放在Unity才能识别。

例如脚本、Shader、场景、预设、材质、精灵、动画控制器、时间线、物理材质等。

⼆、Unity资源导⼊标准1、纹理关闭Read/Write 选项的:Read/Write Enabel 选项启⽤后,选择这个选项将会允许从脚本来访问纹理数据,开启此选项后,将会产⽣纹理数据的副本,副本会占⽤内存,等同于⼀个纹理数据会有双倍的内存消耗。

纹理按照平台压缩格式:RGB32和RGB24等⾮压缩格式纹理占⽤内存较⼤。

带有OpenGLES3或更⾼版本的Android的纹理格式应该是astc。

另外Android 按ETC2,IOS按PVRTC,PC按DXT5过滤模式Filter Mode设置为 Bilinear的纹理:Trilinear 三线性过滤(三线性插值),纹理会在不同的 mip ⽔平之间进⾏模糊,从⽽增加 GPU 开销。

Sprite纹理关闭Mipmap:Mipmap 开启后,内存会是未开启 Mipmap 的 1.33 倍,因为 Mipmap 会⽣成⼀组长宽依次减少⼀倍的纹理序列,⼀直⽣成到 1*1。

Mipmap 提升 GPU 效率;⼀般⽤于 3D 场景或⾓⾊, UI 不建议开启。

UI⽤的纹理关闭,3D模型和场景⽤到的纹理开启。

Wrap 模式设置为 Clamp:Wrapmode 使⽤了 Repeat 模式,容易导致贴图边缘出现杂⾊2、模型关闭Read/Write 选项:Read/Write Enabel 选项启⽤后,选择这个选项将会允许从脚本来访问⽹格数据,开启此选项后,将会产⽣⽹格数据的副本,副本会占⽤内存,等同于⼀个⽹格数据会有更多的内存消耗。

unity3d游戏开发之UGUI 加载图片

unity3d游戏开发之UGUI 加载图片

281127194721044.png(22.8 KB, 下载次数: 0)下载附件保存到相册3 小时前上传图片是动态加载的,然后转换为sprite赋值到ugui的按钮上该文章出自【狗刨学习网】代码如下:ing UnityEngine;ing System.Collections;ing System.IO;ing UnityEngine.UI;5.6.public class UITexLoader : MonoBehaviour7.{8.9. public string texname;10. private Texture2D m_Tex;11.12.13.14. private void LoadFromFile(string path)15. {16. m_Tex = new Texture2D(1, 1);17. m_Tex.LoadImage(ReadPNG(path));18. }19.20. private byte[] ReadPNG(string path)21. {22. FileStream fileStream = new FileStream(path, FileMode.Open, System.IO.FileAcces23.24. fileStream.Seek(0, SeekOrigin.Begin);25.26. byte[] binary = new byte[fileStream.Length]; //创建文件长度的buffer27. fileStream.Read(binary, 0, (int)fileStream.Length);28.29. fileStream.Close();30.31. fileStream.Dispose();32.33. fileStream = null;34.35. return binary;36. }37.38.39. // Use this for initialization40. void Start()41. {42.43. LoadFromFile(texname);44. Sprite tempSprite = new Sprite();45. tempSprite = Sprite.Create(m_Tex, new Rect(0, 0, m_Tex.width, m_Tex.height), new0));46. GetComponent<Image>().sprite =tempSprite;47. }48.49. // Update is called once per frame50. void Update ()51. {52.53. }54.}复制代码把这个脚本绑定到UGUI的按钮上面,运行就可以把按钮上的图片动态改变了。

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