Unity3d之贴图融合

贴图融合作用

在很多游戏场景中,例如fps游戏,为了使游戏更加更加生动逼真,往往会给游戏添加一些细节,例如子弹射击墙壁留下弹痕,刀砍到树木留下刀痕等等类似的细节。所以就需要使用到贴图融合的方式,去实现这样一个效果。当然贴图融合只是其中的一种解决方案,你也可以让美术做成对应的特效,这里就不多做介绍。直接讲贴图融合。

贴图融合的实现原理

其实一个贴图就有很多个像素点构成的。如果我们需要以面墙壁上出现弹痕,那么只需要将墙壁的贴图子弹击中位置的像素区域,替换成我们实现准备好的弹痕贴图。是不是就完美的解决了问题。下面以unity3d为例,介绍贴图融合的过程以及代码实现。

unity3d贴图融合步骤

  1. 导入需要融合的两张贴图,因为融合贴图涉及到贴图的读写操作,所以需要设置贴图为 read/write enabled,同时Format属性设置成RGBA32bit

  2. 代码实现两张贴图的融合
    **这里有一个必要条件,就是贴图融合的对象必须要拥有碰撞体collider,不然是没办法获取碰撞点对应的uv的。**从上述的作用场景,我们也不难看出,一般都是都碰撞的时候,用贴图融合的方式去实现碰撞留下的痕迹,而碰撞发生的前提就是collider。具体实现步骤如下:

    a.获取目标贴图,获取融合点UV坐标
    b.加载需要融合在目标贴图上的贴图。
    c. 双层循环遍历弹痕贴图的长宽,计算弹痕贴图在主帖图的像素位置
    uv.x主帖图宽度-弹痕贴图宽度/2+i;
    uv.y
    主帖图宽度-弹痕贴图长度/2+j;

    d.通过循环索引获取弹痕像素颜色值
    e.在目标贴图上相应位置设置新的颜色值(加上alpha值判断)
    f.循环外保存融合后的贴图 texture2d.apply();
    下面贴出代码供大家参考

    pivate Texture2D mark_Texture;private Texture2D main_Texture;
/// <summary>/// 贴图融合/// </summary>/// <param name="hit">碰撞点</param>public void CreateMark(RaycastHit hit){//TODO:可以在这里添加碰撞音效 eg:子弹击中墙壁的音效Vector2 uv = hit.textureCoord;                                //获取碰撞点坐标(UV既碰撞中心点的坐标x,0~1,y,0~1)for (int i = 0; i < mark_Texture.width; i++)       //遍历弹痕贴图的像素横坐标{for (int j = 0; j < mark_Texture.height; j++)  //遍历弹痕贴图的像素纵坐标{//求取弹痕的像素坐标对应在主帖图的像素位置(参考上图理解)float x = uv.x * main_Texture.width - mark_Texture.width / 2 + i;float y = uv.y * main_Texture.height - mark_Texture.height / 2 + j;Color color = mark_Texture.GetPixel(i,j);if (color.a > 0.2f)     main_Texture.SetPixel((int)x, (int)y, color);}}main_Texture.Apply();}

一些注意点

这里只是贴图融合的一个方法。这里需要思考的问题是,产生了**”碰撞痕迹“,游戏中一般都不会一直存在碰撞痕迹**,所以需要消除痕迹。就应该有消除融合,原理就是拿原来的贴图再融合一下,只是过程反着来一下,就不多解释。需要注意的是产生和消除,就会频繁的创建和销毁碰撞痕迹这样一个对象。所以我们最好还是用对象池去管理一下,减少不必要的消耗。
另外就是,可以把融合贴图这个事情本身封装成一个工厂,提供不同的参数,产生不同的碰撞痕迹,就提高了脚本的通用性。

希望今天的分享对大家有所帮助,有不明白的,可以评论区留言我会尽快回复,我是程序员小虎。

