大家在使用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开发者”,世界在你手中
戳戳在看/点赞
了解最新更新资讯!