Fwidth কি এবং এটি কীভাবে কাজ করে?


18

যেমন OpenGL ডকুমেন্টেশন যে fwidth returns the sum of the absolute value of derivatives in x and y

এটি কম গাণিতিক পদগুলির অর্থ কী, এবং এটি দেখার জন্য কোনও উপায় আছে?

ফাংশনটি সম্পর্কে আমার বোঝার ভিত্তিতে প্রতিবেশী পিক্সেলগুলির মানটিতে fwidth(p)অ্যাক্সেস রয়েছে p। এটি কীভাবে জিপিইউতে তাত্পর্যপূর্ণভাবে পারফরম্যান্সকে প্রভাবিত না করে কাজ করে এবং এটি সমস্ত পিক্সেল জুড়ে নির্ভরযোগ্য ও অভিন্নভাবে কাজ করে?

উত্তর:


18

পিক্সেল পর্দা-স্পেস ডেরাইভেটিভস না তাই দৃশ্য তারা বিনামূল্যে একটি নির্দিষ্ট বিন্দু থেকে আয়তন বহুলাংশে প্রভাব কর্মক্ষমতা, কিন্তু তারা সম্পাদনাকে প্রভাবিত কিনা তাদের ব্যবহার করুন অথবা!

সাম্প্রতিক ইতিহাসে প্রতিটি জিপিইউ চার পিক্সেলের এক চতুর্থাংশ একসাথে প্যাক করে এবং একই ধরণের / ওয়েভফ্রন্টে রাখে, যার মূল অর্থ হ'ল তারা জিপিইউতে একে অপরের পাশে চলেছে, সুতরাং সেগুলি থেকে মানগুলি অ্যাক্সেস করা খুব সস্তা। ওয়ার্পস / ওয়েভফ্রন্টগুলি লকস্টেপে চালিত হওয়ার কারণে, অন্যান্য পিক্সেলগুলি শ্যাডারের ঠিক একই জায়গায় থাকবে যেমনটি আপনার রয়েছে, সুতরাং pসেই পিক্সেলের মান কেবল আপনার জন্য অপেক্ষা করে একটি রেজিস্টারে বসে থাকবে। এই অন্যান্য তিন পিক্সেল সর্বদা কার্যকর করা হবে, এমনকি যদি তাদের ফলাফলগুলি ফেলে দেওয়া হয়। সুতরাং একটি ত্রিভুজ যা একটি একক পিক্সেল কভার করে সর্বদা চার পিক্সেলের শেড করে এবং তার তিনটির ফলাফলকে ফেলে দেয়, যাতে এই ডেরাইভেটিভ বৈশিষ্ট্যগুলি কাজ করে!

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

যতদুর কি এটি কম গাণিতিক পদ মানে হিসাবে: fwidthসমতূল্য abs(dFdx(p)) + abs(dFdy(p))dFdx(p)কেবলমাত্র pপিক্সেল x + 1 এর মান pএবং পিক্সেল এক্স এর মান এবং একইভাবে এর মধ্যে পার্থক্য dFdy(p)


সুতরাং, যদি dFdx(p) = p(x1) - p(x), তবে x1হয় (x+1)বা হতে পারে (x-1), কোয়াডে পিক্সেলের অবস্থানের উপর নির্ভর করে x। যেভাবেই হোক, x1একই ধরণের / ওয়েভফ্রন্টে থাকতে হবে x। আমি কি সঠিক?
অপুরভাজে

3
@ অ্যাপুরোজেজে মূলত dFdx2x2 গ্রিডের 2 প্রতিবেশী পিক্সেলের জন্য একই মানের জন্য গণনা করা হয়। এবং এই মানটি কেবল দুটি প্রতিবেশী মানের মধ্যে পার্থক্য ব্যবহার করে গণনা করা হয়, যদি এটি হয় p(x+1)-p(x)বা ঠিক এখানে p(x)-p(x-1)কী আপনার ধারণার উপর নির্ভর করে x। ফলাফল তবে একই। হ্যাঁ, আপনি সঠিক।
ক্রিস বলছেন মনিকা পুনরায় ইনস্টল করুন 5'15

