梦幻群侠传吧 关注:5,134贴子:43,832

写个梦单引擎

只看楼主收藏回复



IP属地:广东1楼2025-07-24 11:08回复
    立个flag


    IP属地:广东2楼2025-07-24 11:09
    收起回复
      2025-08-19 15:50:38
      广告
      不感兴趣
      开通SVIP免广告
      关于直读素材
      素材大部分是SP格式
      SP格式:调色板palette[]+图像索引数据indexs[w*h]+图像透明数据alpha[w*h]
      RP格式:类似容器 内含一些标准的图像,比如jpg png等。
      .
      选择引擎最初纠结的地方在于:使用GPU硬件加速渲染 or 软渲染
      GPU渲染难点在于:
      1.SP大部分带有染色配置文件(角色和宝宝模型必带),如果要考虑染色,那么纹理需要大量缓存(着色器不划算,先不说每个像素的采样,还得考虑采样后的索引值取整和调色板取下标问题:并没有一维整型纹理或者整整型vec3的uniform方案)
      2.地图遮罩。遮罩决定地图上的模型是否被遮挡住(比如路过树荫下) ,考虑到模型的问题实时处理(遮挡的像素改为半透明)不现实(费性能),那么遮罩数据就应该生成图像纹理(对应的底图区域像素+自身半透明)用于显示在被遮挡的模型之上。
      以上难点都会导致GPU、显存、和内存的剧增。实现也繁琐。
      经过深思熟虑,最重选择 软渲染。


      IP属地:广东3楼2025-07-24 11:43
      回复
        接触过的一些游戏引擎:
        RMXP:梦幻群侠传1234用就是这款引擎。
        没法直读,性能堪忧,自由度低。
        除非使用非官方运行时,但是引擎本身的数据库还是没法动。
        .
        GGE:Galaxy2D引擎+Luajit封装。(梦战开发用的就是这款引擎)
        LUA交互还得自己实现各种接口和拓展,而且GGE本身内存泄露和FFI BUG也是个问题。
        .
        Galaxy2D:基于Dx9.0c渲染,C/C++接口,可惜是32位。
        .
        cocos2d-x:基于 OpenGL(移动平台是WebGL或者GLES或者Metal),在Windows没有Dx(Axmol在Windows用的谷歌Angle)
        .
        Unity3D:不会安装,老是团结,不予评价。
        .
        Godot:写过GDScript的RP和SP解析(不含染色配置),exe有点臃肿了吧
        .
        WindSoul:基于DDraw的硬件加速渲染,维护梦幻群侠传5系列(原版、日期版、白泽版、唯美版)的时候我把渲染底层换成了这个,导致在个别电脑运行白屏(不要问怎么解决,问就是我是菜鸡没法解决)
        .
        SDL:挺好用的,还跨平台,不过它的软光栅化实在不适合SP染色部分的渲染。
        .


        IP属地:广东4楼2025-07-24 12:06
        回复
          牛逼,这年头还有楼主这种理想主义,大佬啊


          IP属地:中国香港来自iPhone客户端5楼2025-07-24 12:14
          收起回复
            狼叔加油


            IP属地:山东6楼2025-07-24 12:21
            回复
              引擎完成进度:
              Win32系统平台部分:
              HDC操作相关
              宽字节和多字节编码转换相关
              消息队列获取 鼠标键盘事件相关
              窗口操作相关(窗口大小、窗口标题、包括聊天子窗口)
              消息弹框
              文件读写相关


              IP属地:广东7楼2025-07-24 12:24
              回复
                渲染系统:我把它叫做画布,花花草草画上去之后,再一口气提交给系统(HDC)。


                IP属地:广东8楼2025-07-24 12:35
                收起回复
                  2025-08-19 15:44:38
                  广告
                  不感兴趣
                  开通SVIP免广告
                  A星寻路系统:试过JPS优化,有BUG,菜,修不动,目前还是老老实实用二叉堆A星。


                  IP属地:广东9楼2025-07-24 12:45
                  回复
                    染色配置解析:HSL换算暂时没加上,以后再说吧。


                    IP属地:广东10楼2025-07-24 12:49
                    回复
                      字体字模解析系统:锯齿什么的,老子要的就是点阵效果!


                      IP属地:广东11楼2025-07-24 12:52
                      回复
                        键盘输入系统:与系统的鼠键事件接轨。


                        IP属地:广东12楼2025-07-24 13:03
                        回复
                          文件流/字节流操作:为读写配置文件/数据流 打基础。


                          IP属地:广东13楼2025-07-24 13:06
                          回复
                            地图文件解析:我是一口气把整个文件读到内存中,再用数据流操作去解析的。

                            .
                            底图图块解析JPG用的trubo-jpeg库,比libjpeg快。
                            .


                            IP属地:广东14楼2025-07-24 13:14
                            回复
                              2025-08-19 15:38:38
                              广告
                              不感兴趣
                              开通SVIP免广告
                              地图渲染系统:用了固定容量的容器,最新的图块会替换掉最旧的,这样既可以保证有一定缓存效果(比如往回走,不会重复创建新图块,大地图进小药店买药再出来也不会有大量的释放和重新创建),也可以保证内存不会占用太多(固定容量的队列,比如可以铺满三四个屏幕大小的图块数量)


                              IP属地:广东15楼2025-07-24 13:21
                              回复