Engine

গেম ইঞ্জিন, Scene Graph, কম্পোনেন্ট, স্ক্রিপ্টিং, ফিজিক্স, একটি PBR পাইপলাইন, ওয়ার্ল্ড এডিটর, এবং ডেস্কটপ ও মোবাইলের জন্য নেটিভ বিল্ড।

এক লাইনে#

ব্রাউজারে একটি সম্পূর্ণ গেম ইঞ্জিন: একটি দৃশ্য তৈরি করুন, তাকে আচরণ দিন, Play চাপুন, এবং সেটিকে ওয়েবে অথবা একটি নেটিভ ডেস্কটপ ও মোবাইল বাইনারিতে এক্সপোর্ট করুন।

aukimi-তে এটিই বহু ব্যবধানে সবচেয়ে বড় স্টুডিও। এই পাতাটি একে ইন্টারফেসের মতো করেই সাজিয়েছে, বৈশিষ্ট্যগুলোকে বর্ণানুক্রমে না সাজিয়ে, প্রতিটি প্যানেল যে ড্রয়ারে থাকে সেই অনুযায়ী।

লেআউট#

Engine, scene graph, viewport, inspector এবং console সহ

মেনু বারFile · Edit · View · Windows · Run · Plugins
টুলবারপ্রজেক্টের নাম, undo/redo, ভিউপোর্ট মোড সুইচ (3D · 2.5D · 2D · TXT), দৃশ্য নির্বাচক, চারটি প্যানেল বোতাম, FX Master, HUD, রেজোলিউশন বক্স, ট্রান্সপোর্ট (play, pause, stop) এবং Build
বামএকটি আইকন রেইল, scene graph, তালিকা, অডিও, কনসোল, এবং যে প্যানেল এটি খোলে
কেন্দ্রviewport, নিজস্ব গিজমো বার সহ (translate, rotate, scale, world/local, গ্রিড, স্ন্যাপিং, ফ্রেমিং) এবং একটি কোয়ালিটি নির্বাচক
ডাননির্বাচিত এনটিটির জন্য inspector
নিচেConsole এবং Profiler, পাশাপাশি
স্ট্যাটাস বারমোড, ভিউপোর্ট ডাইমেনশন, এনটিটি সংখ্যা, গ্রিড অবস্থা

চারটি প্যানেল বোতাম#

Engine টুলবার: দৃশ্যের নাম, undo, ভিউপোর্ট মোড সুইচ, চারটি প্যানেল বোতাম এবং ট্রান্সপোর্ট

এগুলো সবাই একইভাবে আচরণ করে না, আর কিছু খুঁজতে যাওয়ার আগে এই পার্থক্যটা জেনে রাখা ভালো:

বোতামআচরণ
Systemsএকটি ড্রয়ার খোলে
Toolsএকই ড্রয়ার খোলে, Systems এবং Tools একে অপরকে বন্ধ করে দেয়
Assetsএকটি স্থায়ী ডক টগল করে
Scriptsএকটি মোডাল খোলে

Systems এবং Tools ইচ্ছাকৃতভাবে একই স্লট শেয়ার করে, এগুলো পাশাপাশি রাখা হয়েছে যাতে এই বিষয়টা স্পষ্ট বোঝা যায়।

Systems#

ইঞ্জিনের নিজস্ব সাবসিস্টেম: একটি দৃশ্যের যা আছে, আপনি যা দিয়ে তৈরি করেন তা নয়।

গ্রুপপ্যানেল
Pluginsপ্লাগইন ব্রাউজার
RenderingRendering · Rendering Pipeline · Look Presets · Shader Lab · Render Style · Shadows · Mesh LOD · Post Process Volumes
GameplayMultiplayer room · Physics · AI & Navigation · Gameplay Zones
WorldScene Graph · Level Streaming · Baking · Light Probes · Decals

Rendering#

টুলবারের FX Master সুইচ পুরো পোস্ট পাইপলাইনকে এক ক্লিকে চালু বা বন্ধ করে দেয়: এটি কতটা খরচ করছে তা দেখার সবচেয়ে দ্রুত উপায়। আলাদা আলাদাভাবে: bloom, depth of field, SSR, SSAO, GTAO, SSGI, temporal AA, FXAA, motion blur, volumetric fog, contact shadows, কালার গ্রেডিং, film grain, chromatic aberration, vignette এবং tonemapping, সেই সঙ্গে Nanite-স্টাইলের জিওমেট্রি এবং Hi-Z occlusion।

Look Presets হলো উপরের সবকিছুর সম্পূর্ণ কনফিগারেশন। Render Style রেজিস্টার বদলে দেয়, ফটোগ্রাফিক না হয়ে স্টাইলাইজড। Shader Lab হলো যেখানে আপনি নিজের শেডার লেখেন। Mesh LOD এবং Post Process Volumes এই দুটোই বড় দৃশ্যে নিজেদের খরচ উশুল করে দেয়: প্রতি মেশে লেভেল-অফ-ডিটেইল, এবং শুধু একটি ভলিউমের ভেতরেই প্রযোজ্য পোস্ট-প্রসেসিং।

রেন্ডারার হলো Babylon.js। এটি WebGL দিয়ে শুরু হয় এবং ব্রাউজারে থাকলে নিজেই WebGPU-তে পাল্টে যায়, ব্যর্থ হলে নিজে থেকেই ফিরে আসে।

Gameplay systems#

Physics 3D সলভার (Havok) এবং 2D সলভার দুটোই কভার করে। AI & Navigation হলো navmesh এবং তার উপর থাকা এজেন্ট। Gameplay Zones হলো আচরণ যুক্ত ট্রিগার ভলিউম। Multiplayer room দৃশ্যটিকে একটি Colyseus সার্ভারের সাথে সংযুক্ত করে (নিচে দেখুন)।

World systems#

Level Streaming খেলোয়াড় নড়ার সাথে সাথে লেভেলের অংশ লোড ও আনলোড করে। Baking লাইটিং আগে থেকে গণনা করে রাখে; Light Probes স্থানের নির্দিষ্ট বিন্দুতে indirect light এবং প্রতিফলন ধারণ করে। Decals জিওমেট্রি যোগ না করেই সারফেসের উপর ডিটেইল প্রজেক্ট করে।

