Ityক্য 2017.2 টাইলম্যাপের আকার সীমা কত?


17

আমি ইউনিটি 2017.2 এর টাইলম্যাপ বৈশিষ্ট্যে ডকুমেন্টেশনগুলি খনন করেছি।

Ityক্য কী কোনও নির্দিষ্ট টাইলম্যাপ জালকে সমর্থন করবে এমন সর্বোচ্চ সংখ্যক টাইলসকে সীমাবদ্ধ করে?

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

এটি কি সঠিক অনুমান, বা ইঞ্জিনে কোনও হার্ড ক্যাপ রয়েছে?


1
ডাউনভোট কেন? এটি একটি বৈধ প্রশ্ন।
ফিলিপ

উত্তর:


25

আপনার র‌্যাম আপনার সীমা

নিম্নলিখিত পরীক্ষাগুলি এই স্পেসগুলি সহ একটি সিস্টেমে করা হয়েছিল:

  • ইন্টেল i5-6600
  • 16 জিবি র‌্যাম
  • এনভিআইডিএ জিফোরস জিটিএক্স 1070
  • উইন্ডোজ 7 হোম প্রিমিয়াম

এখানে আমি চালিত একটি স্ক্রিপ্ট যা একক টাইল (32x32 পিক্সেল) দিয়ে এটি একটি টাইলম্যাপ বাড়ায়। পদ্ধতিটি Grow()বর্তমান মানচিত্রে আরেকটি কলাম এবং অন্য একটি সারি যুক্ত করে। পদ্ধতিটি প্রতিটি আপডেটে 100 বার বলা হয়।

public class TileTest : MonoBehaviour {

    public Tile tile;
    private Tilemap tilemap; 

    public int currentSize;


    void Start () {
       tilemap = GetComponent<Tilemap>;
        Grow();
    }

    void Update() {

        for (var i = 0; i < 100; i++) {
            Grow();
        }
        Debug.Log(currentSize);        
    }

    private void Grow() {
        for (int x = 0; x < currentSize; x++) {
            tilemap.SetTile(new Vector3Int(x, currentSize, 0), tile);
        }
        for (int y = 0; y < currentSize; y++) {
            tilemap.SetTile(new Vector3Int(currentSize, y, 0), tile);
        }
        tilemap.SetTile(new Vector3Int(currentSize, currentSize, 0), tile);

        currentSize++;
    }
}

কয়েক মিনিটের পরে, আমার কম্পিউটারের স্মৃতি শেষ হয়ে গেল এবং .ক্য ক্র্যাশ হয়ে গেছে। এই মুহুর্তে এটি ছিল ৮০০০০x৮০০ (million০ মিলিয়ন) টাইল এবং ইউনিটি ডটকম টাস্ক ম্যানেজারের মতে 11 গিগাবাইটের উপরে র‌্যাম গ্রহণ করছিল।

ঠিক আছে, তবে বিরল সম্পর্কে কি মানচিত্রের কী হবে?

এখানে একটি আলাদা স্ক্রিপ্ট যা 100 টাইলের ইনক্রিমেন্টে ক্রমবর্ধমান x এবং y স্থানাঙ্কের জন্য একটি একক টাইল স্থাপন করেছে:

public class TileTest : MonoBehaviour {

    public Tile tile;
    private Tilemap tilemap; 
    public int currentSize;


    void Start () {
        tilemap = GetComponent<Tilemap>();
    }

    void Update() {
        tilemap.SetTile(new Vector3Int(currentSize, currentSize, 0), tile);
        currentSize+= 100;
    }    
}

