আমি কীভাবে মাইনক্রাফ্টের মতো গভীরতার সাথে জলকে আরও গাer় করে তুলতে পারি?


24

মাইনক্রাফ্টে আপনি যখন গভীরতর জলের দিকে তাকাবেন তখন যত গভীর হয়। কেউ কি এমন কিছু কোড করতে জানেন?

প্রভাব সঙ্গে মাইনক্রাফ্ট প্রভাব সঙ্গে মাইনক্রাফ্ট

প্রভাব ছাড়া একই খেলা প্রভাব ছাড়া একই খেলা


18
জল কিউবের উপাদানগুলি অর্ধ-স্বচ্ছ হওয়ার কারণে এটি স্বয়ংক্রিয়ভাবে করা হয় না?
pek

আমি তাই মনে করি না. তুলনার জন্য আমি প্রভাব ছাড়াই একটি ছবি যুক্ত করেছি।
জাভিয়ের

2
এটি কেবলমাত্র জলের ঘনক্ষেত্রের উপরে প্রয়োগ করা একটি মিশ্রণ মিশ্রণ প্রভাব? আবার, এটি সহজ হওয়া উচিত কারণ উপাদানটি অর্ধ-স্বচ্ছ।
pek

1
আপনি গভীরতা অনুযায়ী বাক্সের রঙও পরিবর্তন করতে পারেন।
Ali1S232

উত্তর:


51

গভীরতার ভিত্তিতে আলোকসজ্জার জলের জন্য দুটি পৃথক পদ্ধতি রয়েছে:

ভক্সেল-আলোর

মাইনক্রাফ্ট ভক্সেল-ভিত্তিক আলো ব্যবহার করে, যা সংলগ্ন কিউবগুলিতে আলোক প্রচার করে কাজ করে, ব্লকের ধরণের উপর নির্ভর করে উজ্জ্বলতা হ্রাস করে। অন্ধকার মহাসাগরগুলি এই সিস্টেমের একটি পার্শ্ব প্রতিক্রিয়া।

জল সূর্যের আলোকে ব্লক করে এবং প্রতি ব্লকটিতে 3 স্তরের আলোকে হ্রাস করে (ডিফল্ট 1 স্তরের পরিবর্তে), যার অর্থ পৃষ্ঠ থেকে প্রতিটি দূরত্বের জন্য একটি মহাসাগরের উজ্জ্বলতা:

0 (surface): 15 (direct sunlight)
1:           12
2:            9
3:            6
4:            3
5 and below:  0 (darkness)

সূত্র: মাইনক্রাফ্ট উইকি - হালকা

দূরত্ব ভিত্তিক ছায়া গো

একটি traditionalতিহ্যবাহী আলোর মডেল সহ গেমগুলিতে, আলোর উত্স এবং সমুদ্রের তলের মধ্যে থাকা পানির পরিমাণ পরিমাপ করে এই প্রভাব তৈরি করা যেতে পারে। এই দূরত্বের ভিত্তিতে আলোটি বিবর্ণ হয়। এটি করার কয়েকটি পদ্ধতি রয়েছে:

প্রত্যক্ষ গণনা

যদি আপনার সমতল পৃষ্ঠ থাকে তবে আপনি জলের দেহ থেকে এই পৃষ্ঠের স্বাভাবিক \ গ্রাম শক্তি সমিতির {এন}বিন্দু এবং গুলিজ্যামিতির শেডারে কোনও পৃষ্ঠের অবস্থানকে স্বাভাবিকভাবে দূরে সরিয়ে ফেললে আপনি সহজেই জলের মধ্যে আলোকের দূরত্বের দূরত্ব গণনা করতে পারেন ।

কার্যকর জল দূরত্ব হয়

\ সর্বাধিক (\ বাম (গুলি - c ভিসি {n} \ সিডট \ ভেক {পি} \ ডান), 0) \ সিডট \ বাম (1 + \ টান (pha আলফা) \ ডান)

