ক্যামেরা ফ্রেম বাফারিং

ARCore 1.17.0 এ যোগ করা হয়েছে

বেশিরভাগ অ্যাপকে রেন্ডারিংয়ের জন্য শুধুমাত্র একটি ক্যামেরা ফ্রেম বাফার করতে হবে। যাইহোক, ARCore একটি নির্দিষ্ট-আকারের রাউন্ড-রবিন টেক্সচার সারিতে একাধিক ক্যামেরা ফ্রেম বাফারিং সমর্থন করে।

একটি মাল্টিথ্রেডেড রেন্ডারিং পাইপলাইন সহ অ্যাপগুলি রেন্ডারিং কর্মক্ষমতা উন্নত করতে বাফারিং ব্যবহার করতে পারে। বাফারিং অ্যাপগুলিকে আরও সামঞ্জস্যপূর্ণ ফ্রেম হারে ফ্রেম রেন্ডার করতে সাহায্য করতে পারে, যা ধীর UI রেন্ডারিংয়ের কারণে সৃষ্ট ভিজ্যুয়াল তোতলামি কমাতে পারে।

পূর্বশর্ত

নিচের যেকোনো শর্তে ক্যামেরা ইমেজ বাফারিং সক্ষম হয়:

  1. একাধিক টেক্সচার আইডি সহ Session.setCameraTextureNames(ids) কল করে অ্যাপ দ্বারা সক্রিয় করা হলে

  2. যখন অভ্যন্তরীণ বাফারিং প্রয়োজন এমন এক বা একাধিক ARCore বৈশিষ্ট্যগুলি সক্ষম করা থাকে ৷ বর্তমানে এই বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে:

    • অগমেন্টেড ইমেজ
    • অগমেন্টেড ফেস
  3. কিছু ARCore সমর্থিত ডিভাইসে সঠিকভাবে কাজ করার জন্য অভ্যন্তরীণ বাফারিং প্রয়োজন।

ফ্রেম বিলম্ব সক্ষম কিনা তা নির্ধারণ করুন

একটি প্রদত্ত ডিভাইস এবং AR সেশনে ফ্রেম বাফারিং (ফ্রেম বিলম্ব হিসাবেও পরিচিত) সক্ষম আছে কিনা তা নির্ধারণ করতে, adb logcat আউটপুট ব্যবহার করুন:

# Camera frame buffering is turned off when frame delay is zero.
adb logcat | grep 'Update Frame Delay'
 I native  : session.cc:3141 Update Frame Delay to 0 frames.
# Camera frame buffering is turned on when frame count is non-zero.
# Note: The size of the buffer can vary over time.
adb logcat | grep 'Update Frame Delay'
 I native  : session.cc:3141 Update Frame Delay to 6 frames.

 I native  : session.cc:3141 Update Frame Delay to 4 frames.

 I native  : session.cc:3141 Update Frame Delay to 2 frames.

স্মৃতি

প্রতিটি অতিরিক্ত ক্যামেরা ফ্রেম বাফার মেমরি ব্যবহার বাড়ায়। উদাহরণস্বরূপ, একটি 1080p টেক্সচার প্রায় 6 MB মেমরি খরচ করে (1920 x 1080 রেজোলিউশন প্রতি পিক্সেলে তিন বাইট RGB ডেটা দ্বারা গুণ করে প্রাপ্ত)।

কর্মক্ষমতা বিবেচনা

একাধিক ক্যামেরা ফ্রেম ব্যবহার করা ফ্রেমের হারের পরিবর্তনশীলতা হ্রাস করার গ্যারান্টিযুক্ত নয়, এবং একটি মাল্টিথ্রেডেড রেন্ডারিং পাইপলাইন ব্যবহার করা সমস্ত পরিস্থিতিতে আরও ভাল পারফরম্যান্স প্রদানের গ্যারান্টিযুক্ত নয়। নিম্নলিখিত কারণগুলি বাস্তব-বিশ্বের কর্মক্ষমতা প্রভাবিত করে:

  • অ্যাপ রেন্ডারিং পাইপলাইন

  • অ্যাপ থ্রেডিং মডেল

  • ডিভাইস CPU আর্কিটেকচার

  • অপারেটিং সিস্টেম শিডিউলিং সিস্টেম

যদি আপনার অ্যাপ অতিরিক্ত ক্যামেরা ফ্রেমের সুবিধা নিতে অক্ষম হয়, তাহলে একাধিক টেক্সচার ব্যবহারে কোনো পারফরম্যান্স সুবিধা নেই।

বাফারিং সক্ষম করুন

ইনকামিং ক্যামেরা ফ্রেমগুলিকে বাফার করার জন্য ARCore কে কোন টেক্সচার ব্যবহার করতে হবে তা নির্দেশ করতে, এক বা একাধিক টেক্সচার আইডির অ্যারে প্রদান করতে Session.setCameraTextureNames(ids) ব্যবহার করুন। এই ফাংশনটি শুধুমাত্র সেশন তৈরির পরেই বলা হয় এবং সাধারণত একবারই বলা হয়।

Session.update() এ প্রতিটি কলের সময়, ARCore একটি রাউন্ড-রবিন সিকোয়েন্সে সারির পরবর্তী টেক্সচারটি ওভাররাইট করে। যদি আপনার অ্যাপ শুধুমাত্র একটি একক টেক্সচার আইডি সেট করে, তাহলে প্রতিবার একই টেক্সচার ওভাররাইট করা হবে।

বর্তমান ফ্রেমের সাথে যুক্ত টেক্সচার আইডি নির্ধারণ করতে Frame.getCameraTextureName() ব্যবহার করুন।

,

