mc光影吧 关注:8,602贴子:130,398
  • 5回复贴,共1

PTGI岩浆内“水雾”颜色修正方法

取消只看楼主收藏回复

涉及文件composite4.fsh,建议搜索isEyeInWater来快速到达修改处
在PTGI E12里面,水雾由以下代码实现:
if(isEyeInWater>0)
UnderwaterFog(I,length(m.xyz),y,colorSkyUp,colorSunlight);
但是查看Optifine的shaders文档之后,摄像头在水中时isEyeInWater是1,在岩浆中为2,SE完全没有分开处理,造成了水雾和“岩浆雾”的颜色一致。
colorSkyUp为没有阳光照射(存疑)时的水雾颜色,而colorSunlight不必多说,阳光对岩浆颜色的影响。
我本人的修改如下:
if(isEyeInWater>1)
UnderwaterFog(I,2.*length(m.xyz),y,vec3(1.,.04,0.),vec3(1.,.04,0.));
if(isEyeInWater>0&&isEyeInWater<2)
UnderwaterFog(I,length(m.xyz),y,colorSkyUp,colorSunlight);
这样水雾和“岩浆雾”就分开处理了。“岩浆雾”中2*length(m.xyz)的效果是让“岩浆雾”看起来效果更浓,想要更浓的话可以把2换成更高的值。也可以试试更改“岩浆雾”的颜色来达到更好的效果。
(下面多标了一行代码,不要在意)

效果:


IP属地:湖南1楼2020-07-20 18:53回复
    @贴吧用户_51MRPCy
    @户口122


    IP属地:湖南2楼2020-07-20 18:53
    回复
      颜色换到vec3(1.,.01,0.)似乎更好看一点( ?)
      把G拉到0的话又太红了,就这样罢


      IP属地:湖南8楼2020-07-20 23:23
      回复
        目前还有一个疑点:各种贴图似乎依然按照水雾的方式染色,使用Optifine的放大功能时更为明显(但是雾色是正常的)


        IP属地:湖南10楼2020-07-21 23:35
        回复
          貌似找到原因了,Common.inc中的void UnderwaterFog中直接引用了GetWaterAbsorption()的问题,GetWaterAbsorption()是水对光线的吸收,那这样的话还要改更多东西才能达到最佳效果啊


          IP属地:湖南13楼2020-07-22 10:13
          回复
            不多说了,直接上图
            (试着改Common.inc里面各个文件的时候弄了些没用的东西,只管高亮部分就行了)



            效果对比:(和原版PTGI的对比)



            IP属地:湖南14楼2020-07-22 10:28
            收起回复