All times are UTC + 2 hours



Post new topic This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 
Author Message
 Post subject: 3D програмиране - теория.
PostPosted: Wed Jan 19, 2005 4:38 pm 
Offline
модератор
User avatar

Joined: Jul 09, 2003
Posts: 2580
Location: Sofia
В тази тема ще събирам необходимата теория, без чието поне бегло познаване не може да мине нито един гейм-дизайнер или модер. Например - как всъщност работи видеокартата, какво е шадер и каква ми е ползата от него, какво е значението от подреждането на полигоните и броя им, как се прави Normal Map и много други.

_________________
Пред винкела всички са равни !

15 години GameDev - 15 години цирк !


http://www.youtube.com/user/demiurg3D/videos


Top
  Profile  
 
 Post subject: Shaders
PostPosted: Wed Jan 19, 2005 4:41 pm 
Offline
модератор
User avatar

Joined: Jul 09, 2003
Posts: 2580
Location: Sofia
Това е статия на MSVC от предишния форум за 3D Programmng за шадерите.
__________________________________

В тази секция ще се дискутират теми и проблеми относно Shader Languages.
Преди това искам да поясня на хората, които не знят, какво е това.
Ще започна с малко технически и предисторически обяснения.
С появата на компютърната графика се появява и нуждата от детайлност (и/или реалност) на
изображението. Постепенно навлиза и нуждата изображението да се движи. В самото начало
движещата се картина се е обновявала бавно след изчисление за всеки кадър. После хората
рещили, че могат да изчислят кадрите предварително и така се появили първите компютърни
видеоматериали. Но съществувала и нуждата парамтетрите на някои от изображенията да бъдат
променяни в реално време. Това струвало лошо качество на изображението. За да се ускорят
изчисленията, започнали да се "съединяват" компютри. С васяка изминала година и технологиите
се развивали и така изображенията, започнали да стават по-бързи и по-детайлни. И така до ден
днешен...
В наши дни компютърната графика (2D/3D) е силно разпространена. Дали в реално време или вече
рендирана (записана като видеоматериал) няма значение, но ние продължаваме да търсим качество
и скорост. Всички ефекти могат да бъдат пресъздадени по обикновен начин като изчисленията се
пращат на централния процесор, който в по-голямата част от случаите не е специализиран.
С неспециализиран искам да кажа, че не е оптимизиран за векторни изчисления например, т.е.
няма специализирани за целта инструкции, или ако има, те не са достатъчно бързи.
Например за смесването на цветовете на две текстури 256х256 пиксела ще е необходимо много време
на процесора, а нека не забравяме и всичко останало, което той има да направи минимум 24 пъти за
една секунда, за да ви нарисува една красива 3D сцена. Тук на помощ идва видеокартата, която също е
процесор, но за разлика от централния, тя е специален, т.е. съдържа такива инструкции, които са
необходими за изчислението на вектори (1-, 2-, 3- или 4- мерни). Към векторните изчисления спадат
сметките за пиксели, вертекси, матрици или обикновени вектори и параметри, необходими за
пресъздаването на едно 2D или 3D изображение. Възниква тогава въпросът как да управляваме този
процесор и как да го накараме да рисува това, което искаме. Тук идват на помощ специалните
библиотеки за това, както и драйвърите, които получаваме при покупката на нашия нов
джинджипляктор, т.е. видеокарта или 3D ускорител, както също го наричат някои хора. В
драйвърите за съответната платформа, са имплементирани съответните специални библиотеки,
с които прогрмистът може да "кара" хардуера да прави това, което иска, но ...с някои ограничения.
Такива специални библиотеки са например OpenGL, Direct3D и Glide.
За постигането на красиви ефекти често се налага фрагментна обработка на данни на ниво вертекси,
текстурни пиксели или крайни пиксели. Това до голяма степен не се поддържа директно от библиотеката
или често не е това, което искаме. Това са ограниченията, за които споменах по-горе, което не означава,
че даден ефект не може да бъде постигнат, а това, че той вероятно ще работи бавно, тъй като сметките
ще бъдат поети от централния процесор,което в една 3D игра би подразнило играещия или даже би довело
до невъзможност да се играе. За да се допринесе за скоростта и качеството на едно изображение,
производителите на видеокарти въведоха нов тип графични процесори, които могат да бъдат програмирани.
Това пак става с помощта на специалните библиотеки, за които говорех по-горе, но с техни разширения
(например GL_EXTENSIONS) или нови версии. Самото програмиране на графичния чип става индиректно.
Използват се специални скриптови езици, които се подават като текст на специални функции в главната
програма. След пускането на програмата драйвърът "превежда" скрипта на езика за картата, за която е
писани и той се задейства. Въпросните скриптове се пишат на езици, наречени с общото име "Shader
Languages", a самите скриптове се наричат "Shaders". "Шейдърите" се делят на вертексни, пикселни,
текстурни и пр. в зависимост от това за обработката на какво са предназначени.
Примери за "шейдърни" езици са VP - Vertex Programs (синтаксисът е Асемблер), CG - C for Graphics
(синтаксисът е на C с някои особености), HLSL - High Level Shader Language
(езикът е подобрен на CG и интерпретира абсолютно същото, но е само за DirectX).
Идеята на всички от тях е да накарат видеокартата да не мързелува, а да върши максимално това, което
може, а не централният процесор да се мъчи и по този начин да къса нервите на потребителите, дали
пачки пари за поредното инженерно чудо.
Концепцията при всички "шейдърни" езици е една и съща: данните (вертекси, нормали, текстурни координати,
текстури, цветове и тн.) се пращат по определени места по оперативната памет или паметта на картата
и от там биват дастъпвани и обработвани от "шеидър" програмата.
"Шейдърите" имат и някои недостатъци. Например не всички видеокарти ги поддържат. Ще попитате сигурно
кои карти ги поддържат. Модели колкото щеш и затова просто погледнете преди това спецификацията на
картата, която имате или която искате да купите. Аз ви съветвам да ползвате последните модели на
nVidia и ATI, като слабостта към първите ми е по-голяма. Освен това за момента могат да се пишат
"шейдъри" с ограничена дължина (фиксирана е за конкретния хардуер). Асеблерните "шейдъри" като VP
имат ограничение в броя регистри, броя на первертексните потоци и инструкциите, до които имате достъп
(те се увеличават с всяка нова версия на конкретния хардуер).
Като заключение към "краткия" си досаден увод искам да кажа, че много скоро "шейдърите" ще изместят
изцяло конвенционалното програмиране на графика и то ще стане API-независимо, т.е. ще е почти
без значение дали използвате OpenGL или Direct3D. Затова се хващайте, ако още не сте се захванали...