Tools#

আপনি যা দিয়ে তৈরি করেন

গ্রুপপ্যানেল
EditorsScripts · Blueprint Editor · UI Editor · Tilemap
WorldSky Studio · Terrain · Water · Tree Generator · Plant Generator · Rock Generator · Kitbash
GameplayInventory · Data tables · Dialogue Trees
AnimationTimeline · Cinematic Sequencer · Camera Tools
AudioAudio Manager
DebugProfiler

World generators#

Terrain, water, sky এবং চারটি কনটেন্ট জেনারেটর, tree, plant, rock এবং kitbash পিস। এদের জন্য নিচে নিজস্ব একটি অধ্যায় আছে।

Gameplay authoring#

Inventory, Data tables (Tools → Data) এবং Dialogue Trees, এই তিনটি এডিটর একটি গেমকে কোডের ভেতরে না রেখেই কনটেন্ট রাখতে দেয় নিচে বিস্তারিত

Animation#

এনটিটি অ্যানিমেশনের জন্য Timeline, শটের জন্য Cinematic Sequencer, এবং ফ্রেমিংয়ের জন্য Camera Tools। দেখুন অ্যানিমেশন ও ক্যামেরা

ওয়ার্ল্ড এডিটর#

Tools → World-এর অধীনে সাতটি প্যানেল। এগুলো একটি দৃশ্য দ্রুত ভরাট করার উপায়, আর এই কারণেই একটি লেভেল মডেলিং সেশন দিয়ে শুরু করতে হয় না।

Terrain#

একটি দৃশ্যে একাধিক terrain থাকতে পারে; প্রতিটি Terrains তালিকার একটি সারি এবং এটি তিনটি রেজোলিউশনের যেকোনো একটিতে তৈরি হয়, 128² (দ্রুত), 256² (ভারসাম্যপূর্ণ) বা 512² (বিস্তারিত)।

প্যানেলটিতে দশটি মোড আছে, আর তাদের একটি জিনিস মিল: Masks-এ আঁকা mask এদের প্রতিটিকেই সীমাবদ্ধ করে।

মোডএটি কী করে
Sculptheight field-এর উপর সতেরোটি ব্রাশ
Paintদুটি splatmap জুড়ে আটটি পর্যন্ত টেক্সচার লেয়ার
Generateনয়েজ, অটো-টেক্সচারিং, এবং বাস্তব-বিশ্বের উচ্চতা ইমপোর্ট
Sketchridge ও valley আঁকুন, তার সাথে মিলিয়ে একটি terrain সংশ্লেষণ করুন
Masksপ্রতিটি অন্য মোডকে সারফেসের একটি অংশে সীমাবদ্ধ করুন
Waterসমুদ্রপৃষ্ঠের উচ্চতা, এবং terrain water ও একটি FFT ওশানের মধ্যে পছন্দ
Pathsমাটিতে বেক করা একটি Bézier রোড
Vegetationব্রাশ বা নিয়মভিত্তিক স্ক্যাটারিং
SDFএকটি রেমার্চড terrain, মেশ না করে রেন্ডার করা
Biomesএক পাসেই মাটি, গাছপালা, গাছ এবং পাথর

Sculpt. Raise 1, Lower 2, Smooth 3, Flatten 4, Pinch 5, Inflate 6, Noise 7, Sharpen 8, Stamp 9, Terrace 0, Erode E, Fill F, Clone C (Alt-ক্লিকে উৎস নির্ধারণ হয়), Blur B, Ramp R, সেই সঙ্গে দুটি ওয়াটার টুল, River একটি পথ আঁকে, Lake একটি বিন্দুতে ভরাট করে।

ব্রাশের নিজস্ব ডাইনামিক্স আছে: pressure curve, lazy mouse, falloff, symmetry, প্যাটার্ন, এবং সাইজ ও শক্তি দুটোতেই jitter। Stamp-এ ছয়টি আকৃতি আছে, crater, mountain peak, plateau, river valley, dome, noise hill। ক্ষয় দুই রকম হয়: E ব্রাশ স্থানীয়, আর Adjustments পুরো terrain জুড়ে hydraulic, thermal এবং wind ক্ষয় চালায়।

Paint. আটটি লেয়ার, কারণ দুটি RGBA splatmap প্রতিটিতে চারটি করে চ্যানেল ধরে রাখে। ম্যাটেরিয়াল লাইব্রেরি ক্যাটেগরি অনুযায়ী সাজানো, grass, dirt, forest, rocks, roads and surfaces, cliffs, sand, snow, volcanic, wetland, fantasy, এবং আপনার নিজের, আর প্রতিটি লেয়ারে থাকে UV scale, displacement, একটি ডিটেইল ম্যাপ, এবং surface relief (bump strength এবং parallax depth)। Break texture tiling (cell bombing) হলো সেই সেটিং যা একটি পুনরাবৃত্ত মাটির টেক্সচারকে গ্রিডের মতো দেখানো থেকে আটকায়।

Generate নয়েজ থেকে তৈরি করে, এরপর Generate Textures উচ্চতা ও ঢাল অনুযায়ী ম্যাটেরিয়াল বসিয়ে দেয়, উত্তর/দক্ষিণ শেড ভ্যারিয়েশন এবং পানি থাকলে বালি বা নুড়ির তীরসহ। Real World সরকারি NASA/USGS উচ্চতা টাইল ইমপোর্ট করে: একটি ল্যান্ডমার্ক বেছে নিন বা কোঅর্ডিনেট টাইপ করুন, জুম বেছে নিন, আর প্যানেলটি যে উচ্চতার রেঞ্জ নিয়ে এসেছে তা জানিয়ে দেয়।

Sketch হলো আরেকটি পথ। একটি 2D ম্যাপে ridge ও valley স্ট্রোক আঁকুন, তিনটি পর্যন্ত বাস্তব সোর্স ল্যান্ডস্কেপ বেছে নিন, আর terrain-টি স্কেচের সাথে মিলিয়ে সংশ্লেষিত হয়, ইচ্ছা করলে আগে থেকে থাকা অংশের সাথে ব্লেন্ড করে, একই পাসে অটো-টেক্সচার্ড এবং ক্ষয়প্রাপ্ত।

Masks একটি ব্রাশ দিয়ে আঁকা হয় এবং তারপর পুরোটাকে একসাথে এডিট করা যায়: clear, invert, blur, grow, shrink। smart masks terrain থেকে নিজেই একটি mask বের করে, উচ্চতা অনুযায়ী, ঢাল অনুযায়ী, লেয়ার অনুযায়ী বা cavity অনুযায়ী।

Paths. ক্লিক করে কন্ট্রোল পয়েন্ট বসান আর একটি মসৃণ কার্ভ তাদের মধ্য দিয়ে চলে যায়; amber পয়েন্টগুলো টেনে সরান, cyan হ্যান্ডেলগুলো দিয়ে কার্ভ বাঁকান। Bake Path এর নিচের মাটি সমান করে দেয়, টেক্সচার আঁকে এবং বাঁধ তুলে দেয়।

Vegetation-এর দুটো অংশ। ব্রাশ দিয়ে হাতে ইনস্ট্যান্স বসানো ও সরানো যায়; scatter rules শর্ত, লেয়ার ওয়েট, সিড, মিন/ম্যাক্স স্কেল, এবং প্রতিটি অ্যাসেট যে উচ্চতা ও ঢালের ব্যান্ড গ্রহণ করে তার ভিত্তিতে সেগুলো বসায়। একটি কনফিগারযোগ্য ড্র ডিস্ট্যান্সের পরে ঘাস ও ফুল ফিকে হয়ে যায়, আর Export to Scene ইনস্ট্যান্সগুলোকে দৃশ্যের অবজেক্টে পরিণত করে।

Biomes হলো উপরের সবকিছুর এক-ক্লিক সংস্করণ: একটি বায়োম বেছে নিন, আপনি যে ক্যাটেগরিগুলো চান তা টিক দিন (soil, trees, plants and grass, flowers, algae near water, rocks), একটি ডেনসিটি সেট করুন, আর Apply Biome মাটি এঁকে সবকিছু ছড়িয়ে দেয়, প্রতিটির কতগুলো ইনস্ট্যান্স বসিয়েছে তা জানিয়ে দেয়। গাছের age variety সব জায়গায় একই গাছ না বসিয়ে চারা থেকে প্রাচীন গাছ পর্যন্ত মিশিয়ে দেয়, আর ground blend (RVT) প্রতিটি পাথরের গোড়াকে তার নিচের terrain রঙের সাথে মিশিয়ে দেয়।

SDF একটি ভিন্ন টুল নয়, একটি ভিন্ন রেন্ডারার: terrain-টি একটি distance field থেকে raymarch করা হয়, octaves, lacunarity এবং persistence দিয়ে আকৃতি দেওয়া, একটি স্নো লাইন ও ঢাল থ্রেশহোল্ড সহ grass/rock/snow দিয়ে টেক্সচারিং, এবং নিজস্ব soft shadows, অ্যাম্বিয়েন্ট অক্লুশন ও কুয়াশা।

বড় terrain-এ একটি LOD system থাকে skirt geometry সহ (যা লেভেলগুলোর মধ্যেকার ফাঁক বন্ধ করে), মসৃণ লেভেল ট্রানজিশন, frustum culling এবং একটি স্ট্যাটস ওভারলে। Heightmap 16-bit PNG, 8-bit PNG বা RAW 16-bit হিসেবে ইমপোর্ট ও এক্সপোর্ট হয়; splatmap একটি RGBA PNG হিসেবে বা প্রতি লেয়ারে একটি ফাইল হিসেবে; আর পুরো terrain, বা শুধু তার সেটিংস, একটি প্রিসেট হিসেবে।

Sky Studio#

আবহাওয়ামণ্ডল। চার ধরনের আকাশ, solid, gradient, HDRI, এবং Rayleigh ও Mie scattering, Mie absorption, ozone, ground albedo, turbidity, planet radius ও atmosphere thickness সহ একটি physical atmosphere

সবকিছুই নির্ভর করে time of day-এর উপর, যা নিজে থেকেই সাইকেল চালাতে পারে: সূর্য তার elevation, azimuth ও intensity অনুযায়ী, নিজস্ব shadow intensity সহ; চাঁদ তার phase অনুযায়ী; twinkle সহ তারা; এবং একটি aurora। Volumetric clouds-এর আছে thickness, erosion, noise scale ও curl distortion, এবং absorption, scatter, ambient ও একটি powder term দিয়ে আলো; cirrus এবং Belt of Venus আলাদা। Aerial perspective হলো সেই কুয়াশা যা দূরত্বের সাথে সাথে ঘন হয় আর দূরের জিওমেট্রিকে দিগন্তে মিলিয়ে দেয়, এটাই সেই সেটিং যা একটি ল্যান্ডস্কেপকে বড় মনে করায়।

শুরু করার জন্য দশটি প্রিসেট: clear day, dawn, sunset, dusk, night, overcast, stormy, desert, arctic এবং space।

Water#

দুটি ট্যাব: খোলা সমুদ্রের জন্য Ocean (FFT), বাকি সবকিছুর জন্য Shore & lakes

⚠️ Water তৈরি হয় Terrain এডিটরে: river ও lake টুল দিয়ে, বা Show Water দিয়ে, আর এখানে এসে টিউন করা হয়। পানি নেই এমন একটি দৃশ্যে এই প্যানেল খুললে আপনি এমন সেটিংস পাবেন যা প্রয়োগ করার মতো কিছুই নেই।

Shore water-এ থাকে colour, opacity, wave strength ও speed, choppiness, foam width ও Fresnel, screen-space reflections ও refraction blur সহ। এর নিচে আছে WGSL শেডারটি নিজেই: নিজস্ব scroll direction ও speed সহ দুটি normal scale, foam threshold ও softness, refraction strength ও index of refraction, এবং পানির ভেতরের আলো, absorption, turbidity, scattering ও translucency।

Tree Generator#

দুটি মোড, Tree এবং Trunk। একটি গাছ deciduous বা evergreen, তার বয়স চারা থেকে প্রাচীন পর্যন্ত হতে পারে, আর এটি জীবিত, মৃত, একটি snag বা একটি পতিত গুঁড়ি হতে পারে। সবকিছুই সিড করা, তাই একই চরিত্রের একটি ভিন্ন গাছ পেতে সবচেয়ে দ্রুত উপায় হলো Randomize seed

আকৃতি নির্ধারিত হয় প্রতিটি branch level অনুযায়ী: children, length, radius, taper, gnarliness, twist, sections, segments, angle ও start height, সেই সঙ্গে প্রাকৃতিক ভ্যারিয়েশন, phototropismgravitropism, এই দুটোই গাছকে আলোর দিকে হেলাতে ও নিজের ওজনে ঝুলে পড়তে বাধ্য করে, আর নিজস্ব শক্তিসহ একটি গ্লোবাল ফোর্স। গোড়ায় থাকে root flare (lobes ও height) এবং buttress।

পাতাগুলো billboard, single বা double sided, সাথে count, size, angle, variance, clump, curl, droop, sheen ও rounded normal। Bark ছয়টি স্টাইলে আসে, ridged, aspen, pine, birch, smooth, palm, সাথে relief, moss, একটি ভেজা গোড়া, sun bleach, canopy অ্যাম্বিয়েন্ট অক্লুশন ও একটি শরতের রূপ। চারটি ঋতু একসাথে পুরো লুক বদলে দেয়।

Forest একসাথে অনেকগুলো ছড়িয়ে দেয়: count, spread radius, scale variance, এবং একটি age mix (single, natural, young, old, even)। Add age progression সবগুলো পাঁচটি জীবনপর্যায় একসারিতে বসায়, যা পাশাপাশি বিচার করার সবচেয়ে দ্রুত উপায়। একটি গাছ একটি দৃশ্য এনটিটি হিসেবে বা GLB হিসেবে বেরিয়ে যায়, আর যেকোনো সেটিং একটি প্রিসেট হিসেবে সংরক্ষণ করা যায়।

Plant Generator#

পাঁচ ধরনের, flower, cluster, herb, fern, grass, যাদের একটি stem (count, height, thickness, curve, colour) এবং leaves (count, size, width, angle) থাকে একইরকম। Fern-এ যোগ হয় leaflet pairs, leaflet sweep ও frond arch; grass-এ যোগ হয় blade count ও arch।

এদের যেকোনোটির উপর একটি flower ঐচ্ছিক: petals, petal rows, length, width, curl, tip sharpness, bloom, centre size, এবং তিনটি রঙ, petal, petal tip এবং centre, আলো পাতার মধ্য দিয়ে কীভাবে যায় তার জন্য translucency ও roughness সহ। দৃশ্যে একটি যোগ করুন, অনেকগুলো ছড়িয়ে দিন, বা GLB এক্সপোর্ট করুন।

Rock Generator#

তিন ধরনের, rock, stone, cliff, তিনটি স্টাইলে: realistic, toon, বা আউটলাইনসহ low poly।

আকৃতি হলো একটি sphere-এর উপর নয়েজ: scale, strength, octaves, persistence, warp এবং একটি ridged অপশন, সেই সঙ্গে নিজস্ব frequency সহ strata এবং কৌণিক পাথরের জন্য depth ও sharpness সহ facet cuts। Radius, detail, flatten, shape variance এবং একটি সমতল তলা silhouette ঠিক করে, আর চারটি ক্ষয় প্রিসেট, fresh, weathered, natural, eroded, একসাথে সবকিছু বদলে দেয়।

সারফেসে আছে colour variation, mineral veins, lichen ও moss, tiling ও strength সহ একটি detail texture, triplanar blending ও parallax relief। এটি ডিফল্টভাবে একটি bundled Stone ম্যাটেরিয়াল ব্যবহার করে; সেটিকে override করতে Matter থেকে একটি ম্যাটেরিয়াল Engine-এ পাঠান।

Kitbash, Sculpt-এর মতো একই লাইব্রেরি#

Kitbash Sculpt-এর সাথে শেয়ার করা: এই প্যানেল এবং Sculpt-এর Edit Forge একটিই লাইব্রেরি পড়ে। সেখানে তৈরি করা একটি পিস এখানে বসানো যায়, আর এখানে বসানো একটি পিস আবার সেখানে সংরক্ষণ করা যায়।

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

ক্যাটালগ থেকে একটি পিস আর্ম করুন আর প্রতিটি লেফট ক্লিক সেটি বসিয়ে দেয়। তিনটি স্ন্যাপিং মোড ঠিক করে এটি কোথায় নামবে: on terrain (পিসগুলো তাদের নিচের মাটির উচ্চতা অনুসরণ করে), on water (build plane পানির লেভেলে বসে), এবং snap to sockets, বসানো একটি পিসের একটি সংযোগ বিন্দু লক্ষ্য করুন আর নতুনটি তার সাথে মিলতে ঘুরে যায়। একটি চেইন তার মুক্ত প্রান্ত থেকে বাড়ে, দখল করা সকেটগুলো প্রার্থী তালিকা থেকে বাদ পড়ে, আর প্রতিটি ক্লিক তার নিজস্ব undo ধাপ। Ctrl/Cmd নির্বাচনের জন্য এবং Alt রোটেশনের জন্য সংরক্ষিত থাকে। Collection তাদের সোর্স ও ভার্সন ধরে রাখে, তাই মূলটি বদলালে একটি ইনস্ট্যান্স হালনাগাদ করা যায়।

অন্যান্য এডিটর#

ওয়ার্ল্ড এডিটরগুলো একটি দৃশ্য ভরাট করে; এগুলো তাকে একটি ইন্টারফেস, একটি ম্যাপ, তার কনটেন্ট টেবিল এবং এটি কতটা খরচ করছে তা যাচাইয়ের যন্ত্র দেয়।

HUD এডিটর#

Tools → Editors → UI। ছয়টি ট্যাব, Templates, Elements, Layers, Preview, Style এবং Script, এমন একটি প্রিভিউয়ের উপর যা তিনটি ডিভাইস সাইজের মধ্যে বদলায়: desktop 960×540, tablet 768×432, mobile 375×667।