\ গ্রাম শক্তি সমিতির {P}ভার্টেক্সের অবস্থান কোথায় এবং আরম্ভএটি পৃষ্ঠের নীচে আলোর দিক এবং জলের পৃষ্ঠের পৃষ্ঠের নীচের অংশের কোণ is

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

আপনি যদি জলের সমান্তরাল কোনও পৃষ্ঠের উপর একটি হাইটম্যাপ ব্যবহার করেন তবে \ বাম (গুলি - c ভিসি {n} d সিডট \ ভেক {পি} \ ডান)হয়ে যায় \ বাম (গুলি - h \ ডান)। সূর্য জলের পৃষ্ঠের উপরে সরাসরি থাকলে ডান ফ্যাক্টর 1 সমান।
একটি পয়েন্ট আলো দিয়ে, আপনাকে আরম্ভআলোর উত্সের তুলনামূলক অবস্থানের উপর ভিত্তি করে প্রতিটি ভার্টেক্সের জন্য গণনা করতে হবে।

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

পেশাদাররা:

  • দ্রুত এবং নির্ভুল

কনস:

  • কেবলমাত্র সমতল জলের পৃষ্ঠের জন্য বা সরাসরি উপরে থেকে কেবল আলোতে কাজ করে, কারণ কেবলমাত্র একটি পৃষ্ঠকে সাধারণত বিবেচনায় নেওয়া হয়। (কোনও রুক্ষ পৃষ্ঠ এবং কাত হওয়া আলোর সংমিশ্রণ কিছুটা দীর্ঘমেয়াদী ম্যাপিংয়ের সাথে কাজ করতে পারে))
  • কোন কস্টিকস নেই

শ্যাডো ম্যাপিং

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

যদি পৃষ্ঠটি তুলনামূলকভাবে সমতল হয় তবে ভাল ফলাফলের জন্য আপনার একটি রিফ্র্যাক্ট হালকা উত্স ব্যবহার করা উচিত।

পেশাদাররা:

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

কনস:

  • প্রত্যক্ষ গণনার চেয়ে ধীর।
  • গভীরতার মানচিত্রের জন্য অতিরিক্ত ভিআরএএম প্রয়োজন।
  • 100% নির্ভুল নয়।

* আপনি নিচের দিকে আলোর পিওভির গভীরতা গণনা করে নিকটতম শক্ত পৃষ্ঠের সামনে পানির পরিমাণ নির্ধারণ করতে পারেন:

  1. আপনার দৃশ্যে দৃ ge় জ্যামিতিটিকে স্বাভাবিক হিসাবে রেন্ডার করুন। প্রতিটি খণ্ডের জন্য, আপনি ফলাফল টেক্সচারে গভীরতার মান যুক্ত করুন।
  2. গভীরতার বাফার আপডেট না করে পানির সামনের মুখগুলি রেন্ডার করুন এবং ফল থেকে টুকরো টুকরো টুকরো টুকরো করুন।
  3. একইভাবে পিছনের মুখগুলি রেন্ডার করুন, তবে ফলাফলটিতে টুকরো টুকরো গভীরতা যুক্ত করুন।

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

সত্যজিৎ-ট্রেসিং

রে ট্রেসিং এখন পর্যন্ত সবচেয়ে সঠিক তবে স্বচ্ছ ভলিউম সরবরাহের জন্য সবচেয়ে ব্যয়বহুল সমাধান। এটি করার দুটি উপায় রয়েছে: 1. সমুদ্রের তল থেকে পৃষ্ঠের দিকে ট্র্যাকিং এবং 2. জলের দিকে আলোর উত্স থেকে ট্র্যাকিং T উজ্জ্বলতা গণনা করতে মেঝেতে প্রতিটি পয়েন্টের জন্য একাধিক রশ্মির প্রয়োজন।

