Procedural Noise Trong Đồ Họa Và Look Dev Ứng Dụng

hòa trộn trong sơn dầu

Nói về các phương án để mix texture và làm cho bề mặt map trở nên ngẫu nhiên thì phương án Procedural trở nên phù hợp nhất. Cái này là về look dev.

Sau này công nghệ phát triển, các render engine có khả năng mix không chỉ map texture mà còn có thể map cả shader và cách ứng dụng hoàn toàn procedural như cách đã từng thực hiện với mix texture map, có điều lần này cuộc chơi dữ dội hơn, gọi là blending, layer với nhiều operation phức tạp hơn trên các dữ kiện pixel cần render.

Chỉ tính riêng về mix texture map, mix shader mà ngay cả các render engine không ngừng phát triển các tiêu chuẩn về bộ mix của mình cùng các công cụ mix, map, range, output/input, math, vô cùng phong phú (V-Ray, Arnold, Renderman, Redshift, Mentalray là render engine có nhiều custom mix nhất nhưng cũng chậm và cổ lỗ sĩ nhất). Dữ dội nhất là layer texture và shader, nó có khả năng về blend tức mang trong bản chất bộ compositing math của mọi thứ về đồ hoạ rendering ray tracing.

dissolve mix texture bằng noise map sẽ tạo ra bề mặt vật liệu mix bởi nhiều color texture khác nhau

Thời đại mới tới, đỉnh cao nhất hiện nay về mix là các app chuyên trị shader và texture map, Substance painter, Substance designer, Mari …

Tui vẫn còn nhớ, cái thời kỳ làm 3D kiến thức còn kém, lúc đó việc mix, layer texture thường khả năng của một 3D package hay các render là giới hạn, lúc này texture là cộng sự tốt nhất, tối thiểu tài nguyên, quản lý được mỹ thuật, và cách làm nhiều công nhưng duy nhất. Để có một bề mặt Hard Surface look dev nhìn pha trộn như vầy, thì artist làm tay hết thông qua trãi UV, đây là một cái hình từ tận những năm 2003 2004 theo tui nhớ.

Lúc đó những bộ tư liệu như Texture của 3D Total lúc nào cũng là hàng lận lưng của artist 3D, mặc dù texture map chỉ có 1024 pixel hay 512 là quá nhiều. Map 2K là đợi vài ngày render một frame.

hướng dẫn mix texture bằng tay thông qua vẽ trên photoshop và combine nhiều map lại tuỳ theo render hỗ trợ của thời kỳ trước, chậm, thủ công, bitmap texture luôn nhỏ, tuy nhiên hình ảnh render ra ngay cả dùng trong animation cũng chỉ có DV tức chỉ tới 720×480 là hết. Không có FULL HD.

Tựu chung là tạo bề mặt tự nhiên (cơ bản nhất, bề mặt màu đỏ không bao giờ chỉ có 1 màu đỏ, nó luôn là gộp của nhiều shade của màu đỏ và được mix theo một tỉ lệ, tham khảo pha màu sơn thực tế trong đời sống), đạt yêu cầu tư duy mỹ thuật nhất theo công năng mong muốn (artistic control, art direction).

Chỉ riêng việc mix mà giờ làm layer, Renderman 24 trong năm nay sẽ ra, đã phát triển riêng hẳn một bộ kit, do chính ILM thực hiện riêng, tên là: LAMA

Đó là nói về major studios, nhưng trong thị trường không chỉ có major studios mà còn có rất nhiều small/medium business, họ sẽ dùng các bộ layer và mix có sẵn của các render engine hay dùng các tool như Mari, Substance painter. Chủ yếu là khả năng Procedural generation của chính các tool này.

Công thức cơ bản nhất của một động tác (operation) Mix (ko phải layer, tạm nghĩ như pha sơn, pha màu hồng với màu trằng, nhiều hồng hay nhiều trắng) chính là suy nghĩ với phương án thực thi LERP – Linear Intepolation, đoạn coe tham khảo Game Dev Nói Về Lerp (LERP là giá trị bias quyết định thiên về phần nào nhiều hơn.)

