행위

DesigningNeedBasedAI


본문 싸이트 : http://www.gamasutra.com/features/designers_notebook/20001222/adams_01.htm

by Ernest Adams Gamasutra December 22, 2000


Designing Need-Based AI for Virtual Gorillas[편집]

버츄어 고릴라를 위한 욕구기반 인공지능의 설계[편집]

요즘 나는 프리랜서로 있기에, 해야할 프로젝트가 꽤 많이 있다. 그 중 제일 흥미있는 것은 죠지아 주 아틀란타 동물원에서 전시 중인 버츄어 고릴라를 업데이트하는 것이다. '디자이너의 노트북'의 오랜 독자들은 몇 년 전 "가상 고릴라/코뿔소 시험" 에서 내가 이 프로젝트에 대해 쓴 걸 기억할는지도 모르겠다. 관람을 할 때, 당신은 가상 헤드셋을 쓰고 마치 당신 자신이 고릴라인 것처럼 동물원의 고릴라 우리를 경험한다. 이제 동물원의 운영측은 그 전시물을 새 하드웨어로 포팅하고 버츄어 고릴라를 위해 새로운 인공지능을 넣어줄 것을 제의해왔다.

vgorilla.jpg

아틀란타 동물원(Zoo Atlanta) 전시회에서 방문객들이 마주치게 될 버츄어 고릴라들 중 하나

At the moment, the gorillas don't do much; walking around and exhibiting dominance behavior is about the extent of it. The dominance behavior occurs when a low-status gorilla wanders into a higher-status gorilla's personal space, and it consists of an escalating series of aggressive displays until the low-status gorilla is scared off. It's accurate as far as it goes, but we'd like to extend the behavior model to involve a variety of actions: eating, drinking, sleeping, playing. This will involve creating a model of "gorilla needs" which are fulfilled by these activities in a reasonably realistic manner. That got me thinking about need mechanisms, and they're the subject of this month's column.

그 당시 고릴라는 많은 행동을 하진 않았다. 제한된 공간 내에서 돌아다니고 위협적인 행동(dominance behavior)을 하는 정도였다. 낮은 지위의(힘이 없는) 고릴라 들이 높은 지위(힘이 센)의 고릴라의 영역을 어슬렁 거릴 때, 높의 지위의 고릴라는 낮은 지위의 고릴라 들이 겁먹고 도망갈 때까지 점차 강하게 위협적인 행동을 하게된다. 그런 행동은 점차로 정밀하게 묘사될 것이나 우리는 행동 모델이 점차 다양하게 되길 원한다. 예를 들면 먹기, 마시기, 잠자기, 놀기 등의 행동이 포함되길 원한다. 이런 행동들에 의해서 고릴라의 욕구가 충족되는 관계에 의해서 "고릴라의 욕구" 모델과 행동모델이 연관될 것이다. 이런 것들이 나에게 욕구 메카니즘에 대해서 생각하게 했고, 그 것들은 이번 달 칼럼의 주제이다.


A need mechanism consists of several elements. The main one is a variable which describes how much of a given needed object or substance the organism has at the moment. Various events in the world, or activities on the part of the organism, can cause this variable to go up and down. A very simple example is the remaining ammunition in a first-person shooter. Firing your weapon consumes ammunition and lowers the amount remaining; picking up clips off the floor raises it again.

욕구 메카니즘은 여러가지 요소로 구성되어 있다. 주요 요소는 유기체가 그 순간에 얼마나 많은 (욕구충족에)필요한 물체나 물질을 가졌는지를 설명하는 변수이다. 세계에 있는 여러가지 이벤트들 또는 유기체의 각 기관의 활동들은 이 변수의 값을 올리거나 내린다. 아주 간단한 예는 일인칭 슈팅 게임에서 남아있는 탄약이다. 여러분의 무기를 발사하는 것은 탄약을 소비하고 남아있는 양을 낮춘다; 바닥에 떨어져 있는 탄약을 주워 들으면 다시 오른다.

fps.jpg

Ammunition level in a first-person shooter is one simple need mechanism.

일인칭 슈팅 게임의 탄약레벨은 하나의 간단한 욕구 메카니즘이다.