ARCore 1.17.0 এ যোগ করা হয়েছে

বেশিরভাগ অ্যাপকে রেন্ডারিংয়ের জন্য শুধুমাত্র একটি ক্যামেরা ফ্রেম বাফার করতে হবে। যাইহোক, ARCore একটি নির্দিষ্ট-আকারের রাউন্ড-রবিন টেক্সচার সারিতে একাধিক ক্যামেরা ফ্রেম বাফারিং সমর্থন করে।

একটি মাল্টিথ্রেডেড রেন্ডারিং পাইপলাইন সহ অ্যাপগুলি রেন্ডারিং কর্মক্ষমতা উন্নত করতে বাফারিং ব্যবহার করতে পারে। বাফারিং অ্যাপগুলিকে আরও সামঞ্জস্যপূর্ণ ফ্রেম হারে ফ্রেম রেন্ডার করতে সাহায্য করতে পারে, যা ধীর UI রেন্ডারিংয়ের কারণে সৃষ্ট ভিজ্যুয়াল তোতলামি কমাতে পারে।

পূর্বশর্ত

নিচের যেকোনো শর্তে ক্যামেরা ইমেজ বাফারিং সক্ষম হয়:

  1. একাধিক টেক্সচার আইডি সহ Session.setCameraTextureNames(ids) কল করে অ্যাপ দ্বারা সক্রিয় করা হলে

  2. যখন অভ্যন্তরীণ বাফারিং প্রয়োজন এমন এক বা একাধিক ARCore বৈশিষ্ট্যগুলি সক্ষম করা থাকে ৷ বর্তমানে এই বৈশিষ্ট্যগুলি অন্তর্ভুক্ত করে:

    • অগমেন্টেড ইমেজ
    • অগমেন্টেড ফেস
  3. কিছু ARCore সমর্থিত ডিভাইসে সঠিকভাবে কাজ করার জন্য অভ্যন্তরীণ বাফারিং প্রয়োজন।

ফ্রেম বিলম্ব সক্ষম কিনা তা নির্ধারণ করুন

একটি প্রদত্ত ডিভাইস এবং AR সেশনে ফ্রেম বাফারিং (ফ্রেম বিলম্ব হিসাবেও পরিচিত) সক্ষম আছে কিনা তা নির্ধারণ করতে, adb logcat আউটপুট ব্যবহার করুন:

# Camera frame buffering is turned off when frame delay is zero.
adb logcat | grep 'Update Frame Delay'
 I native  : session.cc:3141 Update Frame Delay to 0 frames.
# Camera frame buffering is turned on when frame count is non-zero.
# Note: The size of the buffer can vary over time.
adb logcat | grep 'Update Frame Delay'
 I native  : session.cc:3141 Update Frame Delay to 6 frames.

 I native  : session.cc:3141 Update Frame Delay to 4 frames.

 I native  : session.cc:3141 Update Frame Delay to 2 frames.

স্মৃতি

প্রতিটি অতিরিক্ত ক্যামেরা ফ্রেম বাফার মেমরি ব্যবহার বাড়ায়। উদাহরণস্বরূপ, একটি 1080p টেক্সচার প্রায় 6 MB মেমরি খরচ করে (1920 x 1080 রেজোলিউশন প্রতি পিক্সেলে তিন বাইট RGB ডেটা দ্বারা গুণ করে প্রাপ্ত)।

কর্মক্ষমতা বিবেচনা

একাধিক ক্যামেরা ফ্রেম ব্যবহার করা ফ্রেমের হারের পরিবর্তনশীলতা হ্রাস করার গ্যারান্টিযুক্ত নয়, এবং একটি মাল্টিথ্রেডেড রেন্ডারিং পাইপলাইন ব্যবহার করা সমস্ত পরিস্থিতিতে আরও ভাল পারফরম্যান্স প্রদানের গ্যারান্টিযুক্ত নয়। নিম্নলিখিত কারণগুলি বাস্তব-বিশ্বের কর্মক্ষমতা প্রভাবিত করে:

  • অ্যাপ রেন্ডারিং পাইপলাইন

  • অ্যাপ থ্রেডিং মডেল

  • ডিভাইস CPU আর্কিটেকচার

  • অপারেটিং সিস্টেম শিডিউলিং সিস্টেম

যদি আপনার অ্যাপ অতিরিক্ত ক্যামেরা ফ্রেমের সুবিধা নিতে অক্ষম হয়, তাহলে একাধিক টেক্সচার ব্যবহারে কোনো পারফরম্যান্স সুবিধা নেই।

বাফারিং সক্ষম করুন

ইনকামিং ক্যামেরা ফ্রেমগুলিকে বাফার করার জন্য ARCore কে কোন টেক্সচার ব্যবহার করতে হবে তা নির্দেশ করতে, এক বা একাধিক টেক্সচার আইডির অ্যারে প্রদান করতে Session.setCameraTextureNames(ids) ব্যবহার করুন। এই ফাংশনটি শুধুমাত্র সেশন তৈরির পরেই বলা হয় এবং সাধারণত একবারই বলা হয়।

Session.update() এ প্রতিটি কলের সময়, ARCore একটি রাউন্ড-রবিন সিকোয়েন্সে সারির পরবর্তী টেক্সচারটি ওভাররাইট করে। যদি আপনার অ্যাপ শুধুমাত্র একটি একক টেক্সচার আইডি সেট করে, তাহলে প্রতিবার একই টেক্সচার ওভাররাইট করা হবে।

বর্তমান ফ্রেমের সাথে যুক্ত টেক্সচার আইডি নির্ধারণ করতে Frame.getCameraTextureName() ব্যবহার করুন।