যখন কোনও বস্তু পৃষ্ঠের কাছাকাছি থাকে তখন আমি কীভাবে এমন শেডার লিখব যা আলোকিত হয়?


15

ইন এই Overwatch গেমপ্লের ভিডিও , চরিত্র এর ঢাল ক্ষেত্র থাকে যেগুলো অন্যান্য বস্তু 'জ্যামিতি কাছাকাছি সাদা লাইট।

রেইনহার্টের ঝালটি কিছু স্তরের জ্যামিতি ক্লিপ করছে

মেঝে, দেয়াল এবং স্তম্ভের নিকটে, নীল shাল নেভিগেশন সাদা প্রান্তটি নোট করুন।

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


2
আপনি যদি ityক্য ব্যবহার করছেন তবে এই আলোচনাটি আগ্রহী হতে পারে । ২
In

উত্তরটি ইতিমধ্যে নীচে covered
েকে দেওয়া

উত্তর:


28

একটি সাধারণ রূপরেখা:

  1. Scene াল ছাড়াই আপনার দৃশ্যের গভীরতার মানচিত্র তৈরি করুন । আপনি এটি কার্যকরভাবে নিখরচায় পেতে পারেন, যেহেতু স্বচ্ছ জিনিসগুলি প্রায়শই পরে পাসে রেন্ডার করা হয়। অন্যথায়, আপনি দৃশ্যের সাথে রেন্ডার করে গভীরতার মানচিত্র তৈরি করতে পারেন একটি গভীরতার শেডার সহ কোনও আরটিটি- তে শান শাল্ড

  2. আপনার দৃশ্যটি সাধারণত রেন্ডার করুন, গভীরতার মানচিত্রটি আপনার ieldাল শেডারকে দিন।

  3. শ্যাডারে, ঝাল ফ্রেমের খণ্ডের গভীরতা থেকে দৃশ্যের গভীরতার পার্থক্যটি গণনা করুন এবং খণ্ডের রঙটি পরিবর্তন করতে এই পার্থক্যটি ব্যবহার করুন।

ডেমো

আমি এটির একটি সাধারণ ওয়েবজিএল ডেমো লিখেছিলাম।

ডেমো এর স্ক্রিনশট

লাইনে লাইন

আসুন খণ্ড খণ্ড শেডার কোডটি বিশদে বিস্তারিতভাবে চলুন:

float solidsDepth = texture2D(depthMap, gl_FragCoord.xy / dims).r;

প্রতিটি খণ্ডে গভীরতার মানচিত্রের নমুনা করুন। আপনার খণ্ডকে স্ক্রিনের স্থান [0, প্রস্থ / উচ্চতা] থেকে স্বাভাবিকীকরণ [0.0, 1.0] স্থানাঙ্কে রূপান্তর করতে আপনার ভিউপোর্টের মাত্রাগুলি দ্বারা বিভাজন মনে রাখবেন। এই মুহুর্তে, আপনি যদি নমুনা গভীরতার মানচিত্রের পিক্সেলটিতে কেবল খণ্ডের রঙ সেট করেন তবে এটি দেখতে এই রকম হবে:

গভীরতার মানচিত্রের স্ক্রিনশট

গভীরতার মানচিত্রটি গ্রেস্কেল, যাতে আপনি যে কোনও চ্যানেল থেকে মান পেতে পারেন (আমি rএখানে ব্যবহার করেছি )।

float solidsDiff = 1.0 - smoothstep(
    zNear,
    zFar,
    gl_FragCoord.z / gl_FragCoord.w
  ) - solidsDepth;

এরপরে দৃশ্যের গভীরতা এবং ঝাল খণ্ডের গভীরতার মধ্যে পার্থক্য খুঁজে পাওয়ার জন্য আপনি সেই গভীরতার নমুনাটি ব্যবহার করতে পারেন। [ZNear, zFar] (আপনার ক্যামেরার কাছাকাছি এবং দূরবর্তী বিমান) থেকে [0.0, 1.0] এ নেওয়ার জন্য আপনার গভীরতাও স্বাভাবিক করার কথা মনে রাখবেন। smoothstepএই সুন্দরভাবে না। 1.0 -মান যেমন যে invert হয় solidsDiffএবং 0.0 সর্বনিম্ন (0.0) এ - হয় 1.0 যখন পার্থক্য সর্বোচ্চ (zNear zFar) হয়।

