Archive for June 14th, 2010

14
Jun
10

Review UDK Unreal Engine 3



UDK (Unreal Development Kit) adalah Unreal Engine 3, kerangka kerja lengkap untuk pengembangan profesional. Semua tool yang kamu butuhkan untuk membuat games bagus, advanced visualizations dan simulasi 3D mendetail tersedia. Siapapun itu, banyak yang telah menggunakan Unreal Engine 3, diantaranya, developer game, studio TV, sutradara machinima, artist, dll. Jika kamu punya ide untuk direalisasikan, UDK is for you. Hanya UDK yang memiliki power, flexibility dan track record dari Unreal Engine 3. tool ini telah terbukti dengan releases dan awards yang tak terhitung banyaknya. There is no better way to make awesome games than with UE3. And best of all, it’s free. Penggunaan UDK untuk tujuan noncommercial bebas biaya. Theorically, semua orang sekarang memiliki kemampuan untuk membuat game seperti Gears of War 2.

14
Jun
10

Review Game Football Manager 2010

Grafis

Ada peningkatan tampilan yang signifikan di game Football Manager 2010 (FM2010) . Dibanding versi terdahulu, rasanya sekarang FM2010 lebih “kantor” (serasa jadi manajer betulan), lebih banyak space kosong, pandangan jadi lega waktu ngatur-ngatur tim kita. Tampilannya pun juga jadi lebih minimalis, tombol-tombol, panel-panel rapi ditata di bagian atas & kiri layar.

http://www.totalvideogames.com/img/uploaded/www.totalvideogames.com_Football_Manager_2010-PCScreenshots17675Coach_Report_69190__size_655_2000.jpg

Sedikit melihat ke bagian grafis waktu permainan berlangsung, di FM 2010 pemain bisa menikmati tampilan lapangan hijau 3D yang segar, ditambah dengan animasi permainan dari para pemain bola. Grafisnya juga bisa dibilang cukup baik, walaupun masih jauh kalau dibandingkan dengan grafis game sekelas PES. Toh, game ini titik beratnya di manajemen tim sepak bola : )

 Screenshot

GamePlay

Sudah lumrah jadi tradisi FM kalo permainannya fokus pada manajemen tim sepak bola. Kelebihan dari FM2010 ini ada tambahan fitur micro-management. Jadi strategi tim yang kita atur itu gak cuman terbatas di strategi secara umum, tapi juga strategi buat hadapi tim-tim tertentu secara khusus. Tentunya yang harus diatur juga bakal lebih banyak, tapi inilah serunya, lebih mendekati realita.

Minimum Requirement

  • OS: Windows XP/Vista/W7
  • Processor: XP: 1.4GHz or Faster / Vista/W7 : 2.0GHz or Faster
  • Supported Processors: Intel Pentium 4, Intel Core, AMD Athlon
  • Memory: XP: 512MB RAM / Vista/W7: 1.0GB RAM
  • Hard Drive Space: 2GB
  • DVD-Drive: 4x Speed
  • Video Card: 128MB *Supported Chipsets : (see below)
  • Sound Card: DirectX 9.0c compatible
  • Directx: Version 9.0c (included)
  • LAN: TCP/IP compliant
  • Input: Keyboard, Mouse
14
Jun
10

BEPUphysics – free physics engine library untuk XNA

BEPUphysics adalah sebuah 3D physics engine yang didesain secara spesifik untuk XNA Framework, dapat menghandle secara efektif simulasi dan interaksi simulasi dari rigid body dan dapat digunakan dalam dalam berbagai tahap pengembangan game.

Beberapa fitur yang ditawarkan BEPUphysics :

  • Support internal multithreading untuk jumlah thread yang bervariasi.
  • Deteksi benturan untuk rigid body yang cepat & robust.
  • Mensupport berbagai jenis obyek primitif, baik dinamik maupun kinematik, seperti : Convex hull, box, capsule, cone, cylinder, sphere, triangle, Minkowski Sum, & Wrapped Objects.
  • Mensupport berbagai macam constraint, termasuk joint limit, velocity motor, & servomechanisms.
  • System rule collision untuk mendefinisikan interaksi kompleks baik antar entitas maupun antar sekumpulan entitas.

