2012年11月23日 星期五

2012年11月17日 星期六

那” 直線性色彩工作法 / Linear Workflow ”的背後有哪些你應該要知道?????????

首先你被你的眼睛騙了一輩子! What??

真實世界其實還蠻暗的(gamma 1.0) ! 但我們看世界還好呢??
因為我們人類的眼睛內建一種看東西的上揚曲線叫Gamma 0.4545
所以


















Another Sample:



















然後如果我再告訴你另外一個事實:
所有的數位相機/錄影機在拍攝影像時, CCDCMOS等感光元件所看到接受到是直線性色彩但在寫入檔案到記憶卡或磁碟磁帶過程中會加入一個gamma 0.4545曲線



















Another Sample:


你可能會問, Why?????? 那我先問你是否有聽過螢幕gamma 2.21.8 (Apple螢幕)??
因為我們的任何一個螢幕都帶著一種把畫面弄暗的gamma 2.2曲線
所以:
Another Sample:
其實gamma 0.4545剛好是螢幕gamma 2.2的反函數(1/2.2=0.4545), 所以被gamma0.4545拉亮的數位檔案剛好被螢幕的gamma2.2中和掉而獲得最後gamma1.0的輸出影像, 符合物理世界的呈現模式! 再加上人類用gamma 0.4545的肉眼曲線看亮世界, 所以螢幕所呈現在人眼所看到的結果自然沒有甚麼問題!! 殊不知其背後有著複雜的gamma交換過程!!! XD!
那又跟上述所提的一大堆的直線性色彩工作法優點與CG算圖或合成過程中的應用又有任何的關係??
因為最早期的映像管螢幕(CRT)在製程中會出現gamma 2.2的情況, 所以所有數位檔案便從此被要求在寫入檔案過程中加入gamma 0.4545的變亮曲線之工業標準! 即使新一代的LCD螢幕可以使用gamma 1.0製造, 但考慮與舊系統或現有套裝應用軟體的相容” LCD螢幕還是繼續保有gamma 2.2的特性!
所以所有數位影像在儲存過程中還是保有寫入gamma 0.4545的變亮曲線!

其實這個寫入gamma 0.4545的變亮曲線變成所有直線性色彩的萬惡根源.
因為大部分的合成軟體或算圖引擎其內部運算都是採取直線性色彩運算! 但輸入影像素材或貼圖進入軟體卻是帶gamma 0.4545非直線性色彩的color space.

所以直線性色彩工作法的第一關鍵就是清楚告訴軟體你所輸入的影像素材或貼圖是何種color space, 如果是數位相機攝影機或從網頁下在的素材圖片, 基本上都是統稱gamma 2.2 color space (應該正確的說是gamma 2.2反函數(1/2.2=0.4545)) Adobe所制定的sRGB color space., 當軟體知道素材或貼圖是何種color space, 在送入運算之前, 軟體會先套上color space的相反數曲線(反函數), 使所有素材或貼圖從直線性色彩進入到直線性色彩”, 所有有關色彩運算便從此符合自然世界物理, 享有所有直線性色彩工作法的所有優點!

結束了嗎?? 還沒! No pain! No get!
因為所有貼圖及運算都已直線性色彩化, 所獲得的算圖結果也是直線性色彩結果, 根據前述直線性色彩結果很暗! 所以無法提供算圖結果優劣判斷! 在軟體端的出圖結果上要透過LUT(Look UP Table)的幫忙, 在最後結果上一層拉亮處理的曲線通常是sRGB rec709.

結論:
在認識直線性工作法概念後:
1: 確認輸入素材影像color space!
一般來說! 所有在螢幕看起來正常(老實說colorspace無法從任何判斷)或數位相機攝影機或從網頁下在的素材圖片都是gamma 2.2/ sRGB color space.
大部分OpenEXR/ HDR/ 32bit Tiff Linear color space
dpx/ cin 統稱使用log color space
使用在Bump texture/ Normal texture/ Dispacement texture不須套用任何color space轉換, linear color使用!
2: 啟動軟體的直線性色彩運算模式
Photoshop/ After Effects/ 3ds MAX mentalray/ Maya mentalray : 後續介紹各軟體如何啟動!
Nuke無須任何啟動, 它預設就是一個優化的直線性色彩工作法環境
3: 選擇理想的LUT
4: 輸出檔案時再決定需要帶何種color space出去



2012年10月16日 星期二

Nuke useful SliceTool

