SceneKit হল iOS, macOS এবং tvOS-এ 3D গ্রাফিক্স নিয়ে কাজ করার জন্য Apple-এর একটি ফ্রেমওয়ার্ক, যা OpenGL বা Metal-এর জ্ঞান ছাড়াই ত্রি-মাত্রিক দৃশ্য তৈরি করার জন্য একটি উচ্চ-স্তরের API প্রদান করে। এটি ফিজিক্স, অ্যানিমেশন, আলোকসজ্জা এবং ARKit-এর সাথে ইন্টিগ্রেশন সমর্থন করে। Apple WWDC (2025) অনুসারে, SceneKit 50 হাজারেরও বেশি অ্যাপ্লিকেশন এবং গেমে ব্যবহৃত হয়।
মূল পয়েন্ট
SceneKit হল 3D গ্রাফিক্সের জন্য একটি ফ্রেমওয়ার্ক যা Apple SDK-এর অংশ এবং iOS 8 (2014)-এ প্রবর্তিত হয়েছিল। SceneKit ইন্টারঅ্যাকটিভ 3D দৃশ্য তৈরি করার জন্য Metal এবং OpenGL-এর উপরে কাজ করা একটি সম্পূর্ণ দৃশ্য-ভিত্তিক API প্রদান করে। ফ্রেমওয়ার্কটি Model I/O-এর মাধ্যমে Collada (DAE), Alembic (ABC), USD এবং GLTF ফর্ম্যাটে মডেল আমদানি সমর্থন করে।
নিম্ন-স্তরের API (Metal, Vulkan) থেকে ভিন্ন, SceneKit রেন্ডারিং, আলোকসজ্জা এবং ফিজিক্স ব্যবস্থাপনার দায়িত্ব নেয়। ডেভেলপার ঘোষণামূলকভাবে দৃশ্য বর্ণনা করে: নোড যোগ করে, মেটেরিয়াল এবং অ্যানিমেশন সেট করে। SceneKit স্বয়ংক্রিয়ভাবে জ্যামিতি অপ্টিমাইজ করে, ড্র কল মার্জ করে এবং প্রয়োজন হলে LOD পরিচালনা করে।
SceneKit বাস্তব জগতে 3D অবজেক্ট প্রদর্শনের জন্য ARKit-এর সাথে, পাশাপাশি মেশিন ভিশন এবং দৃশ্য বিশ্লেষণের জন্য Core ML-এর সাথে কাজ করতে পারে। Apple (2025) অনুসারে, SceneKit-এর সর্বশেষ সংস্করণ Apple Silicon চিপগুলিতে Metal 3 এবং GPU Family 9-এর সমর্থন সহ শুধুমাত্র Metal API ব্যবহার করে।
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 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 জ্যামিতি, ট্রান্সফর্মেশন এবং ফিজিক্স বডি সংযুক্ত করে। নোড খালি হতে পারে (অন্যান্য নোডের জন্য কন্টেইনার) বা জ্যামিতি প্রপার্টির মাধ্যমে জ্যামিতি ধারণ করতে পারে। প্রতিটি নোডের প্রোগ্রামেটিক অনুসন্ধানের জন্য একটি নাম (name) থাকে এবং এটি CAAnimation বা পূর্বনির্ধারিত SCNTransaction-এর মাধ্যমে অ্যানিমেট করা যেতে পারে।
নোডের ট্রান্সফর্মেশন position (SCNVector3), rotation (SCNVector4) এবং scale (SCNVector3) প্রপার্টির মাধ্যমে নির্ধারিত হয়। জটিল ট্রান্সফর্মেশনের জন্য transform প্রপার্টি (SCNMatrix4) ব্যবহার করা হয়। এছাড়াও উপলব্ধ হল pivot — ট্রান্সফর্মেশন সেন্টার অফসেট, এবং worldPosition — শ্রেণিবিন্যাস নির্বিশেষে বিশ্ব স্থানে পরম অবস্থান।
SCNView SCNScene প্রদর্শনের জন্য একটি UIView। allowsCameraControl প্রপার্টি ইশারা (প্যান, ঘোরানো, জুম) দ্বারা ক্যামেরা নিয়ন্ত্রণ সক্ষম করে। ডিবাগিংয়ের জন্য showsStatistics (FPS, ড্র কল, পলিগন) এবং debugOptions (ওয়্যারফ্রেম, বাউন্ডিং বক্স) উপলব্ধ।
SwiftUI-তে, SceneKit SceneView-এর মাধ্যমে এমবেড করা হয়, যা SCNView-কে মোড়ানো করে এবং সিন প্যারামিটারে বাইন্ডিং সমর্থন করে। Apple (2025) অনুসারে, SceneView SwiftUI এবং UIKit-এর মধ্যে ব্রিজের জন্য অতিরিক্ত ওভারহেড ছাড়াই SCNView-এর মতো একই Metal রেন্ডারার ব্যবহার করে।
SCNMaterial সংজ্ঞায়িত করে কীভাবে জ্যামিতির পৃষ্ঠ আলোর সাথে মিথস্ক্রিয়া করে। SceneKit roughness, metalness, albedo এবং normal প্যারামিটার ব্যবহার করে SCNMaterial.LightingModel.physicallyBased-এর মাধ্যমে PBR (ফিজিক্যালি বেসড রেন্ডারিং) সমর্থন করে। PBR মেটেরিয়াল ম্যানুয়াল স্পেকুলার সমন্বয় ছাড়াই যেকোনো আলোকসজ্জায় বাস্তবসম্মত দেখায়।
SCNMaterial-এর বেশ কয়েকটি স্লট রয়েছে: diffuse (রঙ/টেক্সচার), specular (স্পেকুলার চকচকে), normal (নরমাল ম্যাপ), emission (আভা), roughness (রুক্ষতা) এবং metalness (ধাতবতা)। প্রতিটি স্লটে অ্যানিমেটেড টেক্সচারের জন্য UIColor, UIImage, CALayer বা SKScene থাকতে পারে।
// 3D অবজেক্টের জন্য PBR মেটেরিয়াল
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 আলোকসজ্জা সমর্থন করে। SCNView-এ wantsHDR প্রপার্টি বর্ধিত ডায়নামিক রেঞ্জ সক্ষম করে। ক্যামেরা অ্যাট্রিবিউট: whitePoint, adaptativeLuminance এবং exposure ছবিটিকে সিনের উজ্জ্বলতার সাথে খাপ খাইয়ে একটি ফটোগ্রাফিক এক্সপোজার প্রভাব তৈরি করে।
SCNPhysicsBody কঠিন বস্তুর ফিজিক্স অনুকরণ করে: মাধ্যাকর্ষণ, সংঘর্ষ এবং ঘর্ষণ। বডির প্রকার: .static (স্থির), .dynamic (বলের অধীন) এবং .kinematic (প্রোগ্রামেটিকভাবে নিয়ন্ত্রিত)। বডির আকৃতি SCNPhysicsShape-এর মাধ্যমে সংজ্ঞায়িত করা হয়, যা নোড জ্যামিতি বা সরলীকৃত আকার (box, sphere, concave polyhedron) ভিত্তিক হতে পারে।
SCNPhysicsWorld সিনের বৈশ্বিক ফিজিক্স পরিচালনা করে: মাধ্যাকর্ষণ, সিমুলেশন গতি এবং SCNPhysicsContactDelegate-এর মাধ্যমে সংঘর্ষ সনাক্তকরণ। SceneKit মেকানিজম এবং সংযুক্ত বস্তু তৈরি করার জন্য ফিজিক্স জয়েন্ট (SCNPhysicsHingeJoint, SCNPhysicsBallJoint, SCNPhysicsSliderJoint) সমর্থন করে।
SceneKit-এ ডেভেলপমেন্ট সাধারণত Model I/O বা .scn ফাইলের মাধ্যমে 3D মডেল লোড করার মাধ্যমে শুরু হয়। Xcode-এ সিন এডিটর (Scene Editor) কোড ছাড়াই দৃশ্যমানভাবে বস্তু স্থাপন, মেটেরিয়াল এবং আলোকসজ্জা কনফিগার করার অনুমতি দেয়। .scn ফাইলগুলি JSON ফর্ম্যাটে সংরক্ষিত হয় এবং git-এর মাধ্যমে সংস্করণ নিয়ন্ত্রণ সমর্থন করে।
Model I/O (ModelIO.framework) 3D মডেল আমদানি, রপ্তানি এবং প্রক্রিয়াকরণের জন্য একটি শক্তিশালী টুল। SceneKit সরাসরি MDLAsset অবজেক্ট ব্যবহার করতে পারে,将它们কে SCNScene-এ রূপান্তর করে। সমর্থিত ফর্ম্যাট: USD, USDZ, OBJ, STL, PLY, Collada (DAE) এবং Alembic (ABC)। অ্যানিমেটেড মডেল (কঙ্কাল অ্যানিমেশন, মরফিং) ও আমদানি করা হয়।
// Model I/O-এর মাধ্যমে 3D মডেল লোড করা
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)
}
আমদানির পরে, মডেলটি MDLAnimation থেকে কপি করা CAAnimation-এর মাধ্যমে, বা মসৃণ প্রপার্টি পরিবর্তনের জন্য SCNTransaction-এর মাধ্যমে অ্যানিমেট করা যেতে পারে। SceneKit-এর অ্যানিমেশন সিস্টেম অ্যানিমেশনের মধ্যে ব্লেন্ডিং এবং বাস্তবসম্মত চলাফেরা তৈরি করতে ফিজিক্সের সাথে সিঙ্ক্রোনাইজেশন সমর্থন করে।
SCNTransaction একটি নির্দিষ্ট সময়কাল সহ অ্যানিমেশন ব্লকে সিন প্যারামিটার পরিবর্তনগুলিকে গ্রুপ করার অনুমতি দেয়। begin() এবং commit() মেথডগুলি পরিবর্তনগুলিকে ঘিরে রাখে, এবং duration অ্যানিমেশন সময় নির্ধারণ করে। ভিন্ন সময়কালের সমান্তরাল অ্যানিমেশনের জন্য নেস্টেড ট্রানজেকশন সমর্থিত। অ্যানিমেশন শেষ হওয়ার পর একটি completion ব্লক এক্সিকিউট হয়।
কঙ্কাল অ্যানিমেশনের জন্য, SceneKit ব্লেন্ড শেপের (মর্ফ টার্গেট) জন্য SCNAnimation এবং SCNMorpher সমর্থন করে। প্রতিটি অ্যানিমেশন লুপ করা, সময়-স্কেল করা এবং অ্যাডিটিভ ব্লেন্ডিং-এর মাধ্যমে অন্যান্য অ্যানিমেশনের সাথে মিশ্রিত করা যেতে পারে। Apple (2025) অনুসারে, SceneKit প্রতি কঙ্কালে একসাথে 4টি মিশ্রিত অ্যানিমেশন সমর্থন করে।
SCNParticleSystem হল একটি বিল্ট-ইন পার্টিকেল সিস্টেম যা ইফেক্ট তৈরি করে: ধোঁয়া, আগুন, বৃষ্টি এবং স্ফুলিঙ্গ। কণা একটি বিন্দু, গোলক, ঘনক বা জ্যামিতি পৃষ্ঠ থেকে নির্গত হতে পারে। প্যারামিটার: birthRate, particleLifeSpan, speed, acceleration এবং colorOverLife। পার্টিকেল সিস্টেম সর্বোচ্চ পারফরম্যান্সের জন্য GPU-তে চলে।
Apple (2025) অনুসারে, SCNParticleSystem A16+ যুক্ত ডিভাইসে 60 FPS-এ 100 হাজার কণা পর্যন্ত সমর্থন করে। কণা সিনের ফিজিক্স বডির সাথে সংঘর্ষে প্রতিক্রিয়া জানাতে পারে। জটিল ইফেক্টের জন্য, বিভিন্ন প্যারামিটার সহ একাধিক পার্টিকেল সিস্টেম একত্রিত এবং চলমান নোডের সাথে সংযুক্ত করা যেতে পারে।
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) 3D অবজেক্টকে ভৌগলিক স্থানাঙ্কে বাঁধার জন্য Location Anchors এবং আসবাবপত্র-স্তরের বিশদ সহ অভ্যন্তরীণ স্থান ম্যাপ করার জন্য Room Tracking সমর্থন করে।
ARKit didAdd/didUpdate/didRemove অ্যাঙ্কর ডেলিগেটের মাধ্যমে অনুভূমিক এবং উল্লম্ব প্লেন (মেঝে, টেবিল, দেয়াল) সনাক্ত করে। ARPlaneAnchor-এর সাথে সংযুক্ত একটি SceneKit নোড স্বয়ংক্রিয়ভাবে রিয়েল টাইমে প্লেনের অবস্থান ট্র্যাক করে। অবজেক্ট স্থাপনের জন্য, ARSCNView-এ hitTest মেথড বা raycastQuery ব্যবহার করা হয়।
Apple (2025) অনুসারে, A17 Pro-তে ARKit-এর সর্বোচ্চ ট্র্যাকিং দূরত্ব 10 লাক্স আলোতে 50 মিটার। SceneKit + ARKit 20 ms-এর কম এন্ড-টু-এন্ড লেটেন্সি (motion-to-photon) প্রদান করে, যা AR গেম এবং বাস্তব সরঞ্জামের উপর 3D নির্দেশনা ওভারলে সহ শিল্প অ্যাপ্লিকেশনের জন্য গুরুত্বপূর্ণ।
সচরাচর জিজ্ঞাসা
SceneKit হল Apple-এর 3D গ্রাফিক্সের ফ্রেমওয়ার্ক যা নিম্ন-স্তরের প্রোগ্রামিং ছাড়াই ইন্টারঅ্যাকটিভ ত্রি-মাত্রিক দৃশ্য তৈরি করতে দেয়। এটি iOS, macOS এবং tvOS-এ গেম, AR অ্যাপ্লিকেশন, ডেটা ভিজুয়ালাইজেশন এবং 3D এডিটরের জন্য ব্যবহৃত হয়।
SceneKit হল একটি উচ্চ-স্তরের API যা বিল্ট-ইন রেন্ডারার এবং ফিজিক্স সহ, সাধারণ 3D কাজের জন্য উপযুক্ত। Metal হল সম্পূর্ণ GPU নিয়ন্ত্রণের জন্য নিম্ন-স্তরের API। SceneKit অভ্যন্তরীণভাবে Metal ব্যবহার করে, যখন Metal কাস্টম রেন্ডারিং ইফেক্টের জন্য উপযুক্ত।
SceneKit Model I/O-এর মাধ্যমে USD, USDZ, OBJ, STL, Collada (DAE), Alembic (ABC), PLY এবং GLTF সমর্থন করে। নেটিভ ফর্ম্যাট হল JSON-ভিত্তিক .scn (SceneKit সিন ফর্ম্যাট)। SCNGeometry-এর মাধ্যমে প্রোগ্রামেটিকভাবে জ্যামিতি তৈরি করা যেতে পারে।
দূরের বস্তুর জন্য LOD (লেভেল অফ ডিটেল) ব্যবহার করুন, একই মেটেরিয়ালের জ্যামিতি মার্জ করুন, ছায়া এবং আলোর উৎস 3–4-এ সীমাবদ্ধ করুন। রিয়েল টাইমে FPS এবং ড্র কল পর্যবেক্ষণ করতে Statistics সক্ষম করুন।
হ্যাঁ, ARSCNView-এর মাধ্যমে — ARKit-এর জন্য SCNView-এর একটি এক্সটেনশন। SceneKit স্বয়ংক্রিয়ভাবে 3D দৃশ্যকে বাস্তব জগতের সাথে সিঙ্ক্রোনাইজ করে, প্লেন, মুখ এবং ইমেজ সনাক্তকরণ সমর্থন করে। AR-তে 3D অবজেক্ট যোগ করার এটি সবচেয়ে সহজ উপায়।
সারাংশ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।
আরও পড়ুন