ইউনিটি ডটকমের মেমরির পদচিহ্নগুলি খুব সামান্য বেড়েছে, যা খালি টাইলসেট কোষগুলির প্রায় কোনও র্যামের প্রয়োজন নেই বলে ইঙ্গিত দেয়। তবে, টাইলসেট বাড়ার সাথে সাথে এফপিএস হ্রাস পেতে থাকে। এটি 30000x30000 এ 60 Fps, 60000x60000 এ 30 Fps এবং 90000x90000 এ 15 Fps হিট করেছে। টেপ-গেমটি চলাকালীন আমি স্ক্রিপ্টটি সরিয়ে ফেললে এফপিএস কম ছিল। সুতরাং এই মন্দাটি টাইলম্যাপ পরিবর্তন করে নয়। এটি কেবল রেন্ডারিং থেকেই হয়েছিল। সুতরাং আপনি যখন একটি সত্যই বিশাল ওপেন ওয়ার্ল্ড গেম তৈরি করতে চান তখন আপনাকে রানটাইমের সময় তৈরি এবং ধ্বংস করার জন্য একাধিক ছোট টাইলম্যাপ ব্যবহার করতে হতে পারে।

উপসংহার: বিশাল তবে বেশিরভাগ খালি টাইলম্যাপগুলি খুব বেশি র‍্যাম ব্যবহার করে না, তবে এগুলির বেশিরভাগ ক্যামেরা ভিউপোর্টে না থাকলেও এগুলি একটি রেন্ডারিং বাধা

আমি তখন এই স্ক্রিপ্টটি পরীক্ষা করেছিলাম যা প্রদত্ত আকারের সাথে টাইলম্যাপ তৈরি করে:

public class TileTest : MonoBehaviour {

    public Tile tile;
    public int xSize;
    public int ySize;

    void Start () {
        Tilemap tilemap = GetComponent<Tilemap>();

        for (int x = 0; x < xSize; x++) {
            for (int y = 0; y < ySize; y++) {
                tilemap.SetTile(new Vector3Int(x, y, 0), tile);
            }
        }
    } 
}

আমি এই স্ক্রিপ্টটি একটি 8192x8192 মানচিত্র তৈরি করতে ব্যবহার করেছি। এটি কয়েক মিনিট সময় নিয়েছে, তবে স্ক্রিপ্টটি শেষ হলে এটি স্থির হয় 95 Fps এ।

উপসংহার: কয়েক মিলিয়ন টাইলস সহ মানচিত্রগুলি বোধগম্য, কমপক্ষে গেমিং পিসিতে


5
এটি আমি সবচেয়ে দীর্ঘ সময়ে দেখেছি সবচেয়ে সুন্দর উত্তর। "খুঁজে বের কর!" হাতুতে স্ক্রিপ্ট লিখেছে সিস্টেমটি চালায় স্ক্রিপ্ট কম্পিউটার ধূমপান শুরু করে "দেখে মনে হচ্ছে এটি আপনাকে সীমাবদ্ধ করে না!" ধন্যবাদ @ ফিলিপ!
স্টিফান

8192 ^ 2 পরীক্ষার প্রজন্মের সময় ফ্রেমরেট কী ছিল? আমি উত্সাহী যে প্রজন্মের প্রচেষ্টাগুলি সিস্টেমটিকে কতটা ভেঙে দিয়েছে।
স্টিফান

1
@ স্টেফান জিরো এফপিএস আমি যেমন বলেছি, প্রজন্মটি কয়েক মিনিট সময় নেয়। এবং এই স্ক্রিপ্টটি Updateপ্রজন্মের সময়কালে এটি ছেড়ে যায় না, কারণ প্রজন্মের সমাপ্ত হওয়া অবধি গেম এবং ইউনিটির সম্পাদক হিমশীতল। আপনি যদি মানচিত্রের প্রজন্মের সময় আপনার গেমটি প্রতিক্রিয়াশীল করতে চান তবে প্রজন্মকে এমন একটি কর্টিনে নিয়ে যান যা একবারে একটি অংশ তৈরি করে এবং এর মধ্যে ফলন দেয়।
ফিলিপ

@ স্টেফান এবং যাইহোক, একবারে সমস্ত টাইলস সেট করতে সেটটাইলব্লক ব্যবহার করা আরও দ্রুত হতে পারে । তবে পরীক্ষার মানচিত্রটি দ্রুত তৈরি করা এখানে আমার লক্ষ্য ছিল না।
ফিলিপ

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