เอกสารนี้ให้ภาพรวมที่ครอบคลุมของ Parceler ซึ่งเป็นไลบรารีการสร้างโค้ดสำหรับ Android ที่ทำให้การสร้างออบเจ็กต์ Parcelable ง่ายขึ้น โดยให้รายละเอียดคุณสมบัติของ Parceler รวมถึงประเภทข้อมูลที่รองรับ เทคนิคการทำให้เป็นอนุกรม การจัดการความหลากหลาย และการกำหนดค่าขั้นสูง รวมถึงการผสานรวมกับไลบรารี Android ยอดนิยมอื่นๆ ส่วนหลังจะแนะนำ Mitsuba 3 ซึ่งเป็นระบบเรนเดอร์ที่เน้นการวิจัย โดยสรุปคุณสมบัติ การติดตั้ง และการใช้งาน
พัสดุ
มีคำถาม? ถามได้ที่ StackOverflow
พบปัญหา? กรุณารายงานมัน.
ใน Android Parcelables เป็นวิธีที่ยอดเยี่ยมในการทำให้วัตถุ Java เป็นอนุกรมระหว่างบริบท
เมื่อเปรียบเทียบกับการทำให้เป็นอนุกรมแบบดั้งเดิม Parcelables ใช้เวลาน้อยลงถึง 10 เท่าในการซีเรียลไลซ์และดีซีเรียลไลซ์
อย่างไรก็ตาม มีข้อบกพร่องที่สำคัญกับ Parcelables
Parcelables มีรหัสสำเร็จรูปจำนวนมาก
หากต้องการนำ Parcelable ไปใช้ คุณต้องจำลองเมธอด writeToParcel() และ createFromParcel() เพื่อให้อ่านและเขียนไปยัง Parcel ในลำดับเดียวกัน
นอกจากนี้ Parcelable จะต้องกำหนด Parcelable.Creator CREATOR สุดท้ายแบบคงที่สาธารณะ เพื่อให้โครงสร้างพื้นฐาน Android สามารถใช้ประโยชน์จากรหัสการทำให้เป็นอนุกรมได้
Parceler คือไลบรารีการสร้างโค้ดที่สร้างซอร์สโค้ดสำเร็จรูปของ Android Parcelable
คุณไม่จำเป็นต้องใช้งานอินเทอร์เฟซ Parcelable, writeToParcel() หรือ createFromParcel() หรือ CREATOR สุดท้ายแบบคงที่สาธารณะอีกต่อไป
คุณเพียงแค่ใส่คำอธิบายประกอบ POJO ด้วย @Parcel แล้ว Parceler จะดำเนินการส่วนที่เหลือ
เนื่องจาก Parceler ใช้ Java JSR-269 Annotation Process จึงไม่จำเป็นต้องรันเครื่องมือด้วยตนเองเพื่อสร้างโค้ด Parcelable
เพียงใส่คำอธิบายประกอบ Java Bean ของคุณ คอมไพล์ เท่านี้ก็เสร็จเรียบร้อย
ตามค่าเริ่มต้น Parceler จะทำให้ฟิลด์ของอินสแตนซ์ของคุณเป็นอนุกรมโดยตรง:
ระวังอย่าใช้ฟิลด์ส่วนตัวเมื่อใช้กลยุทธ์การทำให้เป็นอนุกรมของฟิลด์เริ่มต้น เนื่องจากจะต้องเสียประสิทธิภาพการทำงานเนื่องจากการสะท้อนกลับ
หากต้องการใช้โค้ดที่สร้างขึ้น คุณสามารถอ้างอิงคลาสที่สร้างขึ้นได้โดยตรง หรือผ่านทางคลาสยูทิลิตี้ Parcels:
หากต้องการยกเลิกการอ้างอิง @Parcel เพียงเรียกใช้เมธอด Parcels.unwrap() :
แน่นอนว่าสามารถเพิ่ม Parcelable ที่ห่อแล้วลงใน Android Bundle เพื่อถ่ายโอนจากกิจกรรมหนึ่งไปอีกกิจกรรมหนึ่ง:
และยกเลิกการอ้างอิงในเมธอด onCreate() :
เทคนิคการห่อและแกะห่อนี้เข้ากันได้ดีกับลวดลายของ Intent Factory
นอกจากนี้ Parceler ยังได้รับการสนับสนุนจากไลบรารีต่อไปนี้:
Transfuse - อนุญาตให้ใช้ถั่วที่มีคำอธิบายประกอบ @Parcel กับการแทรก @Extra
FragmentArgs - ใช้อะแดปเตอร์ ParcelerArgsBundler เพื่อห่อและแกะ @Parcel annotated beans ด้วยพารามิเตอร์แฟรกเมนต์
Dart - ตรวจจับถั่วที่มีคำอธิบายประกอบ @Parcel โดยอัตโนมัติ และแกะถั่วเหล่านั้นโดยอัตโนมัติเมื่อใช้ @InjectExtra
AndroidAnnotations - ตรวจจับถั่วที่มีคำอธิบายประกอบ @Parcel โดยอัตโนมัติ และล้อม/แกะพวกมันโดยอัตโนมัติเมื่อใช้ @Extra, @FragmentArg, @InstanceState และคำอธิบายประกอบอื่นๆ ที่เกี่ยวข้องกับ Bundle
ActivityStarter - รองรับออบเจ็กต์ Parceler ดั้งเดิมเป็นอาร์กิวเมนต์ของกิจกรรม แฟรกเมนต์ บริการ ฯลฯ
Remoter - รองรับออบเจ็กต์ Parceler แบบเนทีฟเป็นอาร์กิวเมนต์ในอินเทอร์เฟซ @Remoter
ประเภทแอตทริบิวต์พัสดุ
มีเพียงประเภทที่เลือกเท่านั้นที่สามารถใช้เป็นแอตทริบิวต์ของคลาส @Parcel
รายการต่อไปนี้ประกอบด้วยประเภทที่แมป:
ไบต์
สองเท่า
ลอย
ภายใน
ยาว
ถ่าน
บูลีน
สตริง
ไอบินเดอร์
มัด
SparseArray ของประเภทที่แมปใดๆ*
เบาบางBooleanArray
สนามที่สังเกตได้
รายการ ArrayList และ LinkedList ของประเภทที่แมปใดๆ*
แผนที่, HashMap, LinkedHashMap, SortedMap และ TreeMap ของประเภทที่แมปใดๆ*
ตั้งค่า, HashSet, SortedSet, TreeSet, LinkedHashSet ของประเภทที่แมปใดๆ*
พัสดุได้
ทำให้เป็นอนุกรมได้
อาร์เรย์ของประเภทที่แมปใดๆ
คลาสอื่นใดที่มีคำอธิบายประกอบด้วย @Parcel
*พัสดุจะเกิดข้อผิดพลาดหากพารามิเตอร์ทั่วไปไม่ได้รับการแมป
Parceler ยังรองรับประเภทใดๆ ข้างต้นโดยตรงอีกด้วย
สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อต้องจัดการกับคอลเลกชันของคลาสที่มีคำอธิบายประกอบด้วย @Parcel:
ความแตกต่าง
โปรดทราบว่า Parceler จะไม่คลายลำดับชั้นการสืบทอด ดังนั้นฟิลด์โพลีมอร์ฟิกใดๆ จะถูกคลายเป็นอินสแตนซ์ของคลาสพื้นฐาน
เนื่องจาก Parceler เลือกใช้ประสิทธิภาพมากกว่าการตรวจสอบ .getClass() สำหรับข้อมูลทุกชิ้น
โปรดดูส่วนการทำให้เป็นอนุกรมแบบกำหนดเองสำหรับตัวอย่างการทำงานกับฟิลด์โพลีมอร์ฟิก
เทคนิคการทำให้เป็นอนุกรม
Parceler เสนอทางเลือกมากมายสำหรับวิธีซีเรียลไลซ์และดีซีเรียลไลซ์อ็อบเจ็กต์ นอกเหนือจากซีเรียลไลซ์ตามฟิลด์ที่เห็นด้านบน
การทำให้เป็นอนุกรมของ Getter/setter
Parceler อาจถูกกำหนดค่าให้เป็นอนุกรมโดยใช้วิธี getter และ setter และตัวสร้างที่ไม่ว่างเปล่า
นอกจากนี้ ฟิลด์ วิธีการ และพารามิเตอร์ตัวสร้างอาจเชื่อมโยงกันโดยใช้คำอธิบายประกอบ @ParcelProperty
สิ่งนี้สนับสนุนกลยุทธ์ bean หลายประการ รวมถึงความไม่เปลี่ยนรูปและ getter/setter bean แบบดั้งเดิม
หากต้องการกำหนดค่าการทำให้เป็นอนุกรมของวิธีการเริ่มต้น เพียงกำหนดค่าคำอธิบายประกอบ @Parcel ด้วย Serialization.BEAN:
หากต้องการใช้ตัวสร้างที่มีการทำให้เป็นอนุกรม ให้ใส่คำอธิบายประกอบตัวสร้างที่ต้องการด้วยคำอธิบายประกอบ @ParcelConstructor:
หากมีคอนสตรัคเตอร์ว่าง Parceler จะใช้คอนสตรัคเตอร์นั้น เว้นแต่จะมีการเพิ่มความคิดเห็นให้กับคอนสตรัคเตอร์อื่น
การผสม getters/setters และฟิลด์
คุณยังสามารถผสมผสานและจับคู่เทคนิคการทำให้เป็นอนุกรมได้โดยใช้คำอธิบายประกอบ @ParcelProperty
ในตัวอย่างต่อไปนี้ ชื่อและนามสกุลจะถูกเขียนลงใน bean โดยใช้ตัวสร้าง ในขณะที่ชื่อถูกอ่านจาก bean โดยใช้ฟิลด์ และนามสกุลจะถูกอ่านโดยใช้เมธอด getLastName()
พารามิเตอร์ firstName และ LastName ได้รับการประสานกันโดยชื่อพารามิเตอร์ "first" และ "last" ด้วยความเคารพ
สำหรับแอ็ตทริบิวต์ที่ไม่ควรทำให้เป็นอนุกรมด้วย Parceler ฟิลด์แอ็ตทริบิวต์ getter หรือ setter อาจได้รับการใส่คำอธิบายประกอบโดย @Transient
Parceler รองรับสไตล์ที่แตกต่างกันมากมายโดยมีศูนย์กลางอยู่ที่ POJO
ซึ่งช่วยให้สามารถใช้คลาสที่มีคำอธิบายประกอบ @Parcel กับไลบรารีที่ใช้ POJO อื่นๆ ได้ รวมถึงรายการต่อไปนี้:
จีซอน
อาณาจักร
ตู้
XML อย่างง่าย
ดีบีโฟลว์
การสนับสนุนโรงงานแบบคงที่
อีกทางเลือกหนึ่งนอกเหนือจากการใช้ตัวสร้างโดยตรง Parceler รองรับการใช้ Static Factory ที่มีคำอธิบายประกอบเพื่อสร้างอินสแตนซ์ของคลาสที่กำหนด
สไตล์นี้รองรับตัวประมวลผลคำอธิบายประกอบ AutoValue ของ Google / ไลบรารีการสร้างโค้ดสำหรับสร้าง bean ที่ไม่เปลี่ยนรูป
อินเทอร์เฟซของ Parceler กับ AutoValue ผ่านคำอธิบายประกอบ @ParcelFactory ซึ่งแมปวิธีการแบบคงที่จากโรงงานเข้ากับการทำให้เป็นอนุกรม @Parcel ที่มีคำอธิบายประกอบ:
AutoValue สร้างคลาสที่แตกต่างจาก @Parcel ที่มีคำอธิบายประกอบ ดังนั้น คุณต้องระบุคลาส Parceler ที่ควรสร้างในคลาสยูทิลิตี้ Parcels:
และเพื่อทำการดีซีเรียลไลซ์:
การทำให้เป็นอนุกรมแบบกำหนดเอง
@Parcel มีพารามิเตอร์ทางเลือกเพื่อรวม ParcelConverter ของตัวซีเรียลไลเซอร์แบบแมนนวล ในกรณีที่จำเป็นต้องมีการทำให้เป็นอนุกรมแบบพิเศษ
นี่เป็นตัวเลือกที่สะอาดกว่าสำหรับการใช้คลาส Parcelable มากกว่าการใช้งานด้วยตนเอง
รหัสต่อไปนี้สาธิตการใช้ ParcelConverter เพื่อแยกลำดับชั้นการสืบทอดในระหว่างการดีซีเรียลไลซ์
Parceler ยังได้รับการจัดแพ็กเกจด้วยชุดคลาสพื้นฐานเพื่อให้การแปลงคอลเลกชั่นง่ายขึ้นภายใต้แพ็กเกจ org.parceler.converter ของ api
คลาสพื้นฐานเหล่านี้จะดูแลงานที่ยากหรืองานละเอียดต่างๆ ที่เกี่ยวข้องกับ Collections รวมถึงการตรวจสอบค่าว่างและการวนซ้ำของ Collectin
ตัวอย่างเช่น ParcelConverter ข้างต้นสามารถเขียนได้โดยใช้ `ArrayListParcelConverter':
คลาสที่ไม่มีซอร์ส Java
สำหรับคลาสที่ไม่มีซอร์ส Java ที่สอดคล้องกัน อาจรวมคลาสเป็น Parcel โดยใช้คำอธิบายประกอบ @ParcelClass
คำอธิบายประกอบนี้อาจประกาศได้ทุกที่ในแหล่งที่คอมไพล์ตามที่สะดวก
ตัวอย่างเช่น เราอาจรวม @ParcelClass ไว้พร้อมกับแอปพลิเคชัน Android:
คำอธิบายประกอบ @ParcelClass หลายรายการสามารถประกาศได้โดยใช้คำอธิบายประกอบ @ParcelClasses
นอกจากนี้ คลาสที่อ้างอิงโดย @ParcelClass อาจได้รับการกำหนดค่าโดยใช้คำอธิบายประกอบ @Parcel
ซึ่งช่วยให้สามารถกำหนดค่าการทำให้เป็นอนุกรมผ่านพารามิเตอร์ใดๆ ที่มีอยู่ในคำอธิบายประกอบ @Parcel รวมถึงเทคนิคการทำให้เป็นอนุกรมหรือคลาสที่จะวิเคราะห์
เทคนิคหนึ่งที่มีประโยชน์คือความสามารถในการกำหนดตัวแปลงแบบกำหนดเองสากลสำหรับประเภท:
ซึ่งช่วยให้สามารถควบคุมคลาสที่ไม่สามารถแก้ไขได้โดยตรงอย่างละเอียด
การกำหนดค่าขั้นสูง
ข้ามการวิเคราะห์
เป็นเรื่องปกติสำหรับห้องสมุดบางแห่งที่ต้องการ bean เพื่อขยายคลาสพื้นฐาน
แม้ว่าจะไม่ใช่กรณีที่เหมาะสมที่สุด แต่ Parceler สนับสนุนแนวปฏิบัตินี้โดยอนุญาตให้กำหนดค่าคลาสใดในลำดับชั้นการสืบทอดเพื่อวิเคราะห์ผ่านพารามิเตอร์การวิเคราะห์:
ในตัวอย่างนี้ เฉพาะฟิลด์ของคลาสที่หนึ่งและสามเท่านั้นที่จะถูกทำให้เป็นอนุกรม โดยหลีกเลี่ยงทั้งพารามิเตอร์คลาส BaseClass และคลาสที่สอง
การห่อแบบเฉพาะ
คลาสอรรถประโยชน์ Parcels ค้นหาคลาสที่กำหนดเพื่อห่อตามคลาส
เพื่อเหตุผลด้านประสิทธิภาพ สิ่งนี้จะละเว้นการสืบทอด ทั้งคลาสขั้นสูงและคลาสพื้นฐาน
มีวิธีแก้ไขปัญหานี้สองวิธี
ขั้นแรก อาจระบุประเภทเพิ่มเติมเพื่อเชื่อมโยงกับประเภทที่กำหนดผ่านพารามิเตอร์การใช้งาน:
ประการที่สอง เราอาจระบุประเภทคลาสเมื่อใช้เมธอด Parcels.wrap() :
การกำหนดค่า Proguard
หากต้องการกำหนดค่า Proguard ให้เพิ่มบรรทัดต่อไปนี้ลงในไฟล์การกำหนดค่า Proguard ของคุณ สิ่งเหล่านี้จะเก็บไฟล์ที่เกี่ยวข้องกับคลาสยูทิลิตี้ Parcels และอินสแตนซ์ Parcelable CREATOR:
เอ่อ
รับพัสดุ
คุณสามารถดาวน์โหลด Parceler เป็นการพึ่งพา Maven:
หรือเกรเดิล:
หรือจากมาเวนเซ็นทรัล
ใบอนุญาต
ตัวอย่าง:
มิตสึบะ เรนเดอร์เรอร์ 3
เอกสารประกอบ | วิดีโอสอน | ลินุกซ์ | แมคโอเอส | หน้าต่าง | พีพีไอ |
---|---|---|---|---|---|
คำเตือน
ขณะนี้มีงานที่ไม่มีเอกสารและไม่มั่นคงเกิดขึ้นจำนวนมาก
สาขา master
เราขอแนะนำให้คุณใช้ของเรา
รุ่นล่าสุด
จนกว่าจะมีประกาศต่อไป
หากคุณต้องการลองใช้การเปลี่ยนแปลงที่กำลังจะเกิดขึ้น โปรดดูที่
คู่มือการย้ายนี้
ควรครอบคลุมคุณลักษณะใหม่ส่วนใหญ่และการเปลี่ยนแปลงที่กำลังจะเกิดขึ้น
การแนะนำ
Mitsuba 3 เป็นระบบการเรนเดอร์ที่เน้นการวิจัยสำหรับแสงไปข้างหน้าและไฟผกผัน
การจำลองการขนส่งที่พัฒนาขึ้นที่ EPFL ในประเทศสวิตเซอร์แลนด์
ประกอบด้วยไลบรารีหลักและชุดปลั๊กอินที่ใช้ฟังก์ชันการทำงาน
ตั้งแต่วัสดุและแหล่งกำเนิดแสงไปจนถึงอัลกอริธึมการเรนเดอร์ที่สมบูรณ์
Mitsuba 3 สามารถกำหนดเป้าหมายใหม่ได้ : นี่หมายความว่าการใช้งานพื้นฐานและ
โครงสร้างข้อมูลสามารถแปลงสภาพเพื่อทำงานต่างๆ ให้สำเร็จได้ สำหรับ
ตัวอย่าง รหัสเดียวกันสามารถจำลองการขนส่ง RGB ทั้งแบบสเกลาร์ (คลาสสิกหนึ่งเรย์ต่อครั้ง)
หรือการขนส่งสเปกตรัมที่แตกต่างกันบน GPU ทั้งหมดนี้สร้างขึ้น
Dr.Jit คอมไพเลอร์เฉพาะทาง just-in-time (JIT) ที่พัฒนาขึ้นสำหรับโปรเจ็กต์นี้โดยเฉพาะ
คุณสมบัติหลัก
ข้ามแพลตฟอร์ม : Mitsuba 3 ได้รับการทดสอบบน Linux ( x86_64
), macOS
( aarch64
, x8664
) และ Windows ( x8664
)
ประสิทธิภาพสูง : คอมไพเลอร์ Dr.Jit พื้นฐานจะฟิวส์โค้ดการเรนเดอร์
สู่เมล็ดพืชที่ได้รับประสิทธิภาพอันล้ำสมัยโดยใช้
แบ็กเอนด์ LLVM ที่กำหนดเป้าหมาย CPU และแบ็กเอนด์ CUDA/OptiX
กำหนดเป้าหมาย NVIDIA GPU ด้วยการเร่งด้วยฮาร์ดแวร์ Ray Tracing
Python ก่อน : Mitsuba 3 ได้รับการบูรณาการอย่างลึกซึ้งกับ Python วัสดุ,
พื้นผิวและแม้กระทั่งอัลกอริธึมการเรนเดอร์แบบเต็มสามารถพัฒนาได้ใน Python
ซึ่งระบบ JIT คอมไพล์ (และเลือกสร้างความแตกต่าง) ได้ทันที
สิ่งนี้ทำให้สามารถทดลองที่จำเป็นสำหรับการวิจัยในคอมพิวเตอร์กราฟิกและ
สาขาวิชาอื่น ๆ
ความแตกต่าง : Mitsuba 3 เป็นตัวเรนเดอร์ที่สร้างความแตกต่างได้ ซึ่งหมายความว่ามัน
สามารถคำนวณอนุพันธ์ของการจำลองทั้งหมดโดยคำนึงถึงอินพุต
พารามิเตอร์ต่างๆ เช่น ท่าทางกล้อง เรขาคณิต BSDF พื้นผิว และปริมาตร มัน
ใช้อัลกอริธึมการเรนเดอร์เชิงอนุพันธ์ล่าสุดที่พัฒนาขึ้นที่ EPFL
สเปกตรัมและโพลาไรเซชัน : Mitsuba 3 สามารถใช้เป็นสีเดียวได้
ตัวเรนเดอร์ ตัวเรนเดอร์แบบ RGB หรือตัวเรนเดอร์สเปกตรัม แต่ละรุ่นได้
สามารถเลือกพิจารณาถึงผลกระทบของโพลาไรเซชันได้หากต้องการ
วิดีโอสอน เอกสารประกอบ
เราได้บันทึกวิดีโอ YouTube หลายรายการที่มีการแนะนำอย่างนุ่มนวล
มิตซูบา 3 และ คุณหมอจิตร. นอกเหนือจากนี้ คุณจะพบสมุดบันทึก Juypter ฉบับสมบูรณ์
ครอบคลุมการใช้งาน คำแนะนำวิธีใช้ และเอกสารอ้างอิงที่หลากหลาย
บน readthedocs
การติดตั้ง
เราจัดเตรียมล้อไบนารีที่คอมไพล์ไว้ล่วงหน้าผ่าน PyPI การติดตั้ง Mitsuba ด้วยวิธีนี้ทำได้ง่ายเพียงแค่ใช้งาน
pip ติดตั้งมิตซูบา
บนบรรทัดคำสั่ง แพ็คเกจ Python มีตัวแปรสิบสามแบบตามค่าเริ่มต้น:
scalar_rgb
scalar_spectral
scalarspectralpolarized
llvmadrgb
llvmadmono
llvmadmono_polarized
llvmadspectral
llvmadspectral_polarized
cudaadrgb
cudaadmono
cudaadmono_polarized
cudaadspectral
cudaadspectral_polarized
สองรายการแรกทำการจำลองแบบหนึ่งเรย์ต่อครั้งแบบคลาสสิกโดยใช้ RGB
หรือการแสดงสีสเปกตรัม ในขณะที่สองอันหลังสามารถใช้สำหรับการผกผันได้
แสดงผลบน CPU หรือ GPU หากต้องการเข้าถึงตัวแปรเพิ่มเติม คุณจะต้อง
รวบรวม Dr.Jit เวอร์ชันที่กำหนดเองโดยใช้ CMake โปรดดูที่
เอกสารประกอบ
สำหรับรายละเอียดเกี่ยวกับเรื่องนี้
ความต้องการ
Python >= 3.8
(ทางเลือก) สำหรับการคำนวณบน GPU: Nvidia driver >= 495.89
(ทางเลือก) สำหรับการคำนวณแบบเวกเตอร์ / แบบขนานบน CPU: LLVM >= 11.1
การใช้งาน
นี่คือตัวอย่าง "Hello World" ง่ายๆ ที่แสดงให้เห็นว่าการเรนเดอร์ a เป็นเรื่องง่ายเพียงใด
ฉากโดยใช้ Mitsuba 3 จาก Python:
# นำเข้าไลบรารีโดยใช้นามแฝง "mi" นำเข้า mitsuba เป็น mi# ตั้งค่าตัวแปรของ renderermi.setvariant('scalarrgb')# โหลดฉากฉาก = mi.loติดยาเสพติด(mi.cornellbox())# เรนเดอร์ฉาก img = mi render(scene)# เขียนภาพที่เรนเดอร์ไปยังไฟล์ EXRmi.Bitmap(img).write('cbox.exr')
สามารถดูบทช่วยสอนและสมุดบันทึกตัวอย่างที่ครอบคลุมการใช้งานที่หลากหลาย
ในเอกสารประกอบ
เกี่ยวกับ
โปรเจ็กต์นี้สร้างโดย Wenzel Jakob
คุณสมบัติที่สำคัญและ/หรือการปรับปรุงโค้ดได้รับการสนับสนุนโดย
เซบาสเตียน สไปเรอร์,
นิโคลัส รุสเซล,
เมอร์ลิน นิเมียร์-เดวิด
เดลิโอ วิชินี่,
ทิเซียน เซลท์เนอร์,
แบปติสต์ นิโคเลต์,
มิเกล เครสโป,
วินเซนต์ เลอรอย และ
จือยี่ จาง.
เมื่อใช้ Mitsuba 3 ในโครงการวิชาการ โปรดอ้างอิง:
@software{Mitsuba3,title = {Mitsuba 3 renderer},ผู้เขียน = {Wenzel Jakob และ Sébastien Speierer และ Nicolas Roussel และ Merlin Nimier-David และ Delio Vicini และ Tizian Zeltner และ Baptiste Nicolet และ Miguel Crespo และ Vincent Leroy และ Ziyi Zhang} หมายเหตุ = {https://mitsuba-renderer.org},รุ่น = {3.1.1},ปี = 2022}