জিএলএসএল লাইট (মনোযোগ, রঙ এবং তীব্রতা) সূত্র


17

আমি আমার ভক্সেল ইঞ্জিনে পয়েন্ট লাইট প্রয়োগ করছি, এবং আমি সত্যই আলোর উত্সের কাছাকাছি 100% থেকে আলোক ব্যাসার্ধের 0% পর্যন্ত আলোকের একটি ভাল প্রবাহ পেতে লড়াই করছি।

ফাংশনটির জন্য আমার 5 টি যুক্তি রয়েছে:

  1. হালকা রঙ (ভেক 3)
  2. আলোর তীব্রতা (আলোক থেকে দূরত্ব যেখানে দূরত্ব যেখানে 100% রয়েছে)
  3. আলো থেকে খণ্ডের দূরত্ব
  4. খণ্ড থেকে সাধারণ আলোর কোণ
  5. আলোর অবস্থান

খণ্ডের রঙ গণনার জন্য কোনও ফাংশন তৈরি করতে কেউ আমাকে সঠিক দিকে ঠেলে দিতে পারে?

আমার একটি পরীক্ষার চিত্র:

ভক্সেল ইঞ্জিন প্রতি-খণ্ড আলোর পরীক্ষা

সম্পাদনা (বাইট দ্বারা অনুরোধ করা বর্তমান কোড) নোট করুন যে এটি আমার দিক থেকে কিছু পরীক্ষামূলক কোড। আমি একটি ওয়েবসাইট থেকে ভাসমান সংস্থান পেয়েছি, এবং এটি ধরণের কাজ করে তবে সঠিক থেকে অনেক দূরে। :

void main()
{
// Light color
vec3 torchColor = vec3(1.0f, 1.0f, 1.0f);

float lightAdd = 0.0f;
for (int i=0; i<5; i++) {
    vec3 pos = lights[i];
    if (pos.x == 0.0f) continue;

    float dist = distance(vertex_pos, pos);
    if (dist < 9) {
        float att=1.0/(1.0+0.1*dist+0.01*dist*dist);
        vec3 surf2light = normalize(pos - vertex_pos);
        vec3 norm = normalize(normal);
        float dcont=max(0.0,dot(norm,surf2light));
        lightAdd += att*(dcont+0.4);
    }
}

vec3 textureColor = texture2D(texture, texture_coordinate).rgb;
vec3 torch_output = lightAdd * torchColor;

vec3 final_color = ((0.1+torch_output) * textureColor);

gl_FragColor = vec4(final_color, 1.0f); 
}

6
আপনি এখনও " ভাল চেহারা , প্রাকৃতিক আলো " এবং "কাজগুলি করার জন্য সংগ্রাম করা , তবে নিখুঁত থেকে দূরে " এর মতো জিনিসগুলি বলছেন । আপনার নির্দিষ্ট, সঠিক ভাষা অন্তর্ভুক্ত করতে হবে। আমরা জানি না আপনার কাছে কী দেখতে ভাল লাগছে, বা কী প্রাকৃতিক আলো আপনার মত দেখাচ্ছে, বা কী নিখুঁত।
মাইকেলহাউস

2
আপনি কি সরানোর চেষ্টা করেছেন if (dist < 9)? অন্যথায় আপনি নিরূপণ পারে attএকটি ফাংশন যে আয় 1 যখন দূরত্ব 0 এবং 0 যখন দূরত্ব 9. যেমন সঙ্গেmix(1.0, 0.0, dist / 9.0)
msell

উত্তর:


39

আপনি পেয়েছেন মনোযোগ ফাংশন,

att = 1.0 / (1.0 + 0.1*dist + 0.01*dist*dist)