In designing an autonomous organism, such as a virtual gorilla or a 'bot in a first-person shooter, we want them to act on these needs, to do something to satisfy its need when the variable gets low enough. This requires establishing a threshold point at which the organism will start to exhibit the behavior - getting something to eat (for a hungry gorilla) or going to look for ammunition (for a space marine). The behavior is invoked whenever the need drops below the trigger threshold.

버추어 고릴라나 일인칭 슈팅 게임의 bot(적 NPC)처럼 자동화된 유기체를 디자인하는데있어 우리가 원하는 것은 그들이 작으나마 욕구를 충족하기위해 무언가를 하는 것등의 욕구에 의한 행동을 하는 것이다. 이런 것들은 유기체가 보여주는 행동 - (굶주린 고릴라를 위해)먹을 것을 얻거나 (우주 해병을 위해)탄약을 찾으려하는 행동을 시작할 때의 한계 시작점을 규정한다. 그런 행동들은 욕구가 반응한계점 이하로 떨어질때마다 발생하게된다.

However, this creates a problem. Suppose you establish a threshold for remaining ammunition of 10%. Below that threshold our space marine will go look for some ammo; above it he'll continue exploring. What will happen is that as soon as his ammunition drops below it, he'll go pick up a clip, but once he's got that clip, he'll go back to exploring again, even if there is a second clip right there. After he's fired a few bullets the count will drop and he'll start looking around for another clip. He'll be in a very tight behavioral loop, always using clips and picking up new ones one at a time. Similarly, a hungry gorilla would eat one bite, wander off for a few minutes, then come back and eat one more bite, and so on. That's not the way gorillas, or space marines, behave.

그러나 이것들은 하나의 문제점을 낳는다. 만약 당신이 10%의 탄약을 유지하기위한 반응한계점을 정해놓았다면 탄약이 그 한계점 이하일 때 우리 우주 해병은 탄약을 찾을 것이다. 탄약이 한계점 이상일 때는 계속 탐험을 할 것이다. 무슨 일이 일어나건간에 해병의 탄약이 한계점 이하가 되자마자 해병은 탄약을 챙길 것이다. 그러나 한 번 탄약을 챙기고나면 해병은 두번째 탄약이 바로 근처에 있어도 다시 탐험을 계속 할 것이다. 그 해병이 몇 개의 탄약을 발사하고 그 탄약의 갯수가 줄어들면 해병은 다른 탄약을 찾기 시작할 것이다. 해병은 매우 꽉짜여진 루프(반복루틴) 안에서 계속 행동하게 될 것이다 - 항상 탄약을 쓰고 탄약을 찾고 하는 반복을 계속할 것이다. 마찬가지로 배고픈 고릴라는 먹이를 한 입 베어물것이고, 먹은 뒤 얼마지나지 않아 돌아다니고 곧이어 다시 돌아와서 먹고 또 돌아다니고 하는 식의 행동을 반복할 것이다. 이런 행동들은 고릴라나 우주 해병의 행동과는 맞지 않는 것이다.

What's needed is a second threshold-higher than the first-that tells when to stop the fulfillment behavior. We want the gorilla to continue to eat until she is sated, not just until she is no longer hungry. Similarly we want the space marine to go on picking up ammunition until he's sure he's got enough to last him a while. This mechanism with the two thresholds, one to trigger the behavior and one to inhibit it, occurs quite often in the natural world and in other kinds of devices as well. It's called hysteresis, and it's the reason that the furnace in your house doesn't start and stop every 30 seconds. When you set the thermostat at 68 degrees, the furnace comes on at 68, but it actually goes off at 72. The thermostat doesn't display the inhibitory threshold, but it's built into the machinery.

이러한 현상을 피하기 위해서는 만족 행위를 언제 멈출 것인지 알려 주는 두 번째의 한계점(첫 번째 것보다 높은)이 필요하다. 고릴라의 경우 필요한 것은 고릴라가 허기를 면할 때까지만 먹게 하는 것이 아니라, 배가 부를 때까지 먹게 하는 것이다. 마찬가지로 우주 해병의 경우에는 한 동안 사용하는데 충분한 정도의 탄약을 모으게 해야 한다. 하나는 행위를 촉발시키고 하나는 그 행위를 억제하는 두 가지 한계점을 사용하는 메커니즘은 자연계에서도 상당히 자주 볼 수 있으며, 자연계 이외의 기계 장치들에서도 자주 볼 수 있다. 이러한 방식을 이력(hysteresis)라고 부르며, 보일러도 그런 방식을 사용하기 때문에 30초마다 켜졌다 꺼졌다 하는 일이 없는 것이다. 실내 온도를 20도로 설정해 놓으면, 보일러는 20도에 점화되지만 22도까지 올라가야 꺼진다. 자동 온도 장치가 억제 한계값을 표시하지 않지만, 보일러 내부에는 그러한 값이 내장되어 있다.


