1. 程式人生 > >Unity post processing stack(v1版本)腳本控制

Unity post processing stack(v1版本)腳本控制

sset -o sta 技術分享 project 不同 ppi manager 組件

環境:Unity5.6.2,post processing stack

註意:post-processing stack是從AssetStore上下載的v1版本,而並非stack2版本,stack2版本在unity2018的packagemanager中可以直接下載安裝

首先,在相機上綁上PostProcessingBehaviour這個腳本

技術分享圖片
在Project視圖中右鍵->Create->Post-Processing Profile
技術分享圖片
並賦值到post processing behaviour的Profile上

選中剛剛新建的Post-Processing Profile文件

在Inspector面板中就可以進行設置了

技術分享圖片

那如何通過代碼來進行控制呢?
這裏有坑啊,而且與以前的ImageEffects是不同的

首先當然要獲取這個PostProcessingBehaviour

PostProcessingBehaviour ppb=GetComponent<PostProcessingBehaviour>();

然後要獲取創建的這個profile文件對象

var profile = ppb.profile;

再獲取這個Color Grading效果

var colorGrading = profile.colorGrading;

獲取它上面的設置

var settings = colorGrading.settings;

然後坑就來了,先看下圖
以Color Grading這個效果為例:
技術分享圖片
它的面板中其實又分了幾部分
Tonmapping和TrackBalls可以不管
有Basic, Chanel Mixer 還有Grading Curves

按照正常思維,在settings後面直接點,OK是可以的
本例我們設定要修改的是Basic部分中的Post Exposure(EV)的值
可以直接點出basic,再直接點出PostExposure都是沒問題的,甚至可以直接賦值

settings.basic.postExposure = -1.2f;

沒有問題,也不會報錯,但運行程序,沒有任何效果,面板中post exposure的值也沒有變化。

這就是坑所在了。

正確的做法是,new 一個settings,把裏面的post exposure值改掉,再賦給ColorGrading組件

var settings = new ColorGradingModel.Settings() ;
colorGrading.settings=settings;

而new一個settings只修改裏面的exposure值,依然有坑

如前圖所示,Color Grading面板中分為幾個部分,有basic, Chanel Mixer還有Grading Curves
但是new 出來的settings裏面其實基本上是空的,所以所有的這一切都要賦值,不然會報錯
賦值就在new 的時候一並進行
而既然其它部分不變,則用之前點點點的方式獲取,並賦給這個新建的settings,最後再將settings整個賦值回去

var scurves = ppb.profile.colorGrading.settings.curves;
var schannelMixer = ppb.profile.colorGrading.settings.channelMixer;
var settings = new ColorGradingModel.Settings() {
    basic = {postExposure = -1.2f, contrast = 1, saturation = 1, hueShift = 0, tint = 0, temperature = 0 }  ,
    curves = scurves,
    channelMixer = schannelMixer
}

這樣new 出來一個settings最後再賦值回去

ppb.colorGrading.settings = settings;

如此修改才能生效,而之後再對值進行修改的話,直接在新建的settings上點出屬性,直接賦值,再把settings賦值回去

settings.basic.postExposure = 10f;
ppb.colorGrading.settings = settings;

也就是每次修改,改的是你新建的settings,但最後還是要把整個settings賦值回去才能生效

以上

Unity post processing stack(v1版本)腳本控制