Render.js؛ یه موتور Raytracing با جاوااسکریپت خالص
خلاصهٔ کاملتر
نویسنده Render.js رو اینطور معرفی میکنه: یه موتور رِیتریسینگ (raytracing) روی Node.js که کاملاً با جاوااسکریپت خالص نوشته شده و هیچ وابستگی بیرونی نداره؛ یعنی حتی npm install هم لازم نیست. رِیتریسینگ یه روش رندر تصویره که مسیر پرتوهای نور رو دنبال میکنه تا انعکاس و سایه و نورپردازی واقعگرایانه دربیاره.
یه ویژگی مهمش پشتیبانی از فرمت RenderMan RIB هست؛ همون فرمت متنی استانداردی که باهاش صحنه رو توصیف میکنی. این موتور زیرمجموعهای از دستورهای RIB رو میفهمه، مثل تعریف نور، رنگ، متریال سطح و شکلهای هندسی. یه فایل سادهی RIB چیزی شبیه این میمونه که یه کرهی پلاستیکی قرمز رو زیر یه نور میذاره:
WorldBegin
LightSource "distantlight" 1 "from" [1 1 1] "to" [0 0 0]
AttributeBegin
Color [0.8 0.2 0.2]
Surface "plastic"
Sphere 0.5 -0.5 0.5 360
AttributeEnd
WorldEnd
از نظر هندسه، این موتور کره، صفحه، مثلث و سطوح NURBS رو پشتیبانی میکنه. NURBS (سطوح B-Spline گویای غیریکنواخت) با دستور NuPatch و ارزیابی کامل B-spline به روش بازگشتی Cox-de Boor پیاده شده، که اجازه میده سطوح منحنی با درجههای دلخواه رو رندر کنی. سیستم متریال هم سه نوع سطح پلاستیک، فلز و مات داره و مدل سایهزنی Phong/Blinn-Phong با چند منبع نور رو پشتیبانی میکنه.
به گفتهی نویسنده رندرینگ بهصورت چندنخی و بهصورت پیشفرض فعاله؛ موتور خودش هستههای CPU رو تشخیص میده و کار رو با worker threadها پخش میکنه، که معمولاً ۲ تا ۸ برابر سریعتر میشه. برای کیفیت لبهها هم آنتیآلیاسینگ با نمونهبرداری stratified و چند پریست آماده داره، از none (یک نمونه به ازای هر پیکسل، سریعترین) تا ultra (۲۵ نمونه، بهترین کیفیت).
نکتهی جالب دیگه چارچوب تستشه: با seed قطعی (deterministic) کار میکنه و تصاویر رندرشده رو بیتبهبیت با تصاویر مرجع مقایسه میکنه، و حتی بررسی میکنه که خروجی تکنخی و چندنخی دقیقاً یکی باشن. خروجی نهایی فایل تصویری استاندارد PPM هست که با اکثر نمایشگرها باز میشه یا میشه به PNG تبدیلش کرد.
نکات کلیدی:
- موتور رِیتریسینگ روی Node.js با جاوااسکریپت خالص و بدون هیچ وابستگی
- پشتیبانی از فرمت RenderMan RIB و سطوح NURBS با دستور NuPatch
- رندرینگ چندنخی پیشفرض با تشخیص خودکار هستههای CPU (۲ تا ۸ برابر سریعتر)
- آنتیآلیاسینگ stratified با پریستهای none تا ultra
- تست با seed قطعی و مقایسهی بیتبهبیت؛ خروجی فایل PPM