Element তিনটি গ্রুপে আসে (Display, Data, Input) এবং নেস্ট করে: panelflex চাইল্ড ধরে রাখে, তাই Layers ট্যাব একটি ফ্ল্যাট তালিকা না হয়ে একটি প্রকৃত ট্রি। History পঞ্চাশ ধাপ গভীর।

⚠️ Style ট্যাবটি CSS-এর মতো, আর এই পার্থক্যটা গুরুত্বপূর্ণ। HUD ক্যানভাসে আঁকা হয় Babylon-এর GUI দিয়ে, আর প্রকৃত CSS সেখানে পৌঁছায় না। আপনি এখানে যে নিয়মগুলো লেখেন তা GUI প্রপার্টিতে ম্যাপ হয়; সিলেক্টরগুলো হলো একটি এলিমেন্টের জন্য #name, একটি ধরনের জন্য .type (.text, .panel) এবং সবকিছুর জন্য *

Script ট্যাব একটি তৈরি করার আরেকটি উপায়: ui.* API, createText, createPanel, createProgress, createButton, এটি চালানোর দুটো উপায় সহ। Build Layout সেটিকে ডিজাইন-টাইমে চালায় আর আপনাকে হাতে নাড়ানোর মতো প্রকৃত এলিমেন্ট রেখে দেয়; Run Live সেটিকে গেমের ভেতরে চালায়।

বাইরের দিকে দুটি সংযোগ: HUD আর্টওয়ার্ক Inkwell বা Vectra-তে খোলে এবং কপি না হয়ে লিংক করা থাকে, আর একটি Vectra ডকুমেন্ট HUD এলিমেন্ট হিসেবে ইমপোর্ট করা যায়। Minimap এলিমেন্টটি তার নিজস্ব একটি জিনিস, range, grid, এবং player, enemies, allies, items ও objectives-এর জন্য মার্কার সহ।

টাইলম্যাপ এডিটর#

এগারোটি টুল, brush, eraser, fill, rectangle, select, eyedropper, stamp, autotile, prop, zone এবং path, চারটি ম্যাপ প্রজেকশনে: orthogonal, isometric, staggered isometric এবং hexagonal

Autotiling-এ চারটি টেমপ্লেট আসে, আর প্রতিটি নামের সংখ্যাটি হলো এটি যত টাইল আশা করে তার সংখ্যা: Blob 47 (পূর্ণ কোণ ও প্রান্ত), Wang 16 (edge-based), Simple 4 (NSEW), এবং RPG Maker A2 (48টি টাইল, সেখানে তৈরি ম্যাপের সাথে সামঞ্জস্যপূর্ণ)।

টাইলগুলোর উপরে দুটি লেয়ার বসে। Zones গেমপ্লের অর্থ আঁকে, buildable, water, forest, road, farm, residential, commercial, blocked, আর props ক্যাটেগরি অনুযায়ী অবজেক্ট বসায়: trees, rocks, buildings, vegetation, water, paths। ম্যাপগুলো ব্রাউজারের নিজস্ব ডেটাবেসে থাকে, তাই একটি সংরক্ষণ না করা ম্যাপ রিলোডেও টিকে থাকে।

Inventory, ডেটা টেবিল ও ডায়ালগ#

একটি গেমকে কোডের ভেতরে না রেখেই কনটেন্ট রাখতে দেয় এমন তিনটি এডিটর।

Inventory একটি ক্যাটালগ এডিট করে এবং সেটি দৃশ্যে প্রয়োগ করে। একটি আইটেমে actions থাকে, আর একটি action হলো একটি trigger: use, equip, unequip, সেই সঙ্গে আটটি type-এর একটি: message, heal, damage, grant, remove, event, toast, scene। প্যানেলটির নিজস্ব তিনটি লেআউট আছে (grid, list, compact), তিনটি appearance প্রিসেট (graphite, midnight, warm), এবং চারটি visual slot, background, slot, equipment, tooltip, যেগুলো একটি সঠিক redraw-এর জন্য অন্য একটি মডিউলে খোলে।

Data tables টাইপ করা: একটি কলাম হয় text, number, bool বা ref। CSV ঢোকে এবং বেরোয়। প্রতিটি এডিট pure functions-এর মধ্য দিয়ে চলে, আর এটাই এক্সপোর্ট যে টেবিল লেখে আর বিল্ড যে টেবিল পড়ে তা অভিন্ন রাখে।

Dialogue trees হলো speaker ও একটি লাইনসহ নোড। একটি নোড হয় একটি next-এ চালিয়ে যায়, নাহলে choices-এ শাখা হয়ে যায়, প্রতিটির নিজস্ব টেক্সট ও নিজস্ব গন্তব্য থাকে, branch টগলটিই এডিটরের একমাত্র স্ট্রাকচারাল সিদ্ধান্ত।

অ্যানিমেশন ও ক্যামেরা#

Cinematic Sequencer একটি duration ও একটি loop flag সহ সিকোয়েন্স তৈরি করে, প্রতি এনটিটিতে একটি ট্র্যাক, আর প্লেহেডে ধরা কীফ্রেম, Add Key আপনাকে টাইপ করতে না বলে এনটিটির বর্তমান মান নিয়ে নেয়। এর নিচের graph editor সময়কে প্রোগ্রেসের বিপরীতে দেখায়, ইজিংয়ের জন্য গোল হ্যান্ডেল সহ: ঢালই হলো গতি। শটগুলোর নিজস্ব duration থাকে, আর লেটারবক্সের জন্য একটি Cinemascope ফ্রেমিং (1.422:1) পাওয়া যায়।

Camera Tools কভার করে FOV, position, target, mode ও speed, সেই সঙ্গে আপনি বারবার যেসব ভিউপয়েন্টে ফিরে আসেন তার জন্য bookmarks, এবং camera layer।

Audio#

Audio Manager-এ থাকে audio event, track এবং channel ও category সহ একটি mixer। প্রতি সোর্সের ইফেক্ট হলো একটি low-pass, একটি high-pass এবং একটি reverb send; একটি random মোড একাধিক ক্লিপের মধ্যে বেছে নেয় যাতে একটি পুনরাবৃত্ত শব্দ লুপের মতো না শোনায়। Scrubbing করলে প্লেহেড টানার সময় অডিও বাজে।

Profiler#

একটি ফ্রেম কাউন্টার নয়, একটি ফ্রেম ব্রেকডাউন: camera render, mesh evaluation, particles, sprites ও shader compilation, প্রতিটি হয় real বা estimated হিসেবে চিহ্নিত যাতে পরিমাপ থেকে আসা একটি সংখ্যাকে কখনো একটি মডেল থেকে আসা সংখ্যা বলে ভুল না হয়। তার পাশে কাউন্টার: mesh ও active mesh, light, camera, physics body।

রেকর্ডিং করতে হয় সরাসরি, আর এটি ব্যাখ্যা করার মতো একটি গ্রাফে না গিয়ে একটি Issues তালিকায় শেষ হয়: low FPS, high draw calls, high triangles, high memory, আপনার সেট করা টার্গেট ফ্রেম রেটের বিপরীতে।

একটি দৃশ্য তৈরি করা#

এনটিটি#

Engine viewport, নির্বাচিত এনটিটির উপর গিজমো সহ

একটি নতুন দৃশ্য একটি Main Camera, একটি Directional Light, একটি Skybox এবং একটি Ground Plane নিয়ে আসে।

Scene graph, একটি নতুন দৃশ্য যে চারটি এনটিটি নিয়ে শুরু হয় তা সহ

আপনি যা যোগ করতে পারেন: Empty, Cube, Sphere, Cylinder, Plane, Light, Camera, Script, Mesh, সেই সঙ্গে আগে থেকে ওয়্যার করা দুটি পরিবার:

  • Characters: Third-Person, First-Person (FPS), Top-Down, Platformer, Basic।
  • Props: Pickup (heal) এবং Hazard (damage)।

Scene graph খোঁজে, টাইপ অনুযায়ী ফিল্টার করে, এবং যোগ, ডুপ্লিকেট বা ডিলিট করে; এনটিটি নেস্ট করে, আর reparenting একটি ড্র্যাগ। বসানোর ক্ষেত্রে স্ন্যাপিং আছে এবং দ্রুত মাটি ভরাট করার জন্য একটি scatter brush আছে।

Inspector#

Transform (position, rotation, scale), একটি Enabled সুইচ, এবং এনটিটির components: এখানে যোগ, কনফিগার ও রিমুভ করা হয়, নিচে Add Script সহ। একাধিক এনটিটি নির্বাচন করুন আর inspector ব্যাচ এডিটিংয়ে বদলে যায়, তাই একটি ফিল্ড বদল সবগুলোতেই প্রয়োগ হয়।

Console#

শুধু একটি লগ নয়। এটি level অনুযায়ী ফিল্টার করে (all, logs, info, warning, error), একটি মেসেজকে যে এনটিটি সেটি তৈরি করেছে তার সাথে লিংক করে, এবং একটি expression prompt বহন করে: একটি expression টাইপ করুন, Enter সেটিকে লাইভ দৃশ্যের বিরুদ্ধে চালায়, arrow key দিয়ে history-তে হাঁটা যায়।

এটিকে আচরণ দেওয়া#

তিনটি পথ, আর এগুলো একসাথে থাকতে পারে।

Scripts#

lifecycle hook সহ JavaScript, এবং নিজস্ব একটি রেফারেন্স:

function start() {}                     // once, when the entity starts
function update(dt) {}                  // every frame
function fixedUpdate(dt) {}             // fixed timestep, for physics
function onCollisionEnter(other) {}     // first frame of contact
function onCollisionStay(other) {}      // every frame while touching
function onCollisionExit(other) {}      // contact just ended
function onTriggerEnter(other) {}       // entered a trigger volume
function onTriggerExit(other) {}
function onMessage(msg, data, senderId) {}   // entity-to-entity messaging
function onAnimationEvent(name, data) {}
function onDestroy() {}

Collision এবং trigger 2D এবং 3D দুটোতেই ফায়ার হয়, আর প্রতিটি পাশ তার নিজস্ব contact normal পায়: other.contact.normal অন্য এনটিটি থেকে এটির দিকে নির্দেশ করে। এটাই একটি স্ক্রিপ্টকে "আমি এটির উপর নেমেছি" আর "এটি আমার উপর নেমেছে" এর মধ্যে পার্থক্য বলতে দেয়: একটি প্ল্যাটফর্মার স্টম্প পড়ে other.contact.normal.y > 0.5

স্ক্রিপ্ট এডিটর#

F2, বা একটি এনটিটির উপর Add Script। ট্যাবসহ একটি Monaco এডিটর, একসাথে একাধিক স্ক্রিপ্ট খোলা থাকে, প্রতিটি প্রজেক্ট ফাইলে না থেকে ব্রাউজারের নিজস্ব ডেটাবেসে রাখা থাকে, তাই একটি সংরক্ষণ না করা বাফার রিলোডেও টিকে থাকে।

পাঁচটি ডায়ালেক্ট, একটি প্রোগ্রাম। ভাষা সুইচে JavaScript, BASIC, Python, C# এবং Rust অপশন থাকে। এটি যা করে তা দেখতে যেমন লাগে তেমন নয়: JavaScript-ই source of truth, আর বাকি চারটি হলো সংরক্ষিত JS থেকে transpile করা view। Python থেকে Rust-এ বদলালে Python অনুবাদ হয় না, এটি ফিরে যায় সেই JS-এ যেখান থেকে Python তৈরি হয়েছিল এবং সেটিকে অনুবাদ করে। Multi-hop অনুবাদই একটি প্রোগ্রামকে নষ্ট করে দেয়, আর এডিটর সেটি করতে অস্বীকার করে।

পাঁচটি ক্যাটেগরিতে তেরোটি templates, প্রতিটি কঠিনতা অনুযায়ী লেবেল করা:

ক্যাটেগরিTemplates
Basicslifecycle stub সহ খালি স্ক্রিপ্ট
Movementauto-rotate · WASD · axis-based 3D movement · গ্রাউন্ড ডিটেকশনসহ physics jump · third-person camera follow
Gameplaytrigger zone · damage ও heal সহ health bar · timed spawner
AIplayer proximity alert সহ patrol
AdvancedVerse-স্টাইলের async cutscene · structured concurrency · সম্পূর্ণ API সারফেস টেস্ট

