Sunday, January 15, 2017

UE4 Volumetric Rendering

最近在 Ryan Bruck's Blog 看到一系列有關 volumetric rendering 的文章, 相當精采,而且也有附上 source code 對學習上實在是很有幫助,總結幾個 volumetric rendering 的重點,文章裡主要是使用 ray marching,從 camera 發射光束,計算光束在穿過 volume 的過程中最後呈現在 pixel 的顏色。

第一步是根據穿透率 (transmittance) 來算累積起來的 luminance,吸收率會影響穿透率,在光前進的過程中也會需要考慮到發散 (scattering) 的問題,會有二個因素關係到發散,第一個是發散的機率 (由scattering cofficient 來決定),另一個則是怎麼發散 (由 phase function 來決定), 但最重要的還是要先知道有多少光進來,這部份會由光的強度 (intensity)乘上穿透率再算上衰減的公式(通常是距離平方反比)來得到,這些都是簡化過後的說明,在實作的過程中會看到很多的數學公式,會再根據想要的效果來修改。
在 UE4 裡測試的結果如下,

                               

記得使用的 box 需要先將 normal 反過來,這是為了當 camera 穿到 volume 裡的時候,有東西可以畫要不然一穿進去就會被切掉什麼都看不到,另外 UE4 裡的 material 設定好後,會需要一張 3D volume texture,主要是為了在計算時用來 sample volume 的密度 (density),這張圖文章裡沒有提到怎麼製作,所以我做了一個 houdini digital asset,可以方便的在 houdini 裡製作各式個樣的 volume 或是 pyro 模擬後的結果,指定目標的 field 欄位就可以快速的算出一張 volume texture,目前還在測試中,不過使用起來個人覺得還蠻方便的,可以少了許多鎖碎的設定,



Volumetric Rendering 是一個很吸引人的題目,接下來又有好多東西可以研究了 :)。

Thursday, December 15, 2016

Unreal.js!!

Unreal Engine 也可以使用 javascript 喔! 這是由 NCSoft 開放出來一個稱 Unreal.js 的 plugin,除了 github 上提供的範例以外,Michael Chang 在 Beyond Tellerrand Conference 2016 有一個蠻有趣的展示


Friday, December 9, 2016

multiverse_note

Multiverse 是從 Bonus: Luma Pictures’ new tools for Doctor Strange fxguide 介紹 Doctor Strange 裡用到的一些技術裡看到的,
“There is no tool in the market capable of handling Alembic and USD, in Maya in the proper
way, - not to mention circumventing all the Maya limitations”

Tuesday, November 4, 2014

OpenVDB

最近開始玩 Houdini 後,發現 Houdini 在 volume 相關的領域表現真的相當出色,其中對 OpenVDB 的支援更是其它 3D 的軟體所無法比擬的,好奇心驅使之下,就想對 OpenVDB 有更深一步的了解,最好的資料當然就是原始碼囉,不過因為環境是使用 Windows 的情況下,一開始在建置這個架在 Linux 上的專案遇到了不少的困難,最頭痛的地方就是使用到的第三方的函式庫還真不少,有 TBB、boost、OpenEXR、zlib,要有 python 支援需要有 boost python,要 unit test 需要 cppunit,想要 build 出 viewer 還需要有 glew、glfw,再加上 debug/release 和 x86/x64 的設定,然後在測試時也有遇到一些奇奇怪怪的問題,著實花了不少的時間在做一些修正,不過目前 library 可以正常運作,編譯出來的 python module 也可以在 Maya 裡 import 進來,project 帶的 viewer 也可以執行,OpenVDB Maya Toolkit 也沒問題,說實在的也蠻有成就感的 :D,接下來就是開始研究一些相關的文獻,google 一下好像還真的不少,上星期也有看到 OpenVDB 3.0 beta 的發表,可能又有一陣子不會無聊了。



Thursday, August 28, 2014

Houdini 一個未知的領堿

    這二個星期開始接觸 Houdini,只能說相見恨晚啊,整個軟體設計的理念和其它的 3D 軟體 Maya, Max 等完全不一樣,入門的門檻我覺得相當的高,邏輯的概念也要非常清楚,雖然看了很多教學,還是覺得一堆無法掌握的東西,簡單的說就是被 "定" 的很慘,但同時也無可自拔的愛上它,雖然現階段還無法駕御但可以很清楚的感受到 Houdini 所給與的彈性和強大的功能,也很享受在使用 Houdini 時不時地會有驚喜的感覺,不禁讓我想起一開始使用 vim 的 fu。
   
    除了基本操作以外,我也同時在學習 Houdini 裡如何使用 Script 去做擴充的動作,配合工作上的需求,實作了一個 velocity field 輸出工具,有興趣的朋友可以到 Orbolt (velocity field exporter) 上下載,這個工具可以讓你做完特效的模擬後,將範圍內的粒子或是流體切割 voxel 後輸出每個 voxel 裡的 velocity,配合 Unreal Engine 4 的 GPU particle 可以做出很有趣的效果,簡單的示意圖如下,

做的不是很好但我想概念應該有傳達到。理論上也可以實現像這個教學影片裡的效果 (https://www.youtube.com/watch?v=Dces...Be8NqR8t#t=648),或是像 UE4 elemental demo裡的效果一樣,一整個華麗!



Monday, March 4, 2013

IPython - 學習 Python 的好東西

IPython 提供了一個可以互動的 Python shell,每一個執行的 script 都可以動態更改,結果也可以存起來供之後的 script 使用,除此之外還有很多預先定義好方便使用的 "Magic Functions",有 Qt based 的 Console 可以在看起來像 terminal 的介面中畫圖


,debug 的輸出訊息也比較清楚,種種好處之外,我最中意的就是像 sys? 或是 xxx_class?? 的功能了,有時候突然腦殘忘記某個 module 的功能,馬上可以叫出文件說明或是查某一個 function 是在做什麼的,真是太實用了!

Friday, February 22, 2013

Raspberry Pi 的備忘錄 (一)

   就在過完年的這幾天收到了等待許久的 Raspberry Pi :D! 其實也沒有想到要用來做什麼用,只是覺得這東西實在很酷,就莫名的想用一台來玩玩,安裝完成啟動後就發現其實要設定的東西好像還蠻多的,設定這東西說真的當下搞定後過不用多久就會忘光了! (還是只有我會這樣 XD),所以就順手筆記一下自己有設定過的東西。