নোট করুন যে আমি ধরে নিয়েছি solidsDepthযে গভীরতা মানচিত্র তৈরি করেছে গভীরতা শেডারে ইতিমধ্যে স্বাভাবিক করা হয়েছিল।

float alpha = 0.3 + max(0.0, 1.0 - log(100.0 * (solidsDiff - 0.005) + 1.0));

তারপরে আপনি গভীরতার পার্থক্যের উপর নির্ভর করে আপনার ঝালটির আলফা চ্যানেলটি সংশোধন করতে পারেন। এখানে আমরা একটি সর্বনিম্ন আলফা থেকে শুরু করব 0.3, তারপরে পার্থক্যের কাছাকাছি থাকায় আলফায় একটি দুর্দান্ত তীক্ষ্ণ বৃদ্ধি তৈরি করুন 0.0

- 0.005অফসেট শুধু একটি সাদা মার্জিন "ছেদ" ঘন করতে যোগ করা হয়েছে। এটি পরিবর্তন করার চেষ্টা করুন!

gl_FragColor = vec4(vec3(1.0), alpha);

এবং অবশেষে, সেই আলফাটিকে আপনার খণ্ডের রঙে প্রয়োগ করুন।


উন্নতি

আপনি একটি বাঁকানো ieldাল তৈরি করতে পারেন, "এনার্জি শিল্ড" চেহারা (ডেমো) এর জন্য প্লাজমা যুক্ত করতে পারেন বা কেবল ছেদগুলি (ডেমো) দেখিয়ে প্রভাবগুলি অন্বেষণ করতে পারেন ।

আকাশ আপনার গ্রাফিক্স কার্ডের সীমা!


উহু. আমার. ভাল খবর. দুর্দান্ত টিউটোরিয়াল জন্য Ty।
ব্লু বাগ

5

এটি কেবল গভীরতার মানচিত্রটি ব্যবহার করছে। এটি বিশ্বকে রেন্ডার করে তারপরে ঝালটি রেন্ডার করে এবং reালটির রেন্ডারড জেড মান এবং গভীরতার বাফার জেড মানের মধ্যে একটি পিক্সেল আরও সাদা রঙিন করতে পার্থক্য নেয়।


3

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

এবং অবশ্যই অনলাইনে এমন উপাদান রয়েছে যা আপনার পক্ষে সহায়ক হতে পারে। Discussionক্য সম্পর্কিত এই আলোচনাটি দেখুন: http://www.superspacetrooper.com/2012/06/tutorial-force-field-weapon-impact-energy-dispersion/ এবং এই প্রশ্নটি UE4- সম্পর্কিত: https: //answers.unrealengine । কম / প্রশ্ন / 74858 / ডাইনামিক-forcefield-shader.html । সম্পূর্ণ শ্যাডারের উদাহরণ হিসাবে, রেডডিতে সাম্প্রতিক বিতর্ক থেকে, এই ঝাল প্রভাবটি বাস্তবায়ন করে আপনি দেখতে পারেন: https://www.reddit.com/r/Unity3D/comments/3edi0n/does_any_one_knows_how_to_make_this_shield_effect/ এবং টিউটোরিয়ালটির জন্য যা নেই ঠিক তেমন তবে এটি আগ্রহের জন্য যথেষ্ট সম্পর্কিত: http://www.nightbox-studios.com/2015/09/05/assets-shield-effect-scriptts-for-texture3d-perlin-noise-shader/

এছাড়াও, এই খুব সাইটে আগে করা 3 সম্পর্কিত প্রশ্নের লিঙ্কগুলি এখানে দেওয়া হয়েছে, যা আপনি অর্জন করতে চান তার পিছনে ধারণাগুলি উপলব্ধি করতে খুব সম্ভবত সাহায্য করবে:

স্পেসশিপ ঝাল শিখা

গেমটিতে স্টারওয়ার এনার্জি শিল্ড কীভাবে প্রয়োগ করা যায়

প্রিমিটিভ গোলক সমস্যার সাথে XNA ঝাল প্রভাব

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

আশা করি এটা সাহায্য করবে.


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

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

@ আঙ্কো শিওর, আমার খারাপ। আমি সাধারণত একটি ব্যাখ্যা এবং লিঙ্কের সংগ্রহ অন্তর্ভুক্ত করি তবে আপনি এখন ঠিক বলেছেন, আসল ব্যাখ্যাটি অনুপস্থিত ছিল। আমি সম্ভবত উত্তরটি মুছে ফেলব, তবে।
গে

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