স্বাক্ষরিত দূরত্বের ক্ষেত্র ফন্টগুলির সাথে তীক্ষ্ণ কোণগুলি


49

স্বাক্ষরিত দূরত্ব ক্ষেত্রগুলি (এসডিএফ) এই কাগজে ভালভের দ্বারা রেজুলেশন স্বতন্ত্র ফন্ট রেন্ডারিংয়ের দ্রুত সমাধান হিসাবে উপস্থাপিত হয়েছিল ।

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

বাস্তবে এই কাগজটি থেকে প্রয়োগের অনেকগুলি বিবরণ বাকী রয়েছে।

আমি যদি জানতে চাই যে আপনারা কেউ আমাকে এসডিএফস ফন্টটি তীক্ষ্ণ কোণগুলির সাথে উপস্থাপনের জন্য কোনও দিক নির্দেশ করতে পারেন কিনা।


প্রকৃতপক্ষে অ্যাডাম ইতিমধ্যে শেডারটোয় সোর্স কোড পোস্ট করেছে। লিঙ্কটি এখানে: shadertoy.com/view/ltXSDB
ফিলিপ লিরা

তুমি আমাকে উত্তেজিত করেছ তিনি শেডারটোয় বেজিয়ার স্টাফ পোস্ট করেছিলেন তবে টেক্সচার দূরত্বের ক্ষেত্রের জিনিসগুলি নয়!
অ্যালান ওল্ফ

@ অ্যালান ওল্ফ আমার মনে হয় তিনি কেবলমাত্র পদ্ধতিগতভাবে বেজিয়ার রেখাচিত্রগুলি সেট করার জন্য করেছেন। আমি নিশ্চিত নই যে এটিকে একটি টিটিএফ রেন্ডার লিবের সাথে সংহত করার জন্য প্রয়োজনীয় প্রচেষ্টা প্রয়োজন। আমার কিছুটা সময় হলে আমি এটি একবার দেখে নেব।
ফিলিপ লিরা

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

পার্টিতে দেরি হয়ে
গেলেও

উত্তর:


7

অ্যাডাম সিমন্স এই অঞ্চলে কিছু আকর্ষণীয় কাজ করেছেন। তিনি কীভাবে এটি অর্জন করছেন তা আমি বিশেষভাবে জানি না, তবে তার এসডিএফ-ভিত্তিক ভেক্টর রেন্ডারিং আমি ভালভের বাইরে অনুশীলনে সবচেয়ে তীক্ষ্ণ দেখেছি। http://twitter.com/adamjsimmons/status/611677036545863680


অবশ্যই আমার কাছে সমস্ত বিবরণ নেই, তবে আমার কাছে মনে হয় এই ব্যক্তি কেবল নিয়মিত জায়গায় একটি ছদ্ম-দূরত্বের ক্ষেত্র ব্যবহার করেছিলেন, যা ইতিমধ্যে কিন, ম্যাককুল এবং কাপলানের 2006 এর একটি গবেষণাপত্রে প্রদর্শিত হয়েছে, " রিয়েল-টাইম টেক্সচার-ম্যাপযুক্ত ভেক্টর গ্লাইফস ", এটি ভালভের কাগজেও উল্লেখ করা হয়। এটি কেবল রূপরেখার মিটারগুলিকে প্রভাবিত করে এবং কোণগুলির চেহারা উন্নত করতে কিছুই করে না। আমি সন্দেহ করি যে এটি তীক্ষ্ণ দেখাচ্ছে কারণ কারণ তিনি অপ্রচলিতভাবে বড় দূরত্বের ক্ষেত্রের টেক্সচার ব্যবহার করেন। আমি যদিও ভুল হতে পারে।
ডিথেরোক

69

সম্পাদনা: দয়া করে আমার অন্য উত্তরটি একটি কংক্রিট সমাধান সহ দেখুন।

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

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

অ্যান্টি-এলিয়জিংয়ের জন্য, আমরা কেবল বুলিয়ানগুলির সাথে কাজ করি না, তবে ভাসমান পয়েন্টের মানগুলি ব্যবহার করি এবং অ্যান্ড অপারেশন সর্বনিম্ন হয়ে যায় এবং ওআর সর্বোচ্চ দুটি মানের হয়ে যায়। তিনটির মধ্যম প্রকৃতপক্ষে উভয়ই করতে পারে: যদি একটি < বি , (( , , )) হয়, তবে মধ্যম সর্বনিম্ন এবং ( , , ) এর জন্য, এটি সর্বাধিক।

