ARView 对应于 SCNView 的 SCNTechnique?
ARView counterpart to SCNView's SCNTechnique?
我用 ARKit 制作了一个项目,它使用金属着色器来执行镜像效果,这是使用 sceneView.technique
分配的。我试图弄清楚是否可以将项目转换为使用 RealityKit,但找不到 RealityKit 使用的 ARView
的任何相似特征。 RealityKit 中是否有任何类似于 sceneView.technique
的东西可以让我像现在一样简单地分配金属着色器,或者我是否必须重新设计金属着色器与视图的交互方式?
我目前的实现是基于。
关于ARView镜像
在 RealityKit 2.0 中镜像 ARView
的最简单方法是使用 CGAffineTransform
3x3 矩阵。
┌ ┐
| a b 0 |
| c d 0 |
| tx ty 1 |
└ ┘
我们需要水平反映一个场景(包括视频),所以我们必须使用 -1
xScale 乘数:
┌ ┐
| -1 0 0 |
| 0 1 0 |
| 0 0 1 |
└ ┘
代码如下:
arView.transform = .init(a: -1, b: 0, c: 0, d: 1, tx: 0, ty: 0)
关于金属着色器
仅在 RealityKit 2.0 中 CustomMaterial 允许您实现 Metal 的顶点和片段着色器。因此,您可以使用顶点着色器实现许多有趣的效果,包括在 X 轴上翻转模型。
.swift file
:
import Metal
import RealityKit
let device = MTLCreateSystemDefaultDevice()
guard let defaultLibrary = device!.makeDefaultLibrary()
else { return }
let shader = CustomMaterial.SurfaceShader(named: "basicShader",
in: defaultLibrary)
let modifier = CustomMaterial.GeometryModifier(named: "basicModifier",
in: defaultLibrary)
box.model?.materials[0] = try! CustomMaterial(surfaceShader: shader,
geometryModifier: modifier,
lightingModel: .lit)
.metal file
:
#include <metal_stdlib>
#include <RealityKit/RealityKit.h>
using namespace metal;
using namespace realitykit;
[[visible]]
void basicShader(realitykit::surface_parameters shader)
{
surface::surface_properties sf = shader.surface();
sf.set_base_color( half3(1.0f, 0.7f ,0.0f) );
};
[[visible]]
void basicModifier(realitykit::geometry_parameters modifier)
{
float3 pose = modifier.geometry().model_position();
// your code...
};
但是,RealityKit 视图的 SCNTechnique 对应项尚未“烘焙”...
您可以使用 RealityKit 2 的 PostProcessing API,这应该可以很容易地实现所需的效果。
例如,您可以将 Core Image Filter 或 Metal 内核函数应用于渲染场景。有点类似于SCNTechnique。
我用 ARKit 制作了一个项目,它使用金属着色器来执行镜像效果,这是使用 sceneView.technique
分配的。我试图弄清楚是否可以将项目转换为使用 RealityKit,但找不到 RealityKit 使用的 ARView
的任何相似特征。 RealityKit 中是否有任何类似于 sceneView.technique
的东西可以让我像现在一样简单地分配金属着色器,或者我是否必须重新设计金属着色器与视图的交互方式?
我目前的实现是基于
关于ARView镜像
在 RealityKit 2.0 中镜像 ARView
的最简单方法是使用 CGAffineTransform
3x3 矩阵。
┌ ┐
| a b 0 |
| c d 0 |
| tx ty 1 |
└ ┘
我们需要水平反映一个场景(包括视频),所以我们必须使用 -1
xScale 乘数:
┌ ┐
| -1 0 0 |
| 0 1 0 |
| 0 0 1 |
└ ┘
代码如下:
arView.transform = .init(a: -1, b: 0, c: 0, d: 1, tx: 0, ty: 0)
关于金属着色器
仅在 RealityKit 2.0 中 CustomMaterial 允许您实现 Metal 的顶点和片段着色器。因此,您可以使用顶点着色器实现许多有趣的效果,包括在 X 轴上翻转模型。
.swift file
:
import Metal
import RealityKit
let device = MTLCreateSystemDefaultDevice()
guard let defaultLibrary = device!.makeDefaultLibrary()
else { return }
let shader = CustomMaterial.SurfaceShader(named: "basicShader",
in: defaultLibrary)
let modifier = CustomMaterial.GeometryModifier(named: "basicModifier",
in: defaultLibrary)
box.model?.materials[0] = try! CustomMaterial(surfaceShader: shader,
geometryModifier: modifier,
lightingModel: .lit)
.metal file
:
#include <metal_stdlib>
#include <RealityKit/RealityKit.h>
using namespace metal;
using namespace realitykit;
[[visible]]
void basicShader(realitykit::surface_parameters shader)
{
surface::surface_properties sf = shader.surface();
sf.set_base_color( half3(1.0f, 0.7f ,0.0f) );
};
[[visible]]
void basicModifier(realitykit::geometry_parameters modifier)
{
float3 pose = modifier.geometry().model_position();
// your code...
};
但是,RealityKit 视图的 SCNTechnique 对应项尚未“烘焙”...
您可以使用 RealityKit 2 的 PostProcessing API,这应该可以很容易地实现所需的效果。
例如,您可以将 Core Image Filter 或 Metal 内核函数应用于渲染场景。有点类似于SCNTechnique。