Character-controller প্রিসেট এবং গেম-স্টার্টার props (pickup, hazard) একই তালিকায় দেখা যায়, যা একটি ইমপোর্ট করা ক্যারেক্টারের উপর একটি কার্যকর কন্ট্রোলার বসানোর ব্যবহারিক উপায়।

চালানো ও ডিবাগ করা। F5 চালায়, F9 একটি ব্রেকপয়েন্ট বসায়। ডিবাগার একটি লাইনে থামে, একটি ফ্রেম করে করে এগোয়, আর watch expression দিয়ে লাইভ ভ্যালু জানায়। Script Lab কোনো এনটিটি যুক্ত না রেখেই একটি প্রোগ্রাম চালায়, একটি অবজেক্টের উপর কম্পোনেন্ট না হয়ে API-এর জন্য একটি স্ক্র্যাচপ্যাড।

কোডের পাশে: একটি API reference, খোলা ফাইলের জন্য একটি symbol তালিকা, এবং favourite ও recent সহ একটি snippet লাইব্রেরি। Ctrl+S সংরক্ষণ করে, Ctrl+F খোঁজে, Ctrl+H প্রতিস্থাপন করে, আর এডিটরে আটটি থিম আসে।

Blueprints ও behaviour#

একটি ভিজ্যুয়াল গ্রাফ, তৈরি করা behaviour-এর একটি লাইব্রেরি, আর behaviour স্ট্যাকের উপর স্তরিত একটি state machine।

গ্রাফটিতে বাইশটি গ্রুপে 267টি নোড আছে, Math, Scene, Entity, Animation, Flow Control, String, Events, Physics, UI, Array, Vector, Transform, Debug, Input, Utility, Game, Boolean, Camera, Tween, Variables, Audio এবং 2D ও 3D পরিবার। তিনটি প্রপার্টি এদের আলাদা করে, আর এগুলো দিয়েই গ্রাফটি তৈরি: 17টি event node এক্সিকিউশন শুরু করে, 117টি pure node কোনো side effect বা execution pin ছাড়াই একটি ভ্যালু গণনা করে, আর 9টি latent node পরে শেষ হয়, এগুলোই একটি delay বা tween-কে নিজের state machine ছাড়াই প্রকাশযোগ্য করে তোলে।

চারটি টুল: select V, pan H, comment C, reroute R, একটি ক্যানভাসের উপর যা একটি মিনিম্যাপ সহ 0.1× থেকে 3× পর্যন্ত জুম করে। Variable ছয় ধরনের আসে, boolean, integer, float, string, vector3 এবং object। প্রতিটি নোডের বিবরণ তার টুলটিপে থাকে, যা এমন আকারের একটি লাইব্রেরির নিজেকে ব্যাখ্যা করার একমাত্র জায়গা।

State machine#

এটির নিজস্ব প্যানেল, আর ইচ্ছাকৃতভাবে Animator-এর নয়: Animator-এর conditionগুলো প্রতিটি কেসের জন্য হাতে-লেখা UI সহ একটি ফ্ল্যাট enum, যেখানে এগুলো স্ট্রাকচার্ড এবং world নিয়ে কথা বলে।

সাতটি condition, আর প্রতিটি দৃশ্য সম্পর্কে একটি প্রশ্ন: sees (রেঞ্জের মধ্যে একটি ট্যাগ করা target, ঐচ্ছিকভাবে একটি angle ও line of sight-এর মধ্যে), lost (N সেকেন্ড ধরে কোনো target নেই), threshold-এর বিপরীতে distance, health, message received, timer (বর্তমান state-এ কাটানো সময়), এবং flag (shared blackboard-এর একটি মান)। দুটো combinator, and এবং or, দুটোই তালিকাভুক্ত যদিও or আগে থেকেই implicit ভাবে ছিল, একই state-এ দুটো transition মানেই একটি or, কিন্তু "সে আমাকে দেখছে AND আমার এখনও health আছে" এর কোনো রূপই ছিল না।

⚠️ Health তুলনা করা হয় সর্বোচ্চের একটি ভগ্নাংশ হিসেবে, কখনো একটি নিরপেক্ষ সংখ্যা হিসেবে নয়। "30 HP-এর নিচে" এমন একটি থ্রেশহোল্ড re-balancing পাসের পর টিকে থাকে না; "0.3-এর নিচে" টিকে থাকে।

একটি state-এ ঢোকার বা ছাড়ার সময়, চারটি effect: একটি মেসেজ send করা, একটি blackboard key set করা, একটি অ্যানিমেশন ক্লিপ play করা, অথবা একটি named effect ফায়ার করা। এগুলোর কোনোটিই কিছু নড়ায় না, movement থাকে behaviour-এর কাছেই, আর মেশিনটি ঠিক করে কোন behaviour সক্রিয়।

একটি transition * থেকে শুরু হতে পারে, যার মানে যেকোনো state। ভ্যালিডেটর প্রথমটিতে থ্রো না করে সমস্যার তালিকা ফেরত দেয়, তাই একটি অর্ধেক-লেখা মেশিনও আঁকা হয় এবং আপনি একসাথে সবকিছু ভুল দেখতে পান। Node-এর position ডেটার অংশ: যে গ্রাফের লেআউট দৃশ্যের বাইরে থাকে সেটি পরের যে কেউ খুলবে তার জন্য এলোমেলো হয়ে ফিরে আসে।

BASIC#