পেশাদাররা:

  • প্রতিটি জ্যামিতির সাথে সঠিকভাবে কাজ করে।
  • সঠিক কস্টিকস!

কনস:

  • স্লো!

অতিরিক্ত প্রভাব

জল রেন্ডার করার সময় আরও কয়েকটি বিষয় ધ્યાનમાં নিতে হবে:

কুয়াশা

পর্যবেক্ষক ভ্রমণের সময় জলে হালকা আবার ছড়িয়ে ছিটিয়ে থাকে তাই আপনার এটি একটি শক্ত রঙের দিকে মিশ্রিত করা উচিত।

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

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

কুয়াশার রঙ প্রতিটি পিক্সেলের ভিউ দিকের উপরও নির্ভর করে, সুতরাং উভয় ক্ষেত্রে নিচের দিকে তাকালে এটি কিছুটা গাer় হয়।

ফেকিং কাস্টিকস

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

আর একটি সম্ভাবনা হ'ল আলোর সমন্বয় ব্যবস্থাতে পৃষ্ঠের অবস্থানের ভিত্তিতে আলোক ঘনত্ব গণনা করা, যদিও সম্ভবত এটির জন্য কিছু কার্য সম্পাদন করতে হবে।

কস্টিকগুলি ক্রমবর্ধমান গভীরতার সাথে ছড়িয়ে পড়া আলোর চেয়ে দ্রুত ম্লান হওয়া উচিত।

রঙ গ্রেডিয়েন্ট

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

ঘটনার অ্যাঙ্গেল

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


6

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

যদি এইভাবে করা হয় তবে জলের প্রতিটি স্তরটি তার নীচের স্তরটিকে সংশ্লেষে ছায়া দেয়, সুতরাং প্রতিটি ক্রমান্বয়ে গা dark় হয়। গাছের পাতাগুলি এর মতো ছায়া সরবরাহ করে তবে এটি সংখ্যক নয়। আপনি গাছের নীচে একই ছায়া পান এটি 1 বা 100 পাতায় ঘনক্ষেত্র কিনা।

একটি পদ্ধতি যা এই পদ্ধতিটি ব্যবহার করা হচ্ছে তা হ'ল দর্শকের থেকে আরও দূরে সরে গেলে জল গা dark় হয় না - কেবল আপনি নীচে নামার সাথেই। হ্যাঁ, কুয়াশার প্রভাবটি দূরত্বে লাঞ্ছিত করে, তবে জলের অন্ধকারের প্রভাব নয়।

সুতরাং আলোক গণনার মূল সূত্রটি সিউডো কোডে এরকম কিছু হবে ...

light_on_cube = 1.0
for each cube above target cube, from lowest to highest {
   if cube being examined is tree foliage
      light_on_cube = 0.5
   else if cube being examined is water
      light_on_cube = light_on_cube - 0.1
   else if cube being examined is solid 
      light_on_cube = 0
}

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

  1. প্রতিটি কিউবের জন্য সরাসরি উপরে (সিউডো-কোডের মাধ্যমে) উপর থেকে সূর্যের থেকে আলোর গণনা করুন।
  2. যদি ঘনক্ষেত্রের পাশে কোনও আলোর উত্স থাকে তবে এটি সম্পূর্ণরূপে আলোকিত বিবেচনা করুন (1.0)
  3. যদি কোনও ঘনক্ষন সরাসরি উপরে থেকে কোনও সূর্য না পেয়ে থাকে তবে এটি পুরোপুরি আলোকিত কিউব থেকে কত দূরে রয়েছে তার উপর ভিত্তি করে কিছু আলোক দিন। কাছাকাছি অর্থ আরও হালকা, আরও দূরের অর্থ কম (শূন্য পর্যন্ত)।

