我用ARKit做了一个项目,它使用金属着色器来执行镜像效果,这是通过使用sceneView.technique分配的。我试图找出是否有可能将项目转换为使用RealityKit,但找不到RealityKit使用的ARView的任何类似特性。在RealityKit中是否有类似于sceneView.technique的东西可以让我像现在这样简单地分配金属着色器,或者我需要重新设计金属着色器是如何与视图交互的?
我目前的实现是基于这个职位的。
发布于 2022-02-14 21:23:36
关于ARView镜像
在ARView 2.0中镜像RealityKit的最简单方法是使用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允许您实现金属的顶点和片段着色器。因此,您可以使用顶点着色器实现许多有趣的效果,包括在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...
};然而,与SCNTechnique对应的RealityKit视图还没有“烤熟”.
发布于 2022-02-18 13:36:19
您可以使用RealityKit 2的PostProcessing API,这将使这个期望的效果很容易实现。
例如,您可以将核心图像过滤器或金属内核函数应用于呈现的场景。有点类似于SCNTechnique。
https://stackoverflow.com/questions/71116897
复制相似问题