Skip to main content

模型描边

概述

在3D场景中选中一个3D模型时,有时需要通过其外观变化来表现一定的交互。例如,在游戏中或是在编辑器中选择模型时,希望模型轮廓发出亮光来表示已被选中,通常就需要通过模型描边来实现,下图为模型描边效果的示例图。

Outline

在引擎中开启模型描边效果

在编辑器中,依次点击菜单栏窗口(Windows) -> 默认效果(Default Effect)来打开默认效果窗口。

image-20230322150429417

默认效果(Default Effect)窗口中,找到模型描边(Model Outline),在该选项中可设置模型描边效果,勾选是否可见(Visible)开启该效果。

image-20230323111805201

大纲(Hierarchy)面板中选中LSceneSettings-1,然后在观察器(Inspector)面板中勾选上下文配置(Context Config)下的启用模型描边(Enable Model Outline)

image-20230323155938765

使用代码开启模型描边

在游戏中可以通过代码来开启模型描边。首先获取这个模型对象的材质列表,然后为其所用到的每个材质开启描边效果,开启描边需要设置如下四个属性:

  1. 启用描边(OutlineEnable),需要传入字符串形式的true或者false。
  2. 描边颜色(OutlineColor)。
  3. 描边扩张度(ExpandSize),如果给出数值为0则默认不扩张。
if nx_name(visual) == "Model" then
if nx_find_method(visual, "GetMaterialNameList") then
local material_table = visual:GetMaterialNameList()

for i = 1, table.getn(material_table) do
visual:SetCustomMaterialValue(material_table[i], "OutlineEnable", nx_string(enable))
visual:SetCustomMaterialValue(material_table[i], "OutlineColor", "0.2, 0.95, 1.0")
visual:SetCustomMaterialValue(material_table[i], "ExpandSize", "0.0")
end
end

通过修改默认效果(Default Effect)窗口中模型描边(Model Outline)的相关属性,可以看到不同的描边效果。

image-20230323112113003

属性说明
是否可见(Visible)用于控制描边是否可见。
绘制接缝(Draw Seams)绘制多个描边时,是否就模型重叠部分启用接缝。
像素宽度(Pixel Size)描边的粗细。
深度偏移(Depth Offset)模型描边在深度测试时的偏移值(该属性用于调整深度剔除效果)。

使用深度剔除效果需先在大纲(Hierarchy)面板中选中LSceneSettings-1,然后在观察器(Inspector)面板中的上下文配置(Context Config)下勾选启用描边深度剔除(Enable Outline Depth Culling)来启用深度剔除效果。

image-20230323160059110

效果展示

接缝描边

Disable
Enable

深度剔除

Disable
Enable