ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

Godot 3D Decal(贴花)节点实战指南:滤镜模式、纹理映射与运行时放置——基于 godot-demo-projects 的 decals 官方演示

2026/10/2 1:39:27 拓冰建站 浏览量
Godot 3D Decal(贴花)节点实战指南:滤镜模式、纹理映射与运行时放置——基于 godot-demo-projects 的 decals 官方演示 示例工程【免费下载链接】godot-demo-projectsDemonstration and Template Projects项目地址https://gitcode.com/GitHub_Trending/go/godot-demo-projects点击查看免费下载本指南围绕 godot-demo-projects 仓库中3d/decals官方演示项目展开完整剖析 Godot 4.x 中Decal节点的渲染原理与实战用法从像素风到科幻场景的贴花滤镜模式选择、albedo/normal/ORM/emission 四类纹理通道的映射方式以及通过射线检测在运行时动态放置贴花弹孔、油漆、脚印的完整流程。读完本文你将能够独立搭建一个可交互、可复用、具备深度性能考量的 Decal 演示场景。一、演示项目概览运行环境与交互结构3d/decals是 Godot 官方演示库中的渲染能力示例其 README.md 明确指出该项目通过大量实际运行的Decal节点实例用于展示 Godot 的渲染能力。项目技术栈信息同样来自 README语言GDScript渲染器Forward即 Godot 4 的默认高配渲染器支持贴花所需的延迟渲染特性主场景3d/decals/test.tscn由 project.godot 的run/main_scene指定引擎特性版本config/featuresPackedStringArray(4.7)从 test.tscn 的节点树可以看出整个演示由一组独立的测试分组Testers节点下的多个子场景构成包括测试分组展示主题PlasmaEmission/PlasmaStain发光贴花emission 通道与带法线渐隐的污渍贴花BulletPlasmaDecals弹孔类小尺寸贴花多角度叠加normal_fade 0.5PaintDecals油漆泼溅与箭头贴花含 albedo normal 双通道与modulate染色WaterPuddle水洼贴花使用 ORM 贴图控制粗糙度并配合ReflectionProbe反射CircleBlobShadow用渐晕贴花模拟软阴影ScifiDecals科幻面板贴花覆盖曲面网格演示upper_fade/lower_fade边界裁剪BuffEffect增益光环噪声贴花发光 cull_mask遮罩 距离淡出NormalMapDecals法线贴花单独/组合使用albedo_mixDistanceFade基于距离的贴花淡出distance_fade_*三档对比DecalOnAnimatedMesh贴花作用在动画/形变网格上DecalOnTransparentMesh贴花与半透明材质的交互界面交互由 tester.gd 驱动底部中央的TestName标签显示当前测试名称左下/右下Previous/Next按钮test.tscn 中的Button节点在测试组之间切换鼠标左/中/右键拖拽可环绕观察滚轮缩放zoom限制在 1.5~4.0。这些交互代码同时展示了屏幕相对鼠标位移screen_relative的正确用法——它使鼠标灵敏度与视口分辨率解耦。二、Decal 滤镜模式像素风、清晰度与性能的取舍这是 README.md 的核心主题也是本项目最值得先掌握的知识点。演示在左上角提供了 Decal Filter Mode 下拉框可以实时切换贴花的纹理过滤方式共 6 个选项见 test.tscn 中OptionButton的item_count 6与各 item 文本序号选项README 给出的适用建议0Nearest适合像素风pixel art外观的游戏1Linear默认线性过滤2Nearest Mipmaps避免远处贴花出现颗粒感性能开销小3Linear Mipmaps同上适合多数场景4Nearest Mipmaps 16× Anisotropic远距离不颗粒、斜视角不模糊性能开销较大5Linear Mipmaps 16× Anisotropic同上质量最高的一档README 对三组模式给出了明确的技术判断这也是选型时最直接的依据Nearest 用于像素风如果游戏整体是低分辨率点阵美术风格Nearest能让贴花边缘保持锐利的像素感而不是被线性过滤糊化Mipmaps 防颗粒不开启 mipmap 时贴花在远处采样会产生颗粒/闪烁grainy现象开启 mipmap 能以较小性能代价解决但如果不同时开启各向异性过滤贴花在斜向视角下会变模糊Anisotropic 双防各向异性过滤模式既能在远处保持清晰也能避免斜视角模糊但性能代价大于单独开启 Mipmaps。2.1 项目级默认值两处配置的协同project.godot 的[rendering]段为整个项目预设了贴花相关的默认值[rendering] textures/decals/filter5 textures/default_filters/anisotropic_filtering_level4 lights_and_shadows/directional_shadow/soft_shadow_filter_quality3textures/decals/filter5对应上表第 5 项Linear Mipmaps 16× Anisotropic是项目默认启用的最高质量档textures/default_filters/anisotropic_filtering_level4设置全局各向异性等级此处为 16×它决定了 mipmap 采样在各向异性上的上限。2.2 运行时切换RenderingServer 的底层调用README 提到的左上角可调整滤镜模式在源码层面对应 tester.gd 末尾的_on_decal_filter_mode_item_selectedfunc _on_decal_filter_mode_item_selected(index: int) - void: # Indices in the OptionButton match RenderingServer decal filtering constants. RenderingServer.decals_set_filter(index)该回调直接把下拉框的索引透传给RenderingServer.decals_set_filter()——这正是 Godot 中贴花过滤模式的实际生效入口索引与 RenderingServer 的贴花过滤常量一一对应也是 README 所述六档模式可以在演示中实时对比的实现基础。把这一调用链与 project.godot 的配置项对应起来你就掌握了贴花过滤的完整控制面编辑器/项目设置控制默认值RenderingServer API 支持运行时热切换。三、Decal 节点核心属性与场景级佐证Decal节点本质上是一个朝向表面的立方体投影器将纹理沿其局部 -Z 轴方向投射到相交的几何体上。演示的 test.tscn 几乎用到了 Decal 的全部常用属性逐一对照如下。3.1 变换与尺寸size与旋转size决定贴花投影盒的三维范围按节点局部空间单位米直接影响贴花的覆盖面积。例如弹孔类小贴花PlasmaStain2~5使用size Vector3(0.1, 0.2, 0.1)油漆泼溅PurplePaint、CyanPaint使用size Vector3(1, 2, 1)水洼WaterPuddle使用size Vector3(4, 2, 4)。贴花节点通过自身的transform旋转来贴合不同朝向的表面墙面、斜面、曲面演示中ScifiDecals分组通过多个Pivot旋转子节点把贴花以 30° 间隔环绕分布在圆柱体表面直观展示了任意朝向贴花的能力。3.2 纹理通道albedo、normal、ORM、emissionGodot 的Decal支持四类纹理输入演示均给出了实例属性作用演示实例texture_albedo基础颜色贴图PaintDecals使用 textures/paint.pngScifiDecals使用 textures/scifi_1_albedo.png 等texture_normal法线贴图让贴花在表面上呈现立体凹凸textures/paint_normal.png、textures/scifi_1_normal.pngtexture_orm一张纹理打包 Occlusion遮挡、Roughness粗糙度、Metallic金属度三个通道textures/puddles_orm.png 用于WaterPuddle模拟积水对粗糙度的改变texture_emission自发光贴图使贴花在暗处/无光照处自发光PlasmaEmission使用 textures/plasma_emissive.pngBuffEffect/Noise使用程序生成的NoiseTexture2DORM 通道还常与albedo_mix搭配使用albedo_mix 0.0表示完全不用 albedo 贴图、只采用 ORM 效果WaterPuddle与NormalMapDecals/NormalOnly都展示了这种只改材质属性、不改颜色的用法。Metallic测试项则演示了把 normal 贴图放到texture_orm槽位、以纯法线信息驱动金属质感的效果。3.3 色彩与透明度modulatemodulate相当于给贴花叠加一个颜色乘数可用于染色复用同一张贴图。PaintDecals中三张泼溅贴花共用 textures/paint.png仅靠modulate就得到蓝、紫、青三种颜色如Color(0.0235294, 0.121569, 1, 1)是节省贴图资产的典型技巧。3.4 渐隐控制normal_fade、upper_fade、lower_fade这三个参数控制贴花的不透明度衰减方式normal_fade根据贴花投影方向与表面法线的夹角渐隐夹角越大越透明。弹孔0.5、水洼阴影0.5均使用它使贴花在贴附到倾斜/弯曲表面时过渡自然upper_fade/lower_fade沿贴花局部 -Y 轴上下两个方向控制渐隐边界。ScifiDecals中设为0.0让科幻贴花只作用于圆柱体的一小圈环带而不蔓延到整个表面。3.5 距离淡出distance_fade_enabled/distance_fade_begin/distance_fade_lengthDistanceFade分组用三个贴花对比同一套淡出参数均开启distance_fade_enabled且distance_fade_begin 2.5区别在于distance_fade_length分别为0.0瞬时消失、4.0短距离平滑淡出与默认值长距离淡出。这是控制贴花可见距离、优化远处渲染开销的实用手段。3.6 遮罩cull_maskcull_mask决定贴花作用在哪些碰撞层上的几何体。演示中BuffEffect的贴花与DecalOnAnimatedMesh的贴花均设置cull_mask 1048573——对照 test.tscn 中地面Plane的layers 2可以推断1048573 等于默认全 20 层1048575去掉第 2 层即这些贴花不会投影到地面上而只作用于自身组件的网格。这使 BuffEffect 光环不会在地面留下投影是实现贴花只出现在指定物体上的关键参数。四、运行时动态放置贴花射线检测 实例化 渐隐动画除了在编辑器中摆放静态贴花README 所描述的Decal 节点在运行中的各种表现还包括运行时动态生成。演示按P 键输入映射place_decal见 project.godot 的[input]段对应物理键码 80即可在鼠标指向处放置一枚红色贴花完整链路位于 tester.gdif input_event.is_action_pressed(place_decal): var origin : camera.global_position var target : camera.project_position(get_viewport().get_mouse_position(), 100) var query : PhysicsRayQueryParameters3D.create(origin, target) var result : camera.get_world_3d().direct_space_state.intersect_ray(query) if not result.is_empty(): var decal : preload(res://decal.tscn).instantiate() add_child(decal) decal.get_node(^Decal).modulate Color(1.0,0.0,0) decal.position result[position] decal.transform.basis camera.global_transform.basis其工作流程可拆解为四步可直接复用于任何 FPS/TPS 的弹孔、血迹、脚印系统构造射线以相机位置为起点、鼠标经project_position投影到 100 单位深度处为终点构造PhysicsRayQueryParameters3D空间查询通过direct_space_state.intersect_ray()做一次射线检测命中信息含position命中点存入result实例化贴花preload(res://decal.tscn).instantiate()创建贴花实例并加入场景用modulate染成红色对齐表面把实例放在命中点并将其transform.basis设为相机朝向——这样贴花总是正对玩家视线方向贴附在受击表面。配套的 3d/decals/decal.tscn 给出了一次性贴花的最佳实践场景由一个极小的Decalsize Vector3(0.001, 0.001, 0.001)避免在动画开始前闪烁与一个自动播放fade动画的AnimationPlayer组成。fade动画在 0.2 秒内把extents从零放大到(1, 1, 1)贴花长出在 5 秒内把modulate的 alpha 从 1 平滑降到 0并在动画结束时刻调用queue_free()自动销毁节点。也就是说动态贴花的出生、生长、淡出、回收全部由动画驱动不会产生场景中残留的无用节点——这对弹孔数量可能很多的战斗场景至关重要。五、纹理资产与许可说明演示的贴图资产集中在 3d/decals/textures/ 目录均为贴花专用资源油漆泼溅paint.png 法线贴图、手绘箭头paintedarrow.png 法线贴图、水洼puddles_albedo.png/puddles_orm.png、等离子体plasma_stain.png/plasma_emissive.png、科幻面板scifi_1~4_albedo.png及对应 normal、以及带轮廓的图标贴花icon_outlined.png normal。仓库为第三方资产保留了许可文件textures/paint.LICENSE.mdpaint.png/paint_normal.png源自 johndn 的 Splatter PackCC BY 3.0 协议textures/scifi.LICENSE.mdscifi_*.png源自 Yughues 的 Sci-Fi Decals 包CC0 1.0 协议textures/checker.LICENSE.md棋盘格贴图用于地面StandardMaterial3D的许可说明。在自己的项目中复用这些贴图时请注意遵守对应许可证的署名/衍生条款参考 puddles_orm.png.import 可以看到本项目的纹理导入配置如mipmaps/generatefalse、detect_3d/compress_to1可作为贴花纹理导入参数的参照。六、运行演示从导入到实操对比用 Godot 4.x项目声明特性为 4.7打开仓库根目录下的 project.godot编辑器会自动导入 3d/decals/test.tscn 引用的全部贴图与脚本运行主场景test.tscn进入演示按« Previous/Next »或键盘左右方向键ui_left/ui_right见 tester.gd切换测试分组点击左上角 Decal Filter Mode 下拉框在六档模式间切换重点观察远处贴花的颗粒感与斜视角模糊差异从而建立 README 所述三条经验法则Nearest→像素风、Mipmaps→防颗粒、Anisotropic→防斜视模糊的直观认知按P键在场景中连续放置红色贴花观察fade动画的生长、淡出与自动回收鼠标拖拽环绕、滚轮缩放从不同距离与角度检验DistanceFade三档淡出效果。综上3d/decals演示以最少的代码单个 tester.gd覆盖了 Decal 节点从配置、材质到运行时生成的完整链路。无论你的目标是把像素风血渍、科幻面板还是动态弹孔做进游戏这套 README 指引 场景源码组合都是可以直接对照落地的参考实现。赞分享示例工程【免费下载链接】godot-demo-projectsDemonstration and Template Projects项目地址https://gitcode.com/GitHub_Trending/go/godot-demo-projects点击查看免费下载相关推荐Godot 2D 物理引擎测试套件实战解析基于 godot-demo-projects 的 physics_tests 演示Godot 2D 物理引擎测试套件实战解析基于 godot demo projects 的 physics_tests 演示 本文带你深入 godot dem示例工程Godot 4 物理光照与相机单位实战基于 godot-demo-projects 的 Physical Light and Camera Units 演示Godot 4 物理光照与相机单位实战基于 godot demo projects 的 Physical Light and Camera Units 演示示例工程Godot 3D 粒子特效全解析基于 godot-demo-projects 的 GPU/CPU 粒子、碰撞、吸引器、拖尾与子发射器实战指南Godot 3D 粒子特效全解析基于 godot demo projects 的 GPU/CPU 粒子、碰撞、吸引器、拖尾与子发射器实战指南 导读 本文以 g示例工程上一篇GroundingDINO 配置解析与 SwinT/SwinB 选型终极指南开放式检测模型如何选对配置下一篇探索机器理解新境界双向注意力流(Bi-directional Attention Flow)项目解析与推荐创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考