zoukankan      html  css  js  c++  java
  • 糍粑大叔的独游之旅-u3d中2D轮廓的生成(上)

    u3d中2D轮廓的生成(上)

    对于没有美术资源的我,能自动生成的东西,必须靠代码解决。
    网上有很多3D实时轮廓的生成文章,都很有借鉴意义,我也参考了其中很多内容,但这里就不一一列举了。
    而本文的主要区别在于:
    1、对u3d的单一GameObject节点生成轮廓,而非屏幕级
    2、由于(我的)游戏里单位,都是由很多的sprite组合而成,轮廓标记时暂时没有的动画需求,所有可以一次生成,但一个纹理使用,避免了实时绘制,到来太多的消耗

    第一文,争取讲清楚点,所以分多篇讲述。

    技术实现的总体步骤

    1. 准备一个Camera,用来做渲染到纹理(Render To Texture ),以下RTCamera
    2. 根据要生成轮廓的目标(以下简称target)的尺寸,创建一个RenderTexture(以下简称rt)
    3. 保存target的原始位置,并将target移动到一个“非常远”的位置,或通过设置layer的方法,以保证RTCamera里只能绘制target
    4. 设置SolidShader(只绘制白色、无光、无纹理的shader),调用Camera.RenderWithShader渲染到rt
    5. 对rt进行“扩大”处理,即多次进行blur
    6. 移回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值原因导致
    图中间绿点是图片alpha值原因导致

    下一篇 讲解关键的实现步骤

  • 相关阅读:
    CentOS 配置自启动Redis
    WPF Popup全屏 弹出方法。解决只显示75%的问题。
    UpdatePanel控件的使用和局部刷新
    关于width与padding
    WPF 快捷方式
    深入浅出WPF——附加事件(Attached Event)
    控件属性使用代码动代绑定
    ICommand.CanExecuteChanged事件订阅对象的变化
    输入德文出现乱码现象的处理方法
    MVVM 模版里的控件怎样触发命令
  • 原文地址:https://www.cnblogs.com/uncleciba/p/5721354.html
Copyright © 2011-2022 走看看