set cut_paste_input [stack 0]
version 6.3 v4
push $cut_paste_input
Group {
 name SliceTool39
 selected true
 xpos -625
 ypos -93
 addUserKnob {20 SliceTool}
 addUserKnob {4 output M {Over Right Left Top Bottom}}
 output Right
 addUserKnob {7 scanlinePosition l "scanline position"}
 scanlinePosition 0.5
 addUserKnob {20 settings l Settings}
 addUserKnob {7 thickness l "curve thickness"}
 thickness 0.5
 addUserKnob {7 scanlineThickness l "scanline thickness" R 1 10}
 scanlineThickness 5
 addUserKnob {12 pos1 l INVISIBLE +INVISIBLE}
 pos1 {0 {int(input.format.h*scanlinePosition)}}
 addUserKnob {12 pos2 l INVISIBLE +INVISIBLE}
 pos2 {{input.format.w} {pos1.y}}
}
 Input {
  inputs 0
  name Input
  xpos -535
  ypos -261
 }
set Na1d2e00 [stack 0]
 Transform {
  translate {{-parent.pos1 i} {-parent.pos1 i}}
  black_outside false
  name Transform4
  label T
  xpos -535
  ypos -231
 }
 Transform {
  rotate {{"-degrees( atan2(parent.pos2.y-parent.pos1.y, parent.pos2.x-parent.pos1.x) )" i}}
  black_outside false
  name Transform5
  label "R\n"
  xpos -535
  ypos -197
 }
 Transform {
  scale {{"width / sqrt(pow(parent.pos2.x-parent.pos1.x,2) + pow(parent.pos2.y-parent.pos1.y,2))" i}}
  black_outside false
  name Transform6
  label S
  xpos -535
  ypos -160
 }
 Crop {
  box {0 0 {Input.width i} 1}
  reformat true
  crop false
  name Crop1
  xpos -536
  ypos -117
 }
 Reformat {
  type "to box"
  box_width {{Input.width i}}
  box_height {{Input.height i}}
  box_fixed true
  resize distort
  filter Impulse
  name Reformat1
  xpos -536
  ypos -92
 }
 Expression {
  expr0 "fabs((y/height)-r)<=tolerance ? 1 : 0"
  expr1 "fabs((y/height)-g)<=tolerance ? 1 : 0"
  expr2 "fabs((y/height)-b)<=tolerance ? 1 : 0"
  name Expression3
  xpos -533
  ypos -51
  addUserKnob {20 User}
  addUserKnob {7 tolerance}
  tolerance {{parent.thickness/100 i}}
 }
set Na33b6b0 [stack 0]
 Dot {
  name Dot3
  xpos -163
  ypos -48
 }
set Na33b9e0 [stack 0]
 Dot {
  name Dot4
  xpos -62
  ypos -48
 }
set Na33bd10 [stack 0]
 Dot {
  name Dot6
  xpos 37
  ypos -48
 }
set Na33c040 [stack 0]
 Dot {
  name Dot9
  xpos 159
  ypos -48
 }
 Constant {
  inputs 0
  channels rgb
  color {100 100 -100 0}
  name Constant1
  xpos -360
  ypos -399
 }
 Reformat {
  type "to box"
  box_width {{Input.format.w i}}
  box_height {{int(parent.scanlineThickness) i}}
  box_fixed true
  resize distort
  center false
  filter Impulse
  name Reformat2
  xpos -360
  ypos -333
 }
 Transform {
  translate {0 {-int((parent.scanlineThickness/2)*parent.scanlinePosition) i}}
  center {1024 1.5}
  filter Impulse
  name Transform2
  xpos -360
  ypos -315
 }
 Transform {
  translate {{parent.pos1 i} {parent.pos1-int((parent.scanlineThickness*parent.scanlinePosition)+(Transform2.translate.y*parent.scanlinePosition)) i}}
  center {1024 0.5}
  name Transform1
  xpos -360
  ypos -297
 }
push $Na1d2e00
 Merge2 {
  inputs 2
  name Merge2
  xpos -360
  ypos -261
 }
 Dot {
  name Dot2
  xpos -237
  ypos -256
 }
set Na33d690 [stack 0]
 Dot {
  name Dot1
  xpos -119
  ypos -256
 }
set Na33d9c0 [stack 0]
 Dot {
  name Dot5
  xpos -6
  ypos -256
 }
set Na33dcf0 [stack 0]
 Dot {
  name Dot8
  xpos 104
  ypos -256
 }
set Na33e020 [stack 0]
 Dot {
  name Dot7
  xpos 220
  ypos -256
 }
 ContactSheet {
  inputs 2
  width {{Input.width i}}
  height {{Input.height*2 i}}
  rows 2
  columns 1
  roworder TopBottom
  name ContactSheet2
  xpos 186
  ypos -27
 }
push $Na33c040
push $Na33e020
 ContactSheet {
  inputs 2
  width {{Input.width i}}
  height {{Input.height*2 i}}
  rows 2
  columns 1
  name ContactSheet3
  xpos 74
  ypos -25
 }
push $Na33bd10
push $Na33dcf0
 ContactSheet {
  inputs 2
  width {{Input.width*2 i}}
  height {{Input.height i}}
  rows 1
  columns 2
  colorder RightLeft
  name ContactSheet4
  xpos -40
  ypos -22
 }
push $Na33b9e0
push $Na33d9c0
 ContactSheet {
  inputs 2
  width {{Input.width*2 i}}
  height {{Input.height i}}
  rows 1
  columns 2
  name ContactSheet1
  xpos -153
  ypos -21
 }
push $Na33b6b0
push $Na33b6b0
 ChannelMerge {
  inputs 2
  A rgba.red
  B rgba.green
  name ChannelMerge1
  xpos -533
  ypos 16
 }
set Na3dddb0 [stack 0]
push $Na3dddb0
 ChannelMerge {
  inputs 2
  B rgba.blue
  name ChannelMerge2
  xpos -533
  ypos 84
 }
push $Na33d690
 Merge2 {
  inputs 2
  name Merge1
  xpos -268
  ypos 95
 }
 Switch {
  inputs 5
  which {{parent.output i}}
  name Switch1
  xpos -150
  ypos 95
 }
 Output {
  name Output1
  xpos -150
  ypos 153
 }
end_group

2012年10月5日 星期五

Apple Steve Jobs memorial video 2012

Can't believe one year already...

2012年9月12日 星期三

Resetting the V-Ray VFB

setAttr "vraySettings.vfbSettingsArr" -type Int32Array 0;

2012年8月14日 星期二

2012年7月13日 星期五

ipad + slate + DSC Labs Fairburn 3D Calibration Chart

光軸校正真是一個麻煩程序, 如果偷懶只是給自己找麻煩....

2012年5月23日 星期三

Nuke & ARRI ALEXA color management!


Color profile need to be add in init.py
--------------------------------------------------------------------------------------------------------
#custom input/output LUTs
nuke.root().knob('luts').addCurve("AlexaV3LogC", "{ (t > 0.1496582 ? pow(10.0, (t - 0.385537) / 0.2471896) : t / 0.9661776 - 0.04378604) * 0.18 - 0.00937677 }")

# ViewerProcess LUTs
nuke.ViewerProcess.register("AlexaV3Rec709",nuke.createNode,("Vectorfield", "vfield_file C:/luts/AlexaV3_K1S1_LogC2Video_Rec709_EE_nuke3d.cube colorspaceIn AlexaV3LogC"))

--------------------------------------------------------------------------------------------------------

Sample init.py

ARRI ALEXA Lut generator link!

Amon Tobin's ISAM Live Visual ARTs

http://www.amontobin.com/
 Production Studio: lvthn

2012年5月22日 星期二

Tiji - Balloon

2012年4月27日 星期五

wow! Life of Pi


2012年4月18日 星期三

NAB2012 new toy

2012年3月9日 星期五

2012年3月7日 星期三

2012年2月18日 星期六

2012年2月15日 星期三

digital concept art resource

digital concept art resource http://theroundtablet.com/ http://www.artbyfeng.com/

burning Fire on paper Ref

2012年2月14日 星期二

Goodbye John Lowry !

豪小子的父母 才真不簡單!


豪小子的父母 才真不簡單!

well said "學習到如何幫助孩子及早尋得自己生命的價值,引導合適的道路,接納他們的跌倒與失敗,並繼續鼓勵他們完成自己的夢想。這可能會是一條與他人不一樣的路,無法馬上有清楚的結果可以期待,但我們卻可以與孩子一起經歷生命中真實的歡笑與淚水。" Thanks Bryant's sharing info!

2012年2月13日 星期一

Nuke stuff that easy to forget!

[file dirname [value root.name]]/source/yourFootage.tif


2012年2月3日 星期五

The Fantastic Flying Books of Mr. Morris Lessmore

在這網路與媒體充斥的年代, 你有多久沒有好好讀一本好書呢? 也許 Moonbot Studios 的短篇動畫會勾起你一些感動..... 這部動畫短片讓我想起1998年的劇情片Pleasantville, 劇中人物因為發現自我而呈現自己的ture color!..... 我與許多人一樣想用動漫/設計/文創..等等外殼去膨脹與成就.... 而我內在在最重要的"打動人心"的部分卻一件也沒做好! 真是慚愧!

2012年1月30日 星期一

2012年1月9日 星期一

2012年1月1日 星期日

曙光..........2012

People said 2012 will be a bad year in some way....
But I might have different point of view.......... Even I had experienced all the bad thing happen this year...
Thanks God and my family!
Two soundtracks that reflect my mind....