But now we have another problem. Suppose our space marine has picked up all the available clips, or our gorilla has eaten all the available food. She's above her hunger threshold, but not yet up to her satiety threshold. With the current mechanism, she'll sit there forever, waiting for more food to come along. Our space marine will continue to search for clips endlessly, even though he's got them all. We need to place an artificial limit on the fulfillment behavior if it's no longer successful.

그러나 우리는 지금 또다른 문제점을 가지고 있다. 만약 우리의 우주 해병이 가질 수 있는 모든 탄약을 얻거나 고릴라가 가능한 모든 음식을 먹었다고 가정한다면. 그 고릴라가 배고픔 반응한계점 이상의 음식을 섭취했지만 포만상태의 한계점에는 미치지 못했다고 한다면. 현재의 메카니즘으로는 그 고릴라는 음식이 더 나오기를 기다리면서 거기에 계속 머물러 있을 것이다. 우주 해병도 마찬가지로 모든 탄약을 가지더라도 탄약을 끊임없이 찾아다닐 것이다. 우리에게는 완전하진 않지만 만족스런 행동을 할 수 있는 인공적인 한계점 영역이 필요하다.

Exactly how this is done depends on how the needed item is distributed, and how smart you want the organism to be. With human beings who know for a fact that there's only so much of the item around, they should stop immediately when it runs out - if you eat all the food in the fridge, you don't hang around the refrigerator hoping it'll magically get some more in it somehow. In the case of the gorilla, though, I would expect her to wait hopefully by the food distribution point for a little while, maybe searching around a bit before giving up. In the case of the space marine, although he may have found all the clips he can see, he also knows that clips tend to be hidden in a variety of places. He shouldn't necessarily stop looking for them as soon as he's picked up all the ones in a room; he should continue to hunt around a little longer, and give up only after he hasn't found any for a while. In each case, we want to set a timer (I'll call it the "persistence timer") every time the fulfillment occurs - the gorilla eats something, or the space marine picks up a clip. It starts to run down while they look for more. If they haven't obtained any by the time the timer runs out, then the behavior is apparently unsuccessful and we interrupt it and return to other things.

정확히 이런 한계점 영역은 필요로하는 아이템이 어떻게 분포되어 있고 그 유기체가 얼마나 똑똑한가에 달려있다. 인류는 꽤 많은 주위의 자원들을 사용하지만 그것이 고갈되면 즉시 멈출 것이다. 당신이 냉장고에있는 음식을 모두 먹었다면 당신은 그 안에서 어떻게든 기적적으로 무엇을 더 얻으려고 냉장고 주위를 어슬렁 거리지 않을 것이다. 그러나 고릴라의 경우, 기대를 가지고 음식 배급 지점 옆에서 잠시 기다리거나 포기하기 약간 전에 주변에서 음식을 찾아 돌아다니게 하는 것도 생각할 수 있다. 우주 해병의 경우, 현재 보이는 모든 탄약들을 찾았다고 해도, 탄약들이 다양한 장소에 숨겨져 있다는 점을 알고 있다. 한 방에 있는 모든 탄약들을 얻었다 해도 그 즉시 탄약 찾기를 멈출 필요가 없는 것이다. 좀 더 찾아 보다가 일정한 시간이 지난 후에야 포기하게 만드는 것이 자연스럽다. 고릴라든 해병이든, 어떠한 만족이 일어날 때마다(고릴라가 뭔가를 먹거나 해병이 탄약을 집는 등) 어떠한 타이머(이걸 '지속 타이머'라고 부르겠다)를 설정한다. 고릴라나 해병이 좀 더 찾아 헤매는 동안 지속 타이머는 계속 감소한다. 만일 타이머가 종료될 때까지 그들이 아무 것도 얻지 못하면 그들의 행동은 명백히 성공적이지 못한 것이며 그렇게 되면 그 행동을 멈추고 다른 일로 돌아오게 한다.

gor-1b.gif

Different types of NPC's require different fulfillment behaviors.

각각 다른 타입의 NPC 들은 저마다의 다른 욕구충족 행동들을 필요로 한다.

However, even this isn't completely straightforward; it depends on the urgency of the need. A gorilla who's eaten enough to not be hungry any more, but is not yet sated, should probably give up and wander off fairly soon. But a gorilla who's still hungry might search for longer, and a starving gorilla might search indefinitely. Depending on the importance of the item, you should set the length of the persistence timer proportionately to the urgency of the need. A space marine who's completely out of ammo should make finding more his first priority, as long as he's not actually under attack.

그러나 이런 것으로는 완벽하진 않다. 이 방법은 욕구에 의해 결정되고 있다. 더 이상 배고프지 않을 정도로 충분히 먹었으나 욕구가 충족된 상태가 아닌 고릴라라면 먹기를 포기하고 곧 바로 벗어나서 돌아다닐 것이다. 그러나 여전히 배고픈 고릴라는 더 오랫동안 먹을 것을 찾아다닐 것이며 아주 굶주린 고릴라는 막연히 계속해서 먹을 걸 찾아다닐 것이다. 욕구의 요구에 비례한 아이템의 중요도에 따라서 당신은 지속 타이머의 길이를 정해야 할 것이다. 탄약을 완전히 소모한 해병은 자신이 공격당하기 전까지는 더욱 더 자신의 첫번째 우선 순위의 행동을 찾아야 할 것이다.

You can also set additional trigger thresholds to initiate a variety of different behaviors at different levels of urgency. A hungry gorilla will go and eat; a very hungry gorilla might try to steal food away from another one, and a starving gorilla might openly attack another one to get its food. The utmost extreme, at least in humans, is cannibalism.

당신은 또한 절실함의 정도가 다른 여러가지 행동들의 초기화를 위해 추가적인 제어 한계값을 설정할 수 있다. 배고픈 고릴라는 가서 먹을 것이다. 아주 배고픈 고릴라는 다른 고릴라들로 부터 좀 떨어져있는 음식을 훔치려고 할 것이고 굶어 죽을 정도의 고릴라는 다른 고릴라의 먹이를 얻기 위해 공격을 할 것이다. 하다못해 인간의 경우에도 극도의 한계에 달하면 서로 잡아먹을 것이다.

This brings me to another point: not everybody behaves the same way. Some people would rather die than become cannibals; others have no such compunction. I have long felt that we need to make more of an effort to create unique individuals in computer games. The positions of these trigger thresholds and the length of the persistence timer should be partially randomized for each individual. Some marines are risk-takers, and won't start to look for ammo until they're down to their last bullet. Others are cautious and start looking early. These differences add richness to your game at a trivial cost in code and CPU time, and I definitely intend to add them to the virtual gorilla exhibit. There's a more detailed discussion of this in another early column of mine, "Not Just Another Scary Face."

이것은 나에게 모든 사람이 같은 방식으로 행동하지 않는다는 또 다른 점을 선사해 준다. 어떤 사람들은 서로 잡아먹느니 차라리 죽는 사람들도 있을 것이고 다른 사람들은 그런 죄책감없이 서로 잡아먹을 것이다. 난 컴퓨터 게임 상의 독특한 개인을 창조하기 위한 더 많은 노력이 필요하다고 오랫동안 느껴왔다. 제어 한계값 들의 위치와 지속 타이머의 길이가 각각의 개인들에게 부분적으로 랜덤하게 주어져야한다. 어떤 해병들은 위험을 감수하고 그들의 마지막 탄환이 바닥날 때까지 탄약을 찾지않을 것이다. 다른 해병들은 신중하기 때문에 일찍이 탄약을 찾기 시작할 것이다. 이런 차이점들은 사소한 정도의 코드와 CPU time을 투자해서 당신의 게임에 풍부함을 더한다. 그리고 난 확실히 그것들을 "Virtual Gorilla exhibit(가상고릴라 전시장)"에 첨가할 작정이다. 이전에 낸 나의 칼럼"Not Just Another Scary Face(그저 다른 무서운 얼굴이 아니다)"에 이 것에 대한 좀 더 상세한 의견이 나와있다.

It's also possible to have too much of a good thing. Just as there are thresholds and behaviors for acquiring more of a needed item, we can also implement thresholds and behaviors for getting rid of excess, at the top end of the scale. In role-playing games, for example, there's often a penalty for carrying too much weight. When this occurs, we want our NPC to dump low-value items out of his backpack until the weight is back down to a manageable level. Choosing which items to dump is of course very tricky, but it's the right response in principle.

제어 한계값에 의한 효과들은 또한 매우 좋은 것들을 가능하게 한다. 욕구 한계값들과 행동들은 단지 필요한 아이템을 좀 더 잘 얻기 위해 필요하지만 우리는 욕구한계값과 행동들을 과잉된 한계값으로 부터 탈피하도록 하는 수단으로 이용할 수 있다. 롤플레잉 게임에서는 너무 많은 아이템을 옮길 때 불이익이 적용되는데, 이런 경우에 우리는 NPC가 그의 배낭이 관리하기 쉬운 레벨까지 내려갈 때까지 배낭에서 낮은 레벨의 아이템을 버리길 원한다. 어떤 아이템을 버릴 것인가 선택하는 것은 물론 속임수 같은 것이지만 그것은 원리대로 옳은 응답을 하는 것이다.


The amount of ammunition you have in a shooter is normally only modified by two actions: firing reduces it; picking up clips raises it again. Otherwise it doesn't change. In the VR gorilla simulator, we're going to want the gorillas' needs to change automatically over time - gorillas gradually get more and more hungry regardless of what else happens. Similarly, different activities should affect the needs at different rates. Gorillas that are very active should get hungry faster than gorillas that are sedentary. This whole system is of course how The Sims works, quite explicitly and openly to the player. In the case of the virtual gorillas we're not going to try to train them, so it can all be hidden.

일반적인 슈팅 게임에서, 플레이어의 탄약 수의 증가, 감소는 단 두 가지 행동에 의해서만 일어난다. 플레이어가 총을 쏘면 탄약은 감소하고, 탄창을 얻으면 탄약은 증가한다. 그 외의 행동은 탄약 수에 영향을 미치지 않는다. VR 고릴라 시뮬레이터의 경우 고릴라의 욕구가 시간이 흐름에 따라 자동으로 변화하게 만들고자 했다. 고릴라는 다른 사건들과는 관계 없이 시간이 지날수록 점점 더 배가 고파진다. 마찬가지로, 다른 종류의 행동들도 서로 다른 비율로 욕구들에 영향을 미친다. 매우 활동적인 고릴라는 정적인 고릴라보다 더 빨리 배가 고파진다. 물론 이러한 시스템 전체는 The Sims의 작동 방식과 동일하다. 다만 심즈의 경우에는 그러한 시스템이 게이머에게 명시적으로 알려지게 되지만, 가상 고릴라의 경우에는 고릴라를 훈련시키는 것이 아니므로 모두 감추어질 수 있다.

sims.jpg

The Sims have a queue of things to do, ordered by the urgency of the need.

The Sims에는 해야 할 일들의 큐가 존재한다. 큐는 욕구의 긴급도에 따라 정렬된다.

The Sims also nicely illustrates another issue: needs interactions. In The Sims, the simulated people have several needs: food, sleep, entertainment, hygiene, the toilet and so on, but they can only do one thing at a time. The needs are all competing for the sim's attention, and they have to get them all fulfilled or they become unhappy - or worse. To manage this they have a queue of things to do, and it's ordered by the urgency of the need. Using the toilet is at the top, entertainment is at the bottom. Because everything in the game takes a long time, often the Sims never get around to having any fun, and get stressed out as a result.

심즈는 욕구들의 상호작용이라는 또 다른 문제도 잘 보여준다. 심즈에서 게임 내 인물들은 음식, 수면, 오락, 청결, 배변 같은 여러 욕구들을 가지나, 한 번에 오직 한 가지 일만 할 수 있다. 욕구들은 경쟁적으로 심즈 인물의 관심을 끌며, 모두 만족되지 않으면 심즈 인물은 행복하지 않은 상태가 되거나, 심지어 그냥 그자리에서 싸기도 한다-.-; 이를 관리하기 위해 심즈는 해야 할 일들의 큐를 사용하는데, 그 큐는 욕구의 긴급도(urgency)에 의해 정렬된다. 배변이 가장 최상위이고, 오락이 가장 최하위이다. 게임 안의 모든 것들은 상당히 시간이 걸리므로, 오락에 대한 욕구를 충족시키지 못해서 스트레스를 받는 일이 종종 일어난다.

With multiple needs, you don't necessarily have to wait until the inhibition threshold is reached to stop the current behavior, or until the persistence timer runs out. If all the behaviors can interrupt one another and they can all last an indefinite length of time, you can recompute the urgency of each need every few seconds, and choose a new behavior whenever a new need is more urgent than the one you're currently fulfilling. However, that could again lead to odd behaviors - a person might eat three bites, sleep for five minutes, go to the bathroom, sleep for another five minutes, go eat another three bites, and so on. In The Sims each behavior consists of a series of animations that take a certain minimum amount of time, and they don't generally interrupt the current behavior until it's finished. And of course it's all further complicated by the fact that you can give them instructions which override their own instincts.

욕구들이 여러 가지일 때, 억제 한계점에 도달할 때까지 또는 지속 타이머가 끝날 때까지 기다렸다가 현재 행동을 중지할 필요는 없을 것이다. 모든 행동들이 다른 행동을 서로 중단시킬 수 있다고 할 때, 그리고 행동들이 무한한 시간동안 지속된다고 할 때, 몇 초마다 각 행동의 욕구 긴급도를 다시 계산하고 가장 긴급한 욕구를 충족시키기 위한 행동을 현재 행동으로 만들 수도 있다. 그러나 여기에는 문제점이 있다. 예를 들어서 밥을 세 숟갈 먹고, 5분 자고, 화장실 갔다가 다시 5분 자고, 다시 세 숟갈 먹는 등의 이상한 행동들을 보일 수도 있는 것이다. 심즈에서 각 행동은 일련의 애니메이션 시퀀스로 이루어지며, 각 애니메이션에는 그 애니메이션이 끝날 때까지의 최소한의 시간이 정해져 있다. 일반적으로, 한 애니메이션이 시작되면 최소 시간이 지나기 전까지는 다른 행동에 의해 중단되지 않는다. 그러나 본능과 직접적으로 연결된 행동인 경우에는 현재 행동을 중단시킬 수도 있으며, 이에 의해 전반적인 처리가 좀 더 복잡해진다.

The virtual gorilla exhibit won't be as complex as The Sims, but we'll probably want a queue of behaviors as well, sorted by urgency, and a certain minimum amount of time that any behavior can be performed. The urgency is a combination of two factors: how far below the trigger threshold the variable is, and a weighting for the type of need itself. For example, playing is intrinsically less important than eating, but not in every possible circumstance. I'm sure as a child you've had the experience of playing for a long time and having so much fun that you didn't notice you were hungry until there was some interruption. For juvenile gorillas we'll give extra weight to the need to play, which will cause it to be higher in the queue than eating until the gorilla gets really hungry.

가상 고릴라 전시장은 심즈만큼 복잡하지는 않으나, 그래도 긴급도 순으로 정렬된 행동 큐는 필요할 것이며, 또 각 행동이 수행될 수 있는 일정한 최소한의 시간을 설정하는 것도 필요할 것이다. 긴급도는 두 가지 요인의 조합이다. 하나는 변수가 촉발 한계점보다 얼마나 더 아래인가, 또 하나는 각종 요구 자체에 대한 가중치이다. 예를 들어서 본능적으로 놀이는 먹기보다 덜 급한 행동이나, 항상 그런 것은 아니다. 어린 애들은 배고픈줄도 모르고 놀이에 열중하는 경우가 있다. 어린 고릴라의 경우 놀이에 대한 욕구에 더 큰 가중치를 부여하면, 정말로 배가 고파지기 전까지는 놀이가 먹기보다 큐에서 더 위쪽에 위치하게 된다.

One of the classic design questions for computer games is whether urgent needs should interfere with performance. Clearly, if you're out of ammo, you can't fire your weapons, so you can't shoot anyone and take his ammunition. If that were the only way to get any, it would create a deadlock. Most shooter games break the deadlock by providing caches of ammunition that you don't have to shoot anybody to get, or letting you use non-firearm weapons to dispatch enemies without needing any ammunition.

컴퓨터 게임에서의 고전적인 설계 문제들 중 하나는, 긴급한 욕구가 행동에 간섭하게 해야 하는가이다. 총알이 없으면 총을 쏠 수 없으므로, 누군가를 쏴서 총알을 뺐을 수는 없다는 점은 당연하다. 만일 적에게서 총알을 뺐아야만 총알을 얻을 수 있다면, 이는 일종의 막다른 골목과 같은 상황이다. 대부분의 슈팅 게임들은 적을 죽이지 않고도 총알을 얻을 수 있도록 하기 위해 탄약 아이템을 제공하거나, 또는 총알 없이도 적을 죽일 수 있는 무기를 제공한다.


With health, however, the situation is different. Obviously somebody who's near death from bullet wounds shouldn't really be able to run around and fight at top speed, but most shooter games simply ignore this. If you create a performance penalty for damage taken in an action game, negative feedback sets in much too quickly and you don't have a chance. In a war game, on the other hand, things move more slowly and you can often compensate for damaged forces with sound strategy or efficient production. Besides, damage is supposed to convey an advantage to the other side; that's the point of causing it.

그러나 생명치의 경우에는 상황이 다르다. 총에 맞아서 거의 죽어가는 캐릭터는 최고의 속도로 뛰어 돌아다니거나 싸울 수 없지만, 대부분의 슈팅 게임들은 이를 그냥 무시한다. 만일 액션 게임에서 대미지에 의한 수행 능력 상의 페널티를 만든다면, 부정적인 피드백이 너무 빨리 설정되어서 상황 반전의 기회를 얻지 못하게 될 것이다. 반면 전쟁 게임에서는 여러 가지 것들이 좀 더 느리게 움직이며, 피해를 입은 부대들이 있다고 해도 좋은 전략이나 효율적인 생산을 통해서 역전의 기회를 찾는 것이 가능하다. 그리고, 피해는 또 다른 측면에서의 장점을...????


fps2.jpg

The effect of health on performance creates a problematic feedback loop.

I don't anticipate having any such problems with the virtual gorillas. For one thing, they don't kill each other - their dominance behaviors, while dramatic, are not life-threatening. The only resource the gorillas can't generate for themselves is food, and we'll make sure it's provided in abundance so that we don't get any deadlocks. I'd like to create a feedback loop in which a well-rested gorilla becomes a playful one; a long-playing gorilla becomes a hungry one; and a well-fed gorilla becomes a sleepy one, so that we'll see a regular round of activities. We'll have to keep a sharp eye out to make sure that it's a stable loop, though. Too much feedback and they start playing, eating and sleeping faster and faster; too little and they slow down and do nothing.

가상 고릴라에서는 이러한 문제들을 신경쓸 필요가 없다. 무엇보다, 고릴라들은 서로를 죽이지 않는다. 그들의 과시 행동은 사나와보이긴 하지만 생명에 위협을 주지는 않는다. 고릴라가 스스로 생산할 수 없는 유일한 자원은 음식이며, 우리는 막다른 상황이 일어나지 않도록 하기 위해서 음식을 항상 충분하게 제공하도록 할 것이다. 내가 만들고 싶은 피드백 루프는, 푹 쉰 고릴라는 놀고싶어 하며, 오랫동안 논 고릴라는 배가 고파지며, 충분히 먹은 고릴라는 잠이 오며, 푹 잔 고릴라는 다시 놀고 싶어 하는, 그런 활동들이 정기적으로 반복되는 것이다. 그러한 루프가 안정적이 되게 하기 위해서는 세밀한 조정이 필요할 것이다. 피드백이 너무 많으면 놀고, 먹고, 자는 순환이 점점 더 빨라질 것이며, 너무 적으면 순환이 느려지다가 고릴라가 아무 것도 하지 않는 상태가 될 것이다.


It's going to be a fun project.

어쨌든 재미있는 프로젝트가 될 것 같다.


번역에 참여하신 분들: chukumi, 파연, 류광, (여기에 추가해 주세요~)