Selain itu, dll BEPUphysics tersedia dalam versi untuk Windows dan XBOX360.
Untuk menggunakannya, diperlukan Visual C# 2008 dan XNA Game Studio 3.1. Pertama-tama, buatlah sebuah XNA 3.1 Windows Game project baru di Visual C#. Masukkan BEPUphysics.dll ke dalam project sebagai reference. Hal ini dilakukan dengan klik kanan di folder references di solution explorer, dan pilih “Add Reference”. Pilih tab Browse dan buka tempat di mana dll berada, lalu klik OK.

1

Setelah itu kita harus membuat sebuah Space object dari class dalam BEPUphysics. Semua obyek simulasi dapat di tambahkan dari sebuah instance Space.

Space space = new Space();

Buat sebuah field untuk space dan inisialisasi dalam metode LoadContent dari game. Untuk mengatasi error yang mungkin terjadi bila namespace belum direferensikan, dapat dilakukan dengan klik kanan di baris yang ditandai error, pilih Resolve, lalu pilih “using BEPUphysics”.

2

BEPUPhysics perlu mengetahui event “beat” dari siklus update dalam game. Dalam method Update dalam game, tambahkan baris berikut:

space.update(gameTime);

Sekarang kita akan menambahkan entitas ke dalamnya. Class Entity merepresentasikan obyek fisika umum yang menyusun space. Kita dapat membuat berbagai jenis entitas, termasuk Box, Cylinder, Sphere, Capsule, dan jenis lain yang dapat ditemui dalam namespace BEPUphysics.Entites.

Untuk menambahkan daratan/tanah, kita akan menggunakan sebuah box yang dibuat sebagai entitas kinematis. Tambahkan baris berikut ke dalam method LoadContent:

Box ground = new Box(Vector3.Zero, 30, 1, 30);

Parameter pertama adalah posisi box dan 3 parameter setelahnya adalah panjang, lebar, dan tebal. Tambahkan box tersebut ke dalam space :

space.add(ground);

Tambahkan juga beberapa cube dinamis di atasnya :

space.add(new Box(new Vector3(0, 4, 0), 1, 1, 1, 1));
space.add(new Box(new Vector3(0, 8, 0), 1, 1, 1, 1));
space.add(new Box(new Vector3(0, 12, 0), 1, 1, 1, 1));

Parameter terakhir di sini menandakan bahwa entitas ini dinamis, bukan kinematis seperti box untuk tanah/daratan tadi.
Kemudian kita perlu memberi gravitasi ke dalam simulasi space :

space.simulationSettings.motionUpdate.gravity = new Vector3(0, -9.81f, 0);

Sekarang, semua entitas dalam space telah tersimulasikan secara fisika. Property-property dari entitas tersebut akan berubah sesuai dengan kondisi entitas setelah mengalami perubahan fisika. Tugas kita sekarang adalah memvisualisasikan! Kita perlu model balok/box dengan ukuran 1x1x1. Lalu tambahkan model ini sebagai Content dari game. File model tersebut dapat didapat dalam source code tutorial ini (link di bawah). Cukup copy dan paste model tersebut ke folder Content dalam solution explorer.

3

Buat field dalam game untuk menampung model tersebut :

public Model cubeModel;

Dalam method LoadContent tambahkan code untuk me-load file asset dari cube model :

cubeModel = Content.Load("cube");

Sekarang kita telah memiliki obyek visual untuk merepresentasikan entitas fisika kita. Sisanya hanya tinggal menghubungkan obyek visual tersebut dengan data property entitas simulasi, dan memvisualisasikan entitas itu. Dalam method Draw kita menambahkan code yang umum digunakan untuk menggambarkan model :

// setting camera / viewer
Vector3 cameraPosition = new Vector3(0, 3, 10);
Matrix view = Matrix.CreateLookAt(cameraPosition, Vector3.Zero, Vector3.Up);
Matrix projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.PiOver4, 4f / 3f, .1f, 10000.0f);


Matrix[] boneTransforms = new Matrix[cubeModel.Bones.Count];
cubeModel.CopyAbsoluteBoneTransformsTo(boneTransforms);
foreach (Entity e in space.entities) {
Box box = e as Box;
if (box != null) {
foreach (ModelMesh mesh in cubeModel.Meshes) {
foreach (BasicEffect effect in mesh.Effects) {
effect.EnableDefaultLighting();
effect.World = e.worldTransform;
effect.View = view;
effect.Projection = projection;
}
mesh.Draw();
}
}
}

