美文网首页
二,初始化及渲染流程简介

二,初始化及渲染流程简介

作者: 马脸剑之初 | 来源:发表于2020-06-16 16:11 被阅读0次

    本节主要内容


    • 渲染步骤简介

    渲染步骤

    • 通过初始化包括manager管理器对象的创建,具体的渲染对象的创建,以及效果配置文件的导入及解析
    • 效果渲染及管理,简单调用控制函数,能方便的对效果进行解析和控制(包括其位置,大小,颜色的改变)

    初始化

    // Create a renderer of effects
        // エフェクトのレンダラーの作成
        auto renderer = ::EffekseerRendererGL::Renderer::Create(5000, EffekseerRendererGL::OpenGLDeviceType::OpenGL2);
    
        // Create a manager of effects
        // エフェクトのマネージャーの作成
        auto manager = ::Effekseer::Manager::Create(5000);
    
        // Sprcify rendering modules
        // 描画モジュールの設定
        manager->SetSpriteRenderer(renderer->CreateSpriteRenderer());
        manager->SetRibbonRenderer(renderer->CreateRibbonRenderer());
        manager->SetRingRenderer(renderer->CreateRingRenderer());
        manager->SetTrackRenderer(renderer->CreateTrackRenderer());
        manager->SetModelRenderer(renderer->CreateModelRenderer());
    
        // Specify a texture, model and material loader
        // It can be extended by yourself. It is loaded from a file on now.
        // テクスチャ、モデル、マテリアルローダーの設定する。
        // ユーザーが独自で拡張できる。現在はファイルから読み込んでいる。
        manager->SetTextureLoader(renderer->CreateTextureLoader());
        manager->SetModelLoader(renderer->CreateModelLoader());
        manager->SetMaterialLoader(renderer->CreateMaterialLoader());
    
        // Specify a position of view
        // 視点位置を確定
        auto g_position = ::Effekseer::Vector3D(10.0f, 5.0f, 20.0f);
    
        // Specify a projection matrix
        // 投影行列を設定
        renderer->SetProjectionMatrix(::Effekseer::Matrix44().PerspectiveFovRH(
            90.0f / 180.0f * 3.14f, (float)windowWidth / (float)windowHeight, 1.0f, 500.0f));
    
        // Specify a camera matrix
        // カメラ行列を設定
        renderer->SetCameraMatrix(
            ::Effekseer::Matrix44().LookAtRH(g_position, ::Effekseer::Vector3D(0.0f, 0.0f, 0.0f), ::Effekseer::Vector3D(0.0f, 1.0f, 0.0f)));
    
        // Load an effect
        // エフェクトの読込
        auto effect = Effekseer::Effect::Create(manager, EFK_EXAMPLE_ASSETS_DIR_U16"test.efk");
    
    • 创建manager对象:作为管理器管理粒子效果的配置,渲染,更新,启动与结束。
    • 创建render对象:作为效果的渲染器,直接负责粒子效果的最终渲染逻辑。可以分为sprite,ribbon,ring,track,model渲染器。此外创建3个loader类加载资源.
    • 创建effect对象:解析粒子效果的配置文件。

    Manager初始化

    • 初始化一个size=64的drawsets
    • 假设最大粒子数8000,则初始化实例块对象池(每个实例块包含16个实例Instance);size=500
    • 初始化一个size为20个实例块队列instanceChunks_(每个队列包含maxSize/16个实例块);
    • 初始化一个size=8000的实例Groups对象池
    • 初始化一个size=8000的实例Containers对象池

    创建池的目的主要是为了节省对象生成和销毁的时间。
    以IntanceContainer为例,new一个对象包含三步:获得一块内存空间、调用构造函数、返回正确的指针。

    IntanceContainer*p=(IntanceContainer*)new int8_t[sizeof(IntanceContainer)] ;
    IntanceContainer container=new(p)IntanceContainer();
    

    注意:通过该方法生成对象内存需要手动释放。

    一个effect对应一个Drawset;一个node节点对应一个InstanceContainer;InstanceContainer包含若干IntanceGroup;IntanceGroup包含若干Intance

    Render初始化(没什么好讲的,这块一般在移植的时候需要分离出来)

    • 创建GL环境
    • 编译两个shader(顶点渲染,背景扭曲)并指定参数

    Effect初始化

    • 解析二进制文件
    • 生成一个树形节点结构(每个node对应一个单独的粒子效果的全部属性)


      image.png

      比如上图这个效果,就是由一个root节点和5个sprite节点构成,最后生成的树形结构就类似于这幅图。
      生成node的时候会同时进行一些纹理的解析和load。这个东西将渲染流程和业务逻辑进行了绑定,一般也是需要分离的。
      假设如果有多个效果需要同时发射,则要初始化多个Effect。

    效果渲染及管理

    Effekseer的例子中是按照帧来管理具体的粒子效果的。ManagerImplent中提供了一套管理效果的函数,通过这些函数能方便的进行不同效果的组合变化:

    //控制效果的进度
    Handle Play(Effect* effect, float x, float y, float z) override;
    void StopEffect(Handle handle) override;
    void SetPaused(Handle handle, bool paused) override;
    
    //改变效果的位置大小颜色
    void SetRotation(Handle handle, float x, float y, float z) override;
    void SetScale(Handle handle, float x, float y, float z) override;
    void SetLocation(Handle handle, const Vector3D& location) override;
    void AddLocation(Handle handle, const Vector3D& location) override;
    void SetAllColor(Handle handle, Color color) override;
    

    说到粒子系统,虽然很多开源系统结构复杂,有自己独特的架构甚至是极其有特色的发射器,以此来组合纷繁复杂的效果。但究其本质无非是包括两个方面(顶点更新,顶点渲染)。接下来将粗略介绍这两块在effekseer中的具体实现。

    相关文章

      网友评论

          本文标题:二,初始化及渲染流程简介

          本文链接:https://www.haomeiwen.com/subject/hwapzhtx.html