[Shader] Part 1: Introduction

Shader là gì ?

Theo tôi, Shader là một thứ ma thuật cho dân Muggle (ノ´ヮ`)ノ*: ・゚

Theo OpenGL:

  • VN:   “Shaders là những đoạn script do người dùng viết, hầu hết chương trình được chạy trên bộ xử lý đồ họa. “
  • EN:   “A Shader is a user-defined program designed to run on some stage of a graphics 

<chà… để tìm một định nghĩa đơn giản dịch ra tiếng việt khó ghê ta>

Theo Unity Documentation:

  • VN:   “Shaders là những script nhỏ gồm các phép toán và thuật toán để tính toán màu sắc cho mỗi điểm ảnh được render lên , dựa trên ánh sáng và cấu hình vật liệu”
  • EN:   “Shaders are small scripts that contain the mathematical calculations and algorithms for calculating the colour of each pixel rendered, based on the lighting input and the Material configuration”

Materials, Shaders & Textures

Trong unity có sự liên hệ mật thiết giữa 3 thành phần này03fig05

Materials & Texture
Materials
là bề mặt vật liệu, qua việc tham chiếu shader và texture sẽ cho biết bề mặt model được render ra sao
Textures
là những hình ảnh bitmap, khi được tham chiếu bởi material, sẽ cho biết màu sắc, độ phản xạ, gồ ghề của bề mặt vật liệu


Cấu trúc một file Shader

Tất cả các file Shader của unity đều được sử dụng cú pháp ShaderLab, căn bản để unity hiển thị các Properties ra ngoài Inspector. Còn thực sự phần “code của shader” nằm trong CGPROGRAM/ENDCG snippets.

Phần “code của shader” sử dụng ngôn ngữ HLSL/CG.

// This file is only presents structure of 1 shader file. It cant run !!
Shader ".UnityCattus/Basic Shader"
{
    Properties
    {
        //define shader varibles to show in Material Inspector
    }

    SubShader
    {
        Pass
        {
            CGPROGRAM

            //shader code use HLSL/CG Language
            //your shader code is here

            ENDCG
        }
    }
}

Phân loại Shader

Shader trong Unity được chia làm 3 loại:

  • Surface shader
  • Vertex shader & Fragment/Pixel shader (chủ yếu blog viết dạng này)
  • Fixed Function shader

Surface shader:

  • “easy” shader – code ngắn gọn, dễ nắm bắt
  • máy phải render nặng hơn

Vertex & Fragment shader:

  • “complex” shader – code dài, rất phức tạp
  • tùy chỉnh được, toàn quyền xử lý code

Fixed Function shader:

  • viết toàn bộ trong ShaderLab, cho devices cũ
  • loại này bỏ qua nha, vì hầu như không còn ai sử dụng

Ở bài viết sau, tôi sẽ nói về cách một vertex/fragment shader hoạt động ra sao: #part 2

References:

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Blog at WordPress.com.

Up ↑

%d bloggers like this: