模型实时切割剖面工具crossSection

crossSection是用于在Unity中模拟模型实时切割剖面工具!

这是一个在 Unity3d 游戏引擎内部使用的工具,用于在游戏对象上制作 cros-ssection。游戏对象应该由按层次结构组织的网格构建。

这是横截面着色器、脚本、预制和示例场景的集合。包含Unity标准着色器和Unity中其他内置着色器的截面替代。

横截面工具可以处理平面和基本体,如长方体、圆柱体、椭球体、棱柱体、四边形、圆锥体和长方体。

对象内部的网格应闭合且不相交:

  1. -单平面截面的快速4步设置
  2. -VR/AR就绪(在OculusQuest和Go上测试)
  3. -支持后处理效果,包括后处理堆栈v2
  4. -选择性轮廓后处理效果
  5. -支持标准(内置)、URP(自2019.2.16起)和HDRP(自2020.1.0起)渲染管道
  6. -支持新的Unity InputSystem

 

您可以在带有说明和文档的在线wiki页面上找到更多详细信息。

模型实时切割剖面工具crossSection

注:

特定于可脚本化渲染管道的资源位于单独的单元包中。

您可以在演示中看到它的实际操作:

  1. -带有16个演示场景的WebGL演示
  2. -带有11个演示场景的WebGL URP演示
  3. -带有2个示例场景的WebGL示例
  4. -带有2个示例场景的WebGL URP示例
  5. -用于Android的.apk演示(内置)下载,包含16个演示场景
  6. -Android的.apk演示(URP)下载,包含11个演示场景
  7. -具有6个演示场景的独立Windows HDRP演示

模型实时切割剖面工具crossSection

演示场景包含在包中。

注:

上传了最新的资产版本,并从Unity 2022.1.6f1构建了演示场景。广告中的功能与最新版本相关,可能不会出现在早期版本中。请检查文档更改日志。

你也可以在论坛帖子上找到一些信息。

该资产在MIT许可证下使用phuongfi91/unity线程;参见第三方通知。包中的txt文件了解详细信息

模型实时切割剖面工具crossSection

版本 2.13(当前版本)更新内容

边界框计算方法已更改:

  • -MathGeoLib dll库已被专用的OrientedBounds类替换。
  • -边界盒计算基于Unity作业系统多线程。
模型实时切割剖面工具crossSection下载地址:

模型实时切割剖面工具crossSection

示例场景描述:

– single_plane演示场景包含附加了 SectionSetup 组件的 TestGameObject。TestGameObject 渲染器可以使用任何着色器的任何材质。SectionSetup.model 变量绑定到 TestGameObject,以便组件可以检查这些着色器。对于 crossection 着色器,组件将保持材质原样,否则它会尝试在上面列出的这些着色器中找到着色器替代品。然后,它会生成具有从原始继承的属性的材料副本。如果找不到完全匹配的着色器,则默认放置横截面/旧版/漫反射着色器。请注意,在这种情况下,材质的视觉外观可能会发生变化。要获得对对象外观的最佳控制,请使用资源中的横截面着色器。 单平面部分脚本在进入和离开播放模式时设置剖面着色器关键字的打开/关闭。横截面平面遵循 Gizmo 对象的位置和方向,该对象也包含在场景中。通常,横截面平面可以跟随任何移动的游戏对象,并附加 GizmoFollow 脚本。在播放模式期间,GizmoFollow 脚本会按照 GizmoFollow 变换的方向更新横截面着色器全局变量。

