2017년 7월 26일 수요일

G2 Online

After finishing my military service(which was basically working as programmer at a company), I started indie game project with my friend. We called it "Tactical fighters".
We wrote dx8 based in-house engine, and made prototype gameplay based on that engine.
And we showed it to my boss of the previous company. We couldn't receive fund but he proposed us to join his new company and do a new project within the company.

That is the start of "G2 online".



G2 was sequal of "GoldWing2". which had minor succuss in the company.
Basically G2 was flying FPS game. Not flight simulator.
The team was very small most time. only 2~3 programmers and small design and art team was involved. Though the features are very complex. It has most features of most MMORPG games and plus some new cool feature like replay system.

I referenced the Halo 3 replay system a lot. Players could record their play and share among other players.

And we made story mode too. I got to know that making game with story is very hard and time consuming job. It needs hard work of design/art team. If we didnt have story mode we could deliver this game a lot earlier.

Anyway this game didn't succeeded in the korean game market But had some fans in japan.

Youtube video uploaded by japanese fan.

It was many years ago and suddenly this memory came up to me this morning. And I could find some images and movie clip from internet.

This project taught me many thing.
ex : Making game takes long and hard work of many people.
ex : Hard work does not gaurantee success.
ex : Making game engine and game play with 2~4 programmers is stupid idea. (if it is not online game maybe it would not have been that hard).
ex : South koreans don't not like SF and Military at least on the game market.



Some more screenshot.
Boss(Gigantula)


Lobby
Boss(Leviathan)





2017년 7월 24일 월요일

Reconstructing world normal from depth to resolve decal artifact.

UE4 has deferred decal. and it is widely used in our levels.
Onday our artists complained that vertical projected decal pixel shows stretching artifact like below photo.


At first, I thought that multiplying dot(worldnormal, float(0, 0, 1)) to opacity could resolve this issue so that vertical face does not receive decal. But it turned out I was too naive.

Deferred decal material cannot read world normal gbuffer data while it writes normal to gbuffer. So I could use world normal to determine if it is vertical face.

I almost frustrated but soon found the solution. We actually can reconstruct world normal from depth buffer using ddx/ddy instruction.

world normal = cross(ddx(worldposition), ddy(world position)
Multiplying this to opacity give this!

Vertical face does not receive decal.