EC小游戏服务器《基岩版的实体描边和渐变体积光》

文摘   2024-09-19 16:23   上海  

大家在使用BlockBench的插件Minecraft Title时

是不是发现生成的标题都带有深色描边

无论从什么角度看都相当精致

但是其实这种模型

是能够直接制作进游戏中

并作为一个实体来渲染的~

其中使用的关键技术就是 反向法向

仅需把尺寸设为负数(注意,这时候必须使用逐面UV)

实际游戏中你就只能看到背对着你的那一面,可以实现这种效果:

图中中间绿色的发光物的外面一圈为负数尺寸,实现了类似于给模型描边的效果。(不过比较不幸的是,blockbench中的基岩版实体模式无法预览这个效果,而在PC模型或自由模型中可以正常预览)

要在游戏中使用,则不能再使用实体的默认material也就是entity_alphatest,因为entity_alphatest继承于entity_nocull,此material存在关键属性DisableCulling,因此会禁用这种特殊法向的渲染。


应该使用继承于实体基础material(名为entity)的material,例如:


entity_emissive_alpha_one_sided:自发光(通过alpha通道表示发光亮度,并启用Culling)

entity_alphablend:半透明(通过alpha通道表示透明度,并启用Culling)


更多可用的material,可以去原版资源包的entity.material中寻找哦~

基于这个思路,以及国际版的15周年地图带来的启发,我们就可以实现一些特殊效果,例如:体积光


其实这是一种投巧的实现方式,欺骗人眼认为是体积光,而本质上,就是始终只能看到实体的内部的另一面,而不是朝向玩家的那一面,叠加上半透明的实体贴图,以及自发光属性,即可实现体积光效果。


这种体积光实体内部不应有任何方块和其他实体,不然就会露馅


发光的传送门效果:


天光丁达尔效果:


聚光灯的光束效果实现示例(在聚光灯这个案例中,能够实现类似体积光的效果):

通过自定义material,能够实现发光(整体发光)、透明度贴图(alpha_blend)等效果并存的效果。因此就可以用来制作光照。


以下内容需要大家熟练掌握客户端实体、模型、渲染控制器的编写哦~


在材质包的materials/entity.material中定义(不过这里可能有一些坑,需要自己研究下):

{
    "materials": {
        "version""1.0.0",
        "emissivealphablend:entity_emissive": {
            "+states": [
                "Blending",
                "DisableCulling",
                "DisableDepthWrite"
            ],
            "+defines": [
                "USE_UV_ANIM"
            ],
            "-defines": [
                "FANCY"
            ],
            "blendSrc""SourceAlpha",
            "blendDst""OneMinusSrcAlpha"
        },
        "emissiveadditive:entity_emissive": {
            "+states": [
                "Blending",
                "DisableCulling",
                "DisableDepthWrite"
            ],
            "+defines": [
                "USE_UV_ANIM"
            ],
            "-defines": [
                "FANCY"
            ],
            "blendSrc""One",
            "blendDst""One"
        },
        "emissiveadditivealpha:emissiveadditive": {
            "blendSrc""SourceAlpha"
        }
    }
}

接着,在自定义实体中,使用这个material(emissiveadditivealpha):

{
    "format_version""1.10.0",
    "minecraft:client_entity": {
        "description": {
            "identifier""easecation:hub_light_ray",
            "materials": { "default""emissiveadditivealpha" },
            "textures": {
                "default""textures/entity/public/light_ray"
            },
            "geometry": {
                "default""geometry.hub_light_ray"
            },
            "render_controllers": [
                "controller.render.hub_light_ray"
            ]
        }
    }
}

 (可左右滑动查看代码

由于在material中定义了Blending,因此可以使用半透明贴图,能够在游戏中正确展示。


在渲染控制器中,定义本实体的灯光部分,忽略所有环境光照,并手动设定固定的整体发光强度,来实现强制的发光效果

{
  "format_version""1.8.0",
  "render_controllers": {
    "controller.render.hub_light_ray": {
      "geometry""Geometry.default",
      "materials": [ { "*""Material.default" } ],
      "textures": [ "Texture.default" ],
      "ignore_lighting"true,
      "on_fire_color": {},
      "overlay_color": {
        "r"0,
        "g"0,
        "b"0,
        "a"0.8
      }
    }
  }
}

巨坑:然而中国版相比于国际版,可能进行了更多优化,半透明实体贴图的后方的景物,如果距离较远,或是有其他此类实体,可能会直接不渲染并渲染为天空,效果并不是太好。

别忘记持续关注《我的世界》开发者官网动态

戳戳文末【阅读原文】扫描上方二维码

关注微信公众号以获取最新活动信息噢!


疑问反馈

欢迎广大开发者扫码加入QQ频道【我的世界开发者】,若对开发者工具有任何疑问反馈,可以联系我们!

使用手机QQ扫描二维码加入频道

按照验证要求输入开发者昵称+邮箱



将“我的世界Minecraft开发者”设为星标

↓第一时间掌握开发圈新鲜事↓


关注“我的世界Minecraft开发者”,世界在你手中


戳戳在看/点赞

了解最新更新资讯!

 最新文章