রেন্ডারিং প্রক্রিয়াটি এখনও অত্যন্ত সহজ। অ্যান্টি-আলিয়াজিং সহ পুরো টুকরা শেডার এর মতো কিছু দেখতে পারে:

int main() {
    // Bilinear sampling of the distance field
    vec3 s = texture2D(sdf, p).rgb;
    // Acquire the signed distance
    float d = median(s.r, s.g, s.b) - 0.5;
    // Weight between inside and outside (anti-aliasing)
    float w = clamp(d/fwidth(d) + 0.5, 0.0, 1.0);
    // Combining the background and foreground color
    gl_FragColor = mix(outsideColor, insideColor, w);
}

সুতরাং আসল পদ্ধতি থেকে একমাত্র পার্থক্য হ'ল জমিনকে নমুনা দেওয়ার পরে ঠিক মধ্যকটি গণনা করা। আপনাকে মিডিয়ান ফাংশনটি বাস্তবায়ন করতে হবে , যা কেবল 4 মিনিট / সর্বাধিক ক্রিয়াকলাপের সাহায্যে করা যেতে পারে

এখন অবশ্যই, প্রশ্নটি হল, আমি কীভাবে এই জাতীয় তিনটি চ্যানেল দূরত্বের ক্ষেত্রটি তৈরি করব?এবং এটি জটিল অংশ। প্রথম দিকে আমি সবচেয়ে স্পষ্ট পদ্ধতিটি গ্রহণ করেছি হ'ল ইনপুট শেপ / গ্লাইফের পচন তিনটি উপাদানগুলিতে করা, এবং তারপরে প্রতিটি থেকে একটি প্রচলিত দূরত্ব ক্ষেত্র তৈরি করা। এই পচনের নিয়মগুলি এত জটিল নয়। প্রথমত, 3 টি চ্যানেলের মধ্যে কমপক্ষে 2 টির অন্তর্ভুক্ত অঞ্চলটি। তারপরে, আপনি যদি এটি আরজিবি রঙিন চ্যানেল হিসাবে কল্পনা করেন তবে উত্তল কোণগুলি অবশ্যই একটি গৌণ রঙের তৈরি হওয়া উচিত এবং এর দুটি প্রাথমিক উপাদান বাহ্যিকভাবে অবিরত থাকবে। কনক্যাভ কোণগুলি বিপরীত: দুটি গৌণ রঙগুলি তাদের সাধারণ প্রাথমিক রঙটি আবদ্ধ করে এবং যেখানে উভয় প্রান্তগুলি অভ্যন্তরের অভ্যন্তরে অব্যাহত থাকে তার মাঝের অংশটি সাদা is আমি আরও দেখতে পেলাম যে কয়েকটি প্যাডিং প্রয়োজনীয় যেখানে দুটি প্রাথমিক বা দুটি গৌণ রঙ অন্যথায় শিল্পকর্মগুলি এড়াতে স্পর্শ করবে (উদাহরণস্বরূপ, "এন" এর মাঝের স্ট্রোকে

নিম্নলিখিত থিমটি আমার থিসিস থেকে প্রোগ্রাম দ্বারা উত্পাদিত একটি উদাহরণ:

গ্লাইফগুলির একাধিক চ্যানেল পচে যাওয়া

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

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

এখানে চিত্র বর্ণনা লিখুন


5
দুর্দান্ত প্রথম উত্তর, কম্পিউটার গ্রাফিক্স এসই এ স্বাগতম! :) আপনার থিসিস প্রকাশ্যে পাওয়া যায়? (বা আপনি কাগজ শেষ করার পরে এটি হবে?) যদি তাই হয় তবে এটির সাথে লিঙ্ক করা সম্ভবত খুব সহায়ক হবে।
মার্টিন এন্ডার

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

@ ডেথেরোক দয়া করে নিবন্ধটি সম্পন্ন করার পরে দয়া করে এখানে এবং গেমদেব কিউতে অবহিত করুন। ব্যাখ্যা এখনও আমার জন্য 100% পরিষ্কার নয়। আমি চিত্রগুলি ধাপে ধাপে রচনাটি দেখানোর পরামর্শ দেব।
ইঞ্জিনিয়ার 15