Giải thích đơn giản: cho 2 giá trị số dương và số âm, với một giá trị thiên vị (bias), giá trị thiên vị này sẽ bắt đầu mặc định 50% (chia ra 1/2 của âm và dương), giá trị thiên vị này sẽ quyết định khi nào nhiều âm hay nhiều dương và ngược lại.  Điều này làm logic cho mọi thứ về mix và càng cao cấp hơn khi đó có xuất hiện của Layer với mớ operation BLENDiNG (như của photoshop nhưng giải quyết về pixel), tức không còn chỉ thiên về cực đoan của một giá trị nữa.

Tức mọi cái về việc xử lý đồ hoạ pixel, thì operation blending sẽ như sau:

  • Tham khảo mix node có blending mode của Blender: https://bit.ly/3dYTWoW
  • Tham khảo Merge node có blending operation của NUKE: https://bit.ly/37St2vh
  • Tutorial của Redshift 3D apply procedural texture: https://vimeo.com/316356856
  • Tham khảo tài liệu của V-Ray xử lý texture: https://docs.chaosgroup.com/display/VMAX/VRayCompTex
  • Tài liệu của Unreal Engine: https://docs.unrealengine.com/en-US/RenderingAndGraphics/Materials/Functions/Reference/Blends/index.html
  • Hiện tại các phần mềm render và ngay cả Unreal Engine nói chung chia ra (tên gọi có thể khác nhau một tí):
    • Mix/layer/blending texture map (output, input là RGB map, hoặc là texture image import vào)
    • Mix/layer/blending shader (đầu vô và ra là một vật liệu shader/material của chính rendering đó, hoặc C++ OSL, Open Shader, Material X)

Để mix giá trị Lerp ngoài blending mode thì như Photoshop, cần cái MASK. Đó là lý do dùng Noise vì nó ngẫu nhiên, không trùng, đa dạng phong phú về cách dùng và quan trọng với một object primitive trong đồ hoạ rendering, có khả năng áp dụng projection 4D. Việc 4D này đòi hỏi khả năng của một render engine có thể thực thi được hay không hoặc phải custom write a code.

Hoặc dùng third party mà ngày nay rất phổ biến là blend toạ độ chính là Tri Planar, một source nguồn được tung ra bởi Disney và Sony Pictures.

mix có thể hiểu cũng chính là chức năng tạo ra một cái mask như trong các phần mềm hậu kỳ hình ảnh hay đặc trưng nhất chính là MASK tool của Photoshop.

Đây là 4D noise trong BLender, không có điểm border theo mặt phẳng FACE polygon, không trãi unwrap UV, đó là điều kỳ diệu của Procedural

4D noise map chạy dài tới cạnh, không bị cắt biên mép của một face polygon mặc dù chỉ là khối vuông có 6 mặt face

Các loại procedural noise (dùng cả trong look dev và các môi trường khác) thường thấy:

  • Perlin noise (tức là gọi noise): Ứng dụng của Perlin Noise trong Mari https://learn.foundry.com/mari/Content/reference_guide/nodes/PerlinNode.html, noise phổ biến nhất.
  • Turbulence
  • Musgrave
  • Fractal
  • Voranoi
  • Cell noise
  • Curve noise
  • Flow noise
  • Fracture noise
  • Greeble
  • Rivet
  • Shrinkle
  • Snowflake (kiểu bông tuyết)
  • Stripe
  • Square
  • Hexagon
  • Worley Noise

Thường noise sẽ không stich vào bề mặt của shader hay UV theo object projection, nên thông thường 3D package sẽ offer một phương án để stich giá trị đã procedural generate ra và dính vào bề mặt (surface) của geometry/mesh.

Cao cấp hơn hiện nay là khả năng noise displacement đính vào một volumetric (Tức một geometry dạng khối đặc, ứng dụng rất mạnh trong nghành kỹ thuật như CNC, máy scan, máy quét, lidar, laser, tiện khắc phay bào, in 3D, máy chụp cắt lớp hay còn gọi là MRI – chụp emprise cộng hưởng từ).

thiết kế trang thiết bị nội thất, ứng dụng vào xây dựng, mặt tường thiết kế dựa trên perlin noise với phương án procedural và computational design
khối đặc volumetric 4D fractal là geometry rất nổi tiếng trong nghành công nghiệp như thời trang, chế tạo khuôn mẫu, computation design, tạo mẫu vật liệu trong xây dựng, bio, kiến trúc, vật liệu đi vào không gian, hay decor thiết kế trang thiết bị nội thất

