minecraft吧 关注:2,569,674贴子:32,093,348

回复:成功在渲染龙实现区块显示

只看楼主收藏回复

在magic number后的是4个字节的hash值,貌似是根据着色器的varying的变量计算,算法好像用的murmur2,不过这个不重要。最后解析时,只看vertex和fragment两个着色器的hash一不一样,而不会再去从代码中读出所有varying变量去计算


IP属地:北京来自Android客户端17楼2022-04-13 20:07
回复
    再之后的是储存的uniform,首先是一个小端short存的数量,之后是每个uniform的数据:1个字节记录名字长度后面接字符串,下一个字节表示类型,再下一个字节是数量,之后是两个小端short表示的是寄存器index和count,不知道怎么还要存这个


    IP属地:北京来自Android客户端18楼2022-04-13 20:12
    回复
      2026-01-27 13:03:01
      广告
      不感兴趣
      开通SVIP免广告
      读完uniform后就是着色器代码了,一个小端的int存长度,最后还有个0字节表示结束


      IP属地:北京来自Android客户端19楼2022-04-13 20:14
      回复
        不过对于DirectX来说,着色器被编译成了DXBC或者DXIL的字节码,而且bgfx编译出格式上也不同的样子,可以自己去翻bgfx的源码


        IP属地:北京来自Android客户端21楼2022-04-13 20:19
        回复
          之后把每个variant的着色器都写上区块显示的代码,其它不知道干什么的字节不要动,注意修改每个着色器magic number前记录的长度和在uniform之后记录的代码的长度,重新打包回去就大功告成了


          IP属地:北京来自Android客户端23楼2022-04-13 20:24
          收起回复
            怎么中间还被删了几楼


            IP属地:北京来自Android客户端24楼2022-04-13 20:25
            回复
              然而邪恶的M$和mojang会让你这么简单就成功吗


              IP属地:北京来自Android客户端26楼2022-04-13 20:30
              收起回复
                如果你直接把这个文件放在资源包里,会发现Minecraft并不会尝试去加载它


                IP属地:北京来自Android客户端27楼2022-04-13 20:30
                回复
                  2026-01-27 12:57:01
                  广告
                  不感兴趣
                  开通SVIP免广告
                  最后我直接替换apk里的文件,重新签名后安装才成功


                  IP属地:北京来自Android客户端28楼2022-04-13 20:32
                  收起回复
                    网页链接 最后分享一下最终的成果,要想用的话,需要自己替换apk里的对应文件再重新安装


                    IP属地:北京来自Android客户端29楼2022-04-13 20:33
                    收起回复
                      不过这个估计就劝退绝大多数人了,着色器的末日可能确实到了


                      IP属地:北京来自Android客户端30楼2022-04-13 20:36
                      回复
                        不过也许是我放文件的姿势不对,反正没有发现如何用资源包来加载这个material.bin文件


                        IP属地:北京来自Android客户端31楼2022-04-13 20:39
                        收起回复
                          再评价一下这个渲染龙,mojang懒🐶果然没有从头开发,直接基于现有开源项目bgfx开发,而且很有可能是基于2018年时的哪个版本开发的,这也意味着你用现在的bgfx的shaderc编译肯定是不行的


                          IP属地:北京来自Android客户端32楼2022-04-13 20:46
                          回复
                            而且令人很想吐槽的是。原来每个着色器不同variant是只有一个源文件,通过宏定义来区分各种情况下如何渲染。而现在应该是做了预处理把宏展开,每个variant都存一个,其中大量的着色器代码是完全一样的


                            IP属地:北京来自Android客户端33楼2022-04-13 20:53
                            回复
                              2026-01-27 12:51:01
                              广告
                              不感兴趣
                              开通SVIP免广告
                              还好bgfx有想到这种情况,运行时创建着色器前会检查之前有没有加载过一样文件


                              IP属地:北京来自Android客户端34楼2022-04-13 20:54
                              回复