মোবাইল ডিভাইসগুলির জন্য ট্রিগ ভারী শেডারকে গতিতে LUT ব্যবহার করুন


10

আমি এই শেডারটি সত্যই একটি পুরানো আইডাভাইস, পাশাপাশি শেষ পর্যন্ত অ্যান্ড্রয়েডে চালিত করার চেষ্টা করছি ।

এমনকি আমি কোডটি খণ্ডের কম করে 2 টি সাইন ফাংশনে কমিয়ে আনলে শেডার প্রায় 20fps এ চলে runs

আমি পুরানো শেডিং কৌশলগুলির বইয়ের বাইরে একটি পাতা নেওয়ার এবং পূর্বনির্ধারিত ট্রিগার মানগুলির একগুচ্ছ ধারণ করে এমন একটি অ্যারে তৈরি করার বিষয়টি বিবেচনা করেছি এবং শেডারটিকে আনুমানিকরূপে ব্যবহার করে।

আমি উপরে সংযুক্ত শেডারে আমি ইতিমধ্যে অনুকরণ করছি যে ট্রিগ ফাংশনে প্রেরিত মানগুলি গোল করে আরও মাউস বামে (নিচে থাকায়) শেডারটির কম মানের দিকে যায়। এটি আসলে বেশ দুর্দান্ত কারণ বাম পাশের কাছে এটি দেখতে সম্পূর্ণ আলাদা এবং বেশ শীতল শেডারের মতো দেখাচ্ছে।

যাইহোক আমার দুটি দ্বিধা আছে:

  1. আমি জানি না এটিতে জিএলএসএল শেডার, ধ্রুবক বা ইউনিফর্মের মধ্যে 360 টির মতো মানের একটি অ্যারে রাখার সবচেয়ে কার্যকর উপায় কী?
  2. আমি যদি 0 থেকে 360 এর মধ্যে একটি কোণ চাইতাম তবে হ্যাঁ আমি জিপিইউগুলি রেডিয়ান ব্যবহার করে জানি) আমি এটির মতো এটি করতে চাইলে আমি কীভাবে কোনও সংখ্যাটি কীভাবে রাখব তা বুঝতে পারি না।

    func range(float angle)
    {
       float temp = angle
       while (temp > 360) {temp -= 360;}
       while (temp < 0)   {temp += 360;}
       return temp;
    }
    

    তবে লুপগুলি বা পুনরাবৃত্তির জন্য যখন জিএলএসএল অনুমতি দেয় না।


আমি জানি না এটি বাস্তবায়নের জন্য ব্যবহারিক হবে কিনা, তবে সাইন কার্ভের slালটি খাড়া যেখানে আরও কম ক্লাস্টারযুক্ত মান সহ আরও কম ঘনিষ্ঠ ক্লাস্টারযুক্ত মান সহ এটি অসম্পূর্ণভাবে স্পাইনযুক্ত সাইন মানগুলিকে স্থান পেতে সহায়তা করবে এবং যেখানে এটি স্ফীত হবে সেখানে কম মান রয়েছে and তত বদলে যায় না? বিপুল সংখ্যক মান সংরক্ষণের প্রয়োজন ছাড়াই এটির যেখানে এটি প্রয়োজন সেখানে উচ্চতর নির্ভুলতার অনুমতি দেবে?
ট্রাইকোপলাক্স

5
# 2 সম্পর্কিত, অন্তর্নির্মিত modফাংশনটি আপনি চান তা is আপনি লিখতেন mod(angle, 360.0)
নাথন রিড

1
@ থ্রিচোপ্লেক্স উজ্জ্বল ধারণা কিন্তু আমি জানি না আপনি কীভাবে সেই টেবিলে মানগুলি দেখতে পারবেন। ধরা যাক আমরা তাদের মধ্যে আরও কিছু কেন্দ্রীভূত করে একটি অ্যারে রেখেছি। আমরা সঠিক সূচকটি কীভাবে খুঁজে পেতে পারি?
জে.ডো

6
কীভাবে আপনার মানগুলিকে 3-চ্যানেল 1D টেক্সচারে রাখবেন? এইভাবে আপনি একটি একক টেক্সচার লুকের দামের জন্য পাপ, কোস এবং ট্যান পেতে পারেন। আপনি যদি 0 - 1 পিভি কোণে 0 - 1 ইউভিতে মানচিত্র করেন এবং পুনরাবৃত্ত টেক্সচার মোড ব্যবহার করেন তবে আপনার এমনকি মোড কল প্রয়োজন হয় না, এটি স্বয়ংক্রিয়ভাবে 'মোড়ানো' হবে এবং আপনি আপনার সঞ্চিত মানগুলির মধ্যে রৈখিক-ফিল্টারযুক্ত আনুমানিকতা পেতে পারেন নিকটতম একটি snapping।
Russ

3
কোণটি না ব্যবহার করে জ্যামিতির জন্য ব্যবহার করার সময় আপনি ট্রিগ ফাংশনগুলি সরিয়ে দিতে পারেন তবে পাপ / কোস জুটি দিয়ে শুরু এবং শেষ করতে পারেন এবং অর্ধকোণ এবং এর মতো ট্রিগার পরিচয় ব্যবহার করতে পারেন।
র‌্যাচেট ফ্রিক

