涉及文件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换成更高的值。也可以试试更改“岩浆雾”的颜色来达到更好的效果。
(下面多标了一行代码,不要在意)

效果:

在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换成更高的值。也可以试试更改“岩浆雾”的颜色来达到更好的效果。
(下面多标了一行代码,不要在意)

效果:
