একটি বিদ্যমান Godot XR প্রকল্পে Android XR-এর জন্য সমর্থন যোগ করুন

প্রযোজ্য এক্সআর ডিভাইস
এই নির্দেশিকা আপনাকে এই ধরনের এক্সআর ডিভাইসগুলির জন্য অভিজ্ঞতা তৈরি করতে সাহায্য করে।
এক্সআর হেডসেট
তারযুক্ত এক্সআর চশমা

Godot-এ আপনার যদি আগে থেকেই কোনো XR প্রজেক্ট থাকে, তাহলে নতুন করে আলাদা কোনো প্রজেক্ট শুরু না করেই আপনি Android XR-এর জন্য সাপোর্ট যোগ করতে পারেন। কিছু ধাপ সব প্রজেক্টের জন্যই আবশ্যক, আবার কিছু ধাপ আপনার প্রজেক্টে ব্যবহৃত XR ফিচারগুলোর ওপর নির্ভর করে ঐচ্ছিক। এই ধাপগুলো জুড়ে, আমরা একাধিক ওপেন-সোর্স Godot XR প্রজেক্টের লিঙ্ক দিয়েছি যেগুলো Android XR-এর জন্য সাপোর্ট যোগ করেছে। এর সাথে প্রাসঙ্গিক পুল রিকোয়েস্টগুলোও দেওয়া হয়েছে, যা নির্দিষ্ট ফিচারগুলো চালু করার জন্য প্রয়োজনীয় পরিবর্তনগুলো প্রদর্শন করে।

সকল প্রকল্পের জন্য প্রয়োজনীয় পদক্ষেপ

আপনার প্রজেক্ট যে ধরনের এক্সআর (XR) ফিচারই সাপোর্ট করুক না কেন, নিম্নলিখিত টপিকগুলোর ধাপগুলো সম্পূর্ণ করুন। এরপর, আপনার প্রজেক্টে অতিরিক্ত কাজের প্রয়োজন আছে কিনা তা নির্ধারণ করতে ঐচ্ছিক ধাপগুলোর তালিকায় বর্ণিত ফিচারগুলো পর্যালোচনা করুন।

Godot এবং Godot OpenXR ভেন্ডরস প্লাগইন আপডেট করুন

আপনার প্রজেক্টকে সর্বশেষ প্রয়োজনীয় ভার্সনে আপডেট করতে এবং Android XR-এর জন্য এর সেটিংস কনফিগার করতে এই ধাপগুলো অনুসরণ করুন:

  1. আপনার Godot সংস্করণটি 4.6.2 বা উচ্চতর সংস্করণে আপডেট করুন। আপনার প্রকল্পের জন্য অতিরিক্ত সাহায্যের প্রয়োজন হলে, নতুন সংস্করণে স্থানান্তরের বিষয়ে ডকুমেন্টেশন দেখুন।
  2. অ্যাসেট স্টোর , অ্যাসেট লাইব্রেরি অথবা গিটহাব-এর রিপোজিটরি থেকে Godot OpenXR Vendors Plugin-এর ৫.১ বা উচ্চতর সংস্করণ ডাউনলোড করুন।

  3. Android XR-এর জন্য আপনার প্রোজেক্টের সেটিংস কনফিগার করুন:

    1. Android XR-এর জন্য একটি এক্সপোর্ট প্রিসেট যোগ করুন।
    2. Gradle Build ব্যবহার সক্ষম করুন।

    সক্ষম করুন

    1. XR Features সেকশনে, XR Mode- এর জন্য OpenXR সিলেক্ট করুন এবং Enable AndroidXR Plugin সিলেক্ট করুন।

    বিকল্পগুলি কনফিগার করুন

হ্যান্ড ট্র্যাকিংয়ের জন্য সমর্থন যোগ করুন

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

হ্যান্ড ট্র্যাকিংয়ের জন্য সমর্থন যোগ করুন: প্রজেক্ট সেটিংস কনফিগার করুন

প্রথমে, হ্যান্ড ট্র্যাকিং এবং এর সাথে সম্পর্কিত OpenXR এক্সটেনশনগুলো সক্রিয় করতে আপনার প্রোজেক্ট সেটিংস সেট আপ করার জন্য এই ধাপগুলো অনুসরণ করুন।

  1. আপনার প্রোজেক্টের সেটিংস খুলুন এবং General > XR > OpenXR -এ যান।
  2. এক্সটেনশন বিভাগে, হ্যান্ড ট্র্যাকিং এবং হ্যান্ড ইন্টারঅ্যাকশন প্রোফাইল নির্বাচন করুন।

    বিকল্পগুলি কনফিগার করুন

  3. এক্সটেনশন সেকশনের মধ্যে মেটা সাবসেকশনটি খুঁজুন এবং হ্যান্ড ট্র্যাকিং মেশহ্যান্ড ট্র্যাকিং এইম নির্বাচন করুন।

    বিকল্পগুলি কনফিগার করুন

হ্যান্ড ট্র্যাকিংয়ের জন্য সমর্থন যোগ করুন: কন্ট্রোলার নোড যোগ ও কনফিগার করুন

হ্যান্ড ট্র্যাকিংয়ের জন্য বিদ্যমান XRController3D নোডগুলিকে ডায়নামিকভাবে পরিবর্তন করার পরিবর্তে, হ্যান্ড মডেলগুলি ট্র্যাক ও প্রদর্শন করার জন্য এবং সেইসাথে হ্যান্ড ট্র্যাকিং এইম এক্সটেনশন থেকে ইনপুট পরিচালনা করার জন্য কন্ট্রোলার নোড যুক্ত করুন:

  1. আপনার XROrigin3D নোডে আরও তিনটি XRController3D নোড যোগ করুন।

    1. একটির নাম 'HandTrackingLeft' দিন, এবং ট্র্যাকার প্রপার্টিটি /user/hand_tracker/left এ সেট করুন।
    2. অন্য একটি 'HandTrackingRight' নাম দিন, এবং ট্র্যাকার প্রপার্টিটি /user/hand_tracker/right এ সেট করুন।
    3. শেষেরটির নাম 'HandTrackingAimLeft' দিন, এবং ট্র্যাকার প্রপার্টিটি /user/fbhandaim/left এ সেট করুন।

    যদি আপনার প্রোজেক্টের মূল XRController3D নোডগুলোর নাম 'XRController3D_left' এবং 'XRController3D_right' হতো, তাহলে আপনার সিনটি দেখতে অনেকটা এইরকম হতো:

    কন্ট্রোলার নোডগুলো যোগ করার পর আপনার দৃশ্যটি কেমন দেখতে হতে পারে।

  2. HandTrackingLeft এবং HandTrackingRight- এর tracking_changed সিগন্যালটিকে সেইসব স্বতন্ত্র ফাংশনের সাথে সংযুক্ত করুন , যেগুলো সংশ্লিষ্ট কন্ট্রোলার ট্র্যাকারগুলোর (পূর্ববর্তী উদাহরণে XRController3D_left এবং XRController3D_right ) ভিজিবিলিটি আপডেট করে।

    উদাহরণস্বরূপ, HandTrackingLeft- এর সিগন্যালের সাথে সংযুক্ত ফাংশনটি দেখতে এইরকম হতে পারে:

    func _on_hand_tracking_left_hand_tracking_changed(tracking):
        $XROrigin3D/XRController3D_left.visible = not tracking
    
  3. হ্যান্ড ট্র্যাকিং কন্ট্রোলার নোডগুলিতে ‘ Show When Tracked ’ প্রপার্টিটি সক্রিয় করুন।

    এখন আপনার প্রজেক্টটি, ব্যবহারকারী হ্যান্ড ট্র্যাকিং নাকি কন্ট্রোলার ব্যবহার করছেন তার উপর নির্ভর করে, কন্ট্রোলার মডেল এবং হ্যান্ড ট্র্যাকিং মডেলের মধ্যে দৃশ্যত অদলবদল করতে পারবে।

  4. আপনার হ্যান্ড ট্র্যাকিং কন্ট্রোলার নোডগুলোর চাইল্ড হিসেবে কিছু OpenXRFbHandTrackingMesh নোড যোগ করুন।

  5. মডেলগুলিতে রিয়েল টাইম হ্যান্ড ট্র্যাকিং ডেটা প্রয়োগ করতে, এই OpenXRFbHandTrackingMesh নোডগুলির চাইল্ড হিসেবে XRHandModifier3D নোডগুলি যোগ করুন এবং নিশ্চিত করুন যে সঠিক Hand Tracker প্রপার্টি সেট করা আছে।

    আপনার কন্ট্রোলার নোডগুলিতে চাইল্ড নোডগুলি যুক্ত করার পরে আপনার দৃশ্যটি কেমন দেখতে হতে পারে

