mc光影吧 关注:8,603贴子:130,418
  • 18回复贴,共1

炫彩摇摆死亡重金属暗黑中二附魔效果

只看楼主收藏回复

开个玩笑而已。这是我无意间乱搞出来的。
最近在研究为什么PTGI在1.16下不会渲染粒子效果,然后突然发现了绊线也不渲染了。回到1.14之后发现绊线是作为半透明方块渲染的,同时发现了手持的物品线会像染色玻璃板一样有折射的效果。然而1.16下手持的物品线是正常的,我的直觉告诉我绊线被归入了不透明方块。在block.properties里将绊线重新设置为半透明方块之后,1.16下绊线也正常渲染了。
1.16下绊线作为一个半透明方块,在渲染时却与不透明方块一起输入,最终导致不会被渲染,什么嘛,这不是和粒子效果不渲染的情况基本上一模一样吗?所以我马上就认为粒子效果在1.16不渲染也是因为本身属于半透明物体却在渲染时和不透明物体一起输入(加载光影时可以在游戏输出里面看到,在deferred和composite之间加载的只有gbuffers_water和gbuffers_hand_water,渲染粒子效果的gbuffers_textured和gbuffers_textured_lit都是在deferred之前加载),从而导致了粒子效果不渲染的bug。至于其他光影为什么没有这个问题,这是因为PTGI的不透明部分和半透明部分的gbuffer输出不一致(参见shaders/lib/GBufferData.inc里面对两种物体的gbuffer数据打包函数)。
这个bug与其说是不渲染,不如说是gbuffer数据丢失,因为从某些角度可以看到粒子效果以同一种颜色渲染,同时粒子效果也会覆盖后面的染色玻璃的效果,说明粒子效果有像素点,但是像素点是无色透明的。考虑到不透明物体与半透明物体的gbuffer数据打包方式不同,我认为可能是deferred渲染时破坏了不透明物体渲染时输入的半透明物体的gbuffer数据,抑或是加载这些半透明物体的gbuffer数据时用的是半透明物体的解包函数(但是它们的gbuffer数据是以不透明物体的形式打包的)。所以要解决这个bug,就需要统一不透明物体与半透明物体的gbuffer数据的打包解包方式。
然后经过我瞎整一番之后,粒子效果确实成功渲染了(天气效果除外),并且效果比1.14里面更好(因为可以渲染在天空前面),但是产生了几个bug。一个就是标题说的“炫酷”附魔效果,除此之外的bug还有方块选择指示器(方块周围的黑框)不渲染,以及1.14及以下莫名其妙的会在天空中渲染一些奇怪的东西。
修改gbuffer数据输入输出系统之后帧率几乎没有变化而且总体效果更好,所以这个版本我肯定会保留的,我现在就在想为什么会有这点小问题,没准以后PTGI GFME得分两个版本发布。


IP属地:湖南1楼2020-12-10 20:37回复
    1.14下的不兼容截图,给人的感觉就像是在天空区域渲染了一次屏幕左下角区域的图像。可能是某处半分辨率渲染的部分出错了,但是1.16下却完全正常。


    IP属地:湖南2楼2020-12-10 20:46
    收起回复


      IP属地:黑龙江来自Android客户端3楼2020-12-10 21:07
      回复


        IP属地:重庆4楼2020-12-12 21:50
        回复
          dd


          IP属地:广东来自Android客户端5楼2020-12-13 12:35
          回复


            IP属地:罗马尼亚6楼2020-12-13 21:53
            回复
              由于一些原因,又推倒重来了
              放心,我记得原来是怎么弄的,如果再次推倒重来的效果不好的话,我会重新用这贴一楼的设置的


              IP属地:湖南来自Android客户端7楼2020-12-13 23:11
              回复


                IP属地:广东8楼2020-12-14 17:36
                回复
                  目前的成果是舍弃了资源包PBR贴图的金属性通道,成功弄出了除此之外没有bug的1.16粒子渲染,舍弃了PBR贴图的金属性通道是因为缓冲区不够用了,剩余的缓冲区要么用了会出bug,要么会在composite里被覆盖


                  IP属地:湖南来自Android客户端9楼2020-12-14 20:03
                  收起回复
                    It fukin works!
                    在没有任何要用到的Gbuffer数据丢失(指在渲染deferred12之后丢弃了一些gbuffer数据)的前提下实现了对PTGI整个Gbuffer数据IO系统的修改,让PTGI在1.16下成功加载了粒子材质!
                    (当然,附魔效果似乎还是1L的炫彩效果,并且破坏方块的纹理也是那种效果,只不过是静态的,并且方块选择框依旧不加载(悲))
                    图为smoothness(石头、铁块),metalness(铁块)与emissive(黄色羊毛)的正常工作


                    IP属地:湖南10楼2020-12-14 21:32
                    收起回复
                      尝试按照原版的PTGI方式输出gbuffer数据,然后再在deferred转成统一的格式之后粒子又不渲染了,照这么说粒子效果是保留着gbuffer数据直到渲染半透明方块再输入?


                      IP属地:湖南来自Android客户端11楼2020-12-17 11:41
                      回复
                        正在调试天气的渲染,粒子、附魔效果、破坏方块的效果都已经正确渲染了


                        IP属地:湖南12楼2020-12-17 14:33
                        回复
                          技术力爆满!


                          IP属地:中国香港来自Android客户端13楼2020-12-18 01:30
                          回复


                            IP属地:广西来自Android客户端14楼2020-12-19 01:22
                            回复


                              IP属地:江苏来自iPhone客户端15楼2021-10-06 18:30
                              回复