关于 godot-3d-essentials
面向 Godot 4.7 的 3D 场景搭建与排错技能,帮助 Godot 开发者处理变换、摄像机、灯光、环境、材质及 GridMap 关卡白盒。
主要功能
- 01Node3D 变换
- 02Camera3D 设置
- 03灯光与阴影
- 04WorldEnvironment 与后期处理
- 05材质与 GridMap 关卡白盒
适用场景
- 01搭建或排查 Godot 3D 场景
- 02设置摄像机与场景照明
- 03用 GridMap 制作关卡白盒
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ gamedev-skills/ awesome-gamedev-agent-skills --skill godot-3d-essentials安装后在 Claude Code 中输入/godot-3d-essentials确认已加载。
附带文件references/scene-and-environment.md
详细介绍
Godot 3D Essentials(4.x)
组装一个可运行的 3D 场景:变换、摄像机、灯光、环境/后期处理、材质和
GridMap 灰盒关卡。目标版本为 Godot 4.7。
适用场景
- 在开始搭建或修复 3D 场景时使用:定位
Camera3D、添加灯光、设置WorldEnvironment(天空、环境光、色调映射、辉光/SSAO)、分配材质,或 使用GridMap构建关卡。
**不适用场景:**编写空间着色器 → godot-shaders;3D 物理体和
射线检测 → godot-physics;角色动画混合 → godot-animation;完整 FPS
模板 → fps-shooter 类型技能。
核心工作流
- 所有 3D 对象都是
Node3D,并带有Transform3D(位置、旋转基向量、缩放)。 使用global_position移动,使用rotate_y(angle)或look_at(target)旋转。 - 添加
Camera3D。 将其标记为current(或调用make_current());设置fov、near、far。将其设为支架/枢轴的子节点,以实现环绕或跟随摄像机。 - 布置场景灯光。
DirectionalLight3D是太阳光;OmniLight3D/SpotLight3D是 局部光源。为每个灯光启用阴影。没有灯光和环境光时,表面会渲染为黑色。 - 添加带有
Environment资源的WorldEnvironment:背景(天空/颜色)、 环境光、色调映射和后期处理(辉光、SSAO、雾、调整)。 - 为网格添加材质(
StandardMaterial3D或ShaderMaterial),赋给MeshInstance3D。 - 使用
GridMap构建关卡灰盒,在 3D 网格上放置MeshLibrary项目 (相当于 3D 版的图块地图)。
模式
1. 跟随摄像机(第三人称、平滑)
extends Camera3D
@export var target: Node3D
@export var offset := Vector3(0, 4, 8)
@export var smooth := 6.0
func _physics_process(delta: float) -> void:
if target == null:
return
var desired := target.global_position + offset
global_position = global_position.lerp(desired, smooth * delta) # smooth follow
look_at(target.global_position, Vector3.UP) # face the target
2. 在代码中设置太阳光和环境
func _ready() -> void:
var sun := DirectionalLight3D.new()
sun.rotation_degrees = Vector3(-45, -30, 0)
sun.shadow_enabled = true
add_child(sun)
var we := WorldEnvironment.new()
var env := Environment.new()
env.background_mode = Environment.BG_SKY
env.sky = Sky.new()
env.sky.sky_material = ProceduralSkyMaterial.new()
env.ambient_light_source = Environment.AMBIENT_SOURCE_SKY
env.tonemap_mode = Environment.TONE_MAPPER_FILMIC
env.glow_enabled = true
we.environment = env
add_child(we)
3. 在代码中分配 StandardMaterial3D
func tint_mesh(mesh: MeshInstance3D, color: Color) -> void:
var mat := StandardMaterial3D.new()
mat.albedo_color = color
mat.metallic = 0.0
mat.roughness = 0.6
mat.emission_enabled = true
mat.emission = color * 0.3
mesh.material_override = mat # overrides the mesh's surface materials
4. 在 GridMap 中放置图块
@onready var grid: GridMap = $GridMap # cell_size + mesh_library set in the editor
func build_floor(width: int, depth: int, item_id: int) -> void:
for x in width:
for z in depth:
# set_cell_item(Vector3i cell, int item, orientation = 0)
grid.set_cell_item(Vector3i(x, 0, z), item_id)
常见问题
- 场景渲染为黑色 → 没有灯光和环境光。添加
DirectionalLight3D,和/或添加带有环境光/天空的WorldEnvironment。新场景默认两者都没有。 - 没有摄像机/摄像机不正确。 如果什么都看不到,说明没有
Camera3D处于current状态。设置current = true或调用make_current();每个视口一次只能由一台摄像机渲染。 - 混淆局部变换和全局变换。
position/rotation相对于父节点;global_position/global_transform是世界空间坐标。在经过旋转的父节点下混用会产生意外结果。look_at使用全局坐标。 - 缩放物理体/灯光。 对
Node3D使用非均匀scale会扭曲子节点碰撞体和灯光;优先缩放网格资源,或使用均匀缩放。 - 在
look_at中忘记from/up。look_at(target, up):如果目标与节点位置相同,或up与观察方向平行,会产生 NaN/翻转。 - 没有
MeshLibrary的 GridMap 不会放置任何内容。创建一个MeshLibrary(从场景创建)并分配给它;set_cell_item(cell, -1)会清空单元格。 - HDR/辉光过强 → 检查
tonemap_mode和辉光阈值;在胶片色调映射下,原始自发光值会产生强烈泛光。
参考资料
- 有关 Transform3D 数学、摄像机投影模式、灯光/阴影参数、完整的环境/后期处理选项、
MeshLibrary创建,以及ReflectionProbe/LightmapGI照明,请阅读references/scene-and-environment.md。
相关技能
godot-physics— 3D 物理体、区域和射线检测。godot-shaders— 用于自定义 3D 表面的空间着色器。godot-animation— 用于 3D 角色的AnimationTree。camera-systems— 第三人称环绕/第一人称视角支架、取景和碰撞。performance-optimization— 让 3D 场景保持在帧预算内(绘制调用、灯光、LOD)。fps-shooter— 将 3D 移动、输入和 AI 组合成游戏。
评论
支持 Markdown