1
আপনার বর্তমান ফলাফলগুলি যদি আপনার ভবিষ্যতের ফলাফলের মতো ভাল না হয় তবে আপনি যা যা পারেন তার বিশদ ভাগ করে নিতে আপনার +1 প্রতিলিপি করতে সক্ষম হতে চাইবে। খুব উত্তেজনাপূর্ণ. আপনি কি রে মার্চিংয়ের জন্য কৌশলটির প্রয়োগ বিবেচনা করেছেন (গোলক ট্রেসিং)? ভলিউম টেক্সচারে বা অনুরূপ ...
অ্যালান ওল্ফ

4
থিসিসটি এখানে সর্বজনীনভাবে উপলভ্য: dspace.cvut.cz/bitstream/handle/10467/62770/…
রোমেন গাই

43

দীর্ঘ অপেক্ষার জন্য দুঃখিত, তবে এটি স্পষ্ট হয়ে গেছে যে আমি যে প্রতিবন্ধটি প্রতিশ্রুতি দিয়েছি তা মূলত সম্পূর্ণ, তবে প্রকাশনা প্রক্রিয়াটি কিছুটা সময় নেবে। সুতরাং, আমি পরিবর্তে আমার নতুন মাল্টি-চ্যানেল দূরত্ব ক্ষেত্র নির্মাণ অ্যালগরিদম, এমএসডিএফজেনের সাথে একটি ওপেন সোর্স প্রোগ্রাম প্রস্তুত করেছি , যা আপনি এখনই চেষ্টা করে দেখতে পারেন।

এটি গিটহাব: https://github.com/Chlumsky/msdfgen এ উপলব্ধ

(আমি এটিতে নতুন, সুতরাং ভান্ডারটিতে কোনও সমস্যা আছে কিনা তা দয়া করে আমাকে জানান))

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

মাল্টি-চ্যানেল দূরত্বের ক্ষেত্র 16x16 একরঙা দূরত্বের ক্ষেত্র 32x32


3

বেশ আকর্ষণীয়! আমি ভালভ স্বাক্ষরিত দূরত্বের কাগজটির লেখক। দুঃখিত যে এটি বাস্তবায়নের বিশদটিতে কিছুটা বিচ্ছিন্ন। আমি কেবল দুটি চ্যানেলের উদাহরণটিকে ভবিষ্যতের কাজ হিসাবে অন্তর্ভুক্ত করেছি - আমার কোনও জেনারেটর নেই। আমি একটি উচ্চ রেজাল্ট এসডিএফ উত্পন্ন করার মতো কিছু আবিষ্কার করেছি এবং তারপরে এসডিএফের গ্রেডিয়েন্টের কোণের উপর ভিত্তি করে সেগমেন্টিং করা যুক্তিসঙ্গত কৌশল হবে। তবে এটি কখনও পেল না। আপনার অ্যাপ্লিকেশনটির প্রয়োজনীয়তা বাড়ানোর অনুপাতের জন্য যে কোনও মাল্টিচ্যানেল স্কিম একই মেমোরির পদক্ষেপের উচ্চতর রেজোল সিঙ্গল চ্যানেল ডেটা ব্যবহার করার বিরুদ্ধে ওজন করতে হবে।


0

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

বিকল্পভাবে, যদি আপনি দ্বিতীয় চ্যানেলটি ব্যবহার করতে আপত্তি না করেন, তবে আপনি অনুভূমিক দূরত্বের জন্য একটি চ্যানেল এবং উল্লম্ব দূরত্বের জন্য অন্য একটি চ্যানেল রাখার চেষ্টা করতে পারেন এবং টেক্সচারটি সংকোচনের জন্য ল্যাপ্লেসান (ডিওএল) শক্তি পিরামিডের একটি পার্থক্য ব্যবহার করতে পারেন যাতে অপ্রয়োজনীয় তথ্য রেকর্ড করা হবে না।

তৃতীয় এবং চূড়ান্ত তাত্ত্বিক সমাধান হ'ল অ্যারে সেট অ্যাড্রেসিংয়ের মাধ্যমে ষড়জাগুলি নমুনাযুক্ত গঠন নিয়ে পরীক্ষা করা।

দুর্ভাগ্যক্রমে, আমার কাছে বর্তমানে আমার ধারণাগুলি পরীক্ষা করার কোনও উপায় নেই এবং আমার ধারণার অনুরূপ কিছু বর্ণনা বা পরীক্ষার জন্য কোনও নথি খুঁজে পেতে সক্ষম হয়েছি। যেখানে আমি আমার তথ্য / ধারণাগুলি শীঘ্রই পেয়েছি সেখানে প্রাসঙ্গিক সমস্ত লিঙ্ক যুক্ত করব।

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