Пожелавам ви успех и приятно прекарване по форумите на 3DBG!
Всякакви предложения и забележки относно секцията се приемат (незадължително с удоволствие)!

MSVC

_________________
Пред винкела всички са равни !

15 години GameDev - 15 години цирк !


http://www.youtube.com/user/demiurg3D/videos


Top
  Profile  
 
 Post subject: Какво е Direct X ?
PostPosted: Mon Jan 24, 2005 12:47 pm 
Offline
модератор
User avatar

Joined: Jul 09, 2003
Posts: 2580
Location: Sofia
DirectX е набор от API-та (Applications Programming Interfaces), разработени от Майкрософт, който предлага директен достъп до хардуера под Windows. Един API работи като мост мужду програмата (играта) и мултимедийния хардуер, като контролира набор от функции от ниско ниво а достъп до хардуера или емулира такъв, ако няма. Тези функции включват поддръжка на 2D и 3D графично ускорение, контрол на няколко входни устройства, функции за семплиране, смесване и извеждане на звук , контрол на мрежова мултиплейър игра, както и контрол на различни мултимедийни поточни (streaming) формати. Фактически чрез тези свои библиотеки DirectX прехвърля тежестта от разработчика на игри върху разработчика на хардуер.
DirectX се състои от две части: Runtime и SDK (Software Development Kit). SDK съдържа всички библиотеки, инструменти и цялата информация, нужна на програмиста, а Runtime е това, които е нужно на крайния потребител.
Накратко за по- важните API от DirectX:
- Direct3D – пълен набор от real-time 3D графични инструменти, които предлагат бърза обработка и рендеринг на цялата 3D поточна линия (pipe-line) – трансформации, осветление и растеризация, с прозрачен достъп до хардуерното ускорение (функции, „вградени” във видеокартата, които се изпълняват много по- бързо от софтуерните). Хардуерното ускорение предлага възможности за работа със Z-buffer, antialiasing, alpha-blening, mip-mapping, atmospheric effects, perspective- correct texture mapping, vertex & pixer- shaders.
- DirectDraw –интерфейс за директен достъп до видео паметта, хардуерен overlay и пр. 2D възможности. След DX8 интерфейсите DirectDraw и Direct3D са обединени в един – DirectX Graphics, влючващ и библиотеката D3DX (Direct3D extension).
- DirectShow е архитектура за поточна медия за Windows. DirectShow поддържа широк набот формати – Advanced Streaming Format (ASF), Motion Picture Expert Group (MPEG), Audio-Video Interleaved (AVI), MPEG Audio Layer-3 (MP3), Windows Media Audio (WMA), Windows Media Video (WMV), QuickTime, MIDI и други. Позволява създаването на собствени компоненти за поддръжка на нови формати или ефекти. Автоматично разпознава и използва хардуерното ускорение, но поддържа и системи без него.
- DirectSound – отговаря за аудио- приложенията. Предлага просвирване на няколко потока едновременно, смесване, триизмерна звукова среда (с локализация на източника), най- различни ефекти (ехо, хорус, динамична промяна на параметрите на звука ).
- DirectPlay – опростява достъпа на приложението (играта) до комуникационните услуги. Предлага начин игрите на отделните играчи да контактуват една с друга, независило от мрежовия протокол.

_________________
Пред винкела всички са равни !

15 години GameDev - 15 години цирк !


http://www.youtube.com/user/demiurg3D/videos


Top
  Profile  
 
Display posts from previous:  Sort by  
Post new topic This topic is locked, you cannot edit posts or make further replies.  [ 3 posts ] 

All times are UTC + 2 hours


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
2002 - 2010 3DBG Network - All Rights Reserved!