单平面截面的设置非常简单,只需四个简单的步骤。您也可以在此视频中看到这一点。

  1. – planar_xyz设置包含一个 GUI,用于沿坐标系的 xyz 轴设置和移动横截面平面,其方式限制在游戏对象的边界内。这些边界是在模型变量赋值编辑器的 SectionSetup 脚本中计算的。如果移动、旋转或更改模型层次结构内容,请重新分配此变量以重新计算这些边界。
  2. – various_materials与上述相同,但使用更多的材质,表示资产涵盖的着色器
  3. – intersected_geometry只是一个平面横截面,具有对相交几何的特殊支持。
  4. – material_transition-设置与单平面场景相同。测试游戏对象上网格渲染器上的子网格计数等于 1,但材质为 2。在这种情况下,两种材质都会被渲染。反材质变量允许我们反转其中一个材质上的剪裁平面。
  5. – 饼图部分 – 这是 A 两个角度的平面部分。
  6. – sphere_section-在演示游戏对象上单击的点定义了裁剪球体中心的位置。然后,您可以在演示游戏对象上拖动以设置裁剪球体半径。
  7. – cuboid_capped-在演示球体上单击的点定义了裁剪立方体中心的位置。然后,您可以在演示球体上拖动以设置剪切立方体大小。立方体方向由单击点中的法线和演示球体的 transform.up 设置。
  8. – primitives_capped部分 – 在演示中单击的点 游戏对象定义裁剪基元的中心位置。选项包括圆锥体、长方体、圆柱体、椭圆体、棱镜、四 – 单或多。基元的轴由单击点中的法线确定。然后,您可以拖动演示游戏对象以均匀或非均匀地放大所选基元。

横截面着色器只是渲染,直到它们与剖面相遇,并且不渲染游戏对象的其余部分。

上述场景中的横截面材质可以使用材质和着色器全局关键字和变量进行操作。

在大多数情况下,关键字名称是不言自明的:

  • CLIP_PLANE
  • CLIP_SPHERE
  • CLIP_CORNER – 切出由三个垂直平面定义的拐角内侧
  • CLIP_PIE – 两个相交平面部分
  • CLIP_SPHERE
  • CLIP_BOX – 切掉外面的盒子
  • CLIP_CONE/CLIP_CONES – 切出单/多锥的内部
  • CLIP_CUBOID/CLIP_CUBOIDS – 切出单/多长方体内部
  • CLIP_CYLINDER/CLIP_CYLINDERS – 切出单缸/多缸内部
  • CLIP_ELLIPSOID/CLIP_ELLIPSOIDS – 切出单/多椭球体的内部
  • CLIP_PRISM/CLIP_PRISMS – 切出单个/多个棱镜的内部
  • CLIP_TETRA/CLIP_TETRAS – 切出单/多锥的内部
    以及更多…

变量为:

float4 _SectionPoint: – 必须包含在剖面中的点(如果有两个平面,则两者兼而有之)或半径中心(如果是球体截面)
float4 _SectionPlane: – 剖面的法线
浮点数4 _SectionPlane2: – 第二截面平面的法线
浮_Radius: – 球体截面下的半径

在原始固体切割的情况下:

float4x4 _WorldToObjectMatrix: – 世界到对象的 TR(平移旋转)对象转换矩阵
浮点4 _SectionScale: – 对象比例
在被多个原始实体切割的情况下:

float4x4 _WorldToObjectMatrixes[64];- 世界到对象TR(平移旋转)对象转换矩阵数组
float4 _SectionScales[64]: – 对象比例数组
int _primCount = 0:实际基元计数
_SectionColor 变量是一个局部级别的着色器变量,用于在材质级别上单独控制背面的颜色。 基本的横截面方案由单个效果组成,该效果使用着色器全局变量强加于多个材质上。也可以在着色器上公开变量并在材质级别分配它们,或者在脚本中覆盖全局变量,这样我们就可以在单个场景中拥有多个截面平面、圆或框。这方面的一个例子是single_plane_individual场景。 可以编辑着色器代码以将属性范围从全局更改为本地。在大多数属性的情况下 – 不包括数组(如FloatArray或VectorArray),它只是一个母体或将属性放入着色器属性块中。资源中的大多数横截面着色器 HSLS 文件已经包含注释的相关属性行,只需取消注释即可。 对于着色器图,只需编辑图形黑板,将属性标记为公开。

模型实时切割剖面工具crossSection
模型实时切割剖面工具crossSection
模型实时切割剖面工具crossSection

Leave a Reply

后才能评论