Сегодня чуть не потерял данную ссылку, на замечательный сайт с огромным количеством бесплатных текстур для игр. Оставляю ссылку в посте, что бы не забывать. А кому еще пригодится, мне не жалко. Текстуры можно использовать в коммерческих продуктах, плюс удобный каталог - что еще нужно для счастья.
May 4th, 2009 in
игрострой |
No Comments
Valve уже давно публиковали свой доклад SIGGRAPH 2007 “Improved Alpha-Tested Magnification for Vector Textures and Special Effects” о том, как очень получить сверх-качественные текстуры с альфа каналом, очень низкого разрешения.
Техника очень проста: берем альфа канал текстуры большого разрешения, к примеру 4096×4096 и уменьшаем до размера 64×64 или меньше со специальным фильтром.
Фильтр в результирующую альфу записывает дистанцию до первого непрозрачного пикселя на большой текстуре, вместо обычной альфа-маски. Дистанцию уже можно корректно интерполировать LINEAR фильтром, в отличие от альфа маски - а обычный ALPHA_REF задает задает границу дистанции после которой пиксель считается прозрачным.
В результате: получаетсся практически векторное качество альфа-маски текстуры и работает на любом GPU поддерживающем LINEAR фильтрацию и альфа-тест, что снова актуально учитывая всякие NintendoDS и iPhone.
Я накидал по данному докладу тестовый фильтр (скачать тут), результаты более чем хороши, попробуйте сами.
Пользоваться так:
DistanceToAlphaFilter исходная_текстура текстура_результат.tga resolution_x resolution_y
Для загрузки файлов используется D3DXCreateTextureFromFile, поэтому нужен файл D3DX9_39.dll (в комплекте). Форматы исходной текстуры могут быть: bmp, dds, dib, hdr, jpg, pfm, png, ppm, tga
Для отрисовки получившейся маски нужно установить следующие стейты:
ALPHABLEND = false;
ALPHATEST = true;
COLORARG1=texture;
ALPHAARG1=texture;
April 19th, 2009 in
игрострой |
No Comments
Тут лежит free content с GDC07, GDC08, GDC09 - в принципе не очень много, но есть всякие интересные доклады.
Вот тут, еще немножко есть http://msinilo.pl/blog/?p=345
И вот тут, еще про God of War 3
April 6th, 2009 in
игрострой |
No Comments
Раньше, когда я занимался в свободное время J2ME играми, очень напрягало отсутствие препроцессора в java, т.к. сложно было делать и поддерживать много микроизменений в коде требуемых издателями/особенностями телефонов и т.д. Тогда я сделал свой препроцессор для java с синтаксисом как у C++, недавно выяснилось - снова изобретал велосипед, но т.к. на момент написания я информации не нашел, напишу об этом тут:
У cl.exe есть отличный ключик /EP о котором естественно написано в MSDN. Так вот этот ключик обрабатывает препроцессром заданый файл и результат выдает в stdout. Обрабатывается файл полноценно, гораздо лучше чем мой велосипед, на который я еще и время зря тратил.
Файл: test.java
//test.java
//------------------------------------------------------------------
import java.io.*;
import javax.microedition.io.StreamConnection;
import javax.microedition.lcdui.*;
import javax.microedition.rms.*;
#ifdef NOKIA
import com.nokia.mid.ui.FullCanvas;
#endif
public class Game
#ifdef NOKIA
extends FullCanvas
#else
extends Canvas
#endif
implements Runnable
{
public Game()
{
#ifdef SOUND_SUPPORT
#include "sound_check.java"
#endif
}
}
//------------------------------------------------------------------
|
| _Winnie C++ Colorizer |
Файл: sound_check.java
//sound_check.java
//------------------------------------------------------------------
//check if sound is supported
Class c = null;
try
{
c = Class.forName("javax.microedition.media.Player");
} catch (Exception ex) { }
if (c != null)
{
System.out.println("Sound supported");
return true;
}
System.out.println("Sound NOT supported");
System.out.println(__DATE__);
//------------------------------------------------------------------
|
| _Winnie C++ Colorizer |
И запустим на них: cl /C /I”c:\commonfiles\” /DNOKIA=1 /DSOUND_SUPPORT=1 /EP /Tctest.java > output.java в результате получим output.java который уже можно скармливать java компилятору.
Так же можно делать с любым текстом где нужен препроцессор, всякие скриптовые языки/генерация кода и т.д., очень полезно знать, что такая фича есть.
February 7th, 2009 in
игрострой |
No Comments
Все давно знают и используют у себя в движках нормал мапы. Художники делают хайрез, “снимают” карту нормалей и все при этом счастливы. Нормалмапы естественно в tangent space, что бы все как у людей было и про мэпинг артистам не думать. Но иногда, на модельках с нормалмапом появляются “швы” их как-то обычно забарывают, но особо про это никто не думает и даже на ушедших в печать играх часто можно увидеть швы на нормалмапе.
Так вот, если подумать, почему же появляются ошибки ? Для этого представим как все работает: запекалка нормал-мапа с хайреза, трассирует лучи и строит карту нормалей (из карты разницы высот или другим способом - неважно) но полученная карта нормалей получается в object space. Затем, запекалка нормал-мапа сама СЧИТАЕТ tangent space и используя посчитанные tangent матрицы, конвертирует полученные нормали в tangent пространство.
В этом и кроется подвох: если расчет tangent матриц у вас в игре и в запекалке карт нормалей отличается (а он 99% будет отличаться, т.к. в каких случаях разрывать мэпинг а в каких нет, даже в разных 3D пакетах реализованно по разному) в местах несовпадения tanget векторов будет шов. Обычно для устранения эффекта стараются не делать зеркальный мэпинг для моделек с нормал-мапом, это минимизирует ошибку, но не полностью её исключает.
Возникает логичный вопрос, что же делать ? Можно конечно пытаться “угадать”, как считается tangent пространство в модуле запекающем нормали в 3D пакете, но это не самый лучший выход на мой взгляд. К счастью недавно я обнаружил вот эту програмку, она умеет считать нормал-мапы используя CUDA и прочие радости и САМОЕ ГЛАВНОЕ позволяет написать свой генератор tangent матриц, такой же как у вас в игре. После этого про швы можно больше не думать. Надеюсь кому-нибудь это поможет уменьшить количество проблем в проекте. К сожалению alien интерфейс делает не очень казуальной использование софтинки, но привыкнуть можно.
February 3rd, 2009 in
игрострой |
No Comments
Недавно, я написал как избежать рванного deltaTime используя простую синхронизацию CPU и GPU.
Семен справедливо заметил, что такой способ синхронизации приведет к тому, что некоторое время в начале кадра GPU будет проставивать в ожидании данных. И, что нужно делать несколько Query синхронизируясь на кадр назад. Тогда и deltaTime будет плавный и GPU idle пропадет.
Вот ссылка на код который синхронизирует на любое заданное количество кадров через серию query. По тестам наибольший выигрыш получился на мощных видеокартах (до 50% от предыдущей схемы), на слабых видеокартах эффект заметен гораздо меньше, но тоже присутствует.
January 24th, 2009 in
игрострой |
No Comments
Вот, народ сегодня начал писать про вирус новый, я между тем с ним уже два дня веду войну на работе. При том, что обнаружил вирус чисто случайно.
Обнаружился он когда я с сетевой код пробовал запустить и обратил внимание, что все результаты gethostbyname возвращали одинаковый IP. После того как баги в своем коде не обнуружил, начал рыть глубже и нашел это зло.
Вот тут про него умные люди пишут, я же от себя добавлю по результатам борьбы с ним: никакими из существующих антивирусов по состоянию на 13 января его обнаружить не удалось, никакие ad-aware проги его не видят. Между тем вирус внедряясь в svhost пробрасывает весь мой трафик через огромную сеть relay серверов в Амстердаме, совершенно прозрачно для меня и устанавливает руткит на зараженный компьютер, в общем вся ваша информация сразу перестает быть конфиденциальной.
Ах, да - судя по всему разных типов вируса много: для заражения по локалке и для заражения через флешку, а ко мне, я почти уверен, залез через браузер.
Определяется с последними апдейтами как: Worm:W32/Downadup.AL, Net-Worm.Win32.Kido, Worm:W32/Downadup.AL, Worm:Win32/Conficker (Microsoft), W32/Conficker.worm.gen (Symantec), Mal/Conficker (Sophos), будте осторожны!
p.s. из антивирусов стоял корпоративный Nod32 со свежими апдейтами 
January 15th, 2009 in
разное |
No Comments
Простая и удобная утилита которая считает метрики кода. Натравил на нашу прелесть и вот, что получилось:
Игра + Движок
——————————————
1284 файлов
320735 строк кода
65635 пустых строк
39803 строк с комментариями
Редакторы (уровней, спецэффектов, графов-анимации, звуков, ForceFeedBack эффектов)
——————————————
383 файлов
72286 строк кода
14476 пустых строк
8790 строк с комментариями
Шейдеры:
——————————————
101 файл
12131 строк кода
2571 пустых строк
2609 строк с комментариями
Плагины и тулзы для арта:
——————————————
113 файлов
27846 строк кода
5242 пустых строк
4850 строк с комментариями
Все это пишут и поддерживают 5 программистов (4 и лид) + Я (30-40% времени трачу на код и архитектуру, больше не получается)
Естественно в метриках нет никаких SDK и прочего шлака, все это мы написали своими руками.
p.s. ради интереса нашел в TXT “Войну и Мир : Том 1″ и померил. Получилось: 12821 строка, понятно, что строчки там длинные, но все равно круто.
January 6th, 2009 in
игрострой |
No Comments
Вот кстати вспомнил: в свое время пришлось с этим помучаться, на некоторых драйверах Nvidia, pow(n, 0.0) возвращает -1 Если кто использует степень спекуляра которую художники могут менять, то на некоторых драйверах будут неприятные артефакты.
January 4th, 2009 in
игрострой |
No Comments
К сожалению в нашем проекте, внутри еще живет ANSI для печати текста, а локкит мы естественно сделали unicode (это обычный unicode csv, легко парсить и локализаторам удобно)
Через некоторое время выяснилось, что WideCharToMultiByte на Xbox360, который в соответствии с текущей локалью конвертирует UTF16 в ANSI не работает, для русского языка! Т.к. просто тупо нет русской локали, а при выборе русского языка в Dashboard, возвращается локаль UNITED_STATES. В результате пришлось писать самому руками конвертацию для ANSI 1251 и 1252. Так вот для тех, кто будет писать конвертацию, следующие ссылки (я о них узнал, когда уже все сделал сам - в общем как обычно изобретал велосипед)
Таблицы соответствия юникода и ANSI для различных code pages лежат вот тут.
А вот тут лежит либа, которая все что угодно может делать с кодировками, к сожалению либа “заражена” GPL лицензией поэтому она только на посмотреть, хотя вроде и LGPL есть при распространении как *.lib *.h
December 27th, 2008 in
игрострой |
No Comments