হ্যান্ড ট্র্যাকিংয়ের জন্য সমর্থন যোগ করুন: OpenXR অ্যাকশন ম্যাপে একটি হ্যান্ড ইন্টারঅ্যাকশন প্রোফাইল সেট আপ করুন।

এরপরে, আপনি OpenXR অ্যাকশন ম্যাপে হ্যান্ড ইন্টারঅ্যাকশন প্রোফাইলটি সেট আপ করবেন:

  1. এডিটরের নিচের দিকে থাকা OpenXR অ্যাকশন ম্যাপ মেনুটি খুলুন।
  2. Galaxy XR কন্ট্রোলারগুলির সাথে সামঞ্জস্যের সমস্যা এড়াতে Simple Controller প্রোফাইলটি মুছে ফেলুন।
  3. অ্যাড প্রোফাইল-এ ক্লিক করুন, হ্যান্ড ইন্টারঅ্যাকশন নির্বাচন করুন এবং তারপর ওকে-তে ক্লিক করুন।
  4. আপনার পছন্দমতো এই প্রোফাইলটিকে এক বা একাধিক অ্যাকশন সেটের সাথে সংযুক্ত করুন।

আপনার অ্যাপের প্রয়োজন অনুযায়ী, হ্যান্ড ট্র্যাকিংয়ের মাধ্যমে ব্যবহারকারীর ইনপুট গ্রহণের পদ্ধতিও আপনি পরিবর্তন করতে চাইতে পারেন।

হ্যান্ড ট্র্যাকিং সমর্থন যোগ করুন: Android XR-এর জন্য একটি মেনু জেসচার সেট আপ করুন।

সবশেষে, আপনি অ্যান্ড্রয়েড এক্সআর (Android XR)-এর জন্য একটি মেনু জেসচার প্রয়োগ করতে পারেন। এটি প্লেয়ারের বাম হাত মেনু জেসচারটি সম্পাদন করার জন্য সঠিক অবস্থানে থাকলে একটি আইকন দেখায়, এবং ব্যবহারকারী জেসচারটি সম্পাদন করলে মেনুটি প্রদর্শন বা লুকায়। এটি পরিচালনা করার জন্য আপনি পূর্বে যোগ করা HandTrackingAimLeft নোডটি ব্যবহার করবেন।

  1. বাম দিকের ট্র্যাকিং নোডে একটি বিলবোর্ডযুক্ত কোয়াড যোগ করুন, যা আপনার নির্বাচিত একটি আইকন প্রদর্শন করবে (পূর্বে যোগ করা কন্ট্রোলার নোডগুলো থেকে নিচের ছবিতে MenuIcon নোডটি দেখুন)।

    আপনার কন্ট্রোলার নোডগুলিতে চাইল্ড নোডগুলি যুক্ত করার পরে আপনার দৃশ্যটি কেমন দেখতে হতে পারে

  2. HandTrackingAimLeft- এর button_pressed এবং button_released সিগন্যালগুলোকে এই ধরনের ফাংশনের সাথে সংযুক্ত করুন:

    @onready var menu_icon: MeshInstance3D = $XROrigin3D/HandTrackingLeft/MenuIcon
    
    func _on_hand_tracking_aim_left_button_pressed(p_name):
      if p_name == "menu_pressed":
    toggle_menu()
      elif p_name == "menu_gesture":
        if OS.has_feature("androidxr"):
          menu_icon.visible = true
    
    func _on_hand_tracking_aim_left_button_released(p_name):
      if p_name == "menu_gesture":
        menu_icon.visible = false
    

