ডেটা-চালিত অ্যানিমেশন স্থিতি


14

সম্পাদনা: আমার প্রশ্নটি ঠিক কী তা স্পষ্ট করে বলার জন্য: বিষয়বস্তু তৈরি / পরিচালনার উপর নজর রেখে কোনও গেম ইঞ্জিনে অ্যানিমেশন / অ্যানিমেশন স্টেটটি হ্যান্ডেল করার কি এটি ভাল উপায়? এইভাবে এটি করার ত্রুটিগুলি কী কী এবং এটি করার বিকল্প উপায় কী হবে? - যদিও আমার উত্তরটি মন্তব্যে আংশিকভাবে উত্তর পেয়েছে, মনে হচ্ছে এটি যাওয়ার উপায়।

আমি 2 ডি গেম ইঞ্জিন শখের প্রকল্পে অ্যানিমেশনগুলিকে হার্ড-কোডিং না করে হ্যান্ডেল করার চেষ্টা করছি । হার্ড কোডিং অ্যানিমেশন রাজ্যগুলি আমার কাছে একটি সাধারণ তবে খুব অদ্ভুত ঘটনা বলে মনে হচ্ছে।

একটি সামান্য ব্যাকগ্রাউন্ড: আমি এমন একটি সত্তা সিস্টেমের সাথে কাজ করছি যেখানে উপাদানগুলি ডেটাগুলির ব্যাগ এবং সেগুলি তাদের উপর কাজ করে subs অ্যানিমেশন স্টেটগুলি আপডেট করার জন্য আমি একটি পোলিং সিস্টেম ব্যবহার করা পছন্দ করেছি।

অ্যানিমেশনটির সাথে আমার অর্থ: "হাঁটা_ বাম", "চলমান_ বাম", "চলার_সামান্য", "শুটিং", ...

অ্যানিমেশনগুলি পরিচালনা করার জন্য আমার ধারণাটি এটিকে ডেটাচালিত মডেল হিসাবে ডিজাইন করা হয়েছিল । ডেটা একটি এক্সএমএল ফাইলে, একটি আরডিবিএম, সংরক্ষণ করা যেতে পারে ... এবং কোনও গেম / স্তর / এর শুরুতে লোড করা যেতে পারে ... ... আপনি যে কোনও জায়গায় কোড পরিবর্তন না করে সহজেই অ্যানিমেশন এবং ট্রানজিশনগুলি সম্পাদনা করতে পারবেন your গেম।

উদাহরণ হিসাবে আমি আমার মনে থাকা ডেটা সংজ্ঞাগুলির একটি এক্সএমএল খসড়া তৈরি করেছি।

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

<animation id='WIZARD_WALK_LEFT'>
    <image id='WIZARD_WALKING' />
    <fps>50</fps>
    <replay>true</replay>
    <frames>
        <rectangle>
            <x>0</x>
            <y>0</y>
            <width>45</width>
            <height>45</height>
        </rectangle>
        <rectangle>
            <x>45</x>
            <y>0</y>
            <width>45</width>
            <height>45</height>
        </rectangle>
    </frames>
</animation>

অ্যানিমেশন ডেটা লোড করা হবে এবং একটি অ্যানিমেশন রিসোর্স পুলে অনুষ্ঠিত হবে এবং এটি ব্যবহার করছে এমন গেম সংস্থাগুলি দ্বারা রেফারেন্স করা হবে। এটি একটি চিত্র, শব্দ, একটি জমিন, এর মতো সংস্থান হিসাবে বিবেচিত হবে ...

সংজ্ঞায়িত করার জন্য দ্বিতীয় অংশের ডেটা হ'ল অ্যানিমেশন রাজ্যগুলি এবং ট্রানজিশনগুলি পরিচালনা করতে একটি রাষ্ট্রীয় মেশিন । এটি প্রতিটি রাজ্যকে একটি গেম সত্তা থাকতে পারে তা সংজ্ঞায়িত করে, যা বলে যে এটি রূপান্তর করতে পারে এবং কীভাবে এই রাষ্ট্রের পরিবর্তনের সূত্রপাত হয়।

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

