Unity3D换材质与图片
Unity3d地形刷入自定义树木
Unity3d地形刷⼊⾃定义树⽊
Unity3d中新建地形后,可以在地形上刷草及树⽊等植物。
那么接下来讲的就是如何刷⼊⾃定义树⽊。
我没有⾃定义的树⽊素材,所以就以导⼊的坦克模型为例,⽬标是将坦克模型的炮塔部分作为⾃定义“树⽊”刷⼊地形。
当然如果有树⽊的素材,那么就可以直接使⽤树⽊素材即可。
步骤1:在Project中新建⽂件夹,命名为Resources。
将模型拖放到场景。
此时场景如图:
步骤2:选中Tank模型的⼦物体Object01,将Object01拖动到Resources⽂件夹中,使之成为⼀个prefab。
(⾃定义树⽊的模型必须带Render,⽽Object01的⽗物体是没有Render的,因此直接使⽤Object01)
操作后,效果如下图:
步骤3:给prefab添加材质,可同时给材质赋上贴图。
添加好材质后,需修改材质的Shader类型,类型须为Nature/Soft类型。
设置如图:图中已标注出Shader类别及贴图。
设置好之后,即可使⽤了。
使⽤时,跟使⽤地形⾃带的树⽊⼀样,在刷⼊时,需先Add tree,然后选择添加进来的⾃定义的模型即可开始刷⼊。
下图为刷⼊后的效果:
左边为unity⾃带的树⽊,右边刷的是⾃定义的模型(满满⼀地的炮塔)。
总的来说过程就是这样。
貌似好丑的样⼦,原谅没有素材的⼈吧~。
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。
unity 标准材质参数
unity标准材质参数在Unity中,标准材质是用于表现物体表面属性的重要工具。
标准材质可以用来表现物体的颜色、纹理、光照等属性,通过对这些参数的调整,我们可以创造出各种不同的视觉效果。
以下是一些常见的Unity标准材质参数:1.材质类型(Material Type)标准材质类型包括Surface和Volume两种类型。
Surface类型主要用来定义物体的表面属性,如颜色、纹理等;而Volume类型则用来定义物体的体积属性,如密度、透明度等。
在创建标准材质时,需要选择合适的材质类型,以便更好地控制物体的属性表现。
2.基础颜色(Base Color)基础颜色是物体表面的基本颜色,可以通过颜色调整滑块或者颜色拾取器进行设置。
此外,还可以通过纹理贴图来表现复杂的颜色变化效果。
3.纹理贴图(Texture)纹理贴图可以用来表现物体表面的纹理效果。
在Unity中,纹理贴图可以是2D图像或者立方图,也可以是高精度模型使用的三维纹理。
通过将纹理贴图应用在标准材质上,可以创造出各种不同的纹理效果。
4.光照模型(Lighting Model)光照模型是用来计算物体表面光照效果的数学模型。
Unity支持多种光照模型,如Blinn-Phong、Lambert等。
不同的光照模型可以产生不同的光照效果,需要根据实际情况选择合适的光照模型。
5.高光反射(Specular Reflection)高光反射是指物体表面反射光线的能力。
通过调整高光反射参数,可以控制物体表面反射光线的强度和范围,创造出各种不同的高光效果。
6.透明度(Transparency)透明度是指物体表面透射光线的能力。
通过调整透明度参数,可以控制物体表面透射光线的强度和范围,创造出各种不同的透明效果。
需要注意的是,透明度参数需要与纹理贴图的透明通道相配合使用,才能实现正确的透明效果。
7.环境光(Ambient Light)环境光是指物体表面受到周围环境光线的照射效果。
我学院: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添加改图片材质。
3Dmax中贴图调整和材质优化的方法
3Dmax中贴图调整和材质优化的方法引言:在3D建模和渲染过程中,贴图调整和材质优化是非常重要的部分。
通过正确地调整贴图和优化材质,可以使模型更加逼真、生动。
本文将详细介绍在3Dmax 中贴图调整和材质优化的方法,包括颜色调整、纹理修改等。
一、贴图调整方法1. 色调/饱和度调整- 在3Dmax中选择要调整的贴图素材,在编辑贴图素材的属性中找到“色调/饱和度”选项。
- 调整“色调”滑块来改变贴图的整体色调。
- 通过调整“饱和度”滑块来增强或减弱贴图的颜色饱和度。
2. 对比度调整- 在贴图的属性中找到“对比度”选项。
- 通过调整“对比度”滑块,可以增加贴图的对比度,使其更加清晰和明亮。
3. 亮度/曝光调整- 在贴图的属性中找到“亮度/曝光”选项。
- 通过调整“亮度”滑块,可以增加或减少贴图的明暗度。
- 如果需要调整整个场景的亮度和曝光,可以在环境设置中进行调整。
二、材质优化方法1. 纹理修改- 在3Dmax中选中要修改的物体,进入材质编辑器。
- 找到“贴图”的选项,并点击“浏览”按钮选择新的纹理贴图。
- 通过调整纹理贴图的参数,如旋转、平铺、偏移等,来优化材质的效果。
2. 撤销和还原- 在材质编辑器中,通过点击“撤销”按钮可以撤销最近的材质编辑操作。
- 点击“还原”按钮可以还原上一次已经撤销的材质编辑操作。
3. 渐变和过渡效果- 在材质编辑器中选择一个物体,进入材质编辑器。
- 在材质编辑器面板中,找到“渐变”或“过渡”选项。
- 通过选择合适的颜色和设置渐变或过渡的参数,可以为物体添加多样化的效果。
4. 材质层叠和混合- 在材质编辑器中,选中一个物体,在材质编辑器面板中找到“图层”选项。
- 点击“添加图层”按钮,可以添加一个新的材质图层。
- 通过调整不同图层的参数和透明度,可以实现多层材质的混合和层叠效果。
总结:在3Dmax中,通过贴图调整和材质优化可以使模型更加逼真、生动。
通过调整贴图的色调、饱和度、对比度、亮度/曝光等参数,可以改变贴图的外观效果。
批量更改图片属性 编辑器插件 TextureImportSetting
privateintAnisoLevel=1;
//Filter Mode
privateintFilterModeInt=0;
privatestring[]FilterModeString=newstring[]{“Point”, “Bilinear”, “Trilinear”};
break;
case4:
textureImporter.textureType=TextureImporterType.Cookie;
break;
case5:
textureImporter.textureType=TextureImporterType.Lightmap;
break;
case6:
textureImporter.textureType=TextureImporterType.Advanced;
{
stringpath=AssetDatabase.GetAssetPath(texture);
TextureImporter texImporter=GetTextureSettings(path);
TextureImporterSettings tis=newTextureImporterSettings();
privatestring[]FormatString=newstring[]{“Compressed”, “16bits”, “truecolor”};
///
///创建、显示窗体
///
[@MenuItem(“Custom/Texture Import Settings”)]
privatestaticvoidInit()
///
privatevoidOnGUI()
unity 修改材质的方法
unity 修改材质的方法在Unity中,修改材质可以通过以下几种方法:1. 直接修改材质的属性:在Unity编辑器中,选中一个材质,然后在Inspector窗口中修改其属性。
例如,你可以修改颜色、纹理、光照模式等。
2. 使用脚本修改材质:你可以编写一个Unity脚本来修改材质的属性。
例如,你可以使用``来改变材质的颜色。
以下是一个简单的示例脚本:```csharpusing UnityEngine;public class MaterialModifier : MonoBehaviour{void Start(){// 获取材质Material material = GetComponent<Renderer>().material;// 改变材质颜色= ;}}```这个脚本会获取附加到同一GameObject的材质,并将其颜色改为红色。
3. 使用Shader修改材质:如果你想要更复杂的材质效果,可以使用Shader。
你可以编写自己的Shader,或者使用Unity内置的Shader。
一旦你创建了一个Shader,你可以将它应用到材质上,然后在Shader中定义材质的属性。
4. 使用材质预设:Unity也提供了一些预设材质,例如Unlit/Color和Unlit/Texture。
这些预设材质可以让你快速创建一个简单的材质,然后通过脚本或Inspector窗口修改其属性。
5. 使用MaterialPropertyBlock:如果你正在使用Unity的着色器语言(如HLSL或Cg),你可以使用MaterialPropertyBlock来修改材质的属性。
MaterialPropertyBlock可以让你在运行时动态地改变材质的属性。
以上就是在Unity中修改材质的一些常见方法。
【Unity3D游戏开发】material与sharedMaterial的区别(三八)
【Unity3D游戏开发】material与sharedMaterial的区别(三八)如果你需要修改模型材质的颜色,或者是修改材质Shader的一些属性,通常情况是用获取模型的Renderer组件,然后获取它的material属性。
举个简单的例子,修改颜色或者直接更换shadermaterial.color = Color.red;material.shader = Resources.Load(“Shader/Alpha-Diffuse”, typeof(Shader)) as Shader;Render可以使用material或者是sharedMaterial两个属性。
Renderer render;render.material;render.sharedMaterial;这两个属性用法是一样的,但是从效率上来说最好用sharedMaterial,它是共享材质,无论如何操作材质的属性(如更换颜色或者更换shader),内存中只会占用一份。
但是如果要是用material的话,每次更换属性的时候Unity就会自动new一份新的material作用于它。
它直到Application.LoadLevel() 或者Resources.UnloadUnusedAssets();的时候才会施放内存。
所以material就有可能会造成内存泄漏,那么我们干脆就不要使用它。
但是在代码中如果直接用render.sharedMaterial的话,你会发现在编辑器开发模式下,运行一会儿游戏本地的.material文件凡是修改了的都变化了,如果这些文件都在svn管理中,那么他们都会变成红叹号,表示文件已经被修改。
这样太危险了,一不小心上传了怎么办。
为了解决这个问题,可以用一个简单的方法,每次获取material的时候根据平台而定。
[c#] view plain copy1.public static Material GetMaterial(Renderer render)2.{3.#if UNITY_EDITOR4.return render.material;5.#else6.return render.sharedMaterial;7.#endif8.}这样就不用担心本地文件变化了。
解决unity3d导入模型贴图材质丢失的问题
解决unity3d导⼊模型贴图材质丢失的问题今天导⼊了⼀个模型,但是模型贴图丢失了,⽽且Inspector⾯板中处于不能编辑的状态
虽然可以通过重新创建材质来替换,但是这样会⽣成⼀个新的prefab,觉得不太好做出如下更改,将对应材质填⼊即可
补充:Unity光照贴图丢失的坑
最近项⽬出版本的时候出现了部分建筑光照贴图不正常的情况,⽽且仅仅是部分模型,这部分模型都是有多个场景会⽤到的,所以都是单独出来打包的。
然后以为是模型上⾯的光照信息丢失了,通过测试,并没有丢失,可以通过获取模型上的MeshFilter打印出来,部分丢失的话,也与光照贴图没有关系,只可能是模型的UV2通道⾥⾯烘焙的数据错了,或者是模型通过依赖打包的Unity做了什么操作把依赖的模型的UV2通道删除了,后来问了下群⾥的⼩伙伴,有⼈说可能是
这个选项的锅,然后我把这个选项勾选掉之后光照就正常了,这个选项会把材质中没有⽤到的UV,Normal等通道⾃动的在打包的时候剔除,猜测可能是Unity认为被单独打包的模型没有⽤到UV2,就⾃动剔除了,没有管这个模型是否会在场景中使⽤,所以在打包的时候,当场景通过依赖进⾏合并模型时,这时候加载进来的单独打包的模型实际上他的UV2通道已经被剔除了,所以导致光照丢失。
⼤家可以在⾃⼰的项⽬中尽量不要勾选这个选项,据说会导致很多问题,还是⾃⼰⼿动剔除好点。
解决⽅法:
⽅法1:取消勾选这个选项,这会导致包体变⼤60M。
⽅法2:在模型导⼊的时候⾃动把模型的UV3,UV4,Tangent,等剔除。
需要美术在MAX中提前⽣成UV2通道。
以上为个⼈经验,希望能给⼤家⼀个参考,也希望⼤家多多⽀持。
如有错误或未考虑完全的地⽅,望不吝赐教。
Unity3D脚本:读取外部文件夹的多张JPG图片到材质
Unity3D脚本:读取外部文件夹的多张JPG图片到材质Unity3D读取外部文件夹的多张JPG图片到材质,脚本如下:using UnityEngine;using System.Collections;using System.IO;public class mytest : MonoBehaviour {public Texture2D[] texs;// 拖到物体上后,在编辑器上赋给10个大小. 运行时直接在编辑器上看是否加载进去.public string[] paths;//,图片路径.同样是在编辑器上初始的大小也是10.// Use this for initializationvoid Start () {paths[0] = @"D:\tutu\1.jpg";paths[1] = @"D:\tutu\2.jpg";paths[2] = @"D:\tutu\3.jpg";paths[3] = @"D:\tutu\4.jpg";paths[4] = @"D:\tutu\5.jpg";paths[5] = @"D:\tutu\6.jpg";paths[6] = @"D:\tutu\7.jpg";paths[7] = @"D:\tutu\8.jpg";paths[8] = @"D:\tutu\9.jpg";paths[9] = @"D:\tutu\10.jpg";}// Update is called once per framevoid Update () {}void OnGUI(){if (GUI.Button(new Rect(0, 0, 100, 50), "")){for (int i = 0; i < 10; i++){Texture2D tex = new Texture2D(1, 1);byte[] rawJPG = File.ReadAllBytes(paths);tex.LoadImage(rawJPG);texs = tex;}//当你不需要texs里的图片时,把数组置空. 然后调用Resources.UnloadUnusedAssets}}}。
Unity材质设置属性优化
Unity材质设置属性优化
一般我们修改材质球参数是直接拿对于材质球来设置参数,不过还有优化空间
使用材质球属性块来代替直接修改材质球属性
材质球属性块
材质属性块被用于Graphics.DrawMesh和Renderer.SetPropertyBlock两个API,当我们想要绘制许多相同材质但不同属性的对象时可以使用它。
例如你想改变每个绘制网格的颜色,但是它却不会改变渲染器的状态。
我们来看看Renderer这个类,它包含了Material,SharedMaterial这两个属性;GetPropertyBlock,SetPropertyBlock这两个函数,其中两个属性是用来访问和改变材质的,而两个函数是用来设置和获取材质属性块的。
我们知道,当我们操作材质共性时,可以使用SharedMaterial属性,改变这个属性,那么所有使用此材质的物件都将会改变,而我们需要改变单一材质时,需要使用Material属性,而在第一次使用Material时其实是会生成一份材质拷贝的,即Material(Instance),而使用材质属性块不会拷贝一份材质球,从而效率更高
下面写个简单的使用方法
1.int propertyId = Shader.PropertyT oID("shader变量");
2.MaterialPropertyBlock p = null ;
3.r.GetPropertyBlock(p);
4.p.SetInt(propertyId, 1);
5.r.SetPropertyBlock(p);
优化是一点一滴积累出来,为了兼容更多玩家,必须尽可能优化
这里只是记录一下优化。
unity材质球的作用和创建方法
unity材质球的作用和创建方法
Unity的材质球是一种用于指定对象表面外观的组件。
它们通常用于为游戏对象添加颜色、纹理、透明度、反射率等视觉属性。
创建材质球的方法如下:
1. 在Unity中打开Project面板,右键单击文件夹,选择“Create”>“Material”。
2. 在Inspector面板中,可以更改材质球的属性,例如颜色、反射率和透明度。
3.将材质球拖放到场景中的游戏对象上,或者将其分配给对象的渲染器组件。
4.游戏对象现在会呈现材质球的表面外观。
除了基本的颜色属性之外,材质球还可以包括纹理贴图、发光、透明度等属性。
这些属性可以通过更改材质球的属性窗口进行自定义。
unity 双面渲染材质原理
unity 双面渲染材质原理Unity双面渲染材质原理在Unity中,双面渲染材质是一种特殊的材质,可以使物体的两个面都能被渲染。
正常情况下,Unity只会渲染物体的正面,而忽略掉背面。
但是有些情况下,我们可能需要同时渲染物体的正面和背面,这时就可以使用双面渲染材质。
双面渲染材质的原理是通过修改渲染器的剔除模式来实现的。
剔除模式是指决定渲染器在渲染物体时是否剔除背面的一个设置。
在Unity中,剔除模式有两种:Back和Front。
Back表示剔除背面,而Front表示剔除正面。
默认情况下,大部分材质都是采用的Back 剔除模式。
双面渲染材质通过将剔除模式设置为Off来实现同时渲染正面和背面。
在Unity中,我们可以通过以下步骤来创建一个双面渲染材质:1. 创建一个新的材质,并为其命名。
2. 在Inspector面板中,将Cull Mode设置为Off。
这样就可以关闭剔除模式,实现双面渲染。
3. 将该材质应用到需要双面渲染的物体上。
使用双面渲染材质可以解决一些特殊情况下的渲染问题。
例如,在某些情况下,物体的正面和背面具有不同的纹理或颜色,如果只渲染正面,则无法正确显示物体的外观。
通过使用双面渲染材质,可以同时渲染物体的正面和背面,使其外观更加真实。
双面渲染材质还可以用于一些特殊效果的实现。
例如,在制作透明物体时,我们可能需要在物体的内部和外部同时渲染,以实现透明效果。
通过使用双面渲染材质,可以同时渲染物体的内部和外部,使透明效果更加逼真。
需要注意的是,双面渲染材质可能会增加渲染的开销。
由于需要同时渲染物体的正面和背面,会增加渲染器的工作量。
因此,在使用双面渲染材质时,需要权衡渲染效果和性能之间的平衡。
双面渲染材质并不适用于所有的情况。
对于一些只需要渲染物体正面的情况,使用双面渲染材质可能会导致不必要的渲染开销。
因此,在使用双面渲染材质时,需要根据具体情况来决定是否使用。
总结一下,Unity的双面渲染材质原理是通过修改渲染器的剔除模式实现的。
Unity3D游戏开发之使用Unity Render Textures实现画面特效
Unity3D游戏开发之使用Unity Render Textures实现画面特效写在前面画面特效并不只限于调整游戏画面的颜色。
我们还可以使用它们来和其他的图片混合起来。
这个技术和在Photoshop里新建一个layer很像,我们可以选择一个混合模式来混合两张图片,在我们的例子里,其中一张就是指render texture。
这使得美术人员可以在游戏里面模拟各种混合效果,而不是仅仅在Photoshop里。
这篇文章里,我们将要学习一些常见的混合模式,例如,正片叠底(Multiply),Add,滤色(Screen,这竟然是滤色的意思。
)。
你将会发现这些都不难实现~知识补习这里增加一个内容,就是对各种混合模式的理解。
正片叠底(Multiply)和滤色(Screen)正片叠底(Multiply)和滤色(Screen)是两种基本的混合模式,分别用于使图片变暗和变亮。
它们之间的组合还可以形成更复杂的混合模式,如叠加(Overlay)和柔光(Soft Light)。
文章出处【狗刨学习网】正片叠底——就是把两层图像的像素相乘,最后会得到一个更暗的图像。
这个模式是对称的,也就是说交换基色和混合色得到的结果是一样的。
,其中a是基色,b是混合色。
滤色——首先把两层图像的像素值取互补数,然后将它们相乘,最后再去互补数。
这和正片叠底得到的结果是相反的。
它会得到一个更亮的图像。
,其中a是基色,b是混合色。
叠加——结合了正片叠底和滤色两种混合模式。
基色中亮色的部分会更加亮,而暗色的部分会更暗。
,其中a是基色,b是混合色。
准备工作这一篇同样很多代码是建立在上一篇的基础上,所以很多代码不用写啦~创建一个新的脚本,命名为BlendMode_ImageEffect;创建一个新的Shader,命名为BlendMode_Effect;把本章第一篇中的C#代码复制到第一步中创建的脚本中;(我发现原作者貌似也因为复制粘贴忘了删掉亮度、饱和度、对比度那句话。
unity如何修改材质属性和更换shader
unity如何修改材质属性和更换shaderunity通过GetVector,GetColor,GetFloat等获取。
SetVector,SetColor,SetFloat等设置。
这⾥我要修改Transparency_Value的值使⽤setfloat修改值code renderer.material.SetFloat("_TransVal", TranValue);这是shader⾥⾯的⼀句_TransVal("Transparency_Value", Range(0,1)) = 0.5code renderer.material.shader = Shader.Find("Custom/SimpleAlpha");代码控制切换shader。
补充:Unity 利⽤编辑器扩展批量修改物体材质的Shader并启⽤GPU Instancing为什么会有这个需求我的某个游戏运⾏之后,看了下draw call,发现上千个draw call了,⾮常⼤的数值,不过我在⼿机上测试了⼀下,竟然没有明显的卡顿,哈哈哈,很强,不过还是要优化⼀下的,所以先想办法降低draw call了,我看了⼀个,是游戏的地图产⽣了⼤量的dc,我这个游戏是由四个地图组成的,每个地图都由⼏百个⼩物体组成,所以四个地图应该是由两千多个物体组成的,刚开始我想着要不合并模型的⽹格试试吧,然后发现出问题了,⼀些显⽰⼀些隐藏了,可能是太多物体了,合并容易出问题吧,所以我就打算启⽤Shader中的Enable GPU Instancing,启⽤后,会⾃动进⾏静态批处理,所以dc就会⼤幅度的减少。
⽽且我发现我的游戏物体的材质Shader还没有Enable GPU Instancing,想着⾃⼰写个有Enable GPU Instancing的Shader吧,但是我⼜看了⼀下,Unity中的Mobile/Diffuse的Shader就有这个选项,然后就⽤这个Shader了吧,那么问题⼜来了,两千多个物体,难道要我⾃⼰⼀个⼀个的改Shader并且启⽤GPU Instancing吗?当然这样也⾏,前提是你很闲,⽆聊到没事做的时候可以这样做。
Unity3D_改变材质球属性
Unity3D_改变材质球属性本篇博客介绍改变材质球的 RenderingModel 属性,及其普通属性的⽅法。
改变 RenderModelusing System.Collections;using System.Collections.Generic;using UnityEngine;public class JiaoLongHao : MonoBehaviour{public Material mat;void Update(){// 当按下 O 是,设置制定材质球的 RenderingModel 属性为 Opaqueif (Input.GetKeyDown(KeyCode.O)){setMaterialRenderingMode(mat, RenderingMode.Opaque);}}private enum RenderingMode{Opaque,Cutout,Fade,Transparent}///<summary>///设置材质球的 RenderingModel 属性///</summary>///<param name="material">需要改变 RenderingModel 属性的材质球</param>///<param name="renderingMode">将材质球的 RenderingModel 属性设置为该参数类型(该参数为枚举类型)</param> private void setMaterialRenderingMode(Material material, RenderingMode renderingMode){switch (renderingMode){case RenderingMode.Opaque:material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);material.SetInt("_ZWrite", 1);material.DisableKeyword("_ALPHATEST_ON");material.DisableKeyword("_ALPHABLEND_ON");material.DisableKeyword("_ALPHAPREMULTIPLY_ON");material.renderQueue = -1;break;case RenderingMode.Cutout:material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);material.SetInt("_ZWrite", 1);material.EnableKeyword("_ALPHATEST_ON");material.DisableKeyword("_ALPHABLEND_ON");material.DisableKeyword("_ALPHAPREMULTIPLY_ON");material.renderQueue = 2450;break;case RenderingMode.Fade:material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha);material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);material.SetInt("_ZWrite", 0);material.DisableKeyword("_ALPHATEST_ON");material.EnableKeyword("_ALPHABLEND_ON");material.DisableKeyword("_ALPHAPREMULTIPLY_ON");material.renderQueue = 3000;break;case RenderingMode.Transparent:material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);material.SetInt("_ZWrite", 0);material.DisableKeyword("_ALPHATEST_ON");material.DisableKeyword("_ALPHABLEND_ON");material.EnableKeyword("_ALPHAPREMULTIPLY_ON");material.renderQueue = 3000;break;}}}改变材质球的普通属性以Smoothness属性为例:选择⼀个材质球 - 点击材质球右上⾓的“齿轮” - 选择“Edit Shader” - 查看带有Smoothness相关字样的属性(名称及类型) /// <summary>/// 改变材质球的 Smoothness 属性/// </summary>/// <param name="mat">需要改变属性的材质球</param>/// <param name="f">需要改变的数值</param>private void SetSmoothness(Material mat, float f){// 如图蓝⾊⽅框所⽰,Smoothness 为 float 类型,所以使⽤ SetFloat ⽅法,其他类型的属性以此类推// 参数⼀:Shader 中 Smothness 属性的全称,参数⼆:要把该属性设置的⽬标值mat.SetFloat("_SmoothnessTextureChannel", f);}。
3Dmax材质贴图导入教程:导入和应用材质贴图的方法
3Dmax材质贴图导入教程:导入和应用材质贴图的方法3Dmax是一款非常强大的三维建模软件,能够创建出非常逼真的场景和动画。
在使用3Dmax制作场景时,材质贴图的导入和应用是非常重要的步骤。
本文将详细讲解在3Dmax中导入和应用材质贴图的方法。
步骤一:准备材质贴图文件在开始导入和应用材质贴图之前,首先我们需要准备好材质贴图的文件。
通常,材质贴图文件格式可以是JPEG、PNG、BMP等常见的图片格式。
确保你已经准备好你想要使用的材质贴图文件。
步骤二:创建一个物体在3Dmax中,首先我们需要创建一个物体来应用材质贴图。
可以选择一个基础的几何体,比如立方体或球体,或者使用任何已经存在的物体。
你也可以根据自己的需求创建一个自定义的物体。
步骤三:打开“材质编辑器”在3Dmax的界面中,找到“材质编辑器”面板。
通常可以在右侧或左侧的工具栏中找到。
点击该面板以打开材质编辑器。
步骤四:创建一个新材质在材质编辑器中,我们需要创建一个新的材质来应用到物体上。
右键单击材质编辑器中的空白区域,选择“新材质”来创建一个新的材质。
步骤五:导入材质贴图文件在新创建的材质中,可以看到一些参数和选项。
找到“漫反射贴图”(Diffuse Map)选项栏,点击其右侧的小方框来选择导入材质贴图文件。
在弹出的文件浏览器中,找到并选择你想要导入的材质贴图文件,并点击“确定”按钮完成导入。
步骤六:调整材质贴图的参数一旦材质贴图文件导入成功,你可以在材质编辑器中看到预览效果。
根据你的需要,可以调整材质贴图的参数来获得想要的效果。
比如,你可以调整材质的亮度、对比度、色调等。
步骤七:应用材质到物体上在材质编辑器中,你会看到一个“示例球”(Sample Sphere)的预览区域。
这个球体就是用来预览材质效果的。
你可以将材质应用到物体上,然后在预览区域中观察效果。
步骤八:选择物体并应用材质回到3Dmax的主界面,选择你想要应用材质的物体。
在物体选中的状态下,返回到材质编辑器,在新创建的材质上点击右键,选择“将材质应用到选定对象”来应用材质。
虚幻3引擎入门指南
在编辑器中播放
要想获得关于如何使用在编辑器中播放游戏的功能,请参照 在编辑器其 中播放的用户指南页面。 实时更新 要想获得关于如何从编辑器中控制控制台的信息,请参照实时更新 ?页 面。
源码控制集成 要获得关于把源码控制集成到虚幻编辑器中的概述 ,请参照 SCC(源码控 制 )集 成 页 面 。 关卡编辑器用户指南
UnrealEd( 虚 幻 编 辑 器 )是 是 对 虚 幻 引 擎 中 内 容 进 行 操 作 的 一 个 工 具 套 件。它的主要作用是关卡设计;但是它内部也包含了一些编辑器和浏览 器用于导入您的游戏项目的内容并对其进行操作。
本文档描述了虚幻编辑器的主要功能,并引导您如何使用更加有针对性 的功能。
到远裁平面的距离 (Distance to far clipping plane):正如它所表达的 ; 是一个有效的快速解决方案。它是在 Redo 按钮旁边的滑动条。
关闭实时更新(Turn off realtime update) :不需要加以说明正如它所 表达的意思一样。
G 模式(G Mode):隐藏所有的编辑器调试信息。结果可能会不同。
脚本 要想获得关于如何使用 Kismet 的更多信息 ,请参照 Kismet 用户指南 页 面。 用户界面 要想获得关于如何使用 UI 编辑器包括停靠编辑器 、风格编辑器以及皮肤 编辑器的更多信息,请参照 UI 编辑器用户指南页面。 虚幻编辑器控制 鼠标控制
关于一系列鼠标控制的信息,请参照编辑器按钮页面。 键盘控制 关于一系列键盘控制的信息,请参照编辑器按钮页面。
- 设置车辆
- 几何体模式入门指南
特效
- 地图错误
Unity3D深入浅出-创造物理材质(PhysicsMaterials)
Unity3D深⼊浅出-创造物理材质(PhysicsMaterials)
在Unity3d中已经配置好了5种常⽤的物理材质,Bouncy、Ice、Metal、Rubber、Wood,在菜单中依次选择Assets - Import Package -Physics Materials 即可导⼊,下⾯以Ice(冰)材质为例介绍其物理参数。
Daynamic Friction:动⼒摩擦⼒,对象在运动时的摩擦⼒,取值范围0~1
Static Friction:静态摩擦⼒,对象被放置在表⾯时的摩擦⼒,取值范围0~1,取值接近0时可模拟冰的效果。
Bounciness:反弹,取值范围0~1,值为0时没有反弹。
Friction Combine:摩擦⼒组合。
Average:使⽤两个摩擦⼒的平均值
Min:使⽤两个摩擦⼒的最⼩值
Mix:使⽤两个摩擦⼒的最⼤值
Multiply:使⽤两个摩擦⼒的乘积
Bounce Combine:反弹组合,同摩擦⼒组合的选项类似。
Firction Direction2:摩擦⼒⽅向,各向异性的摩擦⼒⽅向,如果向量值不为0则各向异性摩擦⼒将被启⽤,只有该项启⽤,动态摩擦⼒2和静态摩擦⼒2。
Dynamic Friction2:动态摩擦⼒2
Static Friction2:静态摩擦⼒2。
3D材质参数设置
3D常用材质参数设置一、油漆材质1。
光亮油漆: 漫反射:漆色反射:15 高光泽度:0.88 反射光泽度:0.98 贴图:凹凸1% 噪波2. 乳胶漆材质:漫反射:漆色(白漆:245,245,245,) 反射:11-23高光泽度:0。
2 反射光泽度:1 选项下面的跟踪反射取消3。
地面漆:漫反射:245 发光贴图在灯光缓存反射:20—25 高光:0.25 选项:去掉第一个提高渲染速度4。
白色油漆:漫反射:255 反射:25—30 高光:0。
85-0。
88光泽:0。
9二、木质类材质1。
木地板:(檀木)满发射添加位图模糊:0.5 反射:RGB30/30/30 加衰减,Fresenl 衰减色块:RGB:200/215/235 高光泽度:0。
78—0.8反射光泽度:0。
85 贴图:凹凸60%2 . 木地板(印象)漫反射:位图反射:衰减高光泽度:0。
9 反光泽度:0.7 贴图加凹凸3。
亮面清漆木材漫反射加木纹贴图反射:49 高光泽度:—0.84 反射光泽度:14 。
木地板芽面实木:漫反射加木纹贴图反射:34 高光泽度:0。
87 反射光泽度:0.82 贴图加凹凸:11三、布纹1、丝绸材质:漫反射衰减,黑色色块是布料贴图反射:17 高光泽度:—0。
77 反光泽度:0。
852.真皮:漫反射:RGB:30/30/30 皮革位图反射:RGB:28/28/28高光泽度:0。
65 光泽度:0。
7 加凹凸贴图3。
纱质窗帘:漫反射:245/245/245白色折射:灰白色贴图颜色255/255/255 高光泽度:0。
9 反光泽度:0。
95 菲涅尔反射折射:RGB 255/255/255 折射率:1。
5 影响阴影4。
磨砂玻璃:漫反射:蓝绿色:RGB:115/160/150 反射:颜色亮度:160 高光泽度:0。
8 反射光泽度:0.95 折射:颜色亮度:160 折射率:1。
5 影响阴影加凹凸贴图数量:30 位图模糊:0。
55. 裂纹玻璃:漫反射:颜色蓝绿色RGB:115/160/150 反射:颜色亮度:160 高光光泽度:0。