可芮鹤Crane 发表于 2026-8-29 10:41:33

如何在mcpack格式下使部分方块纹理自发光

本帖最后由 可芮鹤Crane 于 2026-8-29 10:44 编辑

如何在mcpack格式下使部分方块纹理自发光,
至少在灵动视效开启情况下,
前段时间我制作了一款修改了矿物纹理的mcpack材质 ,但发现其无法适配光影的矿物发光,我认为让这个材质包基于某个光影发光不是长久之计,所以我尝试使其自发光,我仿照原版哭泣的黑曜石(部分纹理有发光效果)修改了json,参考网络上的一些教程制作了tga文件,但在游戏中导致了纹理缺失,
所以我来这里求个详细教程和原理解释,因为我扒了那些矿物发光的光影包发现看不懂(比方说_mers后缀的文件是什么意思)[大哭]
实在不行mcaddon格式也行()

ket 发表于 2026-8-29 10:41:34

      灵动视效光影的纹理自发光我不会做,但是我会做普通光影的纹理自发光。
      如果你想做一个适配你自己材质包的纹理发光
      你可以从安装包里面提取RenderChunk.material.bin文件然后用lazurite(github可以找到)解包它。然后进入passes/AlphaTest(这个是树叶之类的半透明纹理)或者passes/Opaque(这个是不透明纹理),然后在里边的0.ESSL_310.Fragment.glsl的最后几行找的代码
bgfx_FragColor = vec4(mix(vec4(texture(s_LightMapTexture, v_lightmapUV).xyz * _538.xyz, _538.w).xyz, FogColor.xyz, vec3(_765.w)), _538.w);
在它的上一行添加代码
highp vec4 alphaCheck = textureLod(s_MatTexture, v_texcoord0, 0.0);
    if (alphaCheck.a > 0.987 && alphaCheck.a < 0.989) {
    alphaCheck.xyz = alphaCheck.xyz * vec3(1.54, 1.68, 1.82);
    highp vec3 forcedLight = vec3(0.8, 0.8, 0.8);
    bgfx_FragColor = vec4(mix(forcedLight * alphaCheck.xyz, FogColor.xyz, v_fog.a), alphaCheck.a);
    return;
    }
记得全部0至11的ESSL_310.Fragment.glsl都要这么改一遍。
      然后再用lazurite打包一遍,最后加入你的.mcpack里面的renderer/materials/路径里面。
      下一步是画你想要发光的纹理,把你想发光的那些像素改成透明度252在添加进你的材质包里面就大功告成了
         再用通用改包或者渲染龙加载器加载就行了
页: [1]
查看完整版本: 如何在mcpack格式下使部分方块纹理自发光