移除实体阴影
intermediate
有几种方法可以移除实体的阴影,但几乎所有方法都会带来不良影响。目前还没有完美无缺的方法能在不产生副作用的情况下彻底移除特定实体的阴影。
本文将展示几种移除阴影的方法及其可能带来的影响。
缩小碰撞箱
一种方法是使碰撞组件的尺寸变得非常小。这会使与实体的互动/攻击变得困难,但阴影会消失!
json
"minecraft:collision_box": {
"width": 0.1,
"height": 0.1
}你也可以添加自定义碰撞检测组件。custom_hit_test组件能让你攻击实体(虽然无法与之互动),且不会产生阴影。
json
"minecraft:custom_hit_test": {
"hitboxes": [
{
"pivot": [0, 0.5, 0],//这是碰撞箱的位置,可调整X/Y/Z值
"width": 0.8,
"height": 0.7
}//可复制粘贴此碰撞箱到"hitboxes"数组中添加更多检测区域
]
}传送至地下
对于需要互动的隐形虚拟实体,可使用指令/teleport @x ~ ~-0.01 ~。这会使实体略微陷入地面,从而消除阴影。
使用运行时标识符
某些实体本身没有阴影(或阴影极小)。通过使用这些实体的运行时标识符可以消除阴影,但缺点是会继承该实体的硬编码行为(有时会引发严重问题)。详见运行时标识符文档。
使用材质方案
DANGER
此方法已失效。随着RenderDragon渲染引擎的更新,此类材质方案不再有效。请勿在正式项目中使用此代码,尤其避免在市场地图中使用。
WARNING
- 该文件夹不包含在官方资源包示例中,必须从APK文件导出或手动添加
- 仅验证对实体有效,未测试方块效果。若发现适用于方块请告知我们补充说明
通过材质移除阴影
常规阴影材质(所有实体显示阴影):
RP/materials/shadows.material
json
"shadow_overlay":{
"+states":[
"DisableDepthTest",
"DisableCulling",
"Blending",
"EnableStencilTest"
],
"vertexShader":"shaders/color.vertex",
"vrGeometryShader":"shaders/color.geometry",
"fragmentShader":"shaders/shadow_stencil_overlay.fragment",
"blendSrc":"DestColor",
"blendDst":"Zero",
"frontFace":{
"stencilFunc":"Equal",
"stencilPass":"Replace"
}
}禁用阴影材质(所有实体无阴影):
json
"shadow_overlay":{
"+states":[
"DisableDepthTest",
"DisableCulling",
"Blending",
"EnableStencilTest"
],
"vertexShader":"",
"vrGeometryShader":"",
"fragmentShader":"",
"blendSrc":"DestColor",
"blendDst":"Zero",
"frontFace":{
"stencilFunc":"Equal",
"stencilPass":"Replace"
}
}几何体+材质替代方案
通过在实体上应用覆盖阴影的模型,并使用"banner_pole"材质,可以隐藏实体阴影。





