টিএল; ডিআর: 2 * 1LSB ত্রিভুজাকার-পিডিএফ ক্লাইমিংয়ের কারণে 0 এবং 1 এ প্রান্তক্যাসগুলিতে বিরতি দেয়। একটি সমাধান হ'ল সেই কিনারাগুলিতে 1 বিট ইউনিফর্মের দিকে r
আমি এটির দ্বিতীয়টি যুক্ত করছি, যা দেখলাম এটি মূলত যা ভাবা হয়েছিল তার থেকে কিছুটা জটিল। দেখা যাচ্ছে যে এই সমস্যাটি একটি "টোডো: ক্ল্যাম্পিং দরকার?" আমার কোডটিতে যেহেতু আমি ২০১২ সালে ... সাধারণ থেকে ত্রিভুজাকৃতির normalেঁকিতে সরিয়ে নিয়েছি ... অবশেষে এটি দেখতে ভালই লাগছে :) পোস্টের জন্য সমাধান / চিত্রগুলির সম্পূর্ণ কোড: https://www.shadertoy.com/view/llXfzS
প্রথমত, 2 * 1LSB ত্রিভুজাকার-পিডিএফ দুরত্বের সাহায্যে 3 বিটগুলিতে সংকেত মাপানোর সময় আমরা এখানে যে সমস্যাটি দেখছি is
- মূলত হটমল্টিমিডিয়া যা দেখায়।
বিপরীতে ক্রমবর্ধমান, প্রশ্নের বর্ণিত প্রভাবটি সুস্পষ্ট হয়ে ওঠে: আউটপুট গড় / ধীরে ধীরে ধীরে ধীরে সাদা / সাদা হয় না (এবং এটি করার আগে 0/1 এর বাইরেও ভাল প্রসারিত হয়)।
গ্রাফের দিকে তাকানো কিছুটা অন্তর্দৃষ্টি দেয়:
(ধূসর রেখাগুলি 0/1 চিহ্নিত করে, এছাড়াও ধূসর বর্ণের মধ্যে আমরা আউটপুট দেওয়ার চেষ্টা করছি এমন সিগন্যাল, হলুদ-রেখাটি গড় মাপসই / কোয়ান্টাইটিজ আউটপুট গড়, লাল ত্রুটি (সংকেত-গড়))।
মজার বিষয় হল, কেবলমাত্র গড় আউটপুট সীমাতে 0/1 নয়, এটি লিনিয়ারও নয় (শব্দটি ত্রিভুজাকার পিডিএফের কারণে সম্ভবত)। নিম্ন প্রান্তের দিকে তাকালে, এটি স্বজ্ঞাত অর্থে তৈরি করে যে আউটপুটটি কেন ডাইভারেজ হয়: যেহেতু আঁকানো সংকেতটি নেতিবাচক মানগুলি অন্তর্ভুক্ত করতে শুরু করে, ক্ল্যাম্পিং-অন-আউটপুট আউটপুটটির নীচের অংশের (যেমন নেতিবাচক মানগুলি) এর মান পরিবর্তন করে by গড় মূল্য বৃদ্ধি। একটি চিত্র সজ্জিত বলে মনে হচ্ছে (অভিন্ন, প্রতিসাম্য 2LSB, এখনও হলুদ মধ্যে গড়):
এখন, আমরা যদি কেবল 1LSB স্বাভাবিককরণের জায়গাটি ব্যবহার করি তবে কিনারা-কেসগুলিতে মোটেই সমস্যা নেই, তবে অবশ্যই আমরা ত্রিভুজাকৃতির দোহাইয়ের দুর্দান্ত বৈশিষ্ট্যগুলি হারাব (উদাহরণস্বরূপ এই উপস্থাপনাটি দেখুন )।
একটি (বাস্তববাদী, অভিজ্ঞতামূলক) সমাধান (হ্যাক) এর পরে, [-0.5; 0.5 [প্রান্তকেসের জন্য অভিন্ন দৌড়তে ফিরে যেতে হবে:
float dithertri = (rnd.x + rnd.y - 1.0); //note: symmetric, triangular dither, [-1;1[
float dithernorm = rnd.x - 0.5; //note: symmetric, uniform dither [-0.5;0.5[
float sizt_lo = clamp( v/(0.5/7.0), 0.0, 1.0 );
float sizt_hi = 1.0 - clamp( (v-6.5/7.0)/(1.0-6.5/7.0), 0.0, 1.0 );
dither = lerp( dithernorm, dithertri, min(sizt_lo, sizt_hi) );
বাকী পরিসরের জন্য ত্রিভুজাকার ঘূর্ণন অক্ষত রাখার সময় যা কিনারাগুলি স্থির করে:
সুতরাং আপনার প্রশ্নের উত্তর না দেওয়ার জন্য: আরও গাণিতিকভাবে কঠিন সমাধান আছে কিনা তা আমি জানি না এবং অতীত মাস্টার্স অফ পাস্ট কী করেছে তা জানতে সমানভাবে আগ্রহী: ততক্ষণ পর্যন্ত কমপক্ষে আমাদের কোডটি কার্যকর রাখতে আমাদের এই ভয়াবহ হ্যাক রয়েছে।
সম্পাদনাটি
সম্ভবত আমার সিগন্যালটি সংকুচিত করার বিষয়ে প্রশ্নটিতে প্রদত্ত কার্য-পরামর্শ-পরামর্শটি সম্ভবত cover েকে রাখা উচিত। গড়টি প্রান্তরেখাগুলিতে গড় রৈখিক নয়, কেবল ইনপুট-সংকেতকে সংকুচিত করে নিখুঁত ফলাফল দেয় না - যদিও এটি শেষের দিকগুলি ঠিক করে দেয়:
তথ্যসূত্র