Sekarang compile dan jalan program, maka akan terlihat beberapa balok jatuh dan saling bertumpuk.

Source dari tutorial di atas dapat diperoleh di sini.

Info lebih lanjut, dapat diakses di www.bepu-games.com/BEPUphysics atau www.bepuphysics.com.
Beberapa video demo aplikasi yang menunjukkan kemampuan dari engine ini dapat dilihat di sini.

14
Jun
10

FLADE ( Flash Dynamic Engine )

Action Script Engine For Flash

FLADE ( Flash Dynamic Engine )

Flade (Flash Dynamics Engine) adalah open source actionscript 2.0 library untuk pensimulasian 2D physics menggunakan Verlet integration. Saat ini fitur rectangular, circular, & wheel primitive, spring & angular constraints, dan surface terdiri dari segmen garis, lingkaran, & persegi panjang. Ini terutama dirancang untuk permainan dengan tujuan untuk kecepatan dan kemudahan penggunaan

Source : http://www.cove.org/flade/

APE (Actionscript Physic Engine)

APE (Actionscript Physics Engine) merupakan free AS3 open source 2D physic engine untuk dipergunakan di Flash dan Flex

Source : http://www.cove.org/ape/

How to use this library ?

- Put that library at the same folder

- Enjoy it

Flash Engine API

Damping API

setDamping(double d);

Peredam vibration atau getaran.

Gravity API

setGravity(double gx, double gy);

Set Gravitasi;

Sourface Bounce API

setSurfaceBounce(double f);

Set Permukaan atau bentuk Bounce;

Sourface Friction API

setSurfaceFriction(double f);

Contoh Pemanfaatan Flade Engine

Site : http://www.cove.org/ape/demo1.htm

P1

Site : http://www.cove.org/ape/demo2.htm

P2
14
Jun
10

Review Blender GameKit Physic Engine

Dalam postingan kali ini, tim “BlenderTok!” akan mempersembahkan sebuah review tentang physic engine dari Blender. Tentunya udah pada tau kan, apa itu Blender? Kalo blom, coba jalan2 ke sini dulu. Kalo udah tau ya, skip aja, langsung baca review dari kami. Review ini dibuat untuk mengabadikan presentasi kami di kuliah Realitas Virtual 2009 Jurusan Informatika ITS, semoga bisa bermanfaat buat yang baca.

Langsung aja, masuk ke pembahasan tentang game engine-nya dulu. Bahas yang umum dulu supaya gak berat di otak : D. Blender Game Engine ini punya kelebihan yang cukup menonjol dibandingkan kompetitornya, yaitu GRATIS! Developer, terutama para hobyist ataupun developer game kecil-kecilan gak perlu menguras kantong buat bisa bikin game yang enjoyable. Fitur-fitur yang ada di Blender Game Engine adalah

Blender Creation Suite

http://www.techimo.com/images/img2/blender3d/interface_lg.png

Blender nyediain antarmuka yang lengkap. Kontrol-kontrol untuk animasi ataupun modelling bisa gampang diakses, ditambah lagi dengan gampangnya kostumasi antarmuka. Bentuk antarmuka yang “advanced” ini ditujukan buat mempermudah desainer yang biasa berkarya via GIMP / Photoshop bisa gampang adaptasi dengan Blender.

Blender 3D Modelling

http://www.techimo.com/images/img2/blender3d/modelling_lg.png

Blender ngedukung banyak operasi modelling 3D. Mau buat polygon, NURBS surface, kurva bezier, b-spline, vector fonts, dll bisa dibuat via Blender, hebatnya lagi, Blender juga nyediakan mode editing model, contohnya extrude, screw, warp, subdivide, noise & smooth.

Blender 3D Animation

http://www.techimo.com/images/img2/blender3d/animation_lg.png

Fitur animasi yang ada di blender juga gak bisa dipandang sebelah mata. Blender punya fitur animasi skeleton deformation with forward/inverse kinematics, auto skinning, interactive vertex 3D paint, morphing vertex keyframe, animatable lattice deformation, dan non-linear animation mixing dipadu dengan pathtracking otomatis. Buat animasinya, blender nyediakan mode WYSIWYG (What You See Is What You Get) dan mode scripting via Phyton.

