Skia হল একটি উচ্চ-ক্ষমতাসম্পন্ন 2D গ্রাফিক্স লাইব্রেরি যা ওপেন সোর্স, C++-এ লেখা, এবং Flutter-এর প্রাথমিক রেন্ডারিং ইঞ্জিন হিসেবে কাজ করে। এটি উচ্চ-স্তরের উইজেট এবং ইন্টারফেস উপাদানগুলোকে স্ক্রিনের পিক্সেলে রূপান্তর করার জন্য দায়িত্বশীল, যা CPU-র মাধ্যমে সফটওয়্যার রেন্ডারিং এবং OpenGL, Vulkan এবং Metal-এর মাধ্যমে হার্ডওয়্যার ত্বরণ সমর্থন করে। Skia Documentation (2025) অনুসারে, Skia প্রতিদিন Android, Chrome এবং Flutter ডিভাইসে 2 বিলিয়নেরও বেশি রেন্ডার করা ফ্রেম প্রক্রিয়া করে।
মূল বিষয়
Skia হল একটি ক্রস-প্ল্যাটফর্ম 2D গ্রাফিক্স লাইব্রেরি যা Google দ্বারা তৈরি এবং BSD লাইসেন্সের অধীনে উপলব্ধ। এটি জ্যামিতিক আকৃতি, টেক্সট, ইমেজ এবং ছায়া আঁকার জন্য একটি ইউনিফাইড API প্রদান করে, অন্তর্নিহিত গ্রাফিক্স ব্যাকএন্ড থেকে বিমূর্ত হয়ে। Skia C++-এ লেখা এবং মোবাইল ফোন থেকে সার্ভার পর্যন্ত বিস্তৃত ডিভাইসে কাজ করার জন্য অপ্টিমাইজড।
Skia-র ইতিহাস 2005 সালে Skia Inc. কোম্পানির একটি মালিকানাধীন লাইব্রেরি হিসেবে শুরু হয়েছিল। 2007 সালে Google এটি অধিগ্রহণ করে, সোর্স কোড ওপেন করে এবং নিজের পণ্যে ব্যবহার শুরু করে। আজ, Skia হল Google Chrome (Chrome OS সহ), Android (সংস্করণ 4.0 থেকে) এবং অবশ্যই Flutter-এর প্রধান গ্রাফিক্স ইঞ্জিন। লাইব্রেরিটি Google টিম দ্বারা রক্ষণাবেক্ষণ করা হয় এবং ক্রমাগত উন্নত করা হয়: নতুন ব্যাকএন্ড, কর্মক্ষমতা অপ্টিমাইজেশন এবং আধুনিক গ্রাফিক্স API-র জন্য সমর্থন যুক্ত করা হয়।
Skia-র মূল বৈশিষ্ট্য হল এটি শুধুমাত্র প্রিমিটিভ আঁকার জন্য ফাংশনের সেট নয়। এটি একটি সম্পূর্ণ গ্রাফিক্স পাইপলাইন যা কার্ভ রাস্টারাইজেশন (পাথ), অ্যান্টি-আলিয়াসিং, মাস্ক ওভারলে, স্বচ্ছতা ব্যবস্থাপনা এবং রঙ সংশোধন অন্তর্ভুক্ত করে। Skia PNG, JPEG, WebP এবং GIF ইমেজ ফরম্যাট সমর্থন করে, এবং গ্লিফ শেপিংয়ের জন্য HarfBuzz ইঞ্জিনের মাধ্যমে টেক্সট রেন্ডার করতে পারে।
Cairo (GTK-তে ব্যবহৃত) বা Quartz 2D (macOS-এ ব্যবহৃত) থেকে ভিন্ন, Skia মূলত বিভিন্ন গ্রাফিক্স API সহ একাধিক প্ল্যাটফর্মে কাজ করার জন্য ডিজাইন করা হয়েছিল। এটি Flutter-এর মতো ক্রস-প্ল্যাটফর্ম ফ্রেমওয়ার্কে এটিকে একটি সুবিধা দেয়। Cairo সফটওয়্যার রেন্ডারিংয়ের দিকে ভিত্তিক, যেখানে Skia শুরু থেকেই GPU ত্বরণ সমর্থন করেছে, যা ইন্টারফেস অ্যানিমেশনের জন্য গুরুত্বপূর্ণ।
Skia আর্কিটেকচার একটি বহু-স্তরবিশিষ্ট পাইপলাইন হিসাবে নির্মিত, যেখানে প্রতিটি স্তর গ্রাফিক্স কমান্ডকে পিক্সেলে রূপান্তরের একটি নির্দিষ্ট ধাপের জন্য দায়িত্বশীল। এই কাঠামো অন্তর্নিহিত গ্রাফিক্স API থেকে স্বাধীনভাবে উপরের স্তরগুলির পুনঃব্যবহারের অনুমতি দেয়।
শীর্ষ স্তর — Canvas API — ডেভেলপারকে আঁকার জন্য একটি বিমূর্ততা প্রদান করে। drawRect, drawCircle, drawPath, drawText পদ্ধতিগুলি জ্যামিতিক প্যারামিটার এবং শৈলী (রং, স্বচ্ছতা, রূপান্তর) গ্রহণ করে। Canvas এই কমান্ডগুলোকে অপারেশনের একটি অনুক্রমে রূপান্তর করে যা Skia Pipeline-এ পাঠানো হয় — একটি অভ্যন্তরীণ কমান্ড গ্রাফ যা নির্বাহের আগে অপ্টিমাইজ করা হয়।
মধ্য স্তর — Surface এবং Device — লক্ষ্য বাফার পরিচালনা করে যাতে রেন্ডারিং ঘটে। Surface নির্দিষ্ট আকার, রঙের স্থান এবং ব্যাকএন্ড প্রকারের সাথে তৈরি করা হয়। Device একটি নির্দিষ্ট রেন্ডারিং ব্যাকএন্ড প্রয়োগ করে: CPU রাস্টারাইজার (Raster), OpenGL (GL), Vulkan (Vk) বা Metal (Mt)। Device-এ প্রতিটি ড্রইং অপারেশনের জন্য নির্দিষ্ট ব্যাকএন্ডের অপ্টিমাইজড বাস্তবায়ন থাকে।
নিচের স্তর — Ganesha (GPU ব্যাকএন্ড) — হার্ডওয়্যার-ত্বরণযুক্ত রেন্ডারিং প্রয়োগ করে। Ganesha পাথ রাস্টারাইজেশন, গ্রেডিয়েন্ট ফিল এবং ইফেক্ট ওভারলের জন্য GPU ব্যবহার করে। এটি কমান্ডগুলোকে ব্যাচে সংগ্রহ করে এবং GPU অবস্থা সুইচিং কমিয়ে দেয়। প্রতিটি গ্রাফিক্স API-র নিজস্ব Ganesha বাস্তবায়ন রয়েছে: Skia GL OpenGL-এর জন্য, Skia Vulkan Vulkan-এর জন্য, Skia Metal Metal-এর জন্য।
Skia প্রভাব বর্ণনা করার জন্য নিজস্ব শেডার ভাষা SkSL (Skia Shading Language) ব্যবহার করে। SkSL কোড SPIR-V (মধ্যবর্তী উপস্থাপনা) তে কম্পাইল হয়, যা পরে ব্যাকএন্ড-নির্দিষ্ট শেডার ফরম্যাটে (GLSL, HLSL, MSL) অনুবাদিত হয়। এটি প্ল্যাটফর্ম নির্বিশেষে গ্রাফিক্স প্রভাব বর্ণনা করার একটি ইউনিফাইড উপায় প্রদান করে।
Flutter সমস্ত প্ল্যাটফর্মে প্রাথমিক রেন্ডারিং ইঞ্জিন হিসেবে Skia ব্যবহার করে: Android, iOS, Web, Windows, macOS এবং Linux। যখন একটি Flutter অ্যাপ একটি ফ্রেম রেন্ডার করে, উইজেটগুলো RenderObject ট্রিতে রূপান্তরিত হয়, যা পরে Engine স্তরে (C++-এ) পাঠানো হয়, এবং Engine চূড়ান্ত রেন্ডারিংয়ের জন্য Skia ব্যবহার করে।
ফ্রেম রেন্ডারিং প্রক্রিয়ায় বেশ কয়েকটি ধাপ অন্তর্ভুক্ত। প্রথমে, Flutter Engine একটি Display List তৈরি করে — Canvas API কলের একটি অনুক্রম যা বর্ণনা করে কী এবং কীভাবে আঁকতে হবে। তারপর এই তালিকাটি Skia-তে পাঠানো হয়, যা অপারেশনগুলোকে পার্টিশনে (স্ক্রিন এলাকা) বিভক্ত করে, গভীরতা অনুসারে সাজায় এবং সংশ্লিষ্ট রেন্ডারিং ব্যাকএন্ডে পাঠায়। GPU ত্বরণ স্বয়ংক্রিয়ভাবে সক্রিয় হয় যদি Skia একটি উপলব্ধ গ্রাফিক্স API সনাক্ত করে।
Flutter-এ Skia-র মূল সুবিধাগুলির মধ্যে একটি হল Flutter Impeller Preview — শেডারগুলির পূর্বাবলোকনের ক্ষমতা। Skia প্রথম ব্যবহারের মুহূর্তে শেডার কম্পাইল করে, যা বিলম্ব (shader jank) সৃষ্টি করতে পারে। এই সমস্যা সমাধানের জন্য, Flutter Impeller-এ রূপান্তরিত হচ্ছে — একটি নতুন রেন্ডারিং ইঞ্জিন, কিন্তু Skia স্থিতিশীল Flutter সংস্করণগুলির জন্য প্রধান পছন্দ হিসেবে রয়ে গেছে।
Flutter Layer Tree-র ধারণা ব্যবহার করে — স্তরগুলির একটি গাছ, প্রতিটি UI-র একটি অংশ উপস্থাপন করে। Skia প্রতিটি স্তরের জন্য ড্রইং কমান্ড গ্রহণ করে এবং নির্ধারণ করে যে একাধিক স্তরকে একটি রেন্ডারিং পাসে একত্রিত করা যায় কিনা। স্তর কম্পোজিটিং একটি জটিল কাজ, কারণ প্রতিটি পিক্সেলের জন্য স্বচ্ছতা এবং ব্লেন্ড মোড (blend modes) বিবেচনা করতে হয়, যা Skia GPU শেডারের মাধ্যমে প্রয়োগ করে।
Skia HarfBuzz (শেপিং) এবং ICU (ইউনিকোড) লাইব্রেরির সাথে ইন্টিগ্রেশনের মাধ্যমে টেক্সট রেন্ডার করে। Flutter-এ, প্রতিটি টেক্সট উইজেট একটি Paragraph অবজেক্ট তৈরি করে যা টেক্সটকে গ্লিফ আঁকার জন্য Skia কমান্ডের একটি সিরিজে রূপান্তর করে। Skia সাবপিক্সেল অ্যান্টি-আলিয়াসিং, ফন্ট হিন্টিং এবং SkUnicode লাইব্রেরির মাধ্যমে ইমোজির সাথে কাজ করা সমর্থন করে।
Skia-র কর্মক্ষমতা বছরের পর বছরের অপ্টিমাইজেশন এবং বিভিন্ন কৌশলের সংমিশ্রণের ফল: কমান্ড ব্যাচিং, টেক্সচার ক্যাশিং এবং GPU কনটেক্সট সুইচিং কমানো। Flutter-এর জন্য এটি গুরুত্বপূর্ণ, কারণ প্রতিটি ফ্রেমকে 16 ms (60 FPS) বা 8 ms (120 FPS) এ রেন্ডার করতে হবে।
| কৌশল | বিবরণ | লাভ |
|---|---|---|
| ব্যাচিং | একই ধরনের অপারেশন একটি ড্র কলএ গ্রুপ করা | 3x পর্যন্ত |
| টেক্সচার ক্যাশ | GPU-তে আগে থেকে লোড করা টেক্সচার পুনঃব্যবহার | 2x পর্যন্ত |
| Atlas | ছোট টেক্সচার একটি বড় টেক্সচার অ্যাটলাসএ একত্রিত করা | 1.5x পর্যন্ত |
| ডিফার্ড রেন্ডারিং | পুনর্বিন্যাস সহ বিলম্বিত কমান্ড নির্বাহ | 2x পর্যন্ত |
| শেডার প্রিকম্পাইলেশন | Spark/Dart-এর জন্য শেডার পূর্ব-কম্পাইলেশন | 4x পর্যন্ত |
Flutter টিম-এর বেঞ্চমার্ক অনুসারে, মিড-রেঞ্জ ডিভাইসে (Qualcomm Snapdragon 700 series) GPU ত্বরণ সহ Skia ব্যবহার স্ক্রিনে 30+ উইজেট সহ জটিল ইন্টারফেস রেন্ডার করার সময় স্থিতিশীল 60 FPS প্রদান করে। সফটওয়্যার রেন্ডারিং (CPU) এর সাথে, কর্মক্ষমতা 40–60% কমে যায়, তবে সাধারণ স্ক্রিনের জন্য গ্রহণযোগ্য থাকে।
Flutter-এ Skia-র প্রধান কর্মক্ষমতা সমস্যা হল shader jank (শেডার ল্যাগ)। যখন স্ক্রিনে প্রভাবগুলির একটি পূর্বে অজানা সমন্বয় সহ একটি নতুন ভিজ্যুয়াল উপাদান আসে, Skia তাৎক্ষণিকভাবে একটি নতুন শেডার কম্পাইল করে। কম্পাইলেশনে 50–200 ms সময় লাগতে পারে, এই সময়ে অ্যাপ ফ্রেম ড্রপ করে। এটি কাস্টম সাজসজ্জা সহ দীর্ঘ তালিকা স্ক্রোল করার সময় বিশেষভাবে লক্ষণীয়। Google Impeller-এ এই সমস্যা সমাধান করছে, একটি নতুন রেন্ডারিং ইঞ্জিন যা শেডার আগে থেকেই কম্পাইল করে।
Skia বিস্তৃত প্ল্যাটফর্ম সমর্থন করে, প্রতিটি তার নিজস্ব রেন্ডারিং ব্যাকএন্ড ব্যবহার করে। ব্যাকএন্ড নির্বাচন লক্ষ্য প্ল্যাটফর্ম এবং উপলব্ধ গ্রাফিক্স API-র উপর ভিত্তি করে Flutter Engine বিল্ডের সময় নির্ধারিত হয়।
Android-এ, Skia OpenGL ES (সব ডিভাইসে) এবং Vulkan (Android 7.0+ Vulkan সমর্থনযুক্ত ডিভাইসে) এর মাধ্যমে কাজ করে। ব্যাকএন্ড স্বয়ংক্রিয়ভাবে নির্বাচিত হয়: Vulkan পছন্দ করা হয় কারণ এটি কম ড্রাইভার লেটেন্সি প্রদান করে। Android HWUI (Hardware Accelerated UI) এর মাধ্যমে সিস্টেম UI রেন্ডারিংয়ের জন্যও Skia ব্যবহার করে, যা Skia কে শুধু Flutter-এর অংশ নয় বরং অপারেটিং সিস্টেমের অংশ করে তোলে।
iOS-এ, Skia Metal ব্যবহার করে — Apple-এর মালিকানাধীন গ্রাফিক্স API। Metal ন্যূনতম ওভারহেড সহ GPU-তে নিম্ন-স্তরের অ্যাক্সেস প্রদান করে। Metal (2014) প্রবর্তনের আগে, iOS-এ Skia OpenGL ES ব্যবহার করত, কিন্তু বর্তমান Flutter সংস্করণে Metal হল iOS-এর একমাত্র GPU ব্যাকএন্ড, যা OpenGL-এর তুলনায় 30% পর্যন্ত কর্মক্ষমতা উন্নতি প্রদান করে।
ডেস্কটপে, Skia OpenGL (macOS, Linux) এবং Direct3D 12 (Windows) ব্যবহার করে। Direct3D 12-এর জন্য সমর্থন Windows-এর জন্য Flutter 3.13-এ যুক্ত হয়েছিল এবং Windows-এ OpenGL-এর তুলনায় উল্লেখযোগ্য কর্মক্ষমতা উন্নতি প্রদান করে। Skia পুরনো গ্রাফিক্স ড্রাইভারের সাথে পিছিয়ে পড়া সামঞ্জস্যের জন্য Windows-এ ANGLE (Direct3D-এর উপরে OpenGL) এর মাধ্যমে সফটওয়্যার রেন্ডারিংও সমর্থন করে।
Flutter for Web-এ, Skia WebAssembly (Emscripten-এর মাধ্যমে) তে কম্পাইল হয় এবং WebGL-এর মাধ্যমে রেন্ডার করে। এই মোডে, Skia নেটিভ কোড ব্যবহার না করে সম্পূর্ণরূপে ব্রাউজারে কাজ করে। Skia-র WebGL সংস্করণের কর্মক্ষমতা নেটিভ ব্যাকএন্ডের তুলনায় কম, তবে বেশিরভাগ ওয়েব অ্যাপ্লিকেশনের জন্য আধুনিক ব্রাউজারে WebGL হার্ডওয়্যার ত্বরণ সহ 60 FPS অর্জন করা যায়।
সচরাচর জিজ্ঞাসিত প্রশ্ন
Shader jank হল শেডার তাৎক্ষণিক কম্পাইলেশনের কারণে রেন্ডারিং বিলম্ব। যখন Skia ভিজ্যুয়াল ইফেক্টের একটি নতুন সমন্বয় দেখে, তখন এটি একটি শেডার কম্পাইল করে, যাতে 50–200 ms সময় লাগতে পারে, এই সময়ে ফ্রেম ড্রপ হয়। এই সমস্যাটি Impeller-এ শেডারের পূর্ব-কম্পাইলেশনের মাধ্যমে সমাধান করা হয়।
হ্যাঁ, Skia একটি স্বতন্ত্র গ্রাফিক্স লাইব্রেরি হিসেবে ব্যবহার করা যেতে পারে। এটি Google Chrome, Android, Mozilla Firefox (Skia স্তরের মাধ্যমে) এবং উচ্চ-ক্ষমতাসম্পন্ন 2D গ্রাফিক্স প্রয়োজন এমন প্রকল্পে ব্যবহৃত হয়। Skia API C++, Python এবং অন্যান্য ভাষায় বাইন্ডিংয়ের মাধ্যমে উপলব্ধ।
Flutter Skia-র একটি ফর্ক (সাধারণত মূল Google রিপোজিটরি থেকে সর্বশেষ স্থিতিশীল কমিট) ব্যবহার করে। প্রতিটি Flutter Engine রিলিজের সাথে সংস্করণ আপডেট হয়। বর্তমান কমিট GitHub-এ flutter/engine রিপোজিটরির DEPS ফাইলে পাওয়া যেতে পারে।
Skia রানটাইমে শেডার কম্পাইল করে, যা shader jank সৃষ্টি করে। Impeller শেডার অফলাইনে (পূর্বে) কম্পাইল করে, SPIR-V ব্যবহার করে এবং সরাসরি Vulkan/Metal/Direct3D 12-এর মাধ্যমে কাজ করে। Impeller শেডার ল্যাগে ভোগে না এবং আরও অনুমানযোগ্য কর্মক্ষমতা প্রদান করে।
Skia নিজে একটি অ্যানিমেশন ইঞ্জিন নয় — এটি পৃথক ফ্রেম রেন্ডার করার জন্য দায়িত্বশীল। Flutter-এ অ্যানিমেশন ফ্রেমওয়ার্ক স্তরে (AnimationController, Tween) প্রয়োগ করা হয়, যেখানে Skia Canvas API এবং হার্ডওয়্যার ত্বরণ ব্যবহার করে প্রতিটি ফ্রেমের দ্রুত রেন্ডারিং নিশ্চিত করে।
সারসংক্ষেপ
আমরা একটি মোবাইল অ্যাপ্লিকেশন টার্নকি তৈরি করব
IT Sectr 2017 সাল থেকে স্টার্টআপ এবং ব্যবসার জন্য iOS এবং Android অ্যাপ্লিকেশন তৈরি করে। আমরা আপনাকে পরামর্শ দেব এবং সেরা সমাধান প্রস্তাব করব।