开个玩笑而已。这是我无意间乱搞出来的。
最近在研究为什么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得分两个版本发布。


最近在研究为什么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得分两个版本发布。
