糍粑大叔的独游之旅-u3d中2D轮廓的生成(上)
2016-07-26 17:01
120 查看
u3d中2D轮廓的生成(上)
对于没有美术资源的我,能自动生成的东西,必须靠代码解决。网上有很多3D实时轮廓的生成文章,都很有借鉴意义,我也参考了其中很多内容,但这里就不一一列举了。
而本文的主要区别在于:
1、对u3d的单一GameObject节点生成轮廓,而非屏幕级
2、由于(我的)游戏里单位,都是由很多的sprite组合而成,轮廓标记时暂时没有的动画需求,所有可以一次生成,但一个纹理使用,避免了实时绘制,到来太多的消耗
第一文,争取讲清楚点,所以分多篇讲述。
技术实现的总体步骤
准备一个Camera,用来做渲染到纹理(Render To Texture ),以下RTCamera根据要生成轮廓的目标(以下简称target)的尺寸,创建一个RenderTexture(以下简称rt)
保存target的原始位置,并将target移动到一个“非常远”的位置,或通过设置layer的方法,以保证RTCamera里只能绘制target
设置SolidShader(只绘制白色、无光、无纹理的shader),调用Camera.RenderWithShader渲染到rt
对rt进行“扩大”处理,即多次
97cb
进行blur
移回target到原始位置,并为target添加一个子节点,使用rt作为纹理,并设置绘制shader的颜色
类结构
为了更方便的使用,封装成了几个类:EffectRTGenerator,绑在Camera上组建,关键方法:
public RenderTexture CreateOutterline(GameObject target, float x, float y)
生成一个rt
OutterlineRenderer,轮廓渲染器,作为target的子节点,提供一个静态方法自动生成一个OutterlineRenderer
public static OutterlineRenderer CreateOutlineRenderer(Unit target)
其中Unit是游戏的单位.
在场景中,建立一个camera绑上EffectRTGenerator,在代码中,直接调用OutterlineRenderer 即可创建轮廓,不需要在游戏逻辑中去处理rt、RTCamera,十分方便
效果示例
图中间绿点是图片alpha值原因导致
下一篇 讲解关键的实现步骤
相关文章推荐
- Dijkstra算法(单源最短路径)C#版
- WebService的开发、部署、调用
- [Java基础笔记]JDBC初步
- AVL树增删查找
- ART世界探险(8) - 面向对象编程
- PM之数据分析与逻辑能力
- java中用集合编写简单的学生信息管理系统
- Linux内核编译与安装
- N的阶乘的准确值
- 【杭电】[2199]Can you solve this equation?
- Kconfig 、menuconfig、.config、Makefile之间的关系
- iOS开发(OC)——网络状态的检测
- android apk嵌套 从一个apk启动另外一个apk
- oracle 生成 20 位随机数字的函数
- 糍粑大叔的独游之旅-u3d中2D轮廓的生成(上)
- flask log
- 解决问题: ----- The type java.io.ObjectInputStream cannot be resolved. It is indirectly referenced from
- go语言的sql包原理与用法分析
- bootstrap进度条
- 【微信】微信开发(1)初入微信开发