ইউনিটি 3 ডি-তে কোনও পোর্টাল দিয়ে ভ্রমণের সময় কীভাবে দুটি ক্যামেরা মিশ্রণ করবেন


18

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

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

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

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

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


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

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

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

2
আপনি প্রভাবের একটি উদাহরণ ভিডিওতে একটি লিঙ্ক যুক্ত করতে পারেন?
মাইক বাক্সটার

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

উত্তর:


6

সমস্যা বোঝা

আপনি যে সমস্যাটি বর্ণনা করছেন তা আমি দেখতে পেলাম পোর্টাল দ্বারা সংজ্ঞায়িত বিমানটিকে ছেদ করা ক্যামেরার কাছাকাছি বিমানের ফলাফল। এই ছেদটি ঘটে যাওয়ার সময় আপনি দেখতে পাবেন প্রাচীরের পিছনে পোর্টালটি চালু রয়েছে।

এটি খেলোয়াড় যখন কেবল উপরের জল থেকে পানির নীচে স্থানান্তরিত হয় তখন এটি অন্যান্য গেমগুলিতে অভিজ্ঞ সমস্যার মতো । যদি ক্যামেরাটি পানির ঠিক ওপরে থাকে তবে প্লেয়ারদের দৃষ্টিভঙ্গি (এটি অন্ধকার এবং ঝাপসা ও নীল করে দিন) কোনও পোস্ট প্রসেসিং এফেক্ট প্রয়োগ করা হয় না। সুতরাং কাছাকাছি বিমানের নীচের অংশটি কেবল পানির নিচে থাকলে প্লেয়ার পানির নিচে পরিষ্কার দেখতে পাবে can

যদি আমি সঠিক, আপনি প্রজেকশন ম্যাট্রিক্স সংজ্ঞায়িত করার সময় এই বিমানের অবস্থান পরিবর্তন করে এটি নিশ্চিত করতে পারেন। ক্যামেরার উত্স থেকে কাছের বিমানের দূরত্ব যত বাড়বে ততই সমস্যা হওয়া উচিত।

সহজ সমাধান

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

সম্পূর্ণ সমাধান

যদি কেবলমাত্র কাছের বিমানটিকে ক্যামেরার কাছাকাছি রাখলে সন্তুষ্ট না হয় তবে আপনি প্লেয়ার এবং পোর্টাল দৃষ্টিকোণ থেকে দৃশ্যটি রেন্ডার করে উত্পন্ন চিত্রগুলিকে মিশ্রিত করতে একটি "মাস্ক" তৈরি করতে পারেন।

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

মনে রাখবেন যে যদি এই সমস্যাটি দেখা দেয় তবে ক্যামেরা ভিউ হতাশাকে পুরোপুরি পোর্টালের মধ্যে থাকতে হবে তাই ছেদরেখাটি সর্বদা একটি পর্দার প্রান্ত থেকে অন্য পর্দার প্রান্তে পুরোপুরি কেটে যাবে।

এই লিঙ্কটি গণিতগুলির সাথে লাইনটি খুঁজে পেতে সহায়তা করবে। নীচের কোডটি মোটামুটি সঠিক হওয়া উচিত।

ছেদ রেখার রেখাটি রেখা এবং রেখার দিকের বিন্দু ব্যবহার করে সংজ্ঞায়িত করা হয়। চৌরাস্তা দিকের নীচে পোর্টালটির ক্রস পণ্যটি সাধারণ এবং ক্যামেরা দেখার দিকের (বিমানের স্বাভাবিকের কাছাকাছি) ব্যবহার করে গণনা করা হয়। লাইনের একটি বিন্দুটি সরাসরি পোর্টাল বিমানের (পোর্টালের সাধারণ বরাবর) দিকে কাছের বিমানের একটি বিন্দু থেকে একটি কিরণ ফেলে এবং ছেদ বিন্দুটি সন্ধান করে দেওয়া হয়।

Vector3 intersectionDir = Vector3.cross(portalNorm, viewDir);
Ray ray = new Ray(camPos + viewDir * camNearPlaneDist, portalNorm);
Vector3 intersectionPos = ray.intersects(new Plane(portalVert1, portalVert2, portalVert3);

নিশ্চিত করুন যে ভিউডির একটি ইউনিট ভেক্টর। portalVert1, 2 এবং 3 পোর্টাল ডিকাল বা এটিতে থাকা পৃষ্ঠের জন্য ব্যবহৃত 4 টি উল্লম্বের মধ্যে মাত্র 3। বিমানটি সংজ্ঞায়িত করার অন্যান্য উপায় রয়েছে যার উপর পোর্টালটি রয়েছে, তবে আমি ধরে নিলাম এটি সর্বাধিক সহজলভ্য তথ্য।

ছেদটি রেখাটি সংজ্ঞায়িত করার জন্য আপনার কাছে এই দুটি ভেক্টর একবার দেখাতে প্রতিটি গুন করুন এবং তারপরে স্ক্রিন স্পেসে পাওয়ার জন্য প্রজেকশন ম্যাট্রিকগুলি।

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

float d = (pixelX - intersectionPos.X) * intersectionDir.Y - (pixelY - intersectionPos.Y) * intersectionDir.X;

পাশটি দেওয়া হয় যে d কম বা কম 0 এর চেয়ে কম কিনা তা যদি ঠিক হয় তবে আপনি লাইনে রয়েছেন।

গণিতশাস্ত্র উপর অবগতির জন্য উপরে দেখুন এই

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


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

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

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

1
সম্পর্কিত নিবন্ধ: en.wikibooks.org/wiki/OpenGL_Programming/Mini- Portal_Smooth
মিসেল

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

3

প্রস্তাবিত উত্তরগুলি খুব ভাল ছিল, তবে আমি গভীরতার মুখোশ ব্যবহার করে একটি ভিন্ন কৌশলটি ব্যবহার করে শেষ করেছি।

আপনি যা করেন তা এই স্ক্রিপ্ট এবং শেডারটি গ্রহণ করুন, আপনি প্রতিটি দৃশ্যে কোনও চিত্র সরবরাহকারীর সাথে আপনার দৃশ্যে স্ক্রিপ্টটি রেখেছেন এবং রেন্ডার সারিটি 3020 এ সেট করেছেন (এটি পরে সহজ করার জন্য আমি একটি স্ক্রিপ্ট পোস্ট করব)।

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

তারপরে আপনি মূল ক্যামেরাটি নিয়ে যান এবং এটিতে আপনার বিশেষ স্তরটিকে কুলিং মাস্কটি থেকে ছাড়িয়ে নিন (আমি ডিপথমাস্ক স্তরটি চেক না করে) এবং এর গভীরতা 0 তে সেট করে রেখেছি। এখানে চিত্র বর্ণনা লিখুন

তারপরে আপনি যখন ক্যামেরাটির মাধ্যমে টেলিপোর্ট করছেন এবং ক্লোনটি ক্লোন করবেন তখন অন্য ক্যামেরার পরিষ্কার পতাকাগুলি "কেবলমাত্র গভীরতা" এ সেট করুন এবং এটি গভীরতা 1 এ চলে যাবে। এখানে চিত্র বর্ণনা লিখুন

আপনি তখন দুটি ক্যামেরা ভিউয়ের মধ্যে একটি বিরামবিহীন স্ক্রিন মিশ্রিত পাবেন।

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