mc光影吧 关注:8,601贴子:130,390
  • 24回复贴,共1

PTGI低版本/高版本兼容以及方块遮光体积部分完善的方法

只看楼主收藏回复

最近看到挺多人在这问PTGI的问题,正好开个贴讲一下1.12里面PTGI的部分问题修复方法,当然最多只能做到1.14那种效果,想要完美是不可能的。这里只讲各种不同形状的方块的处理,对于光源不全想要自己加光源的问题,可以去https://www.mcbbs.net/thread-936454-1-1.html看看(因为最近MCBBS新规,太长时间没人回复的自动锁帖,所以不可回复)
本贴的修改方式是入门级的,不需要任何GLSL基础,只需要对Minecraft本身的方块ID与方块状态有一定的了解就可以了(我自己就完全不会GLSL),但是完成修改需要一定的耐心。修改的文件为shader/block.properties,负责方块ID、方块状态与光影内部处理使用的数字ID的映射关系


IP属地:湖南1楼2020-06-14 13:01回复
    首先需要知道的是,PTGI在计算光追的时候,里面各种属性都是写死的,靠block.properties来给各个数字ID分配不同的方块ID与方块状态,再在光影运行时给各个数字ID分配对应的属性。所以同一个数字ID下所有方块在计算光追时的属性都是相同的。
    下面是一个略微改过的PTGI E12的block.properties


    IP属地:湖南2楼2020-06-14 13:02
    回复
      从#if MC_VERSION >= 11400起,一直到#elif MC_VERSION >= 11300,这中间部分的代码就是1.14的部分。Sonic Ether只在这一部分做了相对完全的适配。在做修改的时候,各个数字ID对应的遮光体积可以以这里为参考。
      每个数字ID的遮光体积不仅形状是固定的,方向也是固定的。除了无遮光体积以及完整方块之外,其他遮光体积都在数字ID255以后。
      (其他MC版本的适配到255就没了)


      IP属地:湖南3楼2020-06-14 13:05
      收起回复
        如果要兼容1.13的话,可以考虑把1.13部分删了,然后把最上面的#if MC_VERSION >= 11400改成11300,正好对应扁平化之前的ID与扁平化之后的ID,以#else为分界线。(SE不弄1.13的原因可能是1.13的Optifine也和1.12那样几何着色器不完善?)
        然后#else开始就是1.12的部分了,参照着1.14的部分,给各个数字ID分配不同的方块ID与方块状态,格式:(minecraft:)方块id:方块状态1=数值1:方块状态2=数值2,依次类推,minecraft:的命名空间可有可无,这玩意主要是弄mod兼容的时候用的。在给各个方块分配数字ID的同时,上方原本的数字ID需要被注释掉,注释方式为在该行起始位置加一个 #
        以半砖为例:
        block.256=minecraft:stone_slab:half=bottomminecraft:wooden_slab:half=bottom minecraft:stone_slab2:half=bottom minecraft:purpur_slab:half=bottom
        这是下半砖;
        block.258=minecraft:stone_slab:half=topminecraft:wooden_slab:half=top minecraft:stone_slab2:half=topminecraft:purpur_slab:half=top
        这是上半砖。
        同时,把上面的block.205=minecraft:purpur_slab,block.182=minecraft:stone_slab2,block.126=minecraft:wooden_slab,block.44=minecraft:stone_slab前面加个#注释了,这样半砖就能正常工作了



        IP属地:湖南4楼2020-06-14 13:07
        回复
          同样,一些本来可以拥有合适遮光体积的方块,我们也可以给它添加遮光体积。以附魔台为例,附魔台不计书本的话,体积是和6层的雪层一样高的,这样我们就可以先在上面把block.116=minecraft:enchanting_table注释了,然后再把minecraft:enchanting_table加进block.324=minecraft:snow_layer:layers=6。
          对于门、L型楼梯、栅栏等,1.12中会出现遮光体积错误(门的遮光体积方向不对,L型楼梯遮光体积仍然为直型,栅栏无论怎么改都没有适合的遮光体积除非不写方块状态直接用,甚至四个方向方块状态都为false的栅栏写进block.properties会导致游戏日志输出Invalid block ID mapping),个人估计原因为4个方块状态的方块无法传递全部方块状态。
          在全版本中,实体无法拥有遮光体积,少数特殊方块(例如炼药锅)也无法拥有遮光体积。1.15的Optifine Pre23中,更多的方块无法拥有遮光体积(例如草方块等),而且未在block.properties里面写出的方块也无法拥有遮光体积,需要手动写出。
          可以通过光影内的“屏幕空间全局光照追踪(Screen-Space GI Tracing)来让实体以及一些非完整方块在光追时有阴影,但是阴影有位置错误(在贴墙的活塞臂上非常明显,阴影从结束处一直延伸到了屏幕上活塞臂的渲染位置)而且屏幕空间GI光追的距离非常短。


          IP属地:湖南5楼2020-06-14 13:12
          回复
            补图,MC版本1.12.2,Optifine F5


            IP属地:湖南6楼2020-06-14 13:27
            回复
              dd


              IP属地:江苏来自Android客户端7楼2020-06-14 14:57
              收起回复
                dd


                来自Android客户端8楼2020-06-14 16:06
                回复
                  s斜杠1bIVNTmbDfyLwtUUxH-ZREA
                  dd6m
                  我自己修改的一个1.12、1.14和1.15下效果都还行的block.properties文件
                  1.12下还有以下问题:门的遮光体积方向问题、L型楼梯遮光体积问题,栅栏只有中间那根柱子的遮光体积,不过别的好多了
                  另外MCBBS新加了个插件,被锁的贴子不可见,鬼屎哦(不过已经有好几个人去反馈这个插件不太行了)


                  IP属地:湖南9楼2020-06-14 17:09
                  回复
                    补充9L:注释1.12的lit_furnace,把188开始那一堆注释掉的改成如下内容:
                    (如果9L没看见了就喊我,是我自改block.properties链接)
                    block.188=lit_furnace:facing=north
                    block.189=lit_furnace:facing=east
                    block.190=lit_furnace:facing=south
                    block.191=lit_furnace:facing=west
                    这样1.12的熔炉也可以像1.14一样四面发光了


                    IP属地:湖南10楼2020-06-14 17:16
                    回复
                      大佬NNNNNNNNNNNNNNNNNNNNNNNNNNNNB


                      IP属地:广东11楼2020-06-14 20:59
                      回复
                        有兼容1.7.10的吗


                        IP属地:福建来自Android客户端12楼2020-06-15 21:44
                        收起回复
                          mcbbs显示锁帖,只能在这问了,1.15mod沉浸工程,我想让mod里的的完整方块拥有遮光体积,但是我分配了id之后没有反应。名字是对的,如果分给上面海泡菜同样的id贴图就会发光


                          IP属地:广东来自手机贴吧13楼2020-07-24 20:10
                          收起回复
                            直接复制文件里覆盖原来的然后压成zip。结果打开就闪退不懂哪里操作错了。


                            IP属地:广西14楼2020-10-24 21:18
                            回复