Katana instance for PRMAN

前言

前段時間在 katana 裏測試 instance 遇到了一些坑,閒暇之餘記錄一下。

最靈活的方法

第一種方法:利用 katana 自帶的 CopyLocationToChild1 把需要 instance 的物體 copy 到對應的層級,然後設置對應的 translate, rotate, scale 屬性。
優點:這種方法異常簡單,寫在 OpScript 裏運行也異常的快。靈活性相當高,比如說在 instance 的時候換個帽子,換件衣服什麼的。比較適合 crowd instance。
缺點:渲染異常的慢。因爲它的原理是把對應的模型不停複製,然後放置到對應的地方。假如有個模型只有50個面,你複製10次,那麼場景裏就有500個面。

PRMAN支持的方法

根據 PRMAN 的官方文檔 Instancing in Katana2 ,裏面提供了兩種方法。
第二種方法:設置好 instance source 組。在 instance 組裏指定 geometry.instaceSource 屬性對應到 instance source 組的層級。
優點:對於手動 debug 來說比較方便定位到 instance 的東西。渲染速度非常快,因爲同樣的 mesh 不會重複。
缺點:編程就比較困難了,畢竟要處理一堆字符串。所有 instance 的物體是視圖上看不到的,只能在渲染時看到。不夠靈活,只適合 instance 沒有變化的物體。每種 instance 需要對應一個層級。
:需要先把 instance group 設置好,再設置 instance。

第三種方法:設置好 instance source 組,並添加 instance.ID 屬性。在 instance 組裏指定 instance.ID 屬性對應到 instance source 組的 instance.ID
優點:編程上會相對方便很多,因爲我們不用處理層級字符串了。渲染速度非常快,因爲同樣的 mesh 不會重複。
缺點:通過手動去 debug 會比較困難。所有 instance 的物體是視圖上看不到的,只能在渲染時看到。不夠靈活,只適合 instance 沒有變化的物體。每種 instance 需要對應一個層級。
:需要先把 instance group 設置好,再設置 instance。

最官方的方法

第四種方法:根據 katana 的官方文檔 Instancing3,我們很容易創建第四種 instance。
優點:渲染速度非常快,編程非常方便,多種 instance 只需要一個層級。
缺點:所有 instance 的物體是視圖上看不到的,只能在渲染時看到。不夠靈活,只適合 instance 沒有變化的物體。
:需要先把 instance group 設置好,再設置 instance。


  1. CopyLocationToChild ↩︎

  2. Instancing in Katana ↩︎

  3. Instancing ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章