Unity3d之贴图融合相关推荐

  1. 图融合GCN(Graph Convolutional Networks)

    图融合GCN(Graph Convolutional Networks) 数据其实是图(graph),图在生活中无处不在,如社交网络,知识图谱,蛋白质结构等.本文介绍GNN(Graph Neural ...

  2. unity3D 法线贴图的制作与使用

    unity3D 法线贴图的制作与使用 工具:unity3D 5.4.0 示例: 首先,获取一张图片用以制作法线贴图 随后,拖入unity3D的project目录 选中图片,在右侧的inspector目 ...

  3. 图形引擎实战:移动端URP地形贴图融合与HBAO实现

    近些年,随着画面表现要求越来越高,游戏渲染加入的细节也越来越多.本文将介绍两个项目常用渲染效果在Unity中的实现思路:地形贴图融合以及HBAO. 一.地形贴图融合 这个效果本质上是处理模型与地形之间 ...

  4. Unity3D教程:动画融合、动画层、动画混合、附加动画、程序动画、动画重放和取样

    原帖地址:http://www.unitymanual.com/5323.html 动画脚本 Animation Scripting Unity's 动画系统允许你创建一个漂亮的动画蒙皮角色,动画系统 ...

  5. Unity3D 游戏贴图 法线贴图 漫反射贴图 高光贴图

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 我们都知 ...

  6. Unity3d绘制矢量图(类似于CAD夹点编辑)

    本项目基于Unity3d,可实现矢量图绘制,包括整个实体拖动,夹点拖动编辑等.完整视频点击这里 现有功能主要为了完成某个项目,都是自主开发,效果还是不如传统CAD,功能也比较有限,毕竟unity3d是 ...

  7. unity3d 纹理贴图移动特效产生岩浆、瀑布效果

    纹理贴图移动特效产生岩浆.瀑布效果 原理是改变动态改变纹理坐标uv的值,使之移动 首先准备好一张贴图 建立一个shader 变量一览: _MainTex 主纹理贴图 _MainTint 主要颜色   ...

  8. 虚幻4皮肤材质_UE4实时虚拟角色材质篇之Skin Material(二)面部动画贴图融合

    在上一篇文章中我们完成了皮肤材质的制作,虽然看起来大体完成了,但是在真正3A级游戏或者是影视的制作过程中.不论是过场动画还是影视镜头都会有人物对话的部分.所以面部都会产生相应的表情. 在制作过程中,面 ...

  9. unity3d 凹凸贴图、法线贴图、置换贴图

    原帖地址:http://www.game798.com/html/2007-03/2997.htm 作者:FXCarl  首先我想说,对于凹凸贴图在计算机图形领域中的研究,最早开始于70年代末,至今已 ...

  10. Unity3D切换贴图

    把脚本拖到物体上,前提是要有Mesh Renderer,然后给Texture2D 数组赋值,选择Texture2D数组的size填入数字,直接拖动图片就行.如图所示: //换贴图,直接把这段代码加在要 ...

最新文章

  1. HTTP访问服务的相关解释
  2. Android 截图并保存到相册
  3. [提示]使用普通用户,通过sealos安装ks,默认还是要通过root用户才能正常使用kubectl等命令
  4. mysql+秘密_mysql不被人知的秘密
  5. Nginx配置优化参考
  6. 191202-GETJOB-捡历的写法
  7. Android相关笔记-4
  8. 为什么5G标准制定,非得“你死我活”?
  9. 赣州师范高等专科学校计算机网络技术,赣州师范高等专科学校2021年招生简章...
  10. SpringMVC源码阅读:定位Controller
  11. 反射型XSS+文件上传+CSRF—DVWA
  12. Day_02 【Java基础】JDK_1.8的下载安装和环境变量的配置、JDK帮助文档的下载【详细步骤】
  13. JavaScript编写的《人生不纠结模拟器》
  14. 马克思主义基本原理概论-考点串讲
  15. redis desktop manager安装以及使用教程
  16. JSP实用教程-第三章Tag文件与Tag标记
  17. 添加了validaterequest=false 为什么还是报错
  18. MySQL可怕的笛卡尔积
  19. python时间日历(超详细)
  20. 离散数学(图)--思维导图

热门文章

  1. 修改电脑IP地址和MAC地址
  2. 十九. 用户注册 --- 短信验证码实现 2021-04-16
  3. 免费 在线转换 音频,图像,PDF,视频,文档等格式转换
  4. 遥控精灵app v4.2.2
  5. 【Java异常】Caused by: com.sun.mail.iap.BadCommandException: A3 BAD invalid command or parameters的解决方案
  6. DOSBox 0.74 汇编 out of memery test.asm(2):out of memory
  7. 渔乡朱朱的三农短视频账号运作和变现方法
  8. 网页加载慢,你知道几种原因?
  9. 阿里巴巴招募AI鉴黄体验官,日薪1000,小姐姐优先,快看看你是否符合
  10. u8系统更改了服务器,用友u8服务器地址修改