পার্লিন কৃমি সহ গুহা প্রজন্ম


12

আমি বর্তমানে 3 ডি সিম্প্লেক্স নয়েজ সহ ভক্সেল ভূখণ্ডের মতো একটি মাইনক্রাফ্ট তৈরি করার চেষ্টা করছি এবং গুহাগুলি বাস্তবায়ন করতে চাই।

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

সম্পাদনা: এটি এমন সমস্যা যা আমি কীভাবে সমাধান করতে জানি না।

সম্পাদনা 2: এটি 2 ডি রাইডড মাল্টিফ্র্যাক্টাল নয়েজকে সিম্প্লেক্স নয়েজ হাইটম্যাপের সাথে একত্রিত করার ফলাফল। এখনও কিছু টুইট করার দরকার, তবে এটি আমার চেয়ে অনেক বেশি ফলাফল pretty বাইট 56 ধন্যবাদ।


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

1
মূলত, এটি আমার প্রশ্ন। মূল ভূখণ্ডটি দেওয়া স্থানাঙ্কগুলি দিয়ে গণনা করা সহজ, তবে গুহা আছে কিনা তাও আমি গণনা করতে জানি না।
ব্যবহারকারী 1000 ব্যবহারকারীর

উত্তর:


5

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

for(int i = 0; i < CHUNKMAX_X; i++)
    for(int j = 0; j < CHUNKMAX_Y; j++)
        for(int k = 0; k < CHUNKMAX_Z; k++)
            if(isSolid(perlinNoise.get(chunkPosition.x + i,
                                         chunkPosition.y + j,
                                         chunkPosition.z + k))
                thisChunk[i,j,k] = new Voxel(solid);
            else
                thisChunk[i,j,k] = new Voxel(air);

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

perlinNoise.getএকটি বৈশ্বিক অবস্থান নেয় এবং তার ঘনত্ব ফেরত দেয়। isSolidভক্সেল শক্তির পক্ষে যোগ্যতার জন্য "যথেষ্ট ঘন" কিনা তা দেখার জন্য যেখানে কেবল একটি সহজ পরীক্ষা হবে।

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

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


2
উত্তর করার জন্য ধন্যবাদ. তবে কীভাবে পোকার মতো গুহা তৈরি করতে আমি কীভাবে "নিয়মিত" পার্লিন বা সিম্প্লেক্স নয়েজ ব্যবহার করব তা আমি জানি না। এগুলি হয় গোলাকার, এক দিক থেকে ছোট বা খুব দীর্ঘ নয়। এবং পার্লিন ওয়ার্মস অ্যালগরিদমের জন্য, আমি জানি না যে কীভাবে বর্তমান অবস্থান কোনও পোকার ভিতরে রয়েছে কিনা তা নির্ধারণ করতে হবে, মাথার অবস্থানটি না জেনে।
ব্যবহারকারীর 1000 ব্যবহারকারীর

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

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

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

যে ইঙ্গিত জন্য ধন্যবাদ। আমি থ্রিডি রাইডড মাল্টিফ্র্যাক্টাল শোরগোল প্রয়োগ করেছি, যদিও এর ফলাফলটি বরং বরং সন্তুষ্টির মতো। আমি এটি 2D তে 2D হাইটম্যাপের সাথে একত্রিত করার চেষ্টা করব এবং তারপরে আবার প্রতিবেদন করব। এটি আরও কীটের মতো গুহা তৈরি করতে পারে।
ব্যবহারকারী000 ব্যবহারকারীর

3

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

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