এখানে ধারণাটি হ'ল যদি কোনও ঘনকটি সূর্যের আলো বা মশাল দ্বারা প্রজ্বলিত হয়, তার পাশের ঘনক্ষেতটিও কোনও উপায়ে আলোকিত হতে চলেছে। আর আপনি সেই আলোকিত কিউব থেকে আরও দূরে, সেখানে কম আলো থাকবে light বিচ্ছুরিত আলো নির্ণয়ের জন্য এটি একটি ধরণের কলডেজ উপায় তবে আমি মনে করি (?) এটি কার্যকর হবে।


1
হ্যাঁ, আমি নিশ্চিত যে টিকিটটি। আমি আমার গেমের মতো কিছু করেছি।
MichaelHouse

উপায় দ্বারা আমি সবেমাত্র আপনার ব্লগটি আমার গুগল রিডার তালিকায় বাইট 56 - বিকাশকারী ব্লগ এফটিডব্লুতে যুক্ত করেছি!
টিম হল্ট

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

3

সম্ভবত আমি প্রশ্নটি ভুল বোঝাবুঝি করছি তবে আপনি কেন কেবল তাদের ব্লকের গভীরতার উপর নির্ভর করে রঙ পরিবর্তন করতে পারবেন না?

আপনার যদি গভীরতা ডি থাকে (ব্লকগুলিতে, 0 থেকে শুরু হয়) তবে উজ্জ্বলতার জন্য যুক্তিসঙ্গত সমীকরণটি হ'ল:

এল = (1- মি ) - কেডি + মি

কোড: L = (1.0 - m) * exp(-k * d) + m;

কে কতটা অন্ধকার হয়ে যায় তা নিয়ন্ত্রণ করে (উচ্চতর = দ্রুত)। একটি যুক্তিসঙ্গত মান হবে 0.5।
মি আপনি ন্যূনতম উজ্জ্বলতা চান।
এল 0 থেকে 1 পর্যন্ত পরিবর্তিত হয়।

আপনি যে কোনও গ্রাফিক্স এপিআই ব্যবহার করছেন সেগুলিতে কীভাবে ব্লকের রঙ পরিবর্তন করবেন তা আপনি যদি জানেন না তবে দয়া করে আলাদা প্রশ্ন হিসাবে জিজ্ঞাসা করুন (আপনি কোন এপিআই ব্যবহার করছেন এবং আপনি ছায়ার ব্যবহার করছেন কিনা তা উল্লেখ করে)।


আমি কেবল এটি করার কথা ভাবি নি। কৌতূহলের বাইরে আপনি এই সমীকরণটি কোথায় পেলেন?
জাভিয়ের

1
@ জাভিয়ার: আমি সবেমাত্র এটি তৈরি করেছি। e^-kdবিট শুধু একটি সূচকীয় ক্ষয়, যা ধীরে ধীরে কিছু মান (গভীরতা) উপর শূন্য দিকে ঝোঁক একটি আদর্শ ফাংশন যা। এর দ্বারা গুণন (1-m)এবং সংযোজন mকেবল ক্ষয়কে স্কেল এবং অফসেট করতে হবে যাতে এটি সর্বনিম্নে শেষ হয় mতবে এখনও শুরু হয় 1en.wikedia.org/wiki/Exonason_decay
পিটার আলেকজান্ডার

কথাটি হল, গভীর বর্ণের ব্লকগুলি কেবল তখনই দেখা যাবে যদি ব্লকগুলিতে আলফা রঙ থাকে; যে ক্ষেত্রে ব্লকের রঙ পরিবর্তন করার প্রয়োজন নেই, আলফা প্রভাবটি স্বয়ংক্রিয়ভাবে তৈরি করবে।
জোনাথন কনেল

@ জোনাথন: আপনি জলের ব্লকগুলি রেন্ডার করবেন না, আপনি রঙিন গাening় করে সমুদ্রের বিছানায় ব্লকগুলি রেন্ডার করুন এবং তারপরে কেবলমাত্র জলের পৃষ্ঠের উপর একটি একক আলফা স্তর থাকবে।
পিটার আলেকজান্ডার

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