SceneKit คือเฟรมเวิร์กของ Apple สำหรับการทำงานกับกราฟิก 3D บน iOS, macOS และ tvOS ที่ให้ API ระดับสูงสำหรับสร้างฉากสามมิติโดยไม่ต้องมีความรู้เกี่ยวกับ OpenGL หรือ Metal โดยรองรับฟิสิกส์ แอนิเมชัน แสงสว่าง และการทำงานร่วมกับ ARKit ตามข้อมูลของ Apple WWDC (2025) SceneKit ถูกใช้ในแอปพลิเคชันและเกมมากกว่า 50,000 รายการ
ประเด็นสำคัญ
SceneKit คือเฟรมเวิร์กสำหรับกราฟิก 3D ที่เป็นส่วนหนึ่งของ SDK ของ Apple และเปิดตัวใน iOS 8 (2014) SceneKit ให้ API ที่อิงตามฉากอย่างสมบูรณ์ซึ่งทำงานบน Metal และ OpenGL สำหรับสร้างฉาก 3D แบบโต้ตอบ เฟรมเวิร์กรองรับการนำเข้าโมเดลในรูปแบบ Collada (DAE), Alembic (ABC), USD และ GLTF ผ่าน Model I/O
แตกต่างจาก API ระดับต่ำ (Metal, Vulkan) SceneKit รับผิดชอบการจัดการการเรนเดอร์ แสงสว่าง และฟิสิกส์ นักพัฒนาอธิบายฉากแบบประกาศ: เพิ่มโหนด กำหนดวัสดุและแอนิเมชัน SceneKit จะปรับเรขาคณิตให้เหมาะสมโดยอัตโนมัติ รวม draw calls และจัดการ LOD เมื่อจำเป็น
SceneKit สามารถทำงานร่วมกับ ARKit เพื่อแสดงวัตถุ 3D ในโลกแห่งความจริง รวมถึง Core ML สำหรับการมองเห็นด้วยเครื่องและการวิเคราะห์ฉาก ตามข้อมูลของ Apple (2025) เวอร์ชันล่าสุดของ SceneKit ใช้เฉพาะ Metal API ที่รองรับ Metal 3 และ GPU Family 9 บนชิป Apple Silicon
SceneKit ปรากฏบน macOS ในปี 2012 โดยเป็นส่วนหนึ่งของ OS X Mountain Lion และเริ่มแรกใช้ OpenGL สำหรับการเรนเดอร์ ด้วยการเปิดตัว iOS 8 เฟรมเวิร์กจึงพร้อมใช้งานบนอุปกรณ์พกพา SceneKit 2.0 (iOS 10) เพิ่มการรองรับวัสดุ PBR แสง HDR และการทำงานร่วมกับ Model I/O สำหรับการนำเข้าโมเดล
ใน iOS 12 SceneKit เปลี่ยนไปใช้ Metal อย่างสมบูรณ์ iOS 15 นำเสนอการรองรับรูปแบบ USDZ และ AR Quick Look ด้วย iOS 18 (2024) SceneKit ได้รับ การเร่งด้วยฮาร์ดแวร์สำหรับ ray tracing บนอุปกรณ์ที่มีชิป A17 Pro และ M4 ซึ่งช่วยให้เงาและการสะท้อนที่สมจริงแบบเรียลไทม์บนอุปกรณ์พกพา
สถาปัตยกรรม SceneKit อิงตามกราฟฉาก โดย SCNScene เป็นองค์ประกอบรากที่ประกอบด้วยลำดับชั้นของ SCNNode แต่ละโหนดมีโหนดย่อยและสามารถประกอบด้วยเรขาคณิต กล้อง แสง หรือตัวฟิสิกส์ ตำแหน่งของโหนดถูกกำหนดผ่าน SCNVector3 (x, y, z) ในระบบพิกัดแบบมือซ้าย
SCNScene ประกอบด้วยสถานะทั้งหมดของโลก 3D: โหนดราก rootNode การตั้งค่าพื้นหลัง แหล่งกำเนิดแสง และโลกฟิสิกส์ (SCNPhysicsWorld) ฉากสามารถโหลดจากไฟล์ .scn (รูปแบบฉาก SceneKit) หรือสร้างโดยการเขียนโปรแกรม รูปแบบ .scn เป็นแบบเปิดและอิงตาม JSON
import SceneKit
let scene = SCNScene()
scene.background.contents = UIColor.darkGray
// การสร้างกล้อง
let cameraNode = SCNNode()
cameraNode.camera = SCNCamera()
cameraNode.position = SCNVector3(0, 5, 10)
scene.rootNode.addChildNode(cameraNode)
// การสร้างลูกบาศก์พร้อมฟิสิกส์
let box = SCNBox(width: 2, height: 2, length: 2, chamferRadius: 0)
let boxNode = SCNNode(geometry: box)
boxNode.physicsBody = SCNPhysicsBody(type: SCNPhysicsBodyType.dynamic,
shape: SCNPhysicsShape(geometry: box))
scene.rootNode.addChildNode(boxNode)
คลาส SCNCamera กำหนดการฉายภาพแบบเปอร์สเปคทีฟหรือออร์โธกราฟิก พารามิเตอร์: fieldOfView (มุมมอง, ค่าเริ่มต้น 45°), zNear/zFar (ระนาบตัดใกล้/ไกล) SceneKit จัดการเมทริกซ์การฉายภาพโดยอัตโนมัติตามพารามิเตอร์เหล่านี้และอัตราส่วนภาพของหน้าจอ
SCNNode เชื่อมต่อเรขาคณิต การแปลง และตัวฟิสิกส์ โหนดสามารถว่างเปล่า (คอนเทนเนอร์สำหรับโหนดอื่น) หรือมีเรขาคณิตผ่านคุณสมบัติ geometry แต่ละโหนดมีชื่อ (name) สำหรับการค้นหาโดยโปรแกรมและสามารถทำให้เคลื่อนไหวผ่าน CAAnimation หรือ SCNTransaction ที่กำหนดไว้ล่วงหน้า
การแปลงของโหนดถูกกำหนดผ่านคุณสมบัติ position (SCNVector3), rotation (SCNVector4) และ scale (SCNVector3) สำหรับการแปลงที่ซับซ้อน จะใช้คุณสมบัติ transform (SCNMatrix4) นอกจากนี้ยังมี pivot — การออฟเซตศูนย์กลางการแปลง และ worldPosition — ตำแหน่งสัมบูรณ์ในพื้นที่โลกโดยไม่ขึ้นกับลำดับชั้น
SCNView คือ UIView สำหรับแสดง SCNScene คุณสมบัติ allowsCameraControl เปิดใช้งานการควบคุมกล้องด้วยท่าทาง (เลื่อน หมุน ซูม) สำหรับการดีบัก มี showsStatistics (FPS, draw calls, รูปหลายเหลี่ยม) และ debugOptions (wireframe, bounding boxes)
ใน SwiftUI, SceneKit ถูกฝังผ่าน SceneView ซึ่งห่อหุ้ม SCNView และรองรับการผูกกับพารามิเตอร์ฉาก ตามข้อมูลของ Apple (2025) SceneView ใช้เรนเดอร์ Metal เดียวกับ SCNView โดยไม่มีโอเวอร์เฮดเพิ่มเติมสำหรับสะพานเชื่อมระหว่าง SwiftUI และ UIKit
SCNMaterial กำหนดว่าพื้นผิวของเรขาคณิตมีปฏิสัมพันธ์กับแสงอย่างไร SceneKit รองรับ PBR (การเรนเดอร์ตามหลักฟิสิกส์) ผ่าน SCNMaterial.LightingModel.physicallyBased ซึ่งใช้พารามิเตอร์ roughness, metalness, albedo และ normal วัสดุ PBR ดูสมจริงภายใต้แสงใดๆ โดยไม่ต้องปรับความมันเงาด้วยตนเอง
SCNMaterial มีหลายช่อง: diffuse (สี/พื้นผิว), specular (ความมันเงา), normal (แผนที่ปกติ), emission (การเรืองแสง), roughness (ความหยาบ) และ metalness (ความเป็นโลหะ) แต่ละช่องสามารถประกอบด้วย UIColor, UIImage, CALayer หรือ SKScene สำหรับพื้นผิวแบบเคลื่อนไหว
// วัสดุ PBR สำหรับวัตถุ 3D
let sphere = SCNSphere(radius: 1.5)
let material = SCNMaterial()
material.lightingModel = SCNMaterial.LightingModel.physicallyBased
material.diffuse.contents = UIColor.orange
material.roughness.contents = 0.3
material.metalness.contents = 0.8
sphere.materials = [material]
let sphereNode = SCNNode(geometry: sphere)
sphereNode.position = SCNVector3(0, 2, -5)
พารามิเตอร์ roughness 0.3 กับ metalness 0.8 สร้างวัสดุที่คล้ายโลหะขัดเงาที่มีการเคลือบด้าน สำหรับไดอิเล็กทริก (ไม้, พลาสติก) ให้ตั้ง metalness เป็น 0 และสำหรับโลหะให้ใกล้ 1.0 วัสดุ PBR ปรับตัวเข้ากับแสง HDR ของฉากโดยอัตโนมัติ
SCNLight รองรับแหล่งกำเนิดแสงหลายประเภท: omni (จุด), directional (ทิศทาง), spot (สปอตไลต์), ambient (โดยรอบ) และ area (พื้นที่) แต่ละแหล่งมีความเข้ม (intensity), สี (color) และสามารถทอดเงา (castsShadow) SceneKit จัดการเงาโดยอัตโนมัติผ่านแผนที่เงา
SceneKit รองรับ แสง HDR พร้อมการบีบอัดโทน (tone mapping) คุณสมบัติ wantsHDR บน SCNView เปิดใช้งานช่วงไดนามิกที่ขยาย คุณลักษณะของกล้อง: whitePoint, adaptativeLuminance และ exposure ปรับภาพให้เข้ากับความสว่างของฉาก สร้างเอฟเฟกต์การเปิดรับแสงแบบถ่ายภาพ
SCNPhysicsBody จำลองฟิสิกส์ของวัตถุแข็ง: แรงโน้มถ่วง การชน และแรงเสียดทาน ประเภทของวัตถุ: .static (อยู่กับที่), .dynamic (ภายใต้แรง) และ .kinematic (ควบคุมโดยโปรแกรม) รูปร่างของวัตถุถูกกำหนดผ่าน SCNPhysicsShape ซึ่งสามารถอิงตามเรขาคณิตของโหนดหรือรูปแบบที่เรียบง่าย (box, sphere, concave polyhedron)
SCNPhysicsWorld จัดการฟิสิกส์ระดับโลกของฉาก: แรงโน้มถ่วง ความเร็วจำลอง และการตรวจจับการชนผ่านตัวแทน SCNPhysicsContactDelegate SceneKit รองรับข้อต่อทางฟิสิกส์ (SCNPhysicsHingeJoint, SCNPhysicsBallJoint, SCNPhysicsSliderJoint) สำหรับสร้างกลไกและวัตถุที่เชื่อมต่อกัน
การพัฒนาบน SceneKit มักเริ่มต้นด้วยการโหลดโมเดล 3D ผ่าน Model I/O หรือไฟล์ .scn ตัวแก้ไขฉากใน Xcode (Scene Editor) ช่วยให้วางวัตถุด้วยภาพ กำหนดค่าวัสดุและแสงสว่างโดยไม่ต้องเขียนโค้ด ไฟล์ .scn ถูกบันทึกในรูปแบบ JSON และรองรับการควบคุมเวอร์ชันผ่าน git
Model I/O (ModelIO.framework) เป็นเครื่องมือที่มีประสิทธิภาพสำหรับการนำเข้า ส่งออก และประมวลผลโมเดล 3D SceneKit สามารถใช้วัตถุ MDLAsset โดยตรง โดยแปลงเป็น SCNScene รูปแบบที่รองรับ: USD, USDZ, OBJ, STL, PLY, Collada (DAE) และ Alembic (ABC) โมเดลที่มีแอนิเมชัน (แอนิเมชันโครงกระดูก, การแปลงรูป) ก็สามารถนำเข้าได้
// การโหลดโมเดล 3D ผ่าน Model I/O
import ModelIO
let url = Bundle.main.url(forResource: "robot",
withExtension: "usdz")!
let asset = MDLAsset(url: url)
let scene = SCNScene(mdlAsset: asset)
// การค้นหาโหนดตามชื่อสำหรับการกำหนดค่า
if let robot = scene.rootNode.childNode(
withName: "RobotArmature", recursively: true
) {
robot.position = SCNVector3(0, 0, -3)
}
หลังจากนำเข้า โมเดลสามารถทำให้เคลื่อนไหวผ่าน CAAnimation ที่คัดลอกจาก MDLAnimation หรือผ่าน SCNTransaction สำหรับการเปลี่ยนแปลงคุณสมบัติอย่างนุ่มนวล ระบบแอนิเมชันของ SceneKit รองรับการผสมระหว่างแอนิเมชันและการซิงโครไนซ์กับฟิสิกส์เพื่อสร้างการเคลื่อนไหวที่สมจริง
SCNTransaction ช่วยให้จัดกลุ่มการเปลี่ยนแปลงพารามิเตอร์ฉากในบล็อกแอนิเมชันตามระยะเวลาที่กำหนด เมธอด begin() และ commit() ล้อมรอบการเปลี่ยนแปลง และ duration กำหนดเวลาแอนิเมชัน รองรับธุรกรรมแบบซ้อนสำหรับแอนิเมชันแบบขนานที่มีระยะเวลาต่างกัน บล็อก completion จะทำงานหลังจากแอนิเมชันเสร็จสิ้น
สำหรับแอนิเมชันโครงกระดูก SceneKit รองรับ SCNAnimation และ SCNMorpher สำหรับ blend shapes (morph targets) แต่ละแอนิเมชันสามารถวนซ้ำ ปรับขนาดเวลา และผสมกับแอนิเมชันอื่นผ่านการผสมแบบบวก ตามข้อมูลของ Apple (2025) SceneKit รองรับแอนิเมชันผสมพร้อมกันสูงสุด 4 รายการต่อโครงกระดูก
SCNParticleSystem คือระบบอนุภาคในตัวสำหรับสร้างเอฟเฟกต์: ควัน ไฟ ฝน และประกายไฟ อนุภาคสามารถถูกปล่อยจากจุด ทรงกลม ลูกบาศก์ หรือพื้นผิวเรขาคณิต พารามิเตอร์: birthRate, particleLifeSpan, speed, acceleration และ colorOverLife ระบบอนุภาคทำงานบน GPU เพื่อประสิทธิภาพสูงสุด
ตามข้อมูลของ Apple (2025) SCNParticleSystem รองรับอนุภาคสูงถึง 100,000 ชิ้นที่ 60 FPS บนอุปกรณ์ที่มี A16+ อนุภาคสามารถตอบสนองต่อการชนกับตัวฟิสิกส์ของฉาก สำหรับเอฟเฟกต์ที่ซับซ้อน สามารถรวมระบบอนุภาคหลายระบบที่มีพารามิเตอร์ต่างกันและแนบกับโหนดที่เคลื่อนที่ได้
SceneKit เป็นเฟรมเวิร์กระดับสูงที่ต้องการสำหรับแอปพลิเคชัน ARKit ARSCNView ขยาย SCNView และซิงโครไนซ์โลก 3D เสมือนกับสภาพแวดล้อมจริงโดยอัตโนมัติ การวิเคราะห์ภาพ การตรวจจับระนาบ และการติดตามใบหน้าดำเนินการโดย ARKit ในขณะที่การเรนเดอร์ดำเนินการโดย SceneKit
ARSCNView รองรับคุณสมบัติทั้งหมดของ SCNView แต่แทนที่กล้องฉากด้วยกล้องจริงของอุปกรณ์ ARKit วิเคราะห์วิดีโอจากกล้องและสร้าง ARAnchor ซึ่ง SceneKit แปลงเป็น SCNNode เซสชัน ARKit จัดการผ่านคุณสมบัติ session ซึ่งกำหนดค่าด้วยคอนฟิกูเรชัน (ARWorldTrackingConfiguration, ARFaceTrackingConfiguration)
import ARKit
class ARViewController: UIViewController,
ARSessionDelegate {
let sceneView = ARSCNView()
override func viewDidLoad() {
super.viewDidLoad()
sceneView.session.run(
ARWorldTrackingConfiguration()
)
sceneView.autoenablesDefaultLighting = true
sceneView.delegate = self
}
}
คุณสมบัติ autoenablesDefaultLighting เพิ่มแสงสว่างในตัวที่ตรงกับสภาพแวดล้อมจริง ARKit 6 (iOS 18) รองรับ Location Anchors สำหรับเชื่อมโยงวัตถุ 3D กับพิกัดทางภูมิศาสตร์และ Room Tracking สำหรับการทำแผนที่พื้นที่ภายในด้วยรายละเอียดระดับเฟอร์นิเจอร์
ARKit ตรวจจับระนาบแนวนอนและแนวตั้ง (พื้น, โต๊ะ, ผนัง) ผ่านตัวแทน didAdd/didUpdate/didRemove anchor โหนด SceneKit ที่เชื่อมโยงกับ ARPlaneAnchor จะติดตามตำแหน่งระนาบโดยอัตโนมัติแบบเรียลไทม์ สำหรับการวางวัตถุ ให้ใช้เมธอด hitTest บน ARSCNView หรือ raycastQuery
ตามข้อมูลของ Apple (2025) ระยะการติดตามสูงสุดของ ARKit บน A17 Pro คือ 50 เมตร ที่ความสว่างตั้งแต่ 10 ลักซ์ SceneKit + ARKit ให้เวลาแฝงแบบ end-to-end (motion-to-photon) น้อยกว่า 20 ms ซึ่งสำคัญสำหรับเกม AR และแอปพลิเคชันอุตสาหกรรมที่มีการซ้อนทับคำแนะนำ 3D บนอุปกรณ์จริง
คำถามที่พบบ่อย
SceneKit คือเฟรมเวิร์กของ Apple สำหรับกราฟิก 3D ที่ช่วยให้สร้างฉากสามมิติแบบโต้ตอบได้โดยไม่ต้องเขียนโปรแกรมระดับต่ำ ใช้สำหรับเกม แอปพลิเคชัน AR การแสดงข้อมูลเป็นภาพ และโปรแกรมแก้ไข 3D บน iOS, macOS และ tvOS
SceneKit คือ API ระดับสูงพร้อมเรนเดอร์และฟิสิกส์ในตัว เหมาะสำหรับงาน 3D ทั่วไป Metal คือ API ระดับต่ำสำหรับควบคุม GPU อย่างสมบูรณ์ SceneKit ใช้ Metal ภายใน ในขณะที่ Metal เหมาะสำหรับเอฟเฟกต์การเรนเดอร์แบบกำหนดเอง
SceneKit ผ่าน Model I/O รองรับ USD, USDZ, OBJ, STL, Collada (DAE), Alembic (ABC), PLY และ GLTF รูปแบบดั้งเดิมคือ .scn (รูปแบบฉาก SceneKit) ที่อิงตาม JSON สามารถสร้างเรขาคณิตโดยการเขียนโปรแกรมผ่าน SCNGeometry
ใช้ LOD (ระดับรายละเอียด) สำหรับวัตถุที่อยู่ไกล รวมเรขาคณิตที่มีวัสดุเดียวกัน จำกัดเงาและแหล่งกำเนิดแสงไว้ที่ 3–4 เปิด Statistics เพื่อตรวจสอบ FPS และ draw calls แบบเรียลไทม์
ได้ ผ่าน ARSCNView — ส่วนขยายของ SCNView สำหรับ ARKit SceneKit ซิงโครไนซ์ฉาก 3D กับโลกแห่งความจริงโดยอัตโนมัติ รองรับการตรวจจับระนาบ ใบหน้า และภาพ นี่เป็นวิธีที่ง่ายที่สุดในการเพิ่มวัตถุ 3D ใน AR
สรุป
เราจะพัฒนาแอปพลิเคชันบนมือถือแบบครบวงจร
IT Sectr สร้างแอปพลิเคชัน iOS และ Android สำหรับสตาร์ทอัพและธุรกิจตั้งแต่ปี 2017 เราจะให้คำแนะนำและเสนอวิธีแก้ปัญหาที่ดีที่สุดแก่คุณ