swift - Metal API 中的光类型

标签 swift macos metal light

我想知道 Metal API 中是否只有 Point LightAmbient Light 或者我也可以使用 Spot LightDirectional Light 在我的 3D 环境中?

struct Light {

    var color: (Float, Float, Float)
    var ambientIntensity: Float  

    static func size() -> Int {      
        return sizeof(Float) * 4
    }

    func raw() -> [Float] {
        let raw = [color.0, color.1, color.2, ambientIntensity]
        return raw 
    }
}

How to implement Spot Light and Directional Light if they exist in Apple's Metal API?

Picture from SolidAngle User Manual

最佳答案

Metal API 本身没有任何像“光”这样高级的概念,就像现代 OpenGL 没有的一样——用于此类事物的 API 已经过时了 fixed-function pipeline 。使用现代低级图形 API,您需要滚动自己的光照;优秀的 Metal By Example 系列有一个 article on doing that ,尽管您可能想要阅读前面的部分以更清楚地了解发生了什么。请注意,该文章仅涉及方向灯;聚光灯要复杂得多,您需要做一些研究以找出这些通常是如何完成的,然后在 Metal 中实现该方法。

作为直接使用 Metal 的替代方法,您可能需要查看 SceneKit ,它非常强大并且通过 SCNLight 类内置了对多种类型的光的支持。

关于swift - Metal API 中的光类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40279765/

相关文章:

ios - Metal 片段着色器 uv 坐标在读取顶点颜色时发生变化

ios - ScrollView.contentOffset.y 无法移动小于 0.333 像素

swift - 值未显示在多个选择器 View 中

ios - 拖动手势的单元格将覆盖使用SwiftUI滚动列表

ios - 显示键盘时保持 UITableView 中聚焦的 UITextView 的可见性

macos - 在 mac 上使用 bundle 外的共享库安装应用程序

macos - 仅当应用程序从 cron 的打开命令打开时处理证书时应用程序出现不合理的系统错误

macos - Homebrew 拒绝链接 OpenSSL

swift - 为什么三角形渲染时边缘粗糙而不是平滑边缘? Metal 、Swift、Xcode

ios - CAMetalLayer 仅适用于 iOS 13.0