Sau này không phải noise không, mà còn có các thuật toán hỗ trợ thêm dạng map texture utilities (một số cái làm việc ở mức độ shader – như Ambient Occlusion):

  • Ambient Occlusion
  • Curvature (concave, convex)
  • Edge detect
  • Flake, một giải pháp đột phá cho dạng nước sơn xe hơi

Các dạng procedural noise library dùng cho procedural này có thể phát triển vô cùng phong phú thông qua các thư viện OSL.

Như trường hợp của V-Ray, đây là thư viện noise thêm: https://docs.chaosgroup.com/display/OSLShaders/Additional+procedural+noises

Một số trường hợp đa dạng hơn và phong phú hơn với tư liệu là phần mềm generate ra texture map là dạng hình sau đó artist/designer tự dùng vào 3D package (Substance Designer là một high-end software cho việc này) thêm: https://github.com/topics/procedural-textures?o=asc&s=forks

Hay Arnold tự viết OSL material: https://arnold-rendering.com/2018/03/22/3ds-max-introduction-to-osl/

hình ảnh những công trình thiết kế thực tế trong đời sống, được xây dựng, đều dựa trên ít nhiều các thuật toán noise và pattern, đây là ứng dụng của fractal noise.

Từ những ngày đầu của nghành phát triển game, procedural là phương án gần như khả thi nhất trong việc tiết kiệm tài nguyên tính toán, noise là công cụ đắc lực, cho đến ngày nay thì VFX cho game mà làm dạng procedural cũng dùng chính là noise: https://youtu.be/Y0Vv41tKgqY hay Substance vfx cho game https://youtu.be/-q2Yk1pDiOw

Video hướng dẫn làm hình học khối đặc Madelbulb trong Cinema 4D render với Octane

Trong hình có cái sẽ vẽ, có cái full procedural, tuy nhiên trong quá trình mix map thì noise vẫn chính là công cụ chính hỗ trợ nhằm tự động hoá, tối thiểu thời gian sản xuất thiết kế và tạo ra các quyết định về duy mỹ.

Trong thế giới điện ảnh high-end, nhiều tiền của và nhiều tài nguyên thì thực thi BELIEVABLE là tiên quyết của các studio, noise là trợ thủ đắc lực cho các texture painter: https://youtu.be/Qu9eAqGsot8

Noise trong thiết kế đồ hoạ, Illustrator: https://youtu.be/qrGHs4d0yt0

Cuối cùng, Noise cũng chỉ là một công cụ, giúp cho việc làm look dev, lighting thuận tiện hơn. Tuy nhiên khẳng định, đó là công cụ giúp làm việc nhanh hơn với khả năng procedural.

Tài liệu tham khảo

Fact vui: Hồi xưa, trên các tín hiệu radio gọi là radar dò tín hiệu của địch, để đánh Mỹ, các bác đã rất vất vã thời gian đầu khi không thể phát hiện được khí tại của quân địch vì màn hình quét lên toàn noise (nhiễu), quân kháng chiến thua liên tục, mãi sau, có một đội chỉ riêng ngồi đọc noise, có thể nhìn và phân tích được bằng mắt thường, noise nào là dạng khí tài nào, từ đó đỡ thiệt hại hơn nhiều. (link một bài gốc: http://thainguyen.gov.vn/tong-quan/-/asset_publisher/kryWJrHdXX8q/content/-inh-cao-ve-nghe-thuat-tac-chien-cua-khong-quan-nhan-dan-viet-nam-trong-khang-chien-chong-my?inheritRedirect=true)

Ngoài tạo ra noise thì người ta còn phải giảm noise, đó chính là thiết bị bây giờ đang dùng, GYMBAL cho quay phim. Xử lý decode lên tới 32bit thời gian thực và khả năng chịu tải với nhiều khối lượng, động năng, lực khác nhau cùng tác động tại một thời điểm. Hình minh hoạ Gymbal vô lượng bit decode.

Vậy đó, giờ bỏ bút, rời bàn phím, ra ngoài hít khí trời và xem like cũng như các comment sẽ nói về bài post này đúng sai thế nào, hay đóng góp thêm vào cho bài post về tư duy look dev, procedural

Talk to the tree, make friends with it

Bob Ross

Post Author: Vu Pham