Blender Game Creation

http://www.techimo.com/images/img2/blender3d/realtime_lg.png

Seperti udah dibilang di atas kalo Blender ini gak bisa dipandang sebelah mata, fitur-fitur buat game creation dikemas bisa dibilang sangat mumpuni. Blender Game Engine punya fitur-fitur

  1. Graphical Editors (WYSIWYG)
  2. Collision Detection
  3. Dynamics Simulation
  4. Python Scripting
  5. Scene Multi-Layering
  6. Overlays
  7. Game Logic
  8. Artificial Intelligence
  9. Physics
  10. Input
  11. Output
  12. 3D Rendering

Setelah bahas fitur-fitur Blender Game Engine, sekarang waktunya bahas tentang Physic Engine yang ada di BGE. BGE punya Physic Engine yang namanya Bullet Physic. Bullet Physic punya beberapa bounding surface, jadi objek yang dibuat bisa lebih variatif & collision boundarynya lebih fleksibel. Bound surface di BP (Bullet Physic) adalah

  • Box
  • Sphere
  • Convex Hull
  • Cylinder
  • Cone
  • Static Triangle Mesh

Untuk deteksi tabrakan / sentuhan dengan benda-benda disekitar objek, BP ngandalin 3 cara collision detection, yaitu

  • Ray Sensor
  • Near Sensor
  • Collision Sensor

Di bawah ini, contoh Phyton script yang dipake buat logic di BGE

#aim.py

cont = GameLogic.getCurrentController( )
player = cont.getOwner()
remote = cont.getActuator("Remote").getOwner()
mousemove = cont.getSensor('mousemove')

remori = remote.getOrientation()
player.setOrientation(remori)

if player.init == 0:
	player.initx = mousemove.getXPosition()
	player.inity = mousemove.getYPosition()
	player.init = 1
	player.mousex = 0.0
	player.mousey = 0.0

if player.init == 1 and mousemove.isPositive():
	from Rasterizer import setMousePosition
	shoulderipo = cont.getActuator('shoulderipo')
	playerrot = cont.getActuator("Remote")
	shoulder = shoulderipo.getOwner()
	nmousex = mousemove.getXPosition() - player.initx
	nmousey = mousemove.getYPosition() - player.inity
	player.mousex= player.mousex + (float(nmousex) - player.mousex) * player.mousefilter
	player.mousey= player.mousey + (float(nmousey) - player.mousey) * player.mousefilter

	setMousePosition(player.initx, player.inity)
	remote.rot -= (player.mousex * player.sensitivity)
	shoulder.pitch -= (player.mousey * player.sensitivity)
	GameLogic.addActiveActuator(playerrot, 1)
	GameLogic.addActiveActuator(shoulderipo, 1)

#bulletforce.py

cont = GameLogic.getCurrentController()
own = cont.getOwner()
camown = GameLogic.getCurrentScene().getObjectList()["OBcamera0"]

lmb = cont.getSensor("fire")
ray_all = cont.getSensor("ray_all")
add_force = cont.getActuator("add_force")

forceobj = add_force.getLastCreatedObject()

if own.force and ray_all.isPositive():
	hit_pos = ray_all.getHitPosition()
	forceobj.setOrientation(camown.getOrientation())
	forceobj.setPosition(hit_pos)
	own.force = 0

apply_force = ray_all.isPositive() and lmb.isPositive()

if apply_force:
	GameLogic.addActiveActuator(add_force, 1)
	own.force = 1

#fireaction.py

cont = GameLogic.getCurrentController()
own = cont.getOwner()
ownAmmo = GameLogic.getCurrentScene().getObjectList()["OBAmmo"]
ownMags = GameLogic.getCurrentScene().getObjectList()["OBMags"]

endmag = cont.getSensor("endmag")
lclick = cont.getSensor("lclick") # Just mouse click
shoot = cont.getSensor("fire") # ACTUAL FIRE (rate control)
R = cont.getSensor("R")

recoil = cont.getActuator("recoil") #gun anim ipo
fire = cont.getActuator("fire") #gun anim ipo
trigger = cont.getActuator("trigger")
magspawn = cont.getActuator("magspawn")

