GLOWING EDGE MATERIAL 1

Membuat Material Glowing Edge Procedural di Blender

Pada objek 3D seperti teks, logo, atau emblem, salah satu cara sederhana untuk memberikan kesan lebih premium adalah membuat bagian pinggir objek terlihat lebih terang dibandingkan permukaan utamanya. Efek ini dapat digunakan sebagai dasar glowing edge, terutama jika hasil render nantinya akan dilanjutkan dengan compositing di After Effects.

Pada eksperimen ini, material dibuat menggunakan satu material procedural bernama Glowing Edge. Tidak diperlukan material terpisah untuk bagian bevel atau edge objek.

Konsep Material

Material menggunakan Principled BSDF sebagai shader utama dengan karakter permukaan metallic berwarna silver.

Efek terang pada pinggir objek dibuat menggunakan nilai Facing dari node Layer Weight.

Secara sederhana, Facing memberikan informasi mengenai orientasi permukaan terhadap kamera. Permukaan yang menghadap langsung ke kamera memiliki nilai berbeda dengan permukaan yang terlihat pada sudut menyamping.

Informasi tersebut kemudian digunakan sebagai mask untuk menentukan bagian mana yang mendapatkan emission.

Alur dasarnya:

Layer Weight
     │
   Facing
     │
     ▼
 ColorRamp
     │
     ▼
 Multiply
     │
     ▼
Emission Strength

Dengan metode ini, edge tidak perlu dipisahkan menjadi geometry atau material tersendiri.

Base Material

Permukaan utama menggunakan Principled BSDF dengan konfigurasi:

Base Color : RGB (0.92, 0.92, 0.95)
Metallic   : 1.0
Roughness  : 0.22

Nilai Metallic 1.0 membuat material bereaksi seperti permukaan logam, sementara Roughness 0.22 mempertahankan refleksi yang cukup tajam.

Warna dasar sedikit kebiruan dibandingkan putih murni sehingga memberikan karakter cold silver.

Membentuk Glowing Edge

Deteksi edge menggunakan:

Layer Weight → Facing

Output tersebut kemudian masuk ke ColorRamp.

ColorRamp pada material ini menggunakan nilai:

White Position : 0.58
Black Position : 0.88
Interpolation  : EASE

ColorRamp berfungsi mengontrol seberapa luas area yang dianggap sebagai edge.

Setelah itu hasil mask diperkuat menggunakan Math Node:

Operation : Multiply
Value     : 3.0

Output akhirnya dihubungkan ke:

Principled BSDF → Emission Strength

Sedangkan warna emission menggunakan warm white:

Emission Color

R : 1.00
G : 0.82
B : 0.55

Perpaduan antara cold silver surface dan warm edge highlight memberikan sedikit pemisahan warna sehingga pinggiran objek terlihat lebih hidup.

Menambahkan Micro Surface

Supaya material tidak terlihat terlalu sempurna atau flat, ditambahkan detail permukaan menggunakan Noise Texture.

Konfigurasinya:

Noise Texture

Dimensions : 3D
Scale      : 220
Detail     : 2.0
Roughness  : 0.5

Noise tersebut tidak digunakan untuk mengubah warna material, tetapi diteruskan ke node Bump:

Bump

Strength : 0.025
Distance : 0.008

Alurnya:

Texture Coordinate
        │
        ▼
  Noise Texture
        │
        ▼
      Bump
        │
        ▼
Principled BSDF
      Normal

Nilainya sengaja dibuat kecil karena tujuannya hanya memberikan micro surface variation, bukan membuat permukaan terlihat kasar secara berlebihan.

Struktur Material

Secara keseluruhan material mempunyai dua sistem procedural.

Edge system:

Layer Weight
      ↓
    Facing
      ↓
  ColorRamp
      ↓
Multiply × 3
      ↓
Emission Strength

Surface detail system:

Texture Coordinate
      ↓
Noise Texture
      ↓
     Bump
      ↓
Principled BSDF Normal

Keduanya kemudian bekerja pada satu Principled BSDF yang diteruskan ke Material Output.

Karakter Efek

Hal penting dari teknik ini adalah glowing edge bersifat view-dependent.

Artinya, posisi highlight ditentukan oleh hubungan antara surface normal dan sudut pandang kamera. Ketika kamera atau objek bergerak, distribusi edge highlight juga dapat berubah.

Karena itu teknik ini lebih tepat disebut sebagai:

View-Dependent Glowing Edge / Fresnel-Like Edge Highlight

dan bukan directional top-edge lighting.

Jika yang dibutuhkan adalah highlight yang selalu muncul pada sisi atas objek terlepas dari posisi kamera, pendekatannya berbeda. Dalam kasus tersebut, surface normal dapat dibandingkan dengan arah lokal atau world-space tertentu.

Workflow Blender → After Effects

Emission pada Blender tidak harus dibuat sangat kuat.

Dalam workflow compositing, Blender cukup menghasilkan hot edge yang jelas dan memiliki luminance lebih tinggi daripada permukaan utama.

Contohnya:

Blender
   ↓
Metallic Surface
   +
Bright / Hot Edge
   ↓
Render
   ↓
After Effects
   ↓
Glow / Bloom

Dengan pendekatan tersebut, bentuk dan posisi highlight tetap berasal dari geometry 3D, sementara karakter glow seperti radius, intensity, threshold, dan falloff dapat dikontrol lebih fleksibel saat compositing di After Effects.

Kesimpulan

Material Glowing Edge menggunakan satu material procedural untuk menghasilkan permukaan metallic sekaligus edge highlight tanpa perlu memisahkan bevel menjadi material lain.

Kombinasi Layer Weight, ColorRamp, Emission, Noise Texture, dan Bump membuat material tetap sederhana tetapi cukup fleksibel untuk digunakan pada teks 3D, logo, emblem, maupun objek hard-surface.

Teknik ini juga cocok untuk workflow motion graphics karena Blender dapat difokuskan untuk menghasilkan surface dan highlight information, sementara efek glow akhir disempurnakan pada tahap compositing.


 import bpy


# ============================================================

# GLOWING EDGE MATERIAL 1

# Blender 4.x / 5.x

# ============================================================


MAT_NAME = "Glowing Edge"


# ------------------------------------------------------------

# Get active object

# ------------------------------------------------------------

obj = bpy.context.active_object


if obj is None:

    raise Exception("Tidak ada object aktif. Pilih object dulu.")


# ------------------------------------------------------------

# Create / reuse material

# ------------------------------------------------------------

mat = bpy.data.materials.get(MAT_NAME)


if mat is None:

    mat = bpy.data.materials.new(name=MAT_NAME)


mat.use_nodes = True


nodes = mat.node_tree.nodes

links = mat.node_tree.links


# Clear existing nodes

nodes.clear()


# ============================================================

# NODES

# ============================================================


# Material Output

output = nodes.new("ShaderNodeOutputMaterial")

output.name = "Material Output"

output.label = "Material Output"

output.location = (850, 0)


# Principled BSDF

bsdf = nodes.new("ShaderNodeBsdfPrincipled")

bsdf.name = "Principled BSDF"

bsdf.label = "Glowing Edge Surface"

bsdf.location = (560, 0)


# Base metallic surface

bsdf.inputs["Base Color"].default_value = (0.92, 0.92, 0.95, 1.0)

bsdf.inputs["Metallic"].default_value = 1.0

bsdf.inputs["Roughness"].default_value = 0.22


# Slight warm emission color

if "Emission Color" in bsdf.inputs:

    bsdf.inputs["Emission Color"].default_value = (1.0, 0.82, 0.55, 1.0)

else:

    bsdf.inputs["Emission"].default_value = (1.0, 0.82, 0.55, 1.0)


# ------------------------------------------------------------

# Layer Weight

# ------------------------------------------------------------

layer = nodes.new("ShaderNodeLayerWeight")

layer.name = "Layer Weight"

layer.label = "Edge Detection"

layer.location = (-500, 120)

layer.inputs["Blend"].default_value = 0.5


# ------------------------------------------------------------

# ColorRamp

# ------------------------------------------------------------

ramp = nodes.new("ShaderNodeValToRGB")

ramp.name = "Edge Ramp"

ramp.label = "Glowing Edge Control"

ramp.location = (-260, 120)


# Remove default positions and tune edge

cr = ramp.color_ramp

cr.elements[0].position = 0.58

cr.elements[0].color = (1.0, 1.0, 1.0, 1.0)


cr.elements[1].position = 0.88

cr.elements[1].color = (0.0, 0.0, 0.0, 1.0)


cr.interpolation = 'EASE'


# ------------------------------------------------------------

# Multiply edge intensity

# ------------------------------------------------------------

multiply = nodes.new("ShaderNodeMath")

multiply.name = "Glow Strength"

multiply.label = "Glow Strength"

multiply.operation = 'MULTIPLY'

multiply.location = (30, 120)


multiply.inputs[1].default_value = 3.0


# ------------------------------------------------------------

# Noise texture for subtle surface variation

# ------------------------------------------------------------

texcoord = nodes.new("ShaderNodeTexCoord")

texcoord.name = "Texture Coordinate"

texcoord.location = (-520, -220)


noise = nodes.new("ShaderNodeTexNoise")

noise.name = "Surface Noise"

noise.location = (-280, -220)


noise.noise_dimensions = '3D'

noise.inputs["Scale"].default_value = 220.0

noise.inputs["Detail"].default_value = 2.0

noise.inputs["Roughness"].default_value = 0.5


# ------------------------------------------------------------

# Bump

# ------------------------------------------------------------

bump = nodes.new("ShaderNodeBump")

bump.name = "Micro Bump"

bump.location = (250, -220)


bump.inputs["Strength"].default_value = 0.025

bump.inputs["Distance"].default_value = 0.008


# ============================================================

# LINKS

# ============================================================


links.new(layer.outputs["Facing"], ramp.inputs["Fac"])

links.new(ramp.outputs["Color"], multiply.inputs[0])


if "Emission Strength" in bsdf.inputs:

    links.new(multiply.outputs["Value"], bsdf.inputs["Emission Strength"])


links.new(texcoord.outputs["Generated"], noise.inputs["Vector"])

links.new(noise.outputs["Fac"], bump.inputs["Height"])

links.new(bump.outputs["Normal"], bsdf.inputs["Normal"])


links.new(bsdf.outputs["BSDF"], output.inputs["Surface"])


# ============================================================

# ASSIGN TO OBJECT

# ============================================================


if len(obj.data.materials) == 0:

    obj.data.materials.append(mat)

else:

    obj.data.materials[0] = mat


print(f"Material '{MAT_NAME}' berhasil dibuat dan dipasang ke '{obj.name}'.")

TRANSLATE this Page

Posting Komentar

0 Komentar