নির্দিষ্ট কিছু বৈশিষ্ট্যের জন্য ঐচ্ছিক পদক্ষেপ

আপনার প্রোজেক্টের জন্য প্রয়োজনীয় ধাপগুলো সম্পন্ন করার পর, আপনার অ্যাপের চাহিদা ও সক্ষমতার ওপর নির্ভর করে আপনি সিদ্ধান্ত নেবেন যে নির্দিষ্ট কিছু ফিচারের জন্য অতিরিক্ত কাজ করার প্রয়োজন আছে কি না। এই ঐচ্ছিক ফিচারগুলোর প্রত্যেকটি সম্পর্কে আরও তথ্যের জন্য, নিম্নলিখিত বিভাগগুলো দেখুন।

পিঞ্চগুলোকে বাটন প্রেস হিসেবে রেজিস্টার করুন

অ্যান্ড্রয়েড এক্সআর-এ, আইটেম নির্বাচন করা, স্ক্রোল করা, উইন্ডো সরানো বা আকার পরিবর্তন করা, এবং ২ডি ও ৩ডি স্পেসে ইউআই এলিমেন্ট বা অবজেক্ট সরানোর মতো অনেক মৌলিক সিস্টেম অ্যাকশনের জন্য পিঞ্চিং ব্যবহার করা হয় । এই প্যাটার্নগুলোর সাথে সামঞ্জস্য রাখতে এবং একটি সামঞ্জস্যপূর্ণ ইউজার এক্সপেরিয়েন্স নিশ্চিত করতে, হ্যান্ড ট্র্যাকিং ব্যবহার করার সময় আপনার অ্যাপের উচিত কন্ট্রোলারের বাটন প্রেসের মতোই পিঞ্চগুলোকে রেজিস্টার করা।

আপনার অ্যাপটিকে এইভাবে কনফিগার করতে, একটি ভার্চুয়াল অ্যাকশন তৈরি করার জন্য আপনার তৈরি করা হ্যান্ড ইন্টারঅ্যাকশন প্রোফাইল থেকে প্রাপ্ত ফ্লোট ভ্যালুগুলো ব্যবহার করুন:

const PRESSED_THRESHOLD := 0.8
const RELEASED_THRESHOLD := 0.6

@onready var left_controller: XRController3D = $XROrigin/XRController3D_left

func _on_xr_controller_3d_left_input_float_changed(p_name: String, value: float):
    if p_name == "pinch":
        var xr_tracker = XRServer.get_tracker(left_controller.tracker)
        if _left_hand_pinching:
            if value < RELEASED_THRESHOLD:
                _left_hand_pinching = false
                xr_tracker.set_input("pinch_pressed", false)
        else:
            if value > PRESSED_THRESHOLD:
                _left_hand_pinching = true
                xr_tracker.set_input("pinch_pressed", true)

কোড সম্পর্কে মূল বিষয়গুলো

  • XRController3D input_float_changed সিগন্যালগুলিতে থাকা float মানটি নির্দিষ্ট থ্রেশহোল্ডের চেয়ে বেশি না কম, তা যাচাই করে।
  • pinch_pressed নামের একটি ভার্চুয়াল অ্যাকশন তৈরি করে।

হ্যান্ড ট্র্যাকিংয়ের সাথে একত্রে এক্সআর টুলস ফাংশনগুলো ব্যবহার করুন

অনেক Godot XR প্রজেক্টে Godot XR Tools ব্যবহার করা হয়, যার মধ্যে এই পৃষ্ঠায় লিঙ্ক করা কিছু ওপেন-সোর্স প্রজেক্টও রয়েছে। XR Tools-এর কিছু ফাংশন, যেমন মেনু ইন্টারঅ্যাকশনের জন্য FunctionPointer , কাজ করানোর জন্য আপনার কিছু অতিরিক্ত কোডের প্রয়োজন হবে, যা ব্যবহারকারী হ্যান্ড ট্র্যাকিং-এ সুইচ করলে ফাংশনটির খোঁজা অ্যাকশনটি বদলে দেবে।

উদাহরণস্বরূপ, মেনু ইন্টারঅ্যাকশনের জন্য FunctionPointer ব্যবহার করার সময়, হ্যান্ড ট্র্যাকিংয়ের জন্য XRController3D নোডগুলির tracking_changed সিগন্যালের উপর ভিত্তি করে active_button_action প্রপার্টিটিকে হ্যান্ড-ট্র্যাকিং অ্যাকশনে আপডেট করুন (পূর্ববর্তী হ্যান্ড ট্র্যাকিং সেটআপ ধাপগুলিতে এই নোডগুলি ছিল HandTrackingLeft এবং HandTrackingRight )।

const TRIGGER_POINTER_ACTION = "trigger_click"
const PINCH_POINTER_ACTION = "pinch_pressed"

@onready var func_point_left: XRToolsFunctionPointer = %FunctionPointerLeft

func _on_hand_tracking_left_tracking_changed(tracking: bool) -> void:
    if tracking:
        func_point_left.active_button_action = PINCH_POINTER_ACTION
else:
func_point_left.active_button_action = TRIGGER_POINTER_ACTION

কোড সম্পর্কে মূল বিষয়গুলো

কৃত্রিম চলাচলের সাথে হ্যান্ড ট্র্যাকিং ব্যবহার করুন

আপনার প্রজেক্টে কৃত্রিম চলন ব্যবহার করা হলেও হ্যান্ড ট্র্যাকিং সাপোর্ট দেওয়া সম্ভব। উদাহরণস্বরূপ, আপনি এমন একটি মুভমেন্ট সিস্টেম তৈরি করতে পারেন যা প্লেয়ারদের অঙ্গভঙ্গির মাধ্যমে পথ আঁকতে দেয়, অথবা প্লেয়ারদের গতি বাড়ানোর জন্য হাত উপর-নিচ করার সুযোগ দিতে পারেন, এবং এর সাথে লাফানো, আরোহণ ও গ্লাইড করার জন্য অতিরিক্ত অঙ্গভঙ্গির ব্যবস্থা রাখতে পারেন।

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

এই সমর্থনটি বাস্তবায়নকারী পুল রিকোয়েস্টটি থেকে প্রাপ্ত কিছু গুরুত্বপূর্ণ বিষয় নিচে দেওয়া হলো:

  • পিঞ্চ শনাক্ত হলে একটি XRVirtualThumbstick সিন ইনস্ট্যানশিয়েট করা হয়।
  • পিঞ্চ চেপে ধরে রাখলে, মূল পিঞ্চ অবস্থান থেকে আপেক্ষিক দূরত্ব ও দিক একটি Vector2 তে রূপান্তরিত হয় এবং ভার্চুয়ালি সাধারণ থাম্বস্টিক ইনপুটে ম্যাপ করা হয়।
  • এই ইনপুটের ভিজ্যুয়াল ফিডব্যাকও প্লেয়ারকে দুটি বিলবোর্ডযুক্ত কোয়াড মেশের আকারে দেওয়া হয়, যা থাম্বস্টিকের অবস্থান নির্দেশ করে।

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

পাসথ্রু সমর্থন যোগ করুন

আপনি আপনার অ্যাপে পাসথ্রু সাপোর্ট যোগ করতে পারেন, যাতে আপনার ব্যবহারকারীরা তাদের বাস্তব চারপাশের পরিবেশ দেখতে পারেন।

আপনার অ্যাপের জন্য এটি করতে, নিম্নলিখিত কোড পরিবর্তনগুলি করুন:

  • OpenXR XRInterface এর environment_blend_mode XR_ENV_BLEND_MODE_ALPHA_BLEND এ সেট করুন।
  • WorldEnvironment নোডটির background_mode BG_COLOR এ সেট করুন।
  • WorldEnvironment নোডটির background_color সম্পূর্ণ স্বচ্ছ এমন যেকোনো রঙে সেট করুন।
  • Viewport transparent_bg প্রপার্টিটি true তে সেট করুন।