এই টুইটটি উত্তর ধন্যবাদ।
অপুরভাজে

11

সম্পূর্ণ প্রযুক্তিগত ক্ষেত্রে, fwidth(p)হিসাবে সংজ্ঞায়িত করা হয়

fwidth(p) := abs(dFdx(p)) + abs(dFdy(p))

এবং dFdx(p)/ এবং স্ক্রিনের মাত্রার সাথে সম্মানের সাথে dFdy(p)মানটির আংশিক উত্স হয় । সুতরাং তারা বোঝায় যে যখন একটি পিক্সেল ডানে ( ) বা এক পিক্সেল উপরে ( ) এ যায় তখন মান কী আচরণ করে ।pxypxy

এখন সেগুলি কীভাবে ব্যবহারিকভাবে গণনা করা যায়? ঠিক আছে, আপনি যদি প্রতিবেশী পিক্সেলের মান জানেন, তবে আপনি pকেবলমাত্র তাদের প্রকৃত গাণিতিক ডেরিভেটিভসের (যার কোনও সঠিক বিশ্লেষণাত্মক সমাধান নাও থাকতে পারে) সান্নিধ্য হিসাবে প্রত্যক্ষ সীমাবদ্ধ পার্থক্য হিসাবে গণনা করতে পারেন :

dFdx(p) := p(x+1) - p(x)

তবে অবশ্যই আপনি জিজ্ঞাসা করতে পারেন, আমরা কীভাবে pপার্শ্ববর্তী পিক্সেলগুলির জন্য (যা শেডার প্রোগ্রামের মধ্যে নির্বিচারে গণনা করা মান হতে পারে) এর মানগুলি কীভাবে জানব ? পুরো শেডার গণনা দুটি (বা তিন) বার করে প্রধান ওভারহেড ব্যয় না করে আমরা কীভাবে এই মানগুলি গণনা করব?

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

আধুনিক রাস্টেরাইজারগুলি একাধিক প্রতিবেশী পিক্সেলের বৃহত্তর টাইলগুলিতে টুকরো ছায়া গো কল করে call সবচেয়ে ছোটতে এটি পিক্সেলের 2x2 গ্রিড হবে। এবং এই জাতীয় প্রতিটি পিক্সেল ব্লকের জন্য প্রতিটি পিক্সেলের জন্য ফ্রেগমেন্ট শেডারটি আহ্বান করা হয় এবং সেই অনুরোধগুলি পুরোপুরি সমান্তরাল লক- স্টেপে চালিত হয় যাতে ব্লকটির প্রতিটি পিক্সেলের জন্য একই পরিমাণে এবং একই সময়ে সমস্ত গণনা করা যায় order (এই কারণেই খণ্ড খণ্ডনকারী শাডারে শাখা করা, মারাত্মক না হলেও, এড়ানো উচিত, যেহেতু একটি ব্লকের প্রতিটি অনুরোধকে কমপক্ষে একটি অনুরোধের দ্বারা নেওয়া প্রতিটি শাখা অন্বেষণ করতে হবে, এমনকি যদি এটি সরে যায় তবেও পরবর্তীকালে ফলাফলগুলিও যেমন সম্পর্কিত এই প্রশ্নের উত্তরগুলিতে যুক্ত হয়েছিল)। সুতরাং যে কোনও মুহুর্তে, কোনও খণ্ড শেডার তাত্ত্বিকভাবে এর প্রতিবেশী পিক্সেলের খণ্ড শেডার মানগুলিতে অ্যাক্সেস পেতে পারে। এবং যখন আপনি ঐ মান সরাসরি অ্যাক্সেস না থাকে, আপনি ব্যুৎপন্ন ফাংশন মত তাদের কাছ থেকে নির্ণিত মান অ্যাক্সেস করতে dFdx, dFdy, fwidth, ...

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.