繁體中文
English 简体中文 繁體中文
Methodox 首頁

Shader Lab

可用性:Divooka Explore 支援級別:實驗性 類別:圖形

著色器開發是這樣一類主題:乍看之下遙不可及,可一旦深入其中,你就會為之著迷。

歡迎來到函式式著色器的世界!如果你能入門,就能盡情享受確定性平行計算的魅力與美感。我們會盡最大努力與你分享,幫助你上手,並讓你體會到我們所經歷的樂趣。

Shader Lab 圖形使用者介面

你可以用它做什麼?著色器本身就是強大的玩具。請看這位作者的一些精彩示例。

概述

Shader Lab 是一個基於節點、由程式碼驅動的環境,用於在 Divooka 中構建即時 GPU 著色器。你可以通過以下任一方式設計視覺效果:

  • 以視覺化方式連線節點,或
  • 直接編寫 GLSL 片段著色器

著色器完全在 GPU 上執行,因此非常適合:

  • 程序化視覺效果
  • 動畫
  • 生成藝術
  • 後期處理效果

Shader Lab 在概念上類似於 ShaderToy 之類的工具或遊戲引擎中基於節點的材質編輯器,但專為在 Divooka 中快速實驗而設計。它最適合時域動畫。它最初是為 2D 程序化效果開發的;事實證明,當我們去掉所有約束和(3D 渲染)管線階段、只專注於平行計算時(如 Applets 一節所示),片段著色器的通用計算能力才真正大放異彩。

用法

此示例展示了一個簡單的著色器圖,它輸出隨時間變化的同心圓環動畫。

使用 Shader Lab 通常包括:

  1. 定義輸入(解析度和時間等 uniform)
  2. 構建邏輯(通過節點或 GLSL)
  3. 即時渲染到畫布

關鍵概念:

  • 片段著色器:逐像素計算顏色
  • UV 座標:歸一化的像素位置(0–1)
  • Uniform:外部輸入(時間、解析度、參數)

節點

互動演示

互動演示讓你可以直接試驗 GLSL 著色器。

你可以使用下方的 WebGL 介面直接測試著色器。請注意,此互動演示使用 u_ 作為 uniform 的字首,而其他平臺(例如 ShaderType)可能使用 iXXXX 形式的 uniform。

片段著色器

在示例頁面中瀏覽更多內容。

預設著色器

precision mediump float;
uniform vec2 u_Resolution;
uniform float u_Time;

void main() {
    vec2 uv = gl_FragCoord.xy / u_Resolution;
    gl_FragColor = vec4(uv, abs(sin(u_Time)), 1.0);
}

作用說明

  • 將像素座標歸一化(uv)
  • 將其直接對映為顏色(漸層)
  • 使用 sin(time) 為藍色通道新增動畫

試一試

提示:試著將 main() 改為以下內容:

void main()
{
    vec2 p = (gl_FragCoord.xy * 2.0 - u_Resolution) / u_Resolution.y;
    float v = 0.5 + 0.5 * sin(10.0 * length(p) - u_Time * 3.0);
    vec3 col = 0.5 + 0.5 * cos(u_Time + vec3(0.0, 2.0, 4.0) + v * 4.0);
    gl_FragColor = vec4(col, 1.0);
}

演示內容

  • 用徑向距離(length(p))生成圓形圖案
  • 基於時間的動畫
  • 使用餘弦偏移實現顏色迴圈
  • 不使用紋理的程序化圖案生成

示例

下面是一些可實現效果的示例。在示例頁面中瀏覽更多有趣的示例。

Uniform 漸層

一個將 UV 座標直接對映為顏色的基礎著色器。

概念:

  • UV 歸一化
  • 直接顏色對映
  • 無動畫

同心圓環

使用距離函式生成重複的圓形圖案。

概念:

  • 到中心的距離(length)
  • 周期函式(sin)
  • 圖案重複

小程式

加入一點互動性後,著色器就能用來建立動態得多的輸出。

Mandelbrot

使用迭代複數運算的互動式分形渲染。

概念:

  • 迭代計算
  • 逃逸時間演算法
  • 複數視覺化

有向距離編輯器

使用有向距離場(SDF)構建形狀的工具。

概念:

  • 距離場
  • 形狀組合(並集、差集)

光線步進瀏覽器

Divooka Shader Lab 光線步進瀏覽器:在片段著色器中進行光線追蹤的 3D 場景

片段著色器通常在 3D 場景物件光柵化之後呼叫,但如果我們將場景資訊編碼後直接傳給著色器,就可以僅用片段著色器有效地實現光線追蹤器。

在這個光線步進瀏覽器示例中,我們直接在片段著色器中渲染經過光線追蹤的 3D 場景。這確實是一個完美的例子,展示了渲染的工作原理,以及執行著色器的小型計算核心所具有的並行能力。

概念:

  • 光線步進
  • 渲染基礎

資源