কম্পিউটার গ্রাফিক্সে মোটামুটি সাধারণ একটি - বা আরও সাধারণভাবে 1.0 / (1.0 + a*dist + b*dist*dist))কিছু সারণিযোগ্য পরামিতি aএবং b। এই বক্রতা কীভাবে কাজ করে তা বুঝতে প্যারামিটারগুলি ইন্টারেক্টিভভাবে খেলতে সহায়তা করে । এই বক্ররেখাটি দুর্দান্ত কারণ এটি বড় দূরত্বে শারীরিকভাবে-সঠিক বিপরীত স্কোয়ার আইনের কাছে যায় তবে স্বল্প দূরত্বে এটি অনন্তের দিকে যায় না। আসলে, সাথেa = 0 এটি একটি গোলাকার ক্ষেত্রের আলোতে বেশ ভাল মডেল।

তবে এর একটি অসুবিধা হ'ল আলো কোনও সীমাবদ্ধ দূরত্বে কখনও শূন্যে যায় না। রিয়েলটাইম সিজিতে ব্যবহারিক উদ্দেশ্যে আমাদের ক্লজটি করায় সাধারণত একটি সীমাবদ্ধ দূরত্বে লাইটগুলি কাটাতে হবে if (dist < 9)। যাইহোক, 9 এর ব্যাসার্ধটি খুব সংক্ষিপ্ত - প্রসারণ ফাংশনে আপনার সেটিংসের সাথে, আলোকটি 100 এর কাছাকাছি না হওয়া পর্যন্ত শূন্যের কাছাকাছি আসে না।

bঅ্যাটেনুয়েশন ফাংশনে আপনি প্যারামিটার থেকে আলোর ব্যাসার্ধ গণনা করতে পারেন (যেহেতু চতুর্ভুজ শব্দটি বড় দূরত্বে ডমিনেট করে)। ধরা যাক আপনি minLight0.01 এর মতো মনোযোগ কিছু পরিমাণে পৌঁছলে আপনি আলোক কেটে ফেলতে চান । তারপরে সেট করুন

radius = sqrt(1.0 / (b * minLight))

যে জন্য 100-ব্যাসার্ধ দেয় b = 0.01এবং minLight = 0.01। বিকল্পভাবে, আপনি ব্যাসার্ধ সেট করতে এবং bম্যাচের জন্য গণনা করতে পারেন:

b = 1.0 / (radius*radius * minLight)

জন্য radius = 9এবং minLight = 0.01, যে দেয় b = 1.23। আপনি এটি যে কোনও উপায়ে সেট আপ করতে পারেন, তবে মূলটি হল ব্যাসার্ধ এবং অ্যাটেনুয়েশন ফাংশনটি ম্যাচ করা যাতে আপনি আলোকপাতটি কাটা না করেন যতক্ষণ না মনোযোগীকরণ ফাংশনটি ইতিমধ্যে খুব কম হয়, সুতরাং আপনি কোনও ধারালো প্রান্ত দেখতে পাবেন না।


যা যা বলেছিল, সেখানে বিকল্প অ্যাটেন্যুয়েশন ফাংশন আপনি ব্যবহার করতে পারেন। আরেকটি মোটামুটি সাধারণ:

att = clamp(1.0 - dist/radius, 0.0, 1.0); att *= att

বা সামান্য কল্পিত:

att = clamp(1.0 - dist*dist/(radius*radius), 0.0, 1.0); att *= att

সেইগুলির জন্যও পরামিতিগুলি খেলুন । এই বক্ররেখা প্রদত্ত ব্যাসার্ধের ঠিক শূন্যে যাওয়ার সুবিধা রয়েছে , যখন এখনও প্রাকৃতিক বিপরীত বর্গাকার আইনের মতো দেখায়।


গ্রেট! যদিও, আমি ব্যবহার করতে চাই maxউপর clampকর্মক্ষমতা কারণে জন্য শুধুমাত্র।
মাইক ওয়েয়ার

4
@ মাইকওয়েয়ার ক্ল্যাম্পিং [0, 1] আসলে অনেকগুলি জিপিইউতে বিনামূল্যে। এটি এমন একটি সাধারণ ক্রিয়াকলাপ যা তাদের কাছে এটি নির্দেশ সংশোধক হিসাবে রয়েছে।
নাথান রেড
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.