if endmag.isPositive():
	ownMags.Text += 1

if ownAmmo.Text > 0 and lclick.isPositive():
	#This actuator "IS" the trigger (turns on shoot, at specific frame)
	GameLogic.addActiveActuator(trigger, 1)

if shoot.isPositive():
	ownAmmo.Text -= 1
	GameLogic.addActiveActuator(recoil, 1)
	GameLogic.addActiveActuator(fire, 1)

if ownMags.Text > 0 and ownAmmo.Text < 1 and R.isPositive():
	ownMags.Text -= 1
	ownAmmo.Text = 50
	GameLogic.addActiveActuator(recoil, 1)
	GameLogic.addActiveActuator(magspawn, 1)

#walk.py

cont = GameLogic.getCurrentController()
own = cont.getOwner()

g1 = cont.getSensor("g1").isPositive()
g2 = cont.getSensor("g2").isPositive()
g3 = cont.getSensor("g3").isPositive()
g4 = cont.getSensor("g4").isPositive()
jump = cont.getSensor("Space")
fwd = cont.getSensor("W")
back = cont.getSensor("S")
slft = cont.getSensor("A")
srght = cont.getSensor("D")
shift = cont.getSensor("shift")
lctrl = cont.getSensor("lctrl")

act = cont.getActuator("floormove")
crouch = cont.getActuator("crouch")
idle = cont.getActuator("idle") #gun anim ipo
run = cont.getActuator("run") #gun anim ipo

ownc = crouch.getOwner()

speed = 6
jspeed = 0
sqrt2over2 = 0.70710678

if g1 or g2 or g3 or g4:

	if lctrl.isPositive():
		speed = 2
		if ownc.frame < 20:
			ownc.frame += 1
			GameLogic.addActiveActuator(crouch, 1)
	if  not lctrl.isPositive() and ownc.frame > 1:
		ownc.frame -= 1
		GameLogic.addActiveActuator(crouch, 1)
	else:
		GameLogic.addActiveActuator(crouch, 0)

	if shift.isPositive():
		speed = 3

	fspeed = speed * (fwd.isPositive() - back.isPositive())
	sspeed = speed * (srght.isPositive() - slft.isPositive())

	if fspeed and sspeed:
		fspeed *= sqrt2over2
		sspeed *= sqrt2over2

	if own.rel == 0:
		fspeed = 0
		sspeed = 0

	if not jump.isPositive():
		own.jstate = 1

	if jump.isPositive() and own.jstate == 1:
		jspeed = 6
		own.jstate = 0
		own.rel = 0

	act.setLinearVelocity(sspeed, fspeed, jspeed, 1)
	if [sspeed, fspeed, jspeed] == [0, 0, 0]:
		GameLogic.addActiveActuator(idle, 1)
		GameLogic.addActiveActuator(run, 0)
		GameLogic.addActiveActuator(act, 0)
	else:
		if (lctrl.isPositive() + shift.isPositive() + jspeed) == 0:
			GameLogic.addActiveActuator(idle, 0)
			GameLogic.addActiveActuator(run, 1)
		else:
			GameLogic.addActiveActuator(idle, 1)
			GameLogic.addActiveActuator(run, 0)
		GameLogic.addActiveActuator(act, 1)
else:
	GameLogic.addActiveActuator(act, 0)
	own.rel = 1

#bullethole.py

from math import sin, cos, sqrt

# vector functions
def VEC_length(x):
	return sqrt(x[0]*x[0]+x[1]*x[1]+x[2]*x[2])
def VEC_normalize(x):
	length = VEC_length(x)
	return [x[0]/length,x[1]/length,x[2]/length]
def VEC_cross(x, y):
	return  [x[1]*y[2] - x[2]*y[1],
			 x[2]*y[0] - x[0]*y[2],
			 x[0]*y[1] - x[1]*y[0]]
def VEC_min(x, y):
	return [x[0] - y[0], x[1] - y[1], x[2] - y[2]]
def MAT_trackvector(fw, y):
	if abs(abs(fw[2]) - abs(y[2])) < .001: #prevent gimbol lock
		y.append(y[0])
		del y[0]
	right = VEC_normalize(VEC_cross(y, fw))
	up = VEC_cross(fw, right)
	return [[right[0], up[0], fw[0]],
		[right[1], up[1], fw[1]],
		[right[2], up[2], fw[2]]]