<state id='IDLE'>
  <event trigger='LEFT_DOWN' goto='MOVING_LEFT' />
  <event trigger='RIGHT_DOWN' goto='MOVING_RIGHT' />
</state>
<state id='MOVING_LEFT'>
  <event trigger='LEFT_UP' goto='IDLE' />
  <event trigger='RIGHT_DOWN' goto='MOVING_RIGHT' />
</state>
<state id='MOVING_RIGHT'>
  <event trigger='RIGHT_UP' goto='IDLE' />
  <event trigger='LEFT_DOWN' goto='MOVING_LEFT' />
</state>

এই রাজ্যগুলি একটি পোলিং সিস্টেম দ্বারা পরিচালিত হতে পারে । প্রতিটি গেম এটি টিক করে এটি একটি গেম সত্তার বর্তমান অবস্থা ধরে এবং সমস্ত ট্রিগার পরীক্ষা করে। কোনও শর্ত পূরণ হলে এটি সত্তার অবস্থাকে "গোটো" অবস্থায় পরিবর্তন করে।

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

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

<entity name="wizard">
    <state id="IDLE" animation="WIZARD_IDLE" />
    <state id="MOVING_LEFT" animation="WIZARD_WALK_LEFT" />
</entity>

<entity name="orc">
    <state id="IDLE" animation="ORC_IDLE" />
    <state id="MOVING_LEFT" animation="ORC_WALK_LEFT" />
</entity>

সত্তাটি তৈরি করা হলে এটি রাষ্ট্রের মেশিন ডেটা এবং একটি অ্যানিমেশন ডেটা রেফারেন্স সহ রাজ্যের একটি তালিকা যুক্ত করবে।

ভবিষ্যতে আমি সত্ত্বা সিস্টেমটি একই রকম এক্সএমএল ফর্ম্যাটে উপাদানগুলি সংজ্ঞায়িত করে পুরো সত্তা তৈরির জন্য ব্যবহার করব।

-

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


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

2
আপনার নকশাটি খারাপ না (এটি অতীতে নয়, এটি আমি অতীতে নির্মিত একই ধরণের সিস্টেমের লাইনের পাশাপাশি), তবে এখানে আপনার প্রশ্নটি আসলে কী? আমি মনে করি এটি সত্যিই পরিষ্কার হয়ে দাঁড়াতে পারে।
মিঃ ক্র্যাঙ্কি

@ জন - ধন্যবাদ সাথী, আমি আজ সন্ধ্যায় এর পরে এটি একবার দেখব। @ মিস্টার ক্র্যাঙ্কি - বেশিরভাগ ক্ষেত্রে আপনি যা বলেছিলেন ঠিক তেমনই। যদি এটি কোনও ভাল এবং সম্ভবত আরও প্রতিষ্ঠিত পদ্ধতির টিপস / লিঙ্ক হয়। আমি এখানে অভিজ্ঞতার ভিত্তিতে অন্ধকারে আছি।
ব্যবহারকারীর 8363

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

@ মাইকিসি এটিই আমার প্রয়োজন উত্তর। আমি আমার প্রশ্নের বিষয়ে আরও পরিষ্কার হতে পারিনি তার জন্য আমি ক্ষমাপ্রার্থী। আমি যদি এটিতে উপস্থিত না হয়ে থাকি তবে এটি আরও প্রশ্নের মতো দেখায় :)। ঘটনাটি হ'ল আমি এমন অনেক সংস্থান খুঁজে পাইনি যা অ্যানিমেশন রাজ্যের সাথে কাজ করে এবং যেগুলি হার্ড-কোডড করে তাই কন্টেন্ট তৈরি / পরিবর্তন করা দুঃস্বপ্ন হতে পারে। সুতরাং আমার প্রশ্ন: এই পন্থা সঠিক বা না? এবং যদি আপনি বলছেন যে এটি ঠিক আছে, তবে তা ঠিক আছে :)।
ব্যবহারকারীর 8363

উত্তর:


4

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

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

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

