
基本信息
我的世界Java版本
平台
分类
性能影响

其他链接
搬运团队
搬运资源声明
对于可进行 JAR 文件搬运的许可证,我们提供站内下载服务;其他资源会跳转到原帖下载。资源更新可能不及时,建议前往资源内提供的原帖链接下载最新版本。
详情信息
请阅读。
这是一个专为极低配置电脑设计的轻量级光影,支持树叶摇曳、水面波动、平滑光照以及水体效果。下界与末地的光照表现良好,宝石矿石(如红石、钻石、青金石、金矿)会发出辉光;其余部分未作处理,因为我并未基于方块ID而是依据颜色进行识别——因此,凡颜色接近上述宝石色调的物体,均会发光……您还会注意到场景四周存在一种白色墙体状结构,这也是个问题;我曾尝试修复,但效果不佳……水下可视范围清晰但较近,且带有阴影效果……您或许还会发现末影人和蜘蛛没有眼睛,其材质存在轻微贴图错乱;作者也尝试过修复,结果反而更糟;但请务必切记:不要直视末影人。此外草方块同样具有波动效果,问题在于其边缘存在漏光现象,且摇曳时会产生撕裂,导致角落处可直接透视其内部……本光影不包含华丽的云层或阳光效果,且熔岩下方亦可清晰可见……我并非模组开发者或程序员,但希望您能喜欢它……若您恰好是程序员,修复这些问题完全不成问题……我会尽量保留源代码……开发本光影的初衷源于我自身的硬件限制——我的电脑性能实在过于孱弱……全部代码均由 Gemini 编写……若您愿意施以援手,将不胜感激……感谢您的关注……
composite.fsh:
#version 120 uniform sampler2D colortex0; varying vec2 texcoord;
void main() { vec4 color = texture2D(colortex0, texcoord); float lum = dot(color.rgb, vec3(0.299, 0.587, 0.114));
-
// 1. 消除白色地平线墙体 if (color.r > 0.90 && color.g > 0.90 && color.b > 0.90 && texcoord.y > 0.35) { color.rgb = mix(color.rgb, vec3(0.55, 0.70, 0.90), 0.45); }// 2. 附魔魔法闪光效果(识别紫色/蓝色魔法特效并增强辉光) if (color.b > 0.55 && color.r > 0.40 && color.g < 0.35) { color.rgb *= 1.8; color.b += 0.2; }
// 3. 昼夜色彩分级 if (lum < 0.22) { color.rgb *= vec3(0.55, 0.68, 1.05); // 暗调氛围的夜晚 } else { color.r *= 1.10; color.g *= 1.04; color.b *= 0.90; // 温暖电影感的白昼 }
// 4. 柔和对比度曲线 color.rgb = pow(color.rgb, vec3(1.04));
// 5. 柔和电影感暗角 float dist = distance(texcoord, vec2(0.5, 0.5)); float vignette = smoothstep(0.88, 0.35, dist); color.rgb *= mix(0.78, 1.0, vignette);
gl_FragColor = clamp(color, 0.0, 1.0);
}
composite.vsh:
#version 120 varying vec2 texcoord;
void main() { gl_Position = ftransform(); texcoord = gl_MultiTexCoord0.st; }
gbuffers_terrain.fsh:
#version 120 uniform sampler2D texture; uniform sampler2D lightmap; varying vec2 texcoord; varying vec2 lmcoord; varying vec4 glcolor;
void main() { vec4 texColor = texture2D(texture, texcoord); vec4 color = texColor * glcolor; vec4 light = texture2D(lightmap, lmcoord);
-
vec3 finalColor = color.rgb * light.rgb;// 严格识别宝石矿石 // 已排除铁、石英、煤炭及碎石,防止末地石、闪长岩及树木误发光。
bool isDiamond = (texColor.b > 0.65 && texColor.g > 0.50 && texColor.r < 0.20); bool isEmerald = (texColor.g > 0.65 && texColor.r < 0.15 && texColor.b < 0.20); bool isRedstne = (texColor.r > 0.65 && texColor.g < 0.15 && texColor.b < 0.15); bool isLapis = (texColor.b > 0.60 && texColor.r < 0.20 && texColor.g < 0.35);
// “texColor.b < 0.15”这一条件严格防止末地石产生类似闪光弹的强光 bool isGold = (texColor.r > 0.70 && texColor.g > 0.60 && texColor.b < 0.15);
// 仅当颜色完全匹配高饱和度宝石时才应用辉光效果 if (isDiamond || isEmerald || isRedstne || isGold || isLapis) { // max()确保洞穴内辉光明亮,同时避免地表过曝成刺眼纯白 finalColor = max(finalColor, texColor.rgb * 1.15); }
gl_FragColor = vec4(finalColor, color.a);
}
gbuffers_terrain.vsh:
#version 120 varying vec2 texcoord; varying vec2 lmcoord; varying vec4 glcolor; uniform float frameTimeCounter;
void main() { vec4 position = gl_Vertex;
-
// 严格绿色检测,确保仅树叶与草方块产生波动 bool isTrueLeaf = (gl_Color.g > gl_Color.r * 1.30) && (gl_Color.g > gl_Color.b * 1.20) && (gl_Color.g > 0.30);if (isTrueLeaf) { float wave = sin(frameTimeCounter * 1.8 + position.x * 1.2 + position.z * 1.2) * 0.025; position.x += wave; position.z += wave * 0.5; }
gl_Position = gl_ModelViewProjectionMatrix * position; texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy; glcolor = gl_Color;
}
gbuffers_water.fsh:
#version 120 uniform sampler2D texture; uniform sampler2D lightmap; varying vec2 texcoord; varying vec2 lmcoord; varying vec4 glcolor;
void main() { vec4 texColor = texture2D(texture, texcoord); vec4 light = texture2D(lightmap, lmcoord); vec4 color = texColor * glcolor;
-
// 识别水体:原版水具备生物群系色调(glcolor),而玻璃与冰则无。 bool isWater = (glcolor.r < 0.99 || glcolor.g < 0.99 || glcolor.b < 0.99);if (isWater) { // 完全消除原版像素化纹理,采用纯净、平滑的电影感配色 color.rgb = vec3(0.05, 0.40, 0.70);
// 赋予其平滑且均匀的透明度 color.a = 0.85;}
// 应用阴影与光照(确保水体在洞穴中仍会变暗) color.rgb *= light.rgb;
gl_FragColor = color;
}
gbuffers_water.vsh:
#version 120 varying vec2 texcoord; varying vec2 lmcoord; varying vec4 glcolor; uniform float frameTimeCounter;
void main() { vec4 position = gl_Vertex;
-
// 微妙的物理感水波 float wave = sin(frameTimeCounter * 2.2 + position.x * 1.8 + position.z * 1.8) * 0.03; position.y += wave;gl_Position = gl_ModelViewProjectionMatrix * position; texcoord = (gl_TextureMatrix[0] * gl_MultiTexCoord0).xy; lmcoord = (gl_TextureMatrix[1] * gl_MultiTexCoord1).xy; glcolor = gl_Color;
}