আলো অনুমান এক্সটেনশন ব্যবহার করুন

পাসথ্রু সক্রিয় করার সময়, অ্যান্ড্রয়েড এক্সআর লাইট এস্টিমেশন ওপেনএক্সআর এক্সটেনশনটি ব্যবহার করার কথা বিবেচনা করুন। এই এক্সটেনশনটি ব্যবহারকারীর বাস্তব জগতের পরিবেশের আলোকে আরও ভালোভাবে অনুকরণ করার জন্য WorldEnvironment এবং DirectionalLight3D -এর বৈশিষ্ট্যগুলোকে পরিবর্তন করে, ফলে ভার্চুয়াল অবজেক্টগুলো বাস্তব জগতের আলোর অবস্থার সাথে আরও ভালোভাবে মিশে যায়। আপনি আপনার প্রোজেক্টের সেটিংসে এই এক্সটেনশনটি সক্রিয় করতে পারেন।

  1. আপনার প্রোজেক্টের সেটিংস খুলুন এবং General > XR > OpenXR -এ যান।
  2. Androidxr বিভাগে, Light Estimation নির্বাচন করুন।

    বিকল্পগুলি কনফিগার করুন

  3. আপনার সিন ট্রি-তে একটি OpenXRAndroidLightEstimation নোড যোগ করুন এবং এটিকে আপনার সিনের WorldEnvironmentDirectionalLight3D সাথে সংযুক্ত করুন।

    এর জন্য বিকল্পগুলি

উদাহরণ: পাসথ্রু এবং লাইট এস্টিমেশন সক্ষম বা নিষ্ক্রিয় করুন

নিম্নলিখিত কোডটি পাসথ্রু এবং লাইট এস্টিমেশন সক্ষম বা অক্ষম করে:

@onready var world_environment = $WorldEnvironment
@onready var directional_light = $DirectionalLight3D
@onready var directional_light_orig_transform: Transform3D = directional_light.transform

func set_passthrough_enabled(p_enabled: bool) -> void:
    var xr_interface = XRServer.find_interface("OpenXR")
    if xr_interface == null:
        return

    var supported_blend_modes = xr_interface.get_supported_environment_blend_modes()
    if not supported_blend_modes.has(XRInterface.XR_ENV_BLEND_MODE_ALPHA_BLEND):
        return

    # Passthrough
    if p_enabled:
        xr_interface.set_play_area_mode(XRInterface.XR_PLAY_AREA_STAGE)
        xr_interface.environment_blend_mode = XRInterface.XR_ENV_BLEND_MODE_ALPHA_BLEND
        world_environment.environment.background_mode = Environment.BG_COLOR
        world_environment.environment.background_color = Color(0.0, 0.0, 0.0, 0.0)
        get_viewport().transparent_bg = true
    else:
        xr_interface.set_play_area_mode(XRInterface.XR_PLAY_AREA_ROOMSCALE)
        xr_interface.environment_blend_mode = XRInterface.XR_ENV_BLEND_MODE_OPAQUE
        world_environment.environment.background_mode = Environment.BG_SKY
        get_viewport().transparent_bg = false

    # Light Estimation
    if OS.has_feature("androidxr"):
        var light_estimation = Engine.get_singleton("OpenXRAndroidLightEstimationExtension")
        if p_enabled and light_estimation.is_light_estimation_supported():
            light_estimation.start_light_estimation()
        elif light_estimation.is_light_estimation_started():
            light_estimation.stop_light_estimation()
            directional_light.transform = directional_light_orig_transform
কোড সম্পর্কে মূল বিষয়গুলো
  • লাইট এস্টিমেশন নিষ্ক্রিয় করার সময়, DirectionalLight3D এর মূল দিকটি ম্যানুয়ালি পুনরুদ্ধার করতে হবে।
  • পাসথ্রু এবং লাইট এস্টিমেশন ব্যবহার করে তৈরি একটি প্রকল্পের সম্পূর্ণ উদাহরণের জন্য, গিটল্যাবে থাকা 'এক্সপেডিশন টু ব্লোবোটোপিয়া ' দেখুন।