উত্তর:


8

[0,360)[0,2π)

  • [0,360][0,1]
  • আপনার লুপের মতো ব্যবধানের সামঞ্জস্য না করানোর অতিরিক্ত সুবিধা পাবেন (যদিও আপনাকে কোনওভাবে লুপের প্রয়োজন হবে না এবং কেবল একটি মডুলাস অপারেশন ব্যবহার করতে পারেন)। GL_REPEATটেক্সচারের জন্য কেবল মোড়ানোর মোড হিসাবে ব্যবহার করুন এবং আর্গুমেন্ট> 1 (এবং একইভাবে নেতিবাচক যুক্তির জন্য) অ্যাক্সেস করার পরে এটি শুরুতে আবার স্বয়ংক্রিয়ভাবে শুরু হবে
  • এবং আপনি টেক্সচার ফিল্টার হিসাবে মূলত বিন্যাসের জন্য মূলত বিন্যাসের জন্য নিখরচায় (বা প্রায় মুক্ত বলা যাক) মধ্যে রৈখিকভাবে ইন্টারপোলটিংয়ের সুবিধা পাবেন, এইভাবে মানগুলি সংরক্ষণওGL_LINEAR করেনি। অবশ্যই রৈখিক প্রবণতা ত্রিকোণমিত্রিক ক্রিয়াকলাপগুলির জন্য 100% সঠিক নয়, তবে এটি কোনও প্রক্ষেপণের চেয়ে অবশ্যই ভাল ।
  • আপনি আরজিবিএ টেক্সচার ব্যবহার করে (বা তবে আপনার প্রয়োজনীয় অনেক উপাদান) ব্যবহার করে আপনি জমিনে একাধিক মান সংরক্ষণ করতে পারেন । এইভাবে আপনি একক টেক্সচার লকউপ সহ উদাহরণস্বরূপ পাপ এবং কোস পেতে পারেন।
  • [-1,1][0,1]float sin = 2.0 * (texValue.r + texValue.g / 256.0) - 1.0;(বা আরও ভাল উপাদান শস্য জন্য)। এটি আপনাকে আবারও বহু-উপাদানযুক্ত টেক্সচার থেকে লাভ করতে দেয়।

অবশ্যই এটি এখনও আরও ভাল সমাধান হিসাবে মূল্যায়ন করতে হবে, যেহেতু জমিন অ্যাক্সেস পুরোপুরি বিনামূল্যে নয়, পাশাপাশি জমিনের আকার এবং বিন্যাসের সর্বোত্তম সমন্বয়টি কী হবে।

ডেটা দিয়ে টেক্সচারটি পূরণ করতে এবং আপনার একটি মন্তব্যে অ্যাড্রেস করার জন্য আপনাকে বিবেচনা করতে হবে যে টেক্সচার ফিল্টারিংটি টেক্সেল কেন্দ্রে যথাযথ মান প্রদান করে , অর্থাত্ টেক্সেল আকারের অর্ধেক টেক্সচারের স্থানাঙ্ক। সুতরাং হ্যাঁ, আপনার পাঠ্যগুলিতে মান উত্পন্ন করা.5 উচিত , যেমন অ্যাপ্লিকেশন কোডে এই জাতীয় কিছু:

float texels[256];
for(unsigned int i = 0; i < 256; ++i)
    texels[i] = sin((i + .5f) / 256.f) * TWO_PI);
glTexImage1D(GL_TEXTURE_1D, 0, ..., 256, 0, GL_RED, GL_FLOAT, texels);

আপনি, এখনও, একটি ছোট ইউনিফর্ম অ্যারে ব্যবহার করে এমন পদ্ধতির বিপরীতে এই পদ্ধতির কর্মক্ষমতা তুলনা করতে চাইতে পারেন (যেমন uniform float sinTable[361], বা সম্ভবত অনুশীলনে কম, ইউনিফর্ম অ্যারে আকারের উপর আপনার প্রয়োগের সীমাটির দিকে লক্ষ্য রাখুন) যা আপনি কেবল ব্যবহার করে সংশ্লিষ্ট মানগুলি দিয়ে লোড করেন glUniform1fvএবং আপনার কোণ সমন্বয় করে অ্যাক্সেস করুন[0,360)mod

angle = mod(angle, 360.0);
float value = sinTable[int(((angle < 0.0) ? (angle + 360.0) : angle) + 0.5)];

1
টেক্সচারে সারণী সন্ধানের জন্য এখানে একটি আকর্ষণীয় এক্সটেনশন। এটি (অ্যাবি) ডেটা পয়েন্টস, সারফেস, ভলিউম এবং হাইপারভোলিউমের উচ্চতর অর্ডার ইন্টারপোলেশন (লিনিয়ারের চেয়ে বেশি ভাল) পাওয়ার জন্য এন-লিনিয়ার টেক্সচার ইন্টারপোলেশন ব্যবহার করে। blog.demofox.org/2016/02/22/…
অ্যালান ওল্ফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.