
文档教程游戏开发【免费下载链接】godot-docsGodot Engine official documentation项目地址https://gitcode.com/GitHub_Trending/go/godot-docs点击查看免费下载导读DPITexture是 Godot 引擎提供的一种基于 SVG 源数据、可随视口缩放自动重新光栅化的Texture2D子类专为 UI 图标、主题纹理等需要在任意分辨率下保持清晰的场景设计。本文以 Godot 官方文档 classes/class_dpitexture.rst 为主线结合仓库中的导入管线与多分辨率渲染教程完整讲解其属性、方法、导入配置方式与底层 oversampling过采样原理帮助你在项目中实现「字体与图像双重高清」的跨分辨率方案。DPITexture 是什么可自动缩放的 SVG 纹理DPITexture在 Godot 类继承体系中位于Object RefCounted Resource Texture Texture2D DPITexture官方文档 class_dpitexture.rst 明确说明它是一种基于 SVG 图像、可自动缩放的Texture2D。与普通位图纹理不同DPITexture保存的是SVG 矢量源数据而非像素因此可以在运行时按需重新光栅化以匹配视口缩放系数viewport scale与字体过采样font oversampling从而避免 UI 图标在放大显示时出现模糊或锯齿。需要特别注意的是官方文档将其标记为Experimental实验性——这意味着该类的 API 在未来的 Godot 版本中可能被修改或移除生产项目接入时需评估风险。适用场景速览编辑器/插件图标、自定义类图标、UI 主题中的小图标、准星等可能被运行时改变 Scale 的控件元素以及高分辨率下需要保持锐利的任何 2D 矢量纹理。核心原理重光栅化与 oversampling 链路DPITexture的价值不在于「矢量本身可无限缩放」而在于它与 Godot 的 oversampling 系统深度联动。文档描述中指出DPITextures are used to automatically re-rasterize icons and other texture based UI theme elements to match viewport scale and font oversampling.也就是当视口缩放因子变化时纹理会从矢量源重新渲染保证像素密度始终匹配显示需求。这一行为受以下机制协同驱动Project Settings display/window/stretch/mode当设为canvas_items模式时画布内容会按缩放比例整体重绘DPITexture在此模式下会自动跟随视口缩放重新光栅化Viewport.oversampling_overrideclass_viewport.rst 中的oversampling/oversampling_override属性oversampling_override默认为0.0若大于零则作为字体过采样因子使用否则过采样值等于视口缩放Viewport.oversampling默认true该属性决定是否在满足条件时启用字体与DPITexture过采样。从仓库的多分辨率教程 tutorials/rendering/multiple_resolutions.rst 可以看到完整的产品级设定项目默认状态说明字体过采样Font oversampling默认启用可通过Project Settings GUI Fonts Dynamic Fonts Use Oversampling关闭图像过采样Image oversampling默认关闭只能通过将 SVG 图片的导入类型改为DPITexture来按图片启用编辑器 2D 视图缩放过采样默认启用通过View Auto Resample CanvasItems控制开关用于预览各缩放系数下的效果基于 Scale 属性的过采样默认关闭在节点的 Inspector 中将Oversampling with Scale设为Enabled一个关键事实只有 SVG 是唯一能以DPITexture形式导入的图像格式见 importing_images.rst因为其他格式存储的是位图数据而非矢量无法支持重新光栅化。属性详解6 个可调参数DPITexture暴露了 6 个属性含 1 个继承重写下面逐一说明语义与默认值。base_scale默认1.0set_base_scale(value: float) get_base_scale() - float纹理缩放因子。1.0表示使用 SVG 的原始尺寸数值越大图像越大。注意它与字体过采样不同它直接影响 SVG 在 2D 中的物理显示尺寸对应 Import dock 中的SVG Scale选项该选项仅对 SVG 图片可用。配合saturation与color_map的默认值1.0/{}可作为导入管线中的统一缩放入口。color_map默认{}set_color_map(value: Dictionary) get_color_map() - Dictionary颜色重映射表。文档描述为「If set, remaps texture colors according to Color-Color map」即按Color→Color的键值映射关系替换纹理颜色。常用于主题化换肤例如将同一图标渲染为深色主题/浅色主题配色是实现「一套 SVG、多套配色」的轻量手段。fix_alpha_border默认falseset_fix_alpha_border(value: bool) get_fix_alpha_border() - bool半透明边缘修复开关。设为true时会在从透明过渡到不透明的区域填充与周围相同的颜色像素。对于使用双线性过滤bilinear filtering显示的纹理这有助于消除从图像编辑软件导出图片时产生的描边/黑边效果。premult_alpha默认falseset_premult_alpha(value: bool) get_premult_alpha() - bool预乘 alpha 转换开关。这是修复暗色描边的另一种方案与fix_alpha_border互为替代。开启后纹理会被转换为预乘 alpha 格式但预乘 alpha 纹理必须搭配特定材质才能正确显示详见下文专节。saturation默认1.0set_saturation(value: float) get_saturation() - float饱和度覆盖值1.0表示保持原始饱和度用于统一调整一组图标的视觉浓淡。resource_local_to_scene重写自 Resource默认false该属性由基类Resource提供DPITexture将其默认值固定为false覆盖Resource的默认行为。启用后资源会随场景实例化产生独立副本适合在场景间隔离运行时修改如动态改色的场景。premult_alpha2D 与 3D 的正确显示姿势官方文档特别强调启用premult_alpha后纹理被转换为预乘 alpha 格式必须配合特定的混合模式材质否则渲染结果会不正确。2D 场景在CanvasItem上创建CanvasItemMaterial并将其混合模式设置为CanvasItemMaterial.BLEND_MODE_PREMULT_ALPHA若使用自定义canvas_itemshader则需要在 shader 中声明render_mode blend_premul_alpha;。3D 场景为使用该纹理的材质创建BaseMaterial3D并将混合模式设置为BaseMaterial3D.BLEND_MODE_PREMULT_ALPHA若使用自定义spatialshader同样需要render_mode blend_premul_alpha;。# 2D 示例为使用预乘 alpha 纹理的 Sprite2D 配置材质 var mat CanvasItemMaterial.new() mat.blend_mode CanvasItemMaterial.BLEND_MODE_PREMULT_ALPHA $Sprite2D.material mat选择fix_alpha_border还是premult_alpha取决于素材来源与渲染管线前者零成本接入常规纹理后者需要为显示节点配置专用材质但在边缘质量上通常更优。方法详解5 个核心 API静态方法 create_from_string运行时构造入口static DPITexture create_from_string(source: String, scale: float 1.0, saturation: float 1.0, color_map: Dictionary {})静态方法无需实例即可调用。它分配并设置source为 SVG 数据同时一次性完成scale、saturation、color_map的初始化。这是纯运行时创建DPITexture的主要途径适合动态生成图标例如从网络/数据库读取 SVG 字符串的场景。# 运行时从 SVG 字符串创建 DPITexture var svg_source svg xmlnshttp://www.w3.org/2000/svg width64 height64 \ rect width64 height64 fill#e74c3c//svg var tex DPITexture.create_from_string(svg_source, 1.0, 1.0, {})set_source / get_sourceset_source(source: String) get_source() - String设置/获取该纹理的 SVG 源码字符串。set_source相当于替换矢量源数据之后纹理可在下一次光栅化时反映新内容get_source用于取回当前 SVG 源码便于序列化、对比或克隆。get_scaled_rid过采样光栅化核心RID get_scaled_rid() const返回为匹配当前正在绘制的 canvas item 的过采样系数而重新光栅化后的纹理RID。这是DPITexture在渲染管线中的关键调用点Godot 在绘制时通过它获取与当前缩放匹配的纹理资源从而实现「边绘制边按需重光栅化」。该方法是 const无副作用不修改成员变量。set_size_overrideset_size_override(size: Vector2i)将纹理强制调整为指定像素尺寸。当需要固定输出大小例如适配固定尺寸的 UI 槽位时使用。实战接入从导入配置到运行时代码方式一编辑器导入推荐静态资源在 FileSystem dock 中选中 SVG 文件在 Import dock 中将导入类型从默认的Texture2D改为DPITexture只有 SVG 图片会出现该选项详见 importing_images.rst。与 SVG 导入相关的专属配置项包括配置项说明SVG ScaleSVG 的渲染缩放1.0为原始设计尺寸与字体过采样不同它影响 SVG 在 2D 中的物理尺寸Editor Scale With Editor Scale设为 true 时按编辑器显示缩放因子缩放导入图像应仅对编辑器插件图标与自定义类图标启用普通游戏资源保持关闭Editor Convert Colors With Editor Theme将图片颜色转换为匹配编辑器的图标/字体调色板前提是素材使用了与 Godot 编辑器图标完全相同的颜色且基于深色主题设计同样仅用于插件/类图标配套的导入器是ResourceImporterSVGclass_resourceimportersvg.rst它的职责即「Imports an SVG file as an automatically scalable texture」并导入DPITexture资源其属性base_scale、color_map、fix_alpha_border、premult_alpha、saturation以及独有的compress默认true与DPITexture的属性一一对应构成「导入参数 → 运行时属性」的完整链路。方式二运行时创建动态素材调用DPITexture.create_from_string(...)直接构造实例配合TextureRect/Sprite2D等节点使用var tex DPITexture.create_from_string(svg_source) $TextureRect.texture tex # 后续可按需调整 tex.set_base_scale(2.0) tex.set_saturation(0.8) tex.set_color_map({ Color(1, 0, 0): Color(0, 0, 1) }) tex.set_size_override(Vector2i(128, 128))与过采样联动的完整链路项目启用display/window/stretch/mode canvas_items让画布内容随视口缩放将需要高清显示的 SVG 导入为DPITexture运行时若节点自身的Scale会变化如准星、动态 UI 元素可将其 Inspector 中的Oversampling with Scale设为Enabled——此时纹理会按节点缩放重新光栅化。注意非均匀缩放虽可用但过采样始终均匀应用较短的轴可能出现锯齿且若缩放频繁变化CPU 负担会明显上升因为每次都需要重新渲染纹理特殊场景下可用Viewport.oversampling_override大于 0 时作为过采样因子否则等于视口缩放强制指定过采样强度在 2D 编辑器中可通过View Auto Resample CanvasItems开关实时预览不同缩放系数下的光栅化效果。已知限制与注意事项SVG 渲染依赖 ThorVG 库Godot 的 SVG 渲染由 ThorVG 提供见 importing_images.rst其对 SVG 特性的支持有限复杂矢量可能渲染不正确SVG 内的文本不会自动光栅化由于所用 SVG 库不支持文本栅格化必须先通过 Inkscape 等工具将文本转为路径否则文本不会出现在栅格化图像中例如使用inkscape --export-text-to-path --export-filename out.svg in.svg只有 SVG 支持此方案位图格式PNG、WebP 等无法享受图像过采样需依赖 mipmap 等其他手段缓解缩小采样时的锯齿实验性 API类可能在未来版本变更或移除请关注引擎版本升级公告。小结DPITexture是 Godot 面向高分辨率 UI 提供的「矢量 过采样」组合拳的核心它以 SVG 为源在视口缩放、节点缩放、字体过采样等多条触发链路上按需重光栅化让图标与主题纹理在任意分辨率下保持像素级锐利。配合 importing_images.rst 的导入管线、multiple_resolutions.rst 的多分辨率策略以及 class_viewport.rst 中oversampling/oversampling_override的视口级控制即可构建一套完整、可控、可预览的跨分辨率 UI 图像方案。赞分享文档教程游戏开发【免费下载链接】godot-docsGodot Engine official documentation项目地址https://gitcode.com/GitHub_Trending/go/godot-docs点击查看免费下载相关推荐Godot AnimatedTexture 详解基于帧的纹理动画资源与实战指南Godot AnimatedTexture 详解基于帧的纹理动画资源与实战指南 AnimatedTexture 是 Godot Engine 提供的一种基于帧文档教程游戏开发Cemu分辨率缩放高清纹理与超采样Cemu分辨率缩放高清纹理与超采样 引言Wii U游戏的视觉革命 还在为Wii U游戏的原生分辨率感到遗憾吗Cemu模拟器通过先进的分辨率缩放技术让经典虚拟化Godot 屏幕截图捕获实战基于 Viewport 纹理回读实现 Screen Capture 演示Godot 屏幕截图捕获实战基于 Viewport 纹理回读实现 Screen Capture 演示 屏幕截取Screen Capture是游戏与工具类应示例工程上一篇Slate v2 可编辑运行时与根选择器硬切将编辑引擎策略从 React 组件中剥离下一篇Swarms AgentRearrange 医疗诊断与 ICD-10 编码报告实战指南创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考