TXT viewport মোডটি bundled demo প্রোগ্রামসহ একটি classic-BASIC এনভায়রনমেন্ট, আর এই ভাষার নিজস্ব একটি রেফারেন্স আছে। এটি এখানে একটি প্রকৃত ভাষা, কোনো খেলনা নয়: multi-file module (#INCLUDE), typed numeric (signed ও unsigned 8/16/32/64-bit, float32 ও float64), nested record, SELF সহ object method, reference (REF/BYREF), structured TRY/CATCH/FINALLY, conditional compilation, coroutine, typed handle, এবং storage buffer ও raw WGSL সহ WebGPU compute

OPTION EXPLICIT অপশনাল; classic implicit variable ডিফল্ট থেকে যায় যাতে ইমপোর্ট করা প্রোগ্রাম চলতেই থাকে।

চালানো ও শিপ করা#

Play#

Play, Pause, Stop। Stop করলে, একটি ব্যানার জানায় সেশনটি কী বদলেছে, তাই একটি play-mode এডিট কখনো নীরবে রাখা বা নীরবে হারানো হয় না। সেশন একটি বাগ রিপোর্টে রেকর্ড ও রিপ্লে করা যায়, আর scenario bookmark একটি playtest-কে একটি লেভেলের মাঝখান থেকে শুরু করতে দেয়।

Build#

Build একটি গেম টাইপ নেয় (দৃশ্য থেকে সনাক্ত করা, বা হাতে সেট করা: sidescroller/platformer, first/third person, text-based) এবং একটি টার্গেট।

  • Web: একটি WebGL fallback সহ WebGPU, ঐচ্ছিক WebXR (VR/AR), minification, একটি FPS counter, এবং একটি ফাইল তৈরি করে এমন একটি embed assets অপশন।
  • Desktop এবং mobile: নেটিভ বিল্ড। দৃশ্যটি ডেটা হিসেবে এক্সপোর্ট হয় (scene.glb + scene.json) এবং একটি তৈরি করা Bevy (Rust) প্রজেক্টের মধ্য দিয়ে কম্পাইল হয়; স্ক্রিপ্ট সেখানে একটি এমবেডেড QuickJS রানটাইমে অপরিবর্তিত অবস্থায় চলে।

Compression প্রতি অক্ষে কনফিগারযোগ্য, algorithm, texture, mesh, একটি quality প্রিসেট এদের একসাথে বেঁধে রাখে। Build তাদের সাইজসহ (আসল বনাম compressed) একটি history-তে রাখা হয় এবং পরে আবার ডাউনলোড করা যায়।

একটি নেটিভ বিল্ডে শুধু তাই থাকে যা এক্সপোর্টার এক্সপোর্ট করতে জানে। glTF কাস্টম শেডার, thin instance, procedural sky বা post-processing ধরে রাখে না, তাই যে runtime সিস্টেম এখনো Bevy সাইডে পোর্ট করা হয়নি তা ওয়েবে নিখুঁত দেখানোর পরও একটি ডেস্কটপ বা মোবাইল বিল্ডে অনুপস্থিত থাকবে। নির্ভর করার আগে একটি নেটিভ বিল্ড পরীক্ষা করে নিন।

Multiplayer#

Multiplayer room প্যানেল একটি দৃশ্যকে একটি Colyseus গেম সার্ভারের সাথে সংযুক্ত করে। কোনো অ্যাকাউন্ট বা কনফিগারেশন ছাড়াই একটি বিনামূল্যের শেয়ার্ড টেস্ট সার্ভার পাওয়া যায়; একটি প্রজেক্টকে তার নিজস্ব একটি সার্ভারও দেওয়া যায়। Room-টি একটি share code দিয়ে চাবিবদ্ধ, যা আপনি নিজের কাছে রাখতে পারেন বা বিলিয়ে দিতে পারেন।

যেসব ফাইল এটি পড়ে ও লেখে#

নেটিভ ফরম্যাট.engine
ইমপোর্ট.glb, .gltf, .obj, .fbx, .png, .svg, .mp4, .webm, .mov, .scene
এক্সপোর্টএকটি ওয়েব বিল্ড, একটি নেটিভ ডেস্কটপ/মোবাইল বিল্ড, scene.glb + scene.json

অন্য স্টুডিওতে কাজ পাঠানো#

গ্রহণ করে Sculpt, Retopo ও Pigment থেকে mesh, Render থেকে সম্পূর্ণ দৃশ্য, pixel art, অ্যানিমেশন, Matter থেকে PBR ম্যাটেরিয়াল সেট, 2D rig, ভিডিও প্রজেক্ট, ইমেজ, ভেক্টর আর্ট, এবং Vectra অবজেক্ট।

তৈরি করে 2D rig।

একটি Vectra স্ক্রিন মকআপ ছবি হিসেবে নয়, স্ট্রাকচার হিসেবে আসে। এটি একটি HUD hierarchy হয়ে যায় যা Engine সাজাতে ও স্ক্রিপ্ট করতে পারে: একটি ডিজাইন যা আপনি ওয়্যার করতে পারেন আর তার একটি স্ক্রিনশটের মধ্যে এটাই পার্থক্য।

Shortcuts#

Cmd/Ctrl + K প্যালেট থেকে গ্লোবাল কমান্ডগুলোর পাশাপাশি Engine-এর নিজস্ব কমান্ডেও পৌঁছায়। Engine-এর নিজস্ব সেটিংসেও একটি ডেডিকেটেড, সার্চযোগ্য কীবোর্ড-শর্টকাট প্যানেল আছে; শর্টকাট পাতায় ধরার চেয়ে সেখানে অনেক বেশি শর্টকাট আছে।

সীমাবদ্ধতা ও সাধারণ সমস্যা#

  • একটি খালি viewport সাধারণত ব্রাউজারের সমস্যা, দৃশ্যের নয়। Engine-এর WebGL 2 দরকার; hardware acceleration চালু আছে কিনা যাচাই করুন।
  • Systems এবং Tools একই ড্রয়ার শেয়ার করে। একটি প্যানেল "উধাও" হয়ে গেলে, সেটি সম্ভবত অন্যটিতে আছে।
  • Console-ই প্রথম জায়গা যেখানে দেখা উচিত, শেষ জায়গা নয়: এটি error-কে যে এনটিটি সেটি তুলেছে তার সাথে লিংক করে।
  • Play মোডে যোগ করা একটি কম্পোনেন্ট Stop-এর পরও টিকে নাও থাকতে পারে। Stop করলে যে ব্যানার আসে সেটি পড়ুন।
  • 2D এবং 3D-এর মধ্যে Physics তার সলভারে ভিন্ন যদিও স্ক্রিপ্ট callback একই। 2D-তে একটি স্থির contact 2 mm স্কিন দিয়ে ডিটেক্ট করা হয়, কারণ ডিটেকশন চলার আগে সলভার penetration-কে ঠিক শূন্যে নিয়ে আসে।