Giải Ngố: Gpu Tạo Nên Thế Giới 3D Kỳ Ảo Như Thế Nào?

Cơ chế render trong Unity

Đối với những người mới bắt đầu làm quen với Unity thì việc hiểu được cơ chế mà Unity có thể render ra đồ hoạ với các hiệu ứng đi kèm như thế nào rất quan trọng. Khi hiểu được cơ chế, cách hoạt động và các thành phần mà Unity sử dụng thì bạn có thể tuỳ chỉnh để tạo ra các hiệu ứng mà bạn muốn đối với các model,resources mà bạn đưa vào.

Bạn đang xem: Giải ngố: gpu tạo nên thế giới 3d kỳ ảo như thế nào?

*
Mô hình trên đây mô tả các thành phần cơ bản mà Unity dùng để render.

Models : Tập hợp các điểm toạ độ trong không gian 3D, mỗi điểm này có thể chứa các thông tin về màu, hướng, toạ độ để gán texture lên đó( UV Data). Các điểm này kết nối với nhau tạo thành các hình tam giác( Triangles).Material: Material là vật liệu bao bọc trên bề mặt để model đó có thể hiển thị trên unity. Trong Material sẽ gồm có các textures và shader. Unity sẽ dùng các thuộc tính,giá trị được set trong Shader để render ra và hiển thị trên các thiết bị.Một shader có thể dùng chung cho rất nhiều material và bạn cũng có thể dễ dàng điều chỉnh các tham số của shader để giúp cho các material đó khác nhau.

Giới thiệu về Shader

Shader là một chương trình đặc biệt được viết ra để chạy trên GPU( bộ xử lý đồ hoạ). Với shader thì bạn có thể làm cho game hay ứng dụng của bạn có các hiệu ứng hìngh ảnh sống động và cuốn hút hơn.

Unity cung cấp cho chúng ta ShaderLab giúp cho việc tạo ra các shader dễ dàng hơn. Hiện tại thì Unity support hai loại shader chính: suface shaders và fragment and vertex shaders. Ngoài ra cũng có loại fixed function shaders, tuy nhiên loại này thì đã cũ và sẽ không support nữa.

Xem thêm: " Stu Là Gì ? Yêu Thích Công Nghệ Nghĩa Của Từ Stu Trong Tiếng Việt

Shader thì được viết bằng ngôn ngữ bậc cao Cg/HLSL.

Shader "Tutorial/Basic" { Properties { _Color ("Main Color", Color) = (1,0.5,0.5,1) } SubShader { Pass { Material { Diffuse <_Color> } Lighting On } }}Shader về cơ bản thì sẽ có 2 thành phần chính.

Các PropertiesCác SubShader

Khi bắt đầu khối shader thì bạn có thể định nghĩa các thuộc tính bất kì mà bạn có thể thay đổi ở trên material inspector. Các thuộc tính thì được liệt kê trong block Properties, và mối property thì bắt đầu với định nghĩa tên nội bộ ( _Color), tiếp theo sau sẽ là tên sẽ được hiển thị trên inspector, kiểu vào giá trị mặc đinh.

Với các loại graphic hardware khác nhau năng lực xử lý của chúng cũng khác nhau. Chính vì thế mà không phải tất cả các thiết bị đều có thể xử lý được hết các xử lý mà bạn viết trong SubShader. Để giải quyết vấn đề này thì Shader cung cấp cho bạn các Pass. Trong mỗi SubShader lại là tập hợp của các Pases. Mối pass sẽ được thực thi lần lượt theo một thứ tự xác đinh.

Pass { Material { Diffuse <_Color> Ambient <_Color> Shininess <_Shininess> Specular <_SpecColor> Emission <_Emission> } Lighting On SeparateSpecular On SetTexture <_MainTex> { constantColor <_Color> Combine texture * primary DOUBLE, texture * constant }}

Demo đơn giản với shader

Phần trên là những khái niệm cơ bản nhất về Shader, phần này ta sẽ tạo ra một ứng dụng đơn giản từ Shader + Unity.

Source code bạn có thể tham khảo tại đây

Trong sources code ở trên có shader RippleEffect, demo ở trên sẽ thay đổi các properties của shader để tạo ra hiệu ứng giống như demo hình dưới đây.

*

Bạn có thể tuỳ chỉnh lại hiệu ứng, màu sắc, tốc độ của effect tuỳ theo ý bạn. Và đặc biệt bạn cũng có thể dễ dàng thay ảnh demo bằng ảnh người khác mà bạn muốn :))

*

Kết luận

Trên đây chỉ là những kiến thức cơ bản nhất về shader trong Unity mà mình muốn chia sẻ với mọi người. Nếu muốn trở thành một nhà phát triển game chuyên nghiệp nhất là game 3D thì shader là một phần rất quan trọng mà bạn phải tìm hiểu.

Link tham khảo: https://unity3d.com/learn/tutorials/topics/graphics/gentle-introduction-shadershttps://docs.unity3d.com/Manual/ShaderTut2.html