วันเสาร์ที่ 13 มิถุนายน พ.ศ. 2558

Nuke Color Management


หลังจากรับปากว่าจะเขียนถึง Linear Workflow ใน Nuke วันนี้ก็มีเวลาเขียนถึงแล้ว
จากที่ศึกษาเองจากเนท เกี่ยวกับ  Linear Workflow ใน Fusion ผมก็เทียบกับ Nuke ปรากฏว่า วิธีการทำงาน ก็ไม่ได้ต่างกันมาก เพียงแต่ เราต้องรู้ว่า มันมีอะไรเกี่ยวข้องบ้าง มีปุ่มอะไรต้องกดบ้าง
หลังจากศึกษาเองมา ก็ได้เจอบทความที่ http://www.nukepedia.com/written-tutorials/shake-to-nuke-a-transition-guide-part-ii-color-management เขียนโดย Ivan Busquets Compositing Supervisor

รู้อย่างนั้นแล้ว ผมก็จะเอาบทความเขามาเขียนถึง ทั้งใช้ content ของเขา และรวมถึงผมเขียนเอง มารวมๆกันก็แล้วกัน


อันดับแรกที่ต้องรู้เลย คือ Nuke เนี่ยออกแบบมาให้ทำงานที่ 32-bit floating point ภายในโปรแกรมเลย หมายถึงว่า ทุกอย่างที่เข้ามาใน Nuke จะถูกแปลงให้เป็น Linear space โดยไม่สนว่าไฟล์ที่นำเข้ามาจะเป็นไฟล์แบบไหน โดยไม่ต้องกลัวว่าข้อมูลจะหายไปไหน แต่เราก็ต้องเข้าใจว่า ตัว Nuke เองนั้น จัดการกับเรื่อง Color Management ตรงนี้ยังไง

Nuke นั้น จัดการกับเรื่องนี้ แบ่งออกเป็นสามส่วนหลักๆ คือ Reader, Write, Viewer
ง่ายๆก็คือ Nuke อ่านไฟล์ผ่าน Read Node และทำการแปลง Color space ไปเป็น Linear และทำการ Composite/Process ต่างๆ หลังจากนั้นก็จะทำการแปลง Color space ไปเป็น Color space ที่ถูกต้อง(ต้องการ) โดยขึ้นอยู่กับขนิดไฟล์ที่ต้องการ Write ออกไป

และ Nuke เองก็มี ViewerLUT เหมือนกันกับที่ Fusion มี ซึ่งส่วนของ ViwerLUT ก็คือส่วนแสดงผลเท่านั้น ไม่ได้เกี่ยวข้องกับข้อมูล(Data)จริงๆ ที่อยุ่ในไฟล์ หมายถึงว่าคุณก็ยังทำงานอยู่กับ Linear 32-bit floating point ไม่มีข้อมูลถูกลบ หรือขาดหายไประหว่างทาง

รูปพวกนี้คือตำแหน่งบน UI ที่เกี่ยวข้องกับเรื่องพวกนี้

1. เรื่องแรกก็คือ Color space ใน Read Node

คือ Read Node เนี่ย จะทำงานโดยพยายามเดาว่าควรจะใช้ Colorspace แบบไหนกับไฟล์ที่เราอ่านเข้ามา โดยการเดาเนี่ย จะถูกกำหนดด้วยกฏง่ายๆไม่กี่ข้อ ภายใต้ Default LUT settings (Project Settings -> LUT tab)
ในรูป จะเป็นส่วนที่แสดงถึงกฏที่เราพูดถึง floatLut หมายถึงถ้าไฟล์ที่อ่านเข้ามาเป็น Linear (เช่นไฟล์ EXR) Nuke เองก็จะไม่ทำอะไรกับไฟล์ (เพราะ Nuke เอง เป็น Linear อยู่แล้ว) logLut แสดงเป็น Cineon  หมายถึงว่า ถ้าไฟล์ที่เป็น log colorspace(เช่น .cin, .dpx) นั้น ถูกอ่านเข้ามาใน Nuke Nuke จะทำการแปลงไฟล์นั้นด้วยกราฟ LUT ที่เห็นข้างบนนั้น เพื่อให้ log กลายเป็น linear (Log2Lin) ส่วนไฟล์อื่นๆที่เป็น 8/16 bit จะถูกแปลงด้วยกราฟ LUT sRGB ส่วน monitor เป็นส่วนที่แสดงผลที่ thumnail/3d view

กราฟด้านบนจะเป็นกราฟแสดง LUT ของ colorspace ต่างๆโดยเส้นตรงๆเฉียงขึ้นไปนั้น นั่นคือกราฟของ Linear colorspace, กราฟสีแดงเข้ม, แดงอ่อน นั้นเป็นกราฟของ sRGB และ Rec709 ซึ่งจะสังเกตุว่า ต่างกันเพียงนิดเดียว ตรงกลางๆ (เพราะงั้นเวลาดูด้วยตาเนี่ย ความสว่างตรงกลางๆของภาพทั้งสอง จึงต่างกันนิดหน่อย โดยมืดสุดและสว่างสุดจะเหมือนๆกัน) ส่วนกราฟสีเขียวๆนั้น จะเป็นกราฟของ Cineon ซึ่งจะเห็นว่าแตกต่างกันมาก กับ Linear ทั้งในส่วนมืด(กราฟล่างซ้าย) และ ส่วนสว่าง(กราฟบนขวา)

