mc光影吧 关注:8,588贴子:130,474
  • 6回复贴,共1

SEUS Renewed水面通用修复方案

取消只看楼主收藏回复

大家都已经知道SEUS Renewed系列水面在旧版的mc是无法使用的
我后来看了一下代码,其实原因非常简单
首先我们先来看一下有关材质判断的官方docs是怎么解释的

x通道是物体的id,而y通道是渲染类型
当y通道为1的时候即半透明物体。
这时候再来看一下SEUS Renewed是怎么写的:

这样写的一大好处就是可以避免一些特殊的情况(比如mod什么的),但是缺点也很明显,就是旧版(以1.7.x系列为代表)似乎这个功能是不生效的。所以我这里就这样做:
因为光影普遍都是用物体ID来判断,而通用的水的判断是这个:

所以综上所述,我们对SEUS Renewed的代码稍作修改:

问题便得以解决。


1楼2019-03-04 11:54回复
    之后我会相继写更多的教程帮助大家修改光影,当然,我写的教程会要求有一定的编程基础,要求不高,但是至少要会一点C系语言
    补一下一楼遗漏的地方:
    我们修改的文件是gbuffers_water.vsh


    2楼2019-03-04 11:56
    收起回复
      2026-04-06 10:03:07
      广告
      不感兴趣
      开通SVIP免广告
      顺便贴一下SMUS修改的源代码,懒得自己码的可以复制粘贴:
      if(mc_Entity.y == 1 || mc_Entity.x == 8.0 || mc_Entity.x == 9.0)
      {
      iswater = 1.0;
      }


      3楼2019-03-04 11:58
      回复
        下一次写一下关于E2体积云的教程,如果有时间我会浅析一下体积云的光照是如何修复的,以及旧版mc当中体积云撕裂的解决方案


        4楼2019-03-04 11:59
        回复
          看来mc光影吧算是真凉透了


          6楼2019-03-06 11:45
          收起回复
            臭不要脸来个申精@abc1411205127


            11楼2019-03-09 22:04
            收起回复
              由于驱动的差异,前面的教程有一个缺点,容易引起这个潜在的问题,在这里我做一个改进,首先我们回头看原教程的修改:

              潜在的问题出在哪里呢?出在mc_Entity.x == 8.0和mc_Entity.x == 9.0判断上,8.0和9.0是一个浮点数,而mc_Entity.x是个整型,所以当进行判断的时候,可能会产生浮点误差,8.0可能是8.000000000000001,于是便不等于8.解决这个问题的方法很简单,就是把浮点数改为整型,如下图:

              至于@ETtttutu,方法上是正确的,但为什么教程没有采用呢?我们知道glsl具有c的很多性质,自然也具有c语言的短路性质.如果只是简单的去掉如图所示的注释:

              从时间复杂度上来讲,这里便多了一重判断.首先在mc_Entity.y == 1上面判断了一次,然后再判断mc_Entity.x == 8.0 || mc_Entity.x == 9.0,而每一次判断对显卡的并行处理都是极大的干扰,所以这就是为什么教程合并起来写的原因.


              13楼2019-05-03 13:08
              回复