একটি অ্যানিমস্টেট উপাদান সম্ভবত সাধারণ গেম আইটেমগুলির জন্য (বেসিক ব্যাকগ্রাউন্ড প্রপস এবং এর মতো) যথেষ্ট, তবে আরও জটিল সত্তার জন্য আপনি এটি পরিচালনা করতে কোনও স্টেট মেশিন ব্যবহার করতে চান। এটি লুয়া বা পাইথনের মতো স্ক্রিপ্টিং ভাষায় সর্বোত্তমভাবে প্রকাশিত। একটি রাষ্ট্রের বেশ কয়েকটি কার্যকরী ব্লক (onEnter, onExit, onUpdate, onEvent) থাকতে পারে, পাশাপাশি একটি সময়রেখা যা নির্দিষ্ট ক্রিয়াকলাপ এবং নির্দিষ্ট সময়ে ঘটতে হবে এমন ট্রিগারগুলি নির্দিষ্ট করে। আপনার কাছে সম্ভবত এমন এক ধরণের ম্যানেজার শ্রেণি থাকবে যা যথাযথ হিসাবে এই রাষ্ট্রীয় মেশিনগুলিকে আপডেট করার জন্য যেমন টাইমলাইন কলব্যাকগুলি ঘটবে তখন ট্রিগার করার জন্য দায়বদ্ধ। আপনার এই বিষয়গুলিকে যথাসম্ভব ইভেন্ট-ভিত্তিক হিসাবে রাখার চেষ্টা করা উচিত, যেহেতু আপনার লেখা প্রতিটি অনউপেট সত্তার গণনা সহ একটি লিনিয়ার ব্যয় হবে। আপনি ট্যাগগুলি নির্দিষ্ট করতে সক্ষম হতে চান ('আক্রমণকারী', 'নিষ্কলুষ', 'অগ্রাহ্যপুত্র' ইত্যাদি) যা পুরো রাজ্য এবং নির্দিষ্ট সময়কালের উভয় অঞ্চলের সাথেই যুক্ত। আপনি সম্ভবত কিছু উচ্চ-স্তরের ইভেন্ট হ্যান্ডলারও চাইবেন যা পুরো রাজ্য-গ্রাফের জন্য প্রযোজ্য, কেবলমাত্র একটি নির্দিষ্ট রাজ্যে নয়।

'সেন্টিয়েন্ট' অক্ষরগুলিতে সম্ভবত কিছুটা এআইও থাকতে পারে। আমি একটি নির্দিষ্ট 'লোকোমোটর' উপাদান তৈরি করি যা ঘুরে বেড়ানো পরিচালনা করে। এটি সিগন্যাল এবং ইভেন্টগুলির একটি সিস্টেম ব্যবহার করে এবং স্টেট-ট্যাগগুলির জন্য জিজ্ঞাসাবাদ সহ স্টেটগ্রাফের সাথে ইন্টারফেস করে এবং "ওয়াক টু পয়েন্ট" বা "নির্দিষ্ট গতিতে একটি নির্দিষ্ট দিকে চালানো" বলা যেতে পারে। উচ্চ স্তরের এআই উপাদানগুলি (যেমন আচরণ ট্রি বা যা কিছু) তারপরে বিশদ সম্পর্কে চিন্তা না করে এই ইন্টারফেসটি ব্যবহার করতে পারে।


1

আমি এ পর্যন্ত সেরা ডাটা-চালিত অ্যানিমেশন সিস্টেমটি দেখেছি মিশ্রিত বৃক্ষ । সত্যিই, এটি খুব ভাল এবং আপনি এখানে যা চাইছেন তা করতে পারে। এআইজিমেডেভ ডটকমের মতে এটি এখন শিল্পের ডি-ফ্যাক্টো স্ট্যান্ডার্ড, এবং আমি বিশ্বাস করি যে তারা সঠিক।

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


এটি একটি খুব ভাল সংস্থান, ধন্যবাদ। আমি এই জাতীয় তথ্য খুঁজছি।
ব্যবহারকারী 8363

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