cont = GameLogic.getCurrentController()
obj = cont.getOwner()
ray_sensor = cont.getSensor("ray_bullet")
lmb_sensor = cont.getSensor("fire")
add_bullet_act = cont.getActuator("add_bullet")

# position the last added bullet hole
newobj = add_bullet_act.getLastCreatedObject()
if obj.ebhole and ray_sensor.isPositive():
	hit_pos = ray_sensor.getHitPosition()
	hit_norm = ray_sensor.getHitNormal()
	newobj.setOrientation(MAT_trackvector(hit_norm, [0.0,0.0,1.0]))
	newobj.setPosition(hit_pos)
	obj.ebhole = 0

# determine wether or not to create a new bullet hole
make_bullet = ray_sensor.isPositive() and lmb_sensor.isPositive()

if make_bullet:
	GameLogic.addActiveActuator(add_bullet_act, 1)
	obj.ebhole = 1

Kalo mau file yang kami pakai demo, bisa download di sini.

Supported by Studio Asiah dot Com & KemasDimas.Com : Catatan Harian Untuk Berbagi

14
Jun
10

Physics Engine dengan Unity3D

Unity adalah game engine berbasis 3D yang berjalan di windows dan Mac OS X platform. Dengan Unity dapat dihasilkan game berplatform Windows, Mac, Wii, ipad atau iphone. Selain itu dapat juga dihasilkan browser game yang dapat dimainkan dengan menginstall Unity web player plugin yang dapat dimainkan seperti halnya game-game flash pada umumnya. Unity terdapat dua macam versi, yaitu versi free dan pro. Untuk versi free memiliki fitur dan assets yang terbatas. Tetapi untuk sekedar belajar atau mengembangkan suatu aplikasi sederhana Unity versi free dirasa cukup.

Unity

Unity menawarkan beberapa fitur untuk menangani physic, antara lain:

  1. NVIDIA® PhysX®
  2. Built in for NVIDIA

  3. Rigidbodies
  4. Dengan rigidbodies dapat disimulasikan tabrakan, tekanan serta joint tanpa menambahkan suatu script apapun.
    Rigidbodies

    Dalam rigidbody ada beberapa property yang mengatur pergerakan suatu object, antara lain:

    • Mass: massa object dalam kilogram. Direkomendasikan nilai suatu massa object tidak kurang dari 100 kali dari object rigidbody yang lain.
    • Drag: nilai dari hambatan udara dengan object. 0 berarti tidak ada hambatan udara, dan tak terhingga membuat objek berhenti seketika.
    • Angular Drag: nilai dari hambatan udara yang mempengaruhi object ketika berputar pada torsinya. 0 berarti tidak ada hambatan udara, dan tak terhingga membuat objek segera berhenti berputar.
    • Use Gravity: suatu object apakah dipengaruhi oleh gravitasi atau tidak.
    • Is Kinematic: jika diaktifkan, maka object tidak dipengaruhi oleh physic engine tetapi oleh transform.
    • Interpolate: gunakan property ini jika terjadi keanehan dalam object.
    • Freeze Rotation: jika diaktifkan maka object tidak akan dirotasi selain menggunakan transform.Rotate()
  5. Joints
  6. Engsel, sendi dalam pembuatan object 3D dapat dengan mudah disimulasikan dengan Unity.

  7. Ragdolls
  8. Unity mempunyai wizard yang dalam sekejap dapat membuat ragdoll dari sebuah animated character. Dalam ragdoll ini dapat disisipkan suatu script sehingga mempunyai behavior tersendiri.

  9. Cars
  10. Membuat Game balap belum pernah semudah mengunakan Unity. Unity menyediakan wheel collider yang secara akurat menyimulasikan traksi roda pada ban.

Di bawah ini adalah beberapa screenshot dari program unity yang telah dibuat oleh kelompok kami.
Sebuah Object Pesawat yang mempunyai gravitasi
Pohon yang mempunyai efek rigidbody
Event collide untuk tong dan senapan

REFERENSI UNTUK UNITY PHYSIC ENGINE




Follow

Get every new post delivered to your Inbox.