โดยปกติกฏเหล่านี้ ก็จะใช้ได้ ทำให้คุณไม่ต้องสนใจเรื่องการแปลง colorspace ซักเท่าไหร่ แต่มันก็สำคุญคือจะต้องรู้ว่า ถ้าเราต้องการเปลี่ยแปลง การเดาโดยกฏ พวกนี้ ไปเป็นแบบอื่น เราจะทำยังไง? เพราะบางทีเรารู้ว่า ไฟล์ที่เราอ่านเข้ามา อาจจะไม่ได้มีข้อมูล ที่ถูกต้องทุกครั้ง บางทีผมก็ได้รับไฟล์ cineon/dpx ที่เป็น linear colorspace ก็มี เมื่อเป็นแบบนั้น เราก็ต้องเปลี่ยนวิธีที่ Nuke จะแปลงค่าข้อมูลที่อยู่ในไฟล์ด้วย colorspace อื่นๆแทน หรือถ้าคุณไม่ต้องการให้มีการทำ colorspace คุณก็สามารถเปลี่ยนแปลงโดยการติ๊ก raw data

2. Color Space Write Node

สิ่งที่มันทำก็คือการแปลงกลับจากสิ่งที่ Read node ทำ เพื่อเขียนออกไปเท่านั้นเอง โดย color space ที่จะถูกใช้ เพื่อเขียนไฟล์ออกไปนั้น ก็ขึ้นอยุ่กับชนิดของไฟล์ที่จะถุกเขียน โดยการเลือก color space ตรงนี้ ก็จะถูกกำกับโดยกฏง่ายๆ ที่เราพูดถึงก่อนหน้านี้ และเราก็สามารถเขียนออกไปเป็น raw ด้วย(ก็คือ เข้ามาที่ node ยังไง ก็เขียนออกไปแบบนั้น) และเราก็สามารถที่จะปรับเปลี่ยนเองได้ตามสะดวก เช่นเดียวกับตอน Read node
เพื่อให้เห็นภาพ แม้จะเห็นว่า ทั้ง Read, Write node นั้นจะเลือก color space เหมือนกัน แต่จริงๆแล้ว มันกำลังทำซึ่งที่ตรงกันข้าม โดย Read node จะทำการเปลี่ยน "จาก"ให้เป็น linear ในขณะที่ Write node จะทำการเปลี่ยน linear "ให้เป็น" อะไร? เพื่อที่จะเปลี่ยนไปและกลับอย่างถูกต้อง

3. ส่วนของ viewerLUT

โดยในส่วนนี้ viewerLUT หรือ viewerProcess (ที่เรียกโดย Nuke เราจะสามารถเข้าถึงได้ด้วยการกด S ที่หน้าต่าง viewer หรือทางด้านบนของ viewer
โดยเราสามารถเพิ่ม viewerLUT ตรงนี้ได้ผ่านผ่าน Python เพื่อใช้สำหรับแต่ละสตูดิโอ, สำหรับแต่ละงาน, หรือ สำหรับแต่ละผู้ใช้ (ดูคู่มือหน้า 880)
นอกจากนั้น Nuke ยังยอมให้ผู้ใช้ปรับภาพผ่าน (gain, gamma, cliptest) บน UI ด้วย โดยไม่ได้ปรับข้อมูลจริงๆ ที่อยู่ในภาพ โดยเมื่อเราทำการปรับอะไรใดๆผ่าน viewerProcess Nuke จะทำการ hilight ให้ icon กลายเป็นสีแดง เพื่อให้เราไม่สับสนเวลา render ออกมาแล้ว ไม่เหมือนกับสิ่งที่เราเห็นบนจอ
โดยขั้นตอนการทำงานจะเป็นแบบนี้
  • Gain >> Input Process >> Viewer Process >> Gamma >> Cliptest (default)
  • Gain >> Viewer Process >> Input Process >> Gamma >> Cliptest (ถ้า viewer input order set เป็น after viewer process ใน Viewer settings)
โดยตัว cliptest (ลายม้าลาย ที่จะแสดงเมื่อข้อมูลมีค่ามากกว่าหรือน้อยกว่า 0-1) จะแสดงผลทีหลังสุด แต่จะคำนวนก่อน เพราะงั้นมันแสดงออกมาโดยยึดอยู่กับ input ก่อนที่จะถูกแปลงไปโดย viewer control ต่างๆ

ไม่มีความคิดเห็น:

แสดงความคิดเห็น