레이어 순서

Layer stack

레이어는 아래에서 위 순서로 그려지고, 효과는 앞서 그린 레이어에 적용됩니다.

다른 이름: Layer orderLayer stacking

WebGPU 를 지원하는 브라우저에서 움직입니다

이 기기에서는 데모를 그리지 못해 정지 화면을 보여 줍니다

React
// WebGPU 를 지원하는 브라우저에서만 그립니다.
import {
  Shader,
  Blur,
  Circle,
  MeshGradient,
  Ring,
} from 'shaders/react'

export default function ShaderEffect() {
  return (
    <Shader style={{ width: '100%', height: 320 }} disableTelemetry>
      <MeshGradient
        speed={0.4} />
      <Circle
        center={{
          x: 0.38,
          y: 0.5
        }}
        color="#f8fafc"
        radius={0.22} />
      <Blur
        intensity={30} />
      <Ring
        center={{
          x: 0.64,
          y: 0.5
        }}
        color="#22d3ee" />
    </Shader>
  )
}
Vue
<!-- WebGPU 를 지원하는 브라우저에서만 그립니다. -->
<script setup lang="ts">
import {
  Shader,
  Blur,
  Circle,
  MeshGradient,
  Ring
} from 'shaders/vue'
</script>

<template>
  <Shader style="width: 100%; height: 320px" :disable-telemetry="true">
    <MeshGradient
      :speed="0.4"/>
    <Circle
      :center="{
        x: 0.38,
        y: 0.5
      }"
      color="#f8fafc"
      :radius="0.22"/>
    <Blur
      :intensity="30"/>
    <Ring
      :center="{
        x: 0.64,
        y: 0.5
      }"
      color="#22d3ee"/>
  </Shader>
</template>
Svelte
<!-- WebGPU 를 지원하는 브라우저에서만 그립니다. -->
<script>
  import {
    Shader,
    Blur,
    Circle,
    MeshGradient,
    Ring,
  } from 'shaders/svelte'
</script>

<Shader style="width: 100%; height: 320px" disableTelemetry>
  <MeshGradient
    speed={0.4} />
  <Circle
    center={{
      x: 0.38,
      y: 0.5
    }}
    color="#f8fafc"
    radius={0.22} />
  <Blur
    intensity={30} />
  <Ring
    center={{
      x: 0.64,
      y: 0.5
    }}
    color="#22d3ee" />
</Shader>
Solid
// WebGPU 를 지원하는 브라우저에서만 그립니다.
import {
  Shader,
  Blur,
  Circle,
  MeshGradient,
  Ring,
} from 'shaders/solid'

export default function ShaderEffect() {
  return (
    <Shader style={{ width: '100%', height: '320px' }} disableTelemetry>
      <MeshGradient
        speed={0.4} />
      <Circle
        center={{
          x: 0.38,
          y: 0.5
        }}
        color="#f8fafc"
        radius={0.22} />
      <Blur
        intensity={30} />
      <Ring
        center={{
          x: 0.64,
          y: 0.5
        }}
        color="#22d3ee" />
    </Shader>
  )
}
JavaScript
// WebGPU 를 지원하는 브라우저에서만 그립니다.
// <canvas id="canvas" style="width:100%;height:320px"></canvas> 가 페이지에 있어야 한다
import { createShader } from 'shaders/js'

const shader = await createShader(document.getElementById("canvas"), {
  components: [
    {
      type: 'MeshGradient',
      props: {
        speed: 0.4,
      },
    },
    {
      type: 'Circle',
      props: {
        center: {
          x: 0.38,
          y: 0.5
        },
        color: '#f8fafc',
        radius: 0.22,
      },
    },
    {
      type: 'Blur',
      props: {
        intensity: 30,
      },
    },
    {
      type: 'Ring',
      props: {
        center: {
          x: 0.64,
          y: 0.5
        },
        color: '#22d3ee',
      },
    }
  ]
}, { disableTelemetry: true })

속성(props) · Blur

값을 바꾸면 위 데모와 코드 탭에 바로 반영됩니다. 설명은 라이브러리 레지스트리의 영어 원문(MIT)입니다.

이름값기본값범위·선택지설명(원문)
intensityIntensity500 – 200 (step 1)Intensity of the blur effect

모든 컴포넌트 공통: blendMode · opacity · visible · maskSource/maskType · boundingBox · id

셰이더 레이어는 투명 필름을 차례로 포개는 것과 비슷합니다. 배열 앞쪽이 바닥이고 뒤쪽이 위에 놓이므로, 같은 두 레이어도 순서를 바꾸면 가려지는 부분과 색이 달라집니다.

`layers`의 항목 순서가 그리는 순서입니다. `opacity`를 낮추면 위 레이어가 비쳐 보이고, `blendMode`를 바꾸면 아래 색과 섞이는 방식이 달라집니다. `visible: false`는 레이어를 그리지 않으면서 참조 대상으로 남길 때 씁니다.

블러나 색 보정 같은 효과는 자기보다 앞에 있는 레이어를 처리하므로 대상 뒤에 놓아야 합니다. 효과를 앞에 두면 아직 그려진 입력이 없어 차이가 보이지 않을 수 있고, 레이어를 지나치게 겹치면 무엇이 결과를 바꿨는지 찾기 어려워집니다.

언제 쓰나

히어로 배경에 그라디언트와 입자를 겹칠 때, 사진 위에 블러나 색 보정을 얹을 때, 같은 재료의 앞뒤 관계를 분명히 제어할 때 적합합니다. 단일 레이어만 쓰거나 정적인 이미지 한 장으로 충분한 경우에는 레이어 스택이 필요하지 않습니다.

페이지로 열기 ↗