বেসিক লাইটিং মডেল (Ambient, Diffuse, Specular)

লাইটিং এবং শেডার ইফেক্টস - ওয়েবজিএল (WebGL) - Web Development

298

বেসিক লাইটিং মডেল কি?

লাইটিং মডেল বা আলোর ধরন হল 3D গ্রাফিক্সে একটি অবজেক্টের ওপর আলোর প্রতিক্রিয়া ব্যাখ্যা করার পদ্ধতি। ওয়েবজিএল-এ 3D দৃশ্যের সঠিক লাইটিং তৈরির জন্য মূলত তিনটি প্রধান লাইটিং প্রক্রিয়া ব্যবহৃত হয়— অ্যাম্বিয়েন্ট লাইট (Ambient Light), ডিফিউজ লাইট (Diffuse Light) এবং স্পেকুলার লাইট (Specular Light)। এই তিনটি আলোর ধরন একটি অবজেক্টের উপর আলোর প্রভাব এবং তার চেহারা কেমন হবে তা নির্ধারণ করে।


অ্যাম্বিয়েন্ট লাইট (Ambient Light)

অ্যাম্বিয়েন্ট লাইট হল একটি পরিবেশগত আলো, যা সব দিক থেকে সমানভাবে বিতরণ হয়ে অবজেক্টের উপর আলো প্রদান করে। এটি অবজেক্টের সাধারণ আলোকিত অবস্থা নির্ধারণ করে এবং এটি কোনো নির্দিষ্ট দিক থেকে আসা আলো নয়। অ্যাম্বিয়েন্ট লাইট সাধারণত দৃশ্যে আলো এবং রঙের বেসিক মান তৈরি করতে ব্যবহৃত হয়, যার মাধ্যমে অবজেক্টের কোনো অংশ অন্ধকারে লুকিয়ে থাকে না।

প্রভাব:

  • সব দিক থেকে সমানভাবে আলো সরবরাহ করে।
  • কোনো নির্দিষ্ট দিক থেকে আসা আলো হিসেবে কাজ করে না।
  • গা dark ় বা দ্যুতি সৃষ্টিতে সহায়তা করে না।
const ambientLight = [0.2, 0.2, 0.2];  // RGB মান দিয়ে অ্যাম্বিয়েন্ট লাইটের শক্তি নির্ধারণ

ডিফিউজ লাইট (Diffuse Light)

ডিফিউজ লাইট হল সেই আলো যা কোনো সরাসরি বা প্রকৃত আলোর উৎস থেকে একটি অবজেক্টের পৃষ্ঠে পড়লে আলোর প্রতিফলন হয়। এই ধরনের আলো একটি স্থির দিক থেকে আসে এবং এর প্রভাব অবজেক্টের পৃষ্ঠের সমান্তরাল এলাকায় সব জায়গায় সমান হয়। ডিফিউজ লাইট মূলত অবজেক্টের পৃষ্ঠের বস্তুর স্ট্রাকচার এবং রঙের ওপর ভিত্তি করে আলোর শক্তি নির্ধারণ করে।

প্রভাব:

  • এই আলো একটি নির্দিষ্ট দিক থেকে আসে।
  • আলো পৃষ্ঠের পরিমাণের ওপর নির্ভর করে, পৃষ্ঠের দিকে কেমন কোণ তৈরি হয়েছে তার উপর আলোর শক্তি পরিবর্তিত হয়।
  • রঙের পার্থক্য প্রকাশ করতে সহায়তা করে।
const diffuseLight = [1.0, 1.0, 1.0];  // RGB মান দিয়ে ডিফিউজ লাইটের শক্তি নির্ধারণ

স্পেকুলার লাইট (Specular Light)

স্পেকুলার লাইট হল সেই আলো যা কোন পৃষ্ঠের উপর সরাসরি পড়লে দৃশ্যমান প্রতিফলন তৈরি করে, যেমন কাচ বা পানির উপর আলোর প্রতিফলন। এটি সাধারণত চমকপ্রদ বা ঝকঝকে ভাব সৃষ্টি করে এবং অবজেক্টের পৃষ্ঠের মসৃণতা অনুযায়ী আলোর প্রতিফলন হতে পারে। স্পেকুলার লাইট একটি নির্দিষ্ট দিক থেকে আসতে পারে এবং আলোর শক্তি ধীরে ধীরে কমে যায় যতটা অবজেক্টের পৃষ্ঠ থেকে আলো দূরে চলে যায়।

প্রভাব:

  • পৃষ্ঠের কোণ এবং মসৃণতার উপর নির্ভর করে।
  • ঝকঝকে বা শাইনিং (shiny) পৃষ্ঠের উপর আলোর প্রতিফলন তৈরি করে।
  • অবজেক্টে হাইলাইট তৈরি করতে ব্যবহৃত হয়।
const specularLight = [1.0, 1.0, 1.0];  // RGB মান দিয়ে স্পেকুলার লাইটের শক্তি নির্ধারণ

লাইটিং মডেল প্রয়োগ

ওয়েবজিএল-এ একটি সাধারণ বেসিক লাইটিং মডেল তৈরি করতে, এই তিনটি আলো একসাথে ব্যবহৃত হয়। এখানে একটি মৌলিক লাইটিং ক্যালকুলেশন দেখানো হলো:

// ভের্টেক্স শেডার (Vertex Shader)
attribute vec3 position;
attribute vec3 normal;
uniform mat4 modelViewMatrix;
uniform mat4 projectionMatrix;
uniform vec3 lightPosition;

varying vec3 fragPosition;
varying vec3 fragNormal;

void main() {
    fragPosition = (modelViewMatrix * vec4(position, 1.0)).xyz;
    fragNormal = normalize(mat3(modelViewMatrix) * normal);
    gl_Position = projectionMatrix * vec4(fragPosition, 1.0);
}

// ফ্র্যাগমেন্ট শেডার (Fragment Shader)
uniform vec3 ambientLight;
uniform vec3 diffuseLight;
uniform vec3 specularLight;
uniform vec3 lightPosition;
uniform float shininess;

varying vec3 fragPosition;
varying vec3 fragNormal;

void main() {
    vec3 ambient = ambientLight;

    // Diffuse lighting calculation
    vec3 lightDir = normalize(lightPosition - fragPosition);
    float diff = max(dot(fragNormal, lightDir), 0.0);
    vec3 diffuse = diffuseLight * diff;

    // Specular lighting calculation
    vec3 viewDir = normalize(-fragPosition);  // ক্যামেরার দিকে
    vec3 reflectDir = reflect(-lightDir, fragNormal);
    float spec = pow(max(dot(viewDir, reflectDir), 0.0), shininess);
    vec3 specular = specularLight * spec;

    vec3 result = ambient + diffuse + specular;
    gl_FragColor = vec4(result, 1.0);
}

এখানে ambientLight, diffuseLight এবং specularLight ব্যবহার করে একটি লাইটিং মডেল তৈরি করা হয়েছে। অবজেক্টের পৃষ্ঠের ওপর আলোর প্রভাব যথাক্রমে অ্যাম্বিয়েন্ট, ডিফিউজ এবং স্পেকুলার আলোর মাধ্যমে ক্যালকুলেট করা হয়েছে।


উপসংহার

অ্যাম্বিয়েন্ট, ডিফিউজ এবং স্পেকুলার লাইট তিনটি মৌলিক আলোর ধরন 3D গ্রাফিক্সে আলোর প্রতিক্রিয়া ও অবজেক্টের ভিজ্যুয়াল প্রভাব নির্ধারণে গুরুত্বপূর্ণ ভূমিকা পালন করে। এই লাইটিং মডেল ব্যবহার করে ওয়েবজিএল-এ সঠিক এবং বাস্তবসম্মত আলোর প্রভাব তৈরি করা সম্ভব।

Content added By
Promotion

Are you sure to start over?

Loading...