Quest3D - Русскоязычное сообщество

Quest3D => Визуализация, Шейдеры => Тема начата: KBECT0MAH от 25 Декабря 2007, 04:18:22



Название: "Крутизна и реализьм" - тема про шейдеры
Отправлено: KBECT0MAH от 25 Декабря 2007, 04:18:22
В ветке с исходниками возникли вопросы про шейдеры, предлагаю в этой теме продолжить обсуждение.
Все кто обладает полезной информацией и готов ей делиться, просим поучаствовать в теме :D

Немного цитат:
Цитата: KBECT0MAH
...
в "Квесте" если используешь заготовки (Templates), то там в названиях часто
встречается "DX8". Это пояснение что данный канал будет работать со старыми видеокартами
поддерживающими только  "DX8", но я думаю что если человек разбирается в программировании
то он может сделать каналы и шейдеры под "DX9", а может даже и под "DX10"  :D

Главное оличие версий "DX" поддержка разных версий шейдеров, чем выше тем круче и реалистичнее 8)
но и железо должно поддерживать этот "DX", а то не увидишь ничего..

Цитата: Const_47
http://ru.wikipedia.org/wiki/DirectX (http://ru.wikipedia.org/wiki/DirectX)

"Крутизна и реализм":))) - это в первую очередь вопрос практики и умения, а потом версии шейдера. Выше версия - больше инструкций, и только. Очень хороший тон, создавать несколько версий шейдеров, для разного поколения видео. Что бы человеку который хочет посмотреть на презенташку, не обязательно покупать для этих целей скажем fx8800 :))) а вполне можно было использовать mx440.   

Цитата: den_ya
...
и еще речь зашла о шейдерах, кто нить из вас сам создает шейдеры?
если да то с каких программ лучше начинать?(я имею ввиду где требуется минимум программирования) и нужны ли они в quest3d?
вообще то до меня еще туговато доходит что такое шейдер,понимаю что такое модель,материал и текстура но вот шейдер пока еще не очень
http://ru.wikipedia.org/wiki/%D0%A8%D0%B5%D0%B9%D0%B4%D0%B5%D1%80
все вроде понятно но вот смысл уловить пока не могу и думаю что практика все исправит(знать бы только с чего начинать) пусть даже и не пригодится потом


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Const_47 от 25 Декабря 2007, 05:41:04
Тут двумя словами не скажеш, думаю начинать нужно вот с этого, ничего попроще я не нашел.
http://www.ixbt.com/video2/terms2k5.shtml
http://forum.vingrad.ru/forum/s/76371eaca88a0ad4e54fdef4c8f98179/topic-73464.html
Но нужно учесть, что например в FXcomposer cемантика ближе к Q, то есть меньше редактировать код.
кого эта тема интересует больше следует заглянуть сюда, в шейдерописании:))) понимание
вот таких основ очень приветствуется.
http://kappasoft.narod.ru/info/3d/3d.htm
Также приветствуется знание основ программирования.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 26 Декабря 2007, 00:51:25
http://www.ixbt.com/video2/terms2k5.shtml
интересная статья
вот что я нашол
http://www.3dtutor.ru/topic401.html?mode=threaded
и еще с официального сайта(там есть XNA and Quest3D)
http://www.lumonix.net/shaderfx.html

(причина редактирования - "оверпостинг")


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Const_47 от 26 Декабря 2007, 05:14:23
Уже посмотрел. Довольно приличный набор эффектов, художникам-визуализаторам вполне должно хватить. Юзайте на здоровье :))))
# Texture Maps
# Normal Mapping
# Subsurface Scattering
# Perlin Noise Procedural Textures
# Detail Mapping
# Detail Normal
# Reflection
# Refraction
# Light Attenuation
# Fresnel fall-off
# Parallax Mapping
# Bump Mapping
# Relief Mapping
# Up to four dynamic point lights
# Vertex Color and Alpha
# Alpha Test
# Animated UV Coordinates
# Glowing Materials
# Simulated Global Illumination
# Light/Shadow Mapping
# Projected Textures
# Ambient, Diffuse, Specular Lighting
# Toon Shading
# Fur


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: KBECT0MAH от 26 Декабря 2007, 06:00:08
Немного ссылок по NVIDIA FX Composer 2:
сайт - http://developer.nvidia.com/object/fx_composer_home.html (http://developer.nvidia.com/object/fx_composer_home.html)
прямая ссылка (.EXE 217 MB) - FX Composer 2 (http://developer.download.nvidia.com/tools/FX_Composer/2.0/FX_Composer2_2.02.1106.1745.exe)
прямая ссылка (PDF) - Quick Tutorial (http://developer.download.nvidia.com/tools/FX_Composer/2.0/Quick_Tutorial.pdf)
прямая ссылка (PDF) - Overview (http://developer.download.nvidia.com/tools/FX_Composer/2.0/FX_Composer_2_Overview.pdf)
прямая ссылка (PDF) - User Guide (http://developer.download.nvidia.com/tools/FX_Composer/2.0/User_Guide.pdf)
видео (YouTube) - http://www.youtube.com/watch?v=qAFQGZ0bAyc (http://www.youtube.com/watch?v=qAFQGZ0bAyc)

2 Const_47
Имеет ли смысл искать данный продукт? Пожалуйста развей мои сомнения  :D
Поможет ли он освоить HLSL для "Квеста" или это какой-то другой HLSL
специально для "Макса"? Там на некоторых скринах NVIDIA FX Composer,
ты упоминал что лучше в нем делать шейдеры для "Квеста".

(http://www.cg-academy.net/pages/topic_games/dvds_hlsl_shader_creation_01/packshot_aclm.jpg) (http://www.cg-academy.net/pages/topic_games/dvds_hlsl_shader_creation_01/dvds_hlsl_shader_creation_01.php)
нажмите на картику для перехода на страницу CG Academy


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Const_47 от 26 Декабря 2007, 18:00:33
Shader FX 2.0 - это палка с двумя концами, с одной стороны - это возможность быстро создавать шейдера без знаний программирования(принцип аля квест), с другой вы по факту останавливаетесь на тех эффектах которые вам предоставляет прога. В Shader FX 2.0 есть возможность создавать и свои шейдера(не путать с редактированием чужих), но под сомнением что это удастся без знаний в области механики 3D. Очень сильно порадовала возможность ехпорт из Shader FX 2.0 в FXCомposer. Оптимально это сбор шейдера в Shader FX 2.0 и доредактирование его в FXComposer. То есть чем больше у вас знаний, тем больше у вас возможностей. Также есть возможность экспорта в Q3D!!! Но например я для себя не вижу смысла отваливать деньги за эту прогу, так как hlsl код всех этих эффектов можно без проблем найти на сайте NVIDIA или ATI. Остается по факту скопипастить, и подключить к Quest3D. Каждому надо решать для себя. Правда хотелось бы посмотреть на "леченную" версию, для дальнейшего изучения.
Пришло в голову что тим-плей  Shader FX 2.0-FXComposer-Quest3D был бы не плохим.:)))   

HLSL - есть один. Вот токо подключение шейдера к разным двигам осуществляется по разному , и для разных двигов может существенно отличаться. Для Q3D cемантика подключения описана тут    http://rapidshare.com/files/79182478/semanticQ3D.rar.html
Cемантика FXComposer довольно близка к Q3D. С другой стороны, процес редактирования
шейдеров в RenderMonkey значительно удобнее. По сути без значения где писать(редактировать) шейдера, где кому больше нравится.

26 Декабря 2007, 19:23:25
Вот нашел ОБАЛДЕННАЯ КНИГА для начинающих на рус языке.
http://netlib.narod.ru/library/book0053/index.htm
Я когда то ее мучал:))) на инглише.

(причина редактирования - "оверпостинг")


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: KBECT0MAH от 26 Декабря 2007, 22:26:01
Const_47, ты просто перетри названия через редактирование поста, а то и правда
в заблуждение вводишь  ;)
Ссылку которую я давал, это видео уроки про HLSL, только я не разбираюсь и поэтому просил
проконсультировать..

Начет "ОБАЛДЕННОЙ КНИГИ", там только 7-мь глав из 19-ти, остальные наверно еще не переведены
на русский или не переведены в HTML  :-\
Но все равно, спасибо!!

Редактирование:
вышел я на главную страницу (http://www.netlib.narod.ru/news.htm) и почитал, они переводят книги и выкладывают кусками..
последний кусок "Шейдеры для программистов игр и художников" был в марте,
видно все силы кинули на книгу «Программирование ролевых игр с DirectX (2-е издание)»  :'(




Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Const_47 от 26 Декабря 2007, 22:44:04
&KBECTOMAH
Ок перетру.
Да я понял, что видео :)))Видео уроки смотри обязательно, если на шару:)))
На инглыш есть полная версия книги. На русском думаю тоже будет(когда перекладут,естесно :). Для начала в первых главах разгребись основательно.
И попробуй следуя книги собрать примеры. Они очень простенькие. Скачай с ATI RenderMonkey. Там в самой тулзе куча примеров, как и в ФХКомпозере.

27 Декабря 2007, 21:58:38
В комплекте с FXComposer2 идет такая тулза как MentalMill! Бесплатный аналог Shader FX 2.0!!! MentalMill очень понравился, можно собирать шейдера не программируя. Принцип блок-схем аля Quest. По сути проектировка шейдера. Вот она долгожданная шара! :)
Мой выбор это MentallMill - FXComposer2 - Quest3D.

(причина редактирования - "оверпостинг")


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: KBECT0MAH от 06 Января 2008, 00:39:04
У китайских братьев (http://www.51render.com/article.asp?id=393), появился Shader FX 2.03.
!!Для скачивания надо регистрироваться!!
Только не забудьте, что выбираете в поле вопрос и вводите в поле ответ ;)
я уже раза два регился и опять не могу войти  :-\ забыл что я там вводил..

Если кто скачает, выложите куда нибудь.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 06 Января 2008, 12:50:09
rapidshare (http://rapidshare.com/files/79412778/LUMONIX_SHADER_FX_V2.03_FOR_3DS_MAX.rar)
только я еще не пробывал устанавливать,но это то на что ссылаются китайские братья ;) советую не тянуть пока ссылочка не померла

что то пока не врубаюсь как установить вроде все просто но почему то не получается  ???
у меня 9 ый макс + SP2 ,может из за пака ? хотя наврядли

(причина редактирования - "оверпостинг")


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: KBECT0MAH от 07 Января 2008, 18:24:28
что то пока не врубаюсь как установить вроде все просто но почему то не получается ???
у меня 9 ый макс + SP2 ,может из за пака ? хотя наврядли
У меня тоже СП2 на 9-м, установилось со второго раза  :D
С начало запускаешь "Install_ShaderFX.exe" из папки "Installers", при инсталяции указываеш
основную папку "Макса" (Root), потом запускаешь аппдейт в зависимости от битности "Макса",
"3dsMax9-32bit_UpdateONLY.exe" или "3dsMax9-64bit_UpdateONLY.exe"
Потом в "Максе" в меню "Rendering" выбираешь "shaderFX" и регистрируешь используя "кейген".

Читай "How To Install.txt" и "Install.txt" и будет тебе счастье  ;)

Еще немного информации: для отбражение в "Viewports" надо выставить DirectX, а то ShaderFX будет ругаться



Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 07 Января 2008, 23:47:02
KBECT0MAH

спасибо!!! все установилось с первого раза,я просто сам тормоз(запутался),кстати из за "How To Install.txt"
так как там было написано
Цитировать
* the installer expects the '3dsmax \ plugins' folder to be the folder that loads plugins when max starts
* if you use a different path structure (i.e. a custom plugin folder) you may have to manually copy the plugins and scripts
а так как с английским у меня фигово я обычно делаю все наугад и
поэтому я и стал устанавливать в папку plugins а от туда раскидывать по папкам например ui в ui, Scripts в Scripts и т.д


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Ovod от 01 Апреля 2008, 02:33:37
А вот эту ссылку видели уже, наверное?

http://www.bencloward.com/shaders_NormalMapMaker.shtml

Создание карт нормалей, не помню уже, где нашел.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sonjaaa от 01 Апреля 2008, 06:22:00
Здесь проскакивал вопрос про урок HLSL Shader Creation от CG Academy, кому надо можете сами скачать и посмотреть (Ссылки на DVD 1 - HLSL Shader Creation 1: HLSL Fundamentals).
В данном уроке содержится следующее:

CH 01: What is HLSL?
Ben explains what HLSL is and why its useful to learn how to use it.

CH 02: The Graphics Pipeline
Then he gives a run through of a typical pipeline on current video cards. Explaining where the different elements of HLSL shaders come in to play.

CH 03: Shader Writing Setup
Ben then shows how to setup 3dsmax and 3rd party software to create an intuitive and fast shader development environment.

CH 04: Basic Programming: Data Types
Now we look at some of the fundamentals concepts of programming in HLSL. Ben starts with Data Types

CH 05: Basic Programming: Structs
Then he moves on to explain Structs .

CH 06: Basic Programming: Functions
And Ben wraps up this section by looking at how Functions work in HLSL.

CH 07: FX Framework: The User Interface
HLSL shaders have a standard framework in which they should be created. This is known as the FX Framework. Here Ben explain the GUI elements of that framework.

CH 08: FX Framework: Input & Output Structs
We then look at the Input and Output Structs of the FX Framework.

CH 09: FX Framework: Vertex & Pixel Shaders
Then we look at the main "meat" of the FX Framework, the Vertex and Pixel Shaders.

CH 10: FX Framework: Techniques & Passes
And we finish this section by exploring Techniques and Passes.

CH 11: Creating Simple Shaders
With the FX Framework under our belt we now have the tools to attempt creating simple shaders. Here Ben shows you how to create a very simple shader to get the ball rolling.

CH 12: A Diffuse Shading Model
And we complete the DVD by looking at how we can simulate Diffuse lighting in a shading model . Then Ben shows us how to implement this in our simple shader. We now have our first functional HLSL shader.

http://rapidshare.com/files/95076830/CG_Academy_-_HLSL_Shader_Creation_1_-_HLSL_Shader_Fundamentals.part01.rar
http://rapidshare.com/files/95078253/CG_Academy_-_HLSL_Shader_Creation_1_-_HLSL_Shader_Fundamentals.part02.rar
http://rapidshare.com/files/95079279/CG_Academy_-_HLSL_Shader_Creation_1_-_HLSL_Shader_Fundamentals.part03.rar
http://rapidshare.com/files/95080480/CG_Academy_-_HLSL_Shader_Creation_1_-_HLSL_Shader_Fundamentals.part04.rar
http://rapidshare.com/files/95084105/CG_Academy_-_HLSL_Shader_Creation_1_-_HLSL_Shader_Fundamentals.part05.rar
http://rapidshare.com/files/95085352/CG_Academy_-_HLSL_Shader_Creation_1_-_HLSL_Shader_Fundamentals.part06.rar
http://rapidshare.com/files/95086663/CG_Academy_-_HLSL_Shader_Creation_1_-_HLSL_Shader_Fundamentals.part07.rar
http://rapidshare.com/files/95088075/CG_Academy_-_HLSL_Shader_Creation_1_-_HLSL_Shader_Fundamentals.part08.rar
http://rapidshare.com/files/95089268/CG_Academy_-_HLSL_Shader_Creation_1_-_HLSL_Shader_Fundamentals.part09.rar
http://rapidshare.com/files/95090500/CG_Academy_-_HLSL_Shader_Creation_1_-_HLSL_Shader_Fundamentals.part10.rar
http://rapidshare.com/files/95337503/CG_Academy_-_HLSL_Shader_Creation_1_-_HLSL_Shader_Fundamentals.part11.rar
http://rapidshare.com/files/95337650/CG_Academy_-_HLSL_Shader_Creation_1_-_HLSL_Shader_Fundamentals.part12.rar


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Ovod от 01 Апреля 2008, 22:47:55
Видео - это здорово) Жаль только, что для меня рапида - это труба с гайками.
К слову, вот здесь нашел учебничек по программированию на DX9, в котором пара глав посвящена HLSL. Язык русский, перевод. Ресурс вообще хороший.
http://www.proklondike.com/contentview.php?content=270


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: IYV от 03 Апреля 2008, 21:07:07
 Помогите пожалуйста установить ShaderFX.Кейген не срабатывает,выдает ошибку.Кто знает,в чем может быть дело? скр http://www.easyload.ru/download/?10229


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Medwedius от 04 Апреля 2008, 09:33:15
Какую ошибку? Пилюлю надо запускать из макса через Maxscript/run script и выбрать файл лекарства. В нем ввести МАК адрес. Как его узнать?  :) Идешь в Пуск/Выполнить (Start/Run) (это в Винде) набираешь cmd и ентер, набираешь ipconfig /all Физический адрес и есть МАК адрес... Удачи.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 11 Июня 2008, 21:28:31
В максе есть такая фитча
((http://i054.radikal.ru/0806/9a/6f029e5fded0.jpg) (http://www.radikal.ru))
C помощью которой вроде можно из материалов делать шейдеры.
Сделал (прикрепленный).
При вставке его в квест получается просто черный обьект
(http://i027.radikal.ru/0806/ae/c95087f1e55c.jpg) (http://www.radikal.ru).
Что я не так делаю или как правильно атачить шейдеры в квесте, подскажите пожалуйсто.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: TOXin от 12 Июня 2008, 01:40:02
Вам нужно подогнать ваш шейдер под квестовскую семантику.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 12 Июня 2008, 16:01:23
Тоесть, не все шейдеры одинаково подходят к квесту?
И матэдитор делает "неправильные" fx-файлы?
А в синематику я побаиваюсь изменять, пока нет опыта,
но если кто встречал в нете про эти маэдиторские файлы - кинте ссылку.

ps А в квесте я правильно подключил?
pss Да, еще и после подключения, этот кубик нельзя изменять по цвету и пр. (где на рисунке знак "?")


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 12 Июня 2008, 18:39:55
to Brothermechanic

Подключил всё правильно, правда папка "material" уже не пригодится :)

Про симантику...
В шейдере надо прописать "метки" для квеста, что бы он знал, что есть что.

Пример для вектора:

float3 lightcolor : CHANNELVECTOR0
<
   string UIName = "LightColorA";
   string UIWidget = "color";
> = {1,1,1};

Пример для текстуры :

texture diffuseMap : TEXTURE0
<
    string ResourceName = "diffuse.jpg";
    string ResourceType = "2D";
>;

texture BumpMap : TEXTURE1
<
    string ResourceName = "normal.tga";
    string ResourceType = "2D";
>;

и т.д.

TEXTURE0, TEXTURE1, TEXTURE2...
 Кстати в этой последовательности и надо линковать каналы, т.е. если TEXTURE0 - это diffuse, а TEXTURE1 - normal, то первым линкуется дифуз, а второй нормал и т.д. :)
Тоже самое и с векторами, значениями(CHANNELVALUE0)и матрицами(CHANNELMATRIX0), только эти эти значения меняются через соответствующие каналы, которые линкуются непосредственно с объекту HLSLObject.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 12 Июня 2008, 20:51:20
dfx, спасибо за faq, Я ПОНЯЛ!!! ... вроде...
Буду пробовать. Через блокнот ведь можно изменить?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 12 Июня 2008, 22:00:22
to Brothermechanic
Можно и в блокноте, хотя я просто линкую к HLSLObject текстовый канал, копирую туда код шейдера и правлю всё уже там...


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Glow от 13 Июня 2008, 14:58:04
Такой вопрос - как в шейдере поставить управление масштабом UV от переменной, причем отдельно U и М?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 13 Июня 2008, 19:53:13
To Glow

Вот пример блока кода, в котором берутся данные о модели из приложения:

   half4 position      : POSITION;
   half3 tangent      : TANGENT;
   half3 binormal      : BINORMAL;
   half3 normal      : NORMAL;
   float2 texCrd      : TEXCOORD0; //Это первый текстурный канал, float2 - двумерный вектор(UV)


В вертексном блоке, обычно просто переносят эти данные во фрагментный блок без изменений:

   Out.texCrd = In.texCrd;

Но, что бы изменять масштаб координат, например в первом канале, надо в код внести такие изменения:

Out.texCrd.x = In.texCrd.x*Ваша_преременная_для_U;
Out.texCrd.y = In.texCrd.y*Ваша_преременная_для_V;
или
Out.texCrd = float2(In.texCrd.x*Ваша_преременная_для_U, In.texCrd.y*Ваша_преременная_для_V);
// Так при умножении на 1 координаты не изменятся, при *0,5 - тайловая текстура увеличится в 2 раза, при *2 - уменьшится в 2 раза и т.д.

Если же требуется просто смещать координаты по какой либо из осей, то значения надо прибавлять, наприамер In.texCrd0.x+Ваша_преременная_для_U и т.д.

Надеюсь, что понятно объяснил. :)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Glow от 14 Июня 2008, 12:45:52
очень спасибо!!!


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: mehanik1982 от 23 Июня 2008, 18:46:09
нужна помощь кто знает где можно скачать плагин Shader FX


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Lotus Assassin от 24 Июня 2008, 20:17:17
нужна помощь кто знает где можно скачать плагин Shader FX

Для 3ds Max    http://depositfiles.com/ru/files/6186060 (http://depositfiles.com/ru/files/6186060)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: mehanik1982 от 25 Июня 2008, 16:35:18
Lotus Assassin благодарю

27 Июня 2008, 18:24:37
кто знает где взят урок как сночала зделать шейдер в максе а потом експортировать в Quest3D и подключить его там если есть у кого видео вылаживайте зарание блогодарен

(причина редактирования - "оверпостинг")


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Denil-Tornado от 17 Сентября 2008, 18:02:48
Люди дайте ссылку на Shader FX для 2009 Макса, а то на эти ссылки захожу там мне пишут "нет файла"


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: VFX от 17 Сентября 2008, 20:23:13
сохранил из рендер-мартышки шейдер в формате.fx можно его к квесту прикрутить?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 19 Сентября 2008, 06:21:27
Основной инсталлер для всех максов один (с 7 серии по 2009), его найти легко (абсолютно любая версия, он там самый большой файл на 10 метров)
Обновление для 2009 64 бит
http://rapidshare.com/files/146484670/2009-64bit_UpdateONLY.rar.html
Пароль - наш форум
Уточни пароль для архива, "наш форум" не подходит ;)

!ВАРЕЗ! (http://guest3d.wohlnet.ru/forum/index.php?topic=233.0)

Отредактировано (причина - "варез")




Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Denil-Tornado от 20 Сентября 2008, 16:42:34
Спасибо за ссылку но мне нужно Shader FX для 32 битного макса.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 20 Сентября 2008, 21:01:53
http://rapidshare.com/files/146892616/32bit_UpdateONLY.rar.html

Сорри за ВАРЕЗЗЗЗЗЗЗЗЗ  ::)
Guest3d, имел ввиду ;)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 22 Сентября 2008, 12:06:55
сохранил из рендер-мартышки шейдер в формате.fx можно его к квесту прикрутить?
Присоединяюсь к вопросу, тоже столкнулся с ней.. :-[
Народ, помогите страдающим ???


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Const_47 от 22 Сентября 2008, 15:27:08
Шейдер Metal.fx от VFX на Асемблере, такой по моему к Q3d не прикрутиш. Шейдера должны быть на Hlsl.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 22 Сентября 2008, 15:53:42
Шейдер Metal.fx от VFX на Асемблере, такой по моему к Q3d не прикрутиш. Шейдера должны быть на Hlsl.
А конвертнуть его можно?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Const_47 от 22 Сентября 2008, 20:06:01
А нафиг?
Смотри сюда
http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html
http://ati.amd.com/developer/sdk/RadeonSDK/Html/Samples/Samples.html#Direct3D

А еше есть Google:)))


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 22 Сентября 2008, 20:25:41
А нафиг?
А для того, шо в мартышке можно сделать свой шейдер, и собсно его (уже сделанный ручками, а не скачанный) хотелось бы и прикрутить к квесту. Вроде можно конвертнуть в ShaderFx, (?) попроавьте, коль не так.
пы.сы и если мона, расскажите как, братья...


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Const_47 от 23 Сентября 2008, 18:04:46
Cвой шейдер, моно сделать ручками:))) даже в блокноте. Я вот использую для этих целей если для q3d, то тот же Q3D(НLSL Channel). Если для других целей, то FXComposer.

А теперь вопрос. Сколько шансов что закраску например по Фонгу я напишу лучше чем сам Фонг:)))? Или сочинять свою модель окраски? Дело в том, что большинство алгоритмов современной графики были просчитаны в 70 - 90 годах. Наше дело пожинать плоды, копипастить и комбинировать для достижения своих целей. Я не призываю ТУПО КОПИПАСТИТЬ ВЕСЬ ШЕЙДЕР ОТ А ДО Я, но почему бы не разобрать Нвидео или Ати шейдера на елементарные алгоритмические составляющие, и уже их использовать по надобности в своих проектах? Ведь по сути горячє любимый:))) всеми художниками ShaderFx делает то же самое, причём рахитно и через Ж. 

23 Сентября 2008, 19:29:55   
Немного теории. :)
http://developer.nvidia.com/object/GPU_Gems_Home.html
То, чего ShaderFx не умеет.

(причина редактирования - "оверпостинг")


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 23 Сентября 2008, 22:40:48
Дорогой, я не сомневаюсь, что ты отлично разбираешься в шейдерах. Но вопрос то был чётко задан. Зачем ж вопросом на вопрос? это первое.
второе. Я уже запарился; одни хвалят шэйдрФХ, другие компосер...какая по сути разница?? я не силён в том плане, чтоб писать как ты. Визуальная настройка шейдера есть в мартышке. Но вопрос то - как его к квесту прикрутить, а не чем ты пользуешься, и как ты его пишешь... :-\
Спосибо конечно...поумничал...но хотелось бы ответ.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: VFX от 25 Сентября 2008, 12:44:56
Я так подозреваю что никак. если мартышка не умеет сохранять в HLSL то думаю не стоит на неё тратить время, а найти прогу которая умеет. или как вариант юзать уже готовые шейдеры, подгоняя их под себя, так можно сэкономить время,ведь нужно их ещё и под квест править. а это, как я понял, не так просто.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 25 Сентября 2008, 12:52:59
Тогда давайте взглянем так. Какая прога: 1) дружит с квестом? 2) Имеет окрытость в редактировании исходного шейдера, или создания нового? 3) простота, без особых знаний в коде?
С ума сойти можно...скачал компосер, шейдерФХ, мартышку...всё не то?  ???


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: gerasim от 25 Сентября 2008, 16:18:51
Прямиком шейдеры_экспорт некрепятца. Даже ШадерФх. Как подключать сдесь, сообщение43
http://guest3d.wohlnet.ru/forum/index.php?topic=130.15


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Const_47 от 25 Сентября 2008, 17:59:11
Люди не тупить. Любой hlsl шейдер, из любой проги лепится к q3d. Если вы ожидаете что то типа, экспорт в q3d и опля шейдер в q3d то так не получится, а вот подредактировать ручками, это вполне реально, и в этом действительно нет ничего особенно сложного. Освобожусь, напишу маленький туториал, с пошаговой инструкцией.

&Den
Компосер и мартышка ише пригодится, не убивать!


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 26 Сентября 2008, 14:28:36
Люди не тупить. Любой hlsl шейдер, из любой проги лепится к q3d. Если вы ожидаете что то типа, экспорт в q3d и опля шейдер в q3d то так не получится, а вот подредактировать ручками, это вполне реально, и в этом действительно нет ничего особенно сложного. Освобожусь, напишу маленький туториал, с пошаговой инструкцией.

&Den
Компосер и мартышка ише пригодится, не убивать!
Вот это результативный ответ, очень благодарен тебе, очень хочется знать, что нада дописывать!! Спасибо за понимание!


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: VFX от 26 Сентября 2008, 15:32:06
очень хотелось бы увидеть урок по семантике квеста, ибо такого урока ещё небыло, насколько я знаю. Единственное что я нашёл, это невнятный документ по семантике на англ. языке и скудные пояснения на сайте 3дцентра одним челом. На деле же всё оказалось намного сложнее. Так что будем ждать. ))


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 28 Сентября 2008, 23:58:13
Ждём дорого Const_47 и его туториал...
По ходу дела нашёл ещё одну прогу с работай шейдерами hlsl (ShaderMark 2.1), скачаю, посмотрю что за зверь, расскажу.
кому интересно ->|тыц|<- (http://www.overclockers.ru/softnews/17544.shtml)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: KBECT0MAH от 29 Сентября 2008, 00:26:39
...
По ходу дела нашёл ещё одну прогу с работай шейдерами hlsl (ShaderMark 2.1), скачаю, посмотрю что за зверь, расскажу.
...

По первому прочтению описания, это прога не для работы, а для тестирования шейдеров написанных на HLSL.
Подробности ждем от Den'a и тех кто в теме  :D
.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 29 Сентября 2008, 08:54:03
Ха))) и правда ;D Сия прога просто рендерит шейдеры на вашем компе с настраиваемыми настройками железа. Как бы просто тест, с фпс, с объёмом памяти выделяемой на обработку шейдера (всего их 19), и пр. Ну кому не жаль трафы, можете скачать) но я наверно её щас удалю :D :D
Кстати по ходу вспомнил нвидовскую голову (NVIDIA's Human Head Demo), если кто видел, или слышал, хотелось бы увидеть их новый тест, только там уже тётка ::), хотелось бы глянуть..


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: IYV от 02 Октября 2008, 10:55:39
А у кого получилось экспортировать шейдер Blend texture.SFX из макса? Подскажите каким экспортером нужно? Всеми вроде перепробывал,но не один похоже не поддерживает Vertex Alpha.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Viik от 07 Октября 2008, 14:36:41
Закинь код сюда, может там какая-то жругая семантика работает, в квесте в ХЛСЛ просто читаеш цвет вертекса и используеш его альфу.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 07 Октября 2008, 18:48:41
Пока у меня не работал инет, я был так уверен, что многоуважаемый Const_47 сделал урочеГ по тому, что нада сделать, чтобы адаптировать шейдер hlsl в квесте... :'( Люди, может кто ещё сможет умом-знаниями поделиться? ???


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: matias от 16 Октября 2008, 13:56:46
кому нужно вот shaderFX 2.03(тот что на http://www.downcg.com/)

Редактирование (KBECT0MAH): ссылка на "варез" (http://guest3d.wohlnet.ru/forum/index.php?topic=233.0) удалена.
Если желаешь поделиться, ссылку высылай в ЛС по запросу.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 18 Октября 2008, 11:29:10
Предлагаю делиться опытом! Если кто располагает какими нить уникальными или выведенными самим шейдер, :o выкладывайте, в долгу не останусь ;)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: KBECT0MAH от 18 Октября 2008, 13:52:41
Предлагаю делиться опытом! Если кто располагает какими нить уникальными или выведенными самим шейдер, :o выкладывайте, в долгу не останусь ;)

Просьба выкладывать в раздел "База исходников", желательно с "превьюшкой".
.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 22 Октября 2008, 12:16:58
У меня ещё возник вопрос: как в квэсте обстоят дела с такими глобальными шейдер-эффектами, как motion blur, тень и некоторыми постэффектами (такой пример как "наползание источника света на объект") ??? Как их лепить, есть ли вообще возможность подключить к квесту и как? Я знаю, что самое главное - чтобы шейдер был написан на HLSL Если есть кому что дельно рассказать, о чём сдесь в топе не говорили, буду очень благодарен.
пы.сы. Видел в инете нвидовскую динамическую тень, как увидел офигел! :o Если можно его пришурупить к квесту, это была бы вообще БОМБА!!! :D
пы.пы.сы. У меня есть исходник этой тени на HLSL и видео демонстрации. Хочу развить эту тему, чтобы над этой тенью можно было пошаманить и подключить непосредственно  к квесту. Я, так как не разумею сими знаниями, как это вообще делается, обращаюсь к гуру шейдеров. ;D Предлагаю реально взяться за ТЕНЬ! Сколько страниц текста посвещено проблеме тени...Потом выложим в исходники и сделаем благое дело для всех! ;)

«22 Октября 2008, 13:28:05 »
Выкладываю тень, как есть. Видео-демонстрация. (3.62мб)
http://depositfiles.com/files/vrm05qqrg


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Viik от 22 Октября 2008, 15:02:41
это PCF тени насолько я помню, для квеста есть пример лучше, его делал помоему Рензо, он юзал Variance Shadow Map. Сделать их не сложно но работают они только на маленьких сценах. Поищи на офф форуме Shadow Map там было пару примеров.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 22 Октября 2008, 15:26:23
Тем не менее, нада попробовать адаптировать эти "PCF" тени для квеста, к тому же, стандартные квестовые тени некудышные и память жрут как дышат. На офф вечерком наведаюсь ;)

«23 Октября 2008, 01:40:12»
Всем тем кто заинтересовался, выкладываю исходник шейдера, осталось только адаптировать к квесту.
http://depositfiles.com/files/voc667ibo


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 11 Ноября 2008, 22:51:19
Здрасте. Вот у меня как раз проблемма "адаптации".
Научите пожалуисто переделывать шейдеры под квест (да я уже спрашивал подобное, но все же).
Читаю вражеский форум, с трудом понимаю но толкового тутора переделки не нашел.
Проблемма в том, что я вроде все нормально скопилировал, импортнул шейдер, присвоил. Текстура, нормали, энвиромент, ползунки и другие, что были - работают. А СВЕТ НЕТ, поверхность не реагирует на любой ИС (поначалу был блик от виртуально прописанного в шейдере света, блик от света в композере, но и его теперь нет), присоединял матрицы и векторы к HLSL объекту - ни..чего путного.
Помогите, а...


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 11 Ноября 2008, 22:53:33
Поддерживаю тебя Brothermechanic! Где вы умы? :-\ :'(


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 12 Ноября 2008, 20:44:18
- в mental mill открыл "demo_step_1" и сохранил в FX composer шейдер "fong.fX"
(1 текстура ENVIROMENTCUBE, остальное цвет и т.п.),
- в FX composer все работает отлично, подключил текстуру.
- Проштудировал код от и до, попутно сравнивая его с проверенным (стопудово работающим) шейдером И ПОСЛЕ КАЖДОГО ИЗМЕНЕНИЯ наблюдал что происходит в квесте (ничего не менялось, повлияла только текстура отражения)
Опять та же история. Повторюсь: как правильно подключить Источник Света (сцены квеста) к шейдеру или что еще можно сделать и изменить код, куда смотреть, где про это еще говорят, пусть на английском?

ЗЫ: Когда пробовал перевести из композера его родной phong - та же проблема со светом

Картинка
http://pic.ipicture.ru/uploads/081112/6IWqk5cGbG.jpg

Архив с шейдером и cgr

http://rapidshare.com/files/163120691/Hell_Lit_in_shader.rar.html


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 12 Ноября 2008, 22:14:22
Brothermechanic
ты хотел чтобы получилось так? см.рис.blic
если да то:
шейдер работает нормально,перейди в меню Object\ выбери тот обьект к которому ты прикрепил HLSLObject,дальше откроетя настоика шейдера,там откроются те настройки(Shader properties) которые были написаны для этого шейдера. см.рис.nastroiki shadera

свет действительно не влияет на блик(так он был написан)



Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 14 Ноября 2008, 16:43:16
Повторюсь:
этот шейдер я получил в mentall mill из ихнего примера demo_step_1 (самому там че-нить замакарить просче простого, взял demo_step_1 "для чистоты эксперимента"),
переделал синематику как написано
http://support.quest3d.com/index.php?title=Quest3D_Semantics
Цитировать
сравнивая его с проверенным (стопудово работающим) шейдером
(реагирующим на свет), (вкладку properties прописал тоже я)
НО в квесте шейдер работает, да. Но не реагирует на свет.
ТКНИТЕ МЕНЯ НОСОМ В В СТРОКИ КОДА которые это исправят, пожалуйсто.

PS: В Fx Composer-e блик есть.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 14 Ноября 2008, 17:53:03
ммм...вот терь понял,о чем речь, тока я тогда в этом не советник,но вопросов я назадаю ;D ;D ;D
 - я открыл пример(до этого момента я и не знал что есть примеры,просто второй раз в этой программе разбираюсь) с demo_step_1(с этого примера я наконец то понял,почему при экспорте прога запрвшивант свет к шейдеру,я до этого пытался его прикрепить к шейдеру(правда из этого ничго не получалось,а нооборот получалось шейдер к свету),оказывается этого делать и не надо анологично так и с Enviroment)наконец то получился удачный экспорт и квест его принял без проблем,но во вкладке properties пустота
-синематика - что это и для чего это нужно для шейдера
-как посматреть этот стопудово работаюший шейдер


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 15 Ноября 2008, 18:47:10
Отлично, будем подтягивать народ к проблеме!
Шейдер (микс 2 цветов по текстуре)
http://rapidshare.com/files/164038671/ColorMIX.fx.html
Вот он реагирует на свет
За подключение "лампочки" отвечают эти строки

float3 light_pos[8]   : LIGHTPOS; 
float4 light_color[8]   : LIGHTCOLOR; , по-моему :)???

их я заменил, но все равно не работает.
Синематику квеста я прочел на странице
Цитировать
http://support.quest3d.com/index.php?title=Quest3D_Semantics
Это как пояснение для квеста что есть что *текстура, значение, вектор... - интерфейс настройки шейдера, грубо говоря.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 15 Ноября 2008, 19:38:01
Цитировать
Это как пояснение для квеста что есть что *текстура, значение, вектор... - интерфейс настройки шейдера, грубо говоря.
проще говоря "Синематика - это код который заставляет квест понимать шейдер"
сейчас разбираю этот шейдер так что проблемы или их решения напишу позже


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 16 Ноября 2008, 20:46:53
Цитировать
разбираю этот шейдер
Видимо я его недоперевел, попробуй перевести FX Composer-ский шейдер, хоть просто "Blin".
Буду признателен любым новостям!


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 17 Ноября 2008, 02:12:39
уф,подзапарился я с этими шейдерами,
дело в том что мне нужен еще круче шейдер,поэтому решил сначало разобрать шейдер попроще.

в начале я вообще не понимал что к чему,и так и сяк и не как в итоге ;D(это я про mental mill (TM) Artist Edition)
решил попробую что нить слепить из Shader fx и все получилось на ура,потому что Shader fx очень хорошо экспортирует код в квест , код получается оккуратный,любо дорого смотреть ;D не то что из mental mill >:( (кстати Brothermechanic шейдер ColorMIX который ты предоставил похоже из Shader fx ;) ) и возникла такая мысля, а не загрузить ли мне mental mill'кий шейдер через Shader fx,а потом в квест,только вот я обломался,Shader fx - не загружает чужеродные файлы ;D и тут у меня сразу же появился вывод что Shader fx мне больше не нужен,так как он просто тонет маленькой капелькой в огромном выборе Nvidia'ских шейдерах,теперь его можно использовать только как наглядное пособие и все(может быть только если начинающему программисту который решит писать шейдеры под квест)пока я ковырялся с Shader fx случайно или нет(непомню)
я загрузил через макс пример demo_step_1 и вопрос
Цитировать
-как посматреть этот стопудово работаюший шейдер?
отпал сам собой,потому что похоже mental mill'кие .fx очень хорошо дружат с максом(кроме навороченных)см.рис.MAX и тут я увидел что у шейдера открылись настройки,я решил действовать отталкиваясь от макса и у меня получилось такие же настройки  в квесте см.рис. kvest
кроме одних это - свет , со светом мне так и не удалось справится(может кто нибуть дошарит все таки как его запустить)
я думаю что дело на самом деле обстоит очень просто - дело  в том что свет шейдера неможет прикрепиться к свету который выстовляеш в кветсе, нужно всего лиш их связать, это может быть всего одна строчка и все,только я не програмист к сожалению и все делаю отталкиваясь от логики или интуиции,а пророй методом тыка

я нашол одну мне непонятную строчку которая не на что не реагирует ни на CHANNELVECTOR0,CHANNELVALUE0,LIGHTPOS да и вобще я перебрал все варианты которые написанны в сениматики квеста результат ноль см.№ 7 рисунка kod , я думаю наверно это и есть та строка которая связывает свет.

выводы по коду:
- в строках
Цитировать
float4 __light0_color : CHANNELVECTOR0
<
   string UIName = "Light0 Color";
   string UIWidget = "Color";
> = float4(1.000000f, 1.000000f, 1.000000f, 1.000000f);
ставим вектор канала - CHANNELVECTOR0
- в строках
Цитировать
float __light0_intensity : CHANNELVALUE0
<
   string UIName = "Light0 Intensity";
   float UIMin = 0.000000;
   float UIMax = 10.000000;
   float UIStep = 0.01;
   string UIWidget = "slider";
> = 1.000000;
ставим значение канала - CHANNELVALUE0
- в строках
Цитировать
texture __Environment_map_cubic_1_env_tex : TEXTURE0
<
   string UIName = "Environment_map_cubic_1_env_tex";
   string ResourceName = "default_reflection_cubic.dds";
   string ResourceType = "Cube";
>;

samplerCUBE Environment_map_cubic_1_env_tex = sampler_state {
   Texture = <__Environment_map_cubic_1_env_tex>;
   MinFilter = Linear;
   MagFilter = Linear;
   MipFilter = Linear;
   AddressU = Clamp;
   AddressV = Clamp;
   AddressW = Clamp;
};
ставим в звависимости от шейдера TEXTURE0 или ENVIRONMENTCUBE
вот файл (http://ifolder.ru/9111632) с моей сценой


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 17 Ноября 2008, 04:50:00
Цитировать
ColorMIX который ты предоставил
Ну схитрил немного, просто я тоже считаю SFX отстоем, и я не работаю в максе, и хочется разобрать Mentall Mill, его немцы сделали на славу (ты видел там ноду с паралаксом?).

Ты проделал в точности что и я (только я переводил MM->FXC->Q3D), да UI одинаковый везде (незря же он I:)
Вопрос про реакцию на свет открыт. Это определенно
Цитировать
float3 light_pos[8]   : LIGHTPOS; 
float3 light_color[8]   : LIGHTCOLOR;
(думаю float4[8] = float3)
Похоже на то что еще есть стороки, влияющие на свет,
и еще щас пришла мысль, если получится - напишу.
ЗЫ: А в максе реагирует на свет?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 17 Ноября 2008, 13:51:28
Цитировать
ЗЫ: А в максе реагирует на свет?
да, в максе свет работает отлично
Цитировать
(ты видел там ноду с паралаксом?).
видел,а в чем вопрос?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 17 Ноября 2008, 23:06:41
вот нашол урок (http://fexclub.net/showthread.php?t=141154) ,похоже я был прав насчет привязки света,только у меня не получается все равно
ковыряться нужно со строкой
Цитировать
float3 __light0_position : Position
<
   string Object = "PointLight0";
   string Space = "View";
   string UIName = "Light0 Light_position";
> = float3(0.000000, 0.000000, 0.000000);

string Object - это название нашего света,я скопировал PointLight0 и переименовал свет,но ничего ниполучилось , я ставил float3 __light0_position : POSITION - LIGHTPOS  и ничего
я только не понял что такое string Space вроде бы все понятно но ведь там может быть любое название?
а вот это я вообще не понял string UIName


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 19 Ноября 2008, 19:18:03
Эти строки, типа, - координаты виртуального ИС, как я понимаю.
Урок хороший. Сделал по нему шейдер еще неделю назад, сейчас опять протестировал - реакции не РЕАЛЬНЫЙ ИС нет :((((((((( ??? ??? ???
И, главное в FXCjmposer-е все ок >:( а вот в квесте - нет.
Почему коды из Mentall Mill содержат инфу
Код:
float4 __light0_Light_point_1_color
<
string UIName = "Light0 Color";
string UIWidget = "Color";
> = float4(1.000000, 1.000000, 1.000000, 1.000000);
float __light0_Light_point_1_intensity
<
string UIName = "Light0 Intensity";
float UIMin = 0.000000;
float UIMax = 10.000000;
float UIStep = 0.01;
string UIWidget = "slider";
> = 1.319800;
float __light0_Light_point_1_distance_falloff_exponent
<
string UIName = "Light0 Distance Falloff Exponent";
float UIMin = 0.000000;
float UIMax = 4.000000;
float UIStep = 0.01;
string UIWidget = "slider";
> = 1.000000;
float __light0_Light_point_1_distance_falloff_start
<
string UIName = "Light0 Distance Falloff Start";
float UIMin = 0.000000;
float UIMax = 10.000000;
float UIStep = 0.01;
string UIWidget = "slider";
> = 0.000000;
float __light0_Light_point_1_distance_falloff_limit
<
string UIName = "Light0 Distance Falloff Limit";
float UIMin = 0.000000;
float UIMax = 1000.000000;
float UIStep = 0.01;
string UIWidget = "slider";
> = 1000.000000;
float __light0_Light_point_1_distance_scale
<
string UIName = "Light0 Distance Scale";
float UIMin = 0.001000;
float UIMax = 100.000000;
float UIStep = 0.01;
string UIWidget = "slider";
> = 1.000000;
float3 __light0_position : Position
<
string Object = "PointLight0";
string Space = "World";
string UIName = "Light0 Light_position";
> = float3(0.000000, 0.000000, 0.000000);
А SFX только
Код:
float3 light_pos[8]	: LIGHTPOS; 
 
float4 light_color[8] : LIGHTCOLOR;
??? ??? ??? ??? ???
И к HLSLObject с шейдерами от SFX раньше я и не задумывался подключать свет, потому что и так отлично РАБОТАЛО.
Что делать, люди?

Еще: Походу если у шейдера запрограмирован только цвет, то работает свет на нем или нет мохно увидеть не переделывая синематику, так что даже не знаю, в ней ли дело?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 19 Ноября 2008, 22:14:27
уф, у меня скоро голова взорвется :-\ что я только не пробывал не хочет этот свет привязываться и все тут
Цитировать
И, главное в FXCjmposer-е все ок Злой а вот в квесте - нет.
- дело в том что (я так понимаю) Mentall Mill был создан под FX Composer и поэтому синематика сделана в соответствии под FX Composer,хотя может быть есть еще какие то стандарты раз Макс открывает шейдер без проблем,и получется что квест имеет свою собственную синематику не поподающюю под эти стандарты (для чего это сделали я не понимаю),а вот ребята из Shader FX как раз постарались и зделали экспортер кода под квест (сделали его простым и удобным,причем не поленились и даже расписали где что находится)
вот это я если чесно не очень понял -
Цитировать
Еще: Походу если у шейдера запрограмирован только цвет, то работает свет на нем или нет мохно увидеть не переделывая синематику, так что даже не знаю, в ней ли дело?
наверное имелось в виду, что при создании света в сцене,он не как не реагирует,как будто его нет, тоесть свет в шейдере видно,есть ли квестовски свет или его нет - картина одна и та же.
поэтому вижу только два выхода:
1. - искать человека понимающего в програмировании и знании "в линейной алгебре, хотя бы на уровне работы с матрицами и векторами"
2. - шерстить весь оф форум,в надежде что попадется похожий щейдер с таким же кодом (ищу но пока не нашол)
и еще проблема и которая возникнет еще и еще,дело в том что код, у каждого шейдера свой!поэтому сравнивать код FX Composer-ра и Shader FX-бессмысленно(если только есть похожие строки)
оба варианта не подарок, но второй реальнее
и еще,тут у меня мысля возникла пока я ковырялся с этим шейдером, почему нам даются настройки света,а не материала????? получается нужно разбираться еще с самим Mentall Mill-лом так как экспорт дело тонкое и может быть где нибуть мы делаем не то


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 20 Ноября 2008, 00:29:23
вот нашол(правдо я где то уже видел но про это забыл)
немало шейдеров от Shader FX
shaderfx-01.exe (http://www.ali-rahimi.net/other/shaderfx-01.exe)
shaderfx-2-q3d.rar  (http://www.ali-rahimi.net/other/shaderfx-2-q3d.rar)
но все таки хотелось бы разобраться с Mentall Mill


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 20 Ноября 2008, 18:21:44
искать человека понимающего в програмировании

Я уверен, на форуме есть такие, просто еще видимо не увидели нашу тему. ;)

Mental Mill надо подчинить!


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: TOXin от 22 Ноября 2008, 19:09:48
Скажите, пожалста, у всех нормально работает ShaderFX 2.09 на 3dsMax 2009 SP1, или тока у меня какие-то глюки с UV координатами?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 22 Ноября 2008, 21:10:13
не могу сказать  :-\ у меня 3ds Max 9 SP2


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 24 Ноября 2008, 17:46:50
Den_ya, any news?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 24 Ноября 2008, 20:56:53
пока что нет новостей :-\,я решил отдохнуть пока от этого дела,а то я человек такой если начинаю ковырятся то уже не остановиться,а у меня еще дел по горло(много нужно еще смоделировать и самое занудное сделать раскладку UVW),нужно малехо мозги остудить,и тем более "хорошая мысля,приходит опосля"


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 26 Ноября 2008, 09:03:13
>>не хочет этот свет привязываться и все тут

Шейдер не знает источников света как таковые, ему важен вектора их позиций в мире, на основе чего он считает освещение.
Есть два способа транслировать вектора позиции ИС
1. У HLSL группы есть входы для значений, векторов и матриц, в шейдере можно их подключать кодом,
для векторов это:
float3 "Имя_переменной" :CHANNELVECTOR0;
Т.е. если прилинковать вектор позиции ИС к первому входу(для CHANNELVECTOR0) для векторов, а потом использовать при расчётах, то должно работать.

2.Второй способ более простой и шейдер реагирует автоматом на подключенные ИС в сцене.
объявляем:

#define MAX_LIGHTCOUNT 8

float4 lightPos[MAX_LIGHTCOUNT] : LIGHTPOS; // вектора позиций
float4 lightColor[MAX_LIGHTCOUNT] :LIGHTCOLOR; // вектора цвета.

Далее в коде вертексного шейдера...

float3 Позиция_Первого_ИС = float3(lightPos[0].x,lightPos[0].y,lightPos[0].z);
float3 Позиция_Второго_ИС = float3(lightPos[1].x,lightPos[1].y,lightPos[1].z);
float3 Позиция_Третьего_ИС = float3(lightPos[2].x,lightPos[2].y,lightPos[2].z);
и т.д. до [7] (ограничение - 8 штук).

так же с цветом:
float3 Цвет_Первого_ИС = float3(lightColor[0].x,lightPos[0].y,lightPos[0].z);
float3 Цвет_Второго_ИС = float3(lightColor[1].x,lightPos[1].y,lightPos[1].z);
float3 Цвет_Третьего_ИС = float3(lightColor[2].x,lightPos[2].y,lightPos[2].z);
соответственно...

Если ИС в сцене, например один, а шейдер работает с 4, то вектора позиции и цвета, несуществующих ИС, будут возвращать нули...


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 27 Ноября 2008, 00:17:46
не все так просто под луной ;) :D :D :D
Цитировать
float3 "Имя_переменной" :CHANNELVECTOR0;
я ставил CHANNELVECTOR0 - свет действительно куда то убегает только не привязывается,
дело в том что код
Цитировать
#define MAX_LIGHTCOUNT 8

float4 lightPos[MAX_LIGHTCOUNT] : LIGHTPOS; // вектора позиций
float4 lightColor[MAX_LIGHTCOUNT] :LIGHTCOLOR; // вектора цвета.

Далее в коде вертексного шейдера...

float3 Позиция_Первого_ИС = float3(lightPos[0].x,lightPos[0].y,lightPos[0].z);
float3 Позиция_Второго_ИС = float3(lightPos[1].x,lightPos[1].y,lightPos[1].z);
float3 Позиция_Третьего_ИС = float3(lightPos[2].x,lightPos[2].y,lightPos[2].z);
и т.д. до [7] (ограничение - 8 штук).

так же с цветом:
float3 Цвет_Первого_ИС = float3(lightColor[0].x,lightPos[0].y,lightPos[0].z);
float3 Цвет_Второго_ИС = float3(lightColor[1].x,lightPos[1].y,lightPos[1].z);
float3 Цвет_Третьего_ИС = float3(lightColor[2].x,lightPos[2].y,lightPos[2].z);
соответственно...
совершенно не такой, который делает Mentall Mill
у него например: LIGHTPOS; // вектора позиций - это float3
а :LIGHTCOLOR; // вектора цвета - это уже float4 , и в Mentall Mill-ком коде вообще не воспринимаются квадратные скобки -[0]- - сразу же пишется ошибка
замена string Space = "View" на string Space = "World" тоже результатов не дало
вообщем вот готовая сценка (http://ifolder.ru/9280503) 6.35 Мб,может быть получится разобраться

и еще вопрос:
- нужно ли выставлять точки координат света квеста и света шейдера например свет квеста например  на 0,0,0 и свет шейдера на 0,0,0 или все должно зацепится автоматом?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 27 Ноября 2008, 03:32:21
Цитировать
не все так просто под луной
Да, если не внимательно читать - я привел уже готовое, рабочее решение.

Цитировать
я ставил CHANNELVECTOR0 - свет действительно куда то убегает только не привязывается

Ответ:
Цитировать
Если прилинковать вектор позиции ИС к первому входу(для CHANNELVECTOR0)...
канала HLSL Object...
Смотри, что прилинковано hlsl-каналу. Если первый линк для векторов занят, надо использовать другие CHANNELVECTOR1, CHANNELVECTOR2 и т.д.

Цитировать
совершенно не такой, который делает Mentall Mill
Какя разница, что делает Mentall Mill? Я, так понимаю, надо, что бы в квесте работало!?!

Цитировать
- нужно ли выставлять точки координат света квеста и света шейдера например свет квеста например  на 0,0,0 и свет шейдера на 0,0,0 или все должно зацепится автоматом?

Ответ:
Цитировать
Если ИС в сцене, например один, а шейдер работает с 4, то вектора позиции и цвета, несуществующих ИС, будут возвращать нули...
Т.е. позиция в мире - 0.0.0, и цвет 0.0.0.0(чёрный).
Если ИС существует(Т.е. прилинкованные ИС кканалу Render), то автоматом берется его позиция и цвет.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 27 Ноября 2008, 08:15:32
To Den_ya.

Посмотрел сцену с чайником... В общем простой шейдер с кубомапным отражением - преломлением + цвет + блик. Поддерживается всего один ИС. Но его текст плохо воспринимаем и его(текст) можно было бы сократить раза в 4, хотя бы для улучшения восприятия. :)

Проблема не в линковании позиции и т.д., а в расчетах внутри шейдера. Копай в нём. Видимо в программе генерации ,что то отличается от квестового - вот и глючит.

Могу привести пример - Шейдер написаный под 3ДМАХ в квесте даже после правки симантик будет глючить, т.к. в максе оси X и Y в отличии от квеста перевёрнуты и что бы всё работало надо учитывать, что в максе
worldNorm.xYZ = worldNorm.xZY...

Удачи.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 27 Ноября 2008, 19:00:25
dfx, СПАСИБО ЗА ПОМОЩЬ!!!
По второму способу никак не получается, выходят ошибки
http://picthost.ru/images/edwz1e2zjgqsl5ui8bnc.jpg
вот архив с искаверканным мною шейдером
http://rapidshare.com/files/167934458/No_lit_SHADER.rar.html

По первому - все путем!!!!!!!!!!!!!!!!!!!!!!!!
http://picthost.ru/images/g0tz41eurlpzps48gb.jpg
(непонял только что подключать на fallof exponent и т.д., но это мелочи)
И еще; непеределывая синематики шейдер реагирует на "виртуальный" источник в ценре мира
http://picthost.ru/images/xzetey6svp97wuwscvu.jpg

Помогите, всетаки разобраться со вторым способом (да мне неимется, но уже чувствую что решение близко).

ps: Если сможешь, переделай пожалуйсто этот шейдер и выдели измененные строки, буду очень признателен.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Const_47 от 30 Ноября 2008, 00:32:55
В отличии от Квеста, МенталМил игнорирует мировую матрицу
То есть, если Квест преобразовывает вершину в пространство
отсечения mul(vertex,WorldViewProjection) то ментал делает это так mul(vertex,ViewProjection), ну и все последствия из этого выходящие. В ментале камера является центром мира, и когда мы "бегаем" все обекты вертятся около камеры, а сама камера неподвижна:))). Вот поэтому и непонятки ваши со светом,
он ведь передается в шейдер квестом в мировой системе координат.   

&Brothermechanic
Напиши что ты конкретно хочеш от шейдера, техническое задание.
Может в моем архивчике найдеться подходящий;)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 30 Ноября 2008, 01:48:20
Const_47
если чесно то это не ответ
мы с Brothermechanic две страници накатали здесь про пример из Mentall Mill-ла про простенький пример demo_step_1
,разобрались в настройках кроме света,дело не в том что он нужен,а в том как одоптировать шейдеры которые можно слепить в Mentall Mill,да да же не надо ничего придумывать,хотябы сделать та чтобы шейдеры из библиотеки (http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html) NVIDIA работали в Квесте
так кто нить может сделать чтобы свет в demo_step_1 стал работать или нет,или хотябы сказать что это сделать нельзя чтобы время зря не тратить


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: BROTHERMECHANIC от 30 Ноября 2008, 12:27:36
Привет всем.
По первому способу DFX-а шейдер из милла РЕАГИРУЕТ на ИС. Но это как-то "неудобно" (подключать к каждому обьекту линки всех значений ИС), даже в стремном SFX есть "автоопределение" ИС :)

Const_47, спасибо за отклик!!!!!
Дело в том что хочется самому лепить шейдеры, это дает большее пространство для творчества, да и часто нужен специфический (Н:миксованный) эффект.
Опыта пока мало и как применить твою подсказку я незнаю, но замечал разницу вматрицах SFX и MM шейдеров но не придавал значения, наверно это как-то связанно.

SFX

float4x4 wvp : WorldViewProjection < string UIWidget = "None"; >; 
float4x4 worldI : WorldInverse < string UIWidget = "None"; >; 

float4x4 worldIT : WorldInverseTranspose < string UIWidget = "None"; >; 

float4x4 viewInv : ViewInverse < string UIWidget = "None"; >; 
float4x4 world : World < string UIWidget = "None"; >;

MM

float4x4 __object_to_ndc : WorldViewProjection<   string UIWidget = "none";>;
float4x4 __world_to_object : WorldInverse<   string UIWidget = "none";>;
float4x4 __object_to_world : World<   string UIWidget = "none";>;
float4x4 __camera_to_world : ViewInverse<   string UIWidget = "none";>;

float4 __scene_ambient : Ambient
<
   string UIName = "Scene Ambient";
   string UIWidget = "color";
> = float4(0.00,0.00,0.00,0.00);


Если как-то добавить в код мила 

float4x4 worldIT : WorldInverseTranspose < string UIWidget = "None"; >;

тогда блик заработает?

И..., если нетрудно, посмотри этот шейдер, что там надо изменить?
http://rapidshare.com/files/167934458/No_lit_SHADER.rar.html


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Const_47 от 01 Декабря 2008, 00:47:36
Парни, в теме по Адаптации шейдеров
http://guest3d.wohlnet.ru/forum/index.php?topic=426.0
Я выложил пример адаптации шейдеров NVIDIA, и будет это
для вас просто, или нет зависит только от вашего уровня подготовки. На следующий раз, я напишу о адаптации шейдеров MM, пусть на примере demo_step_1. Я не хочу говорить, что это будет завтра, или после завтра. У меня сейчас такая ситуация, что работать приходится по 12 часов в сутки, или около того.
Я надеюсь что материал появится через несколько дней.

&Brothermechanic
Вот я смотрю на ту матрицу которую ты привел от MM
float4x4 __object_to_ndc : WorldViewProjection ;
и думаю что мое утверждение выше ошибочно,наверное спутал с RenderMonky

Я посмотрю на твой шейдер.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 01 Декабря 2008, 01:05:14
Const_47
спасибо большое!буду разбираться


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Erath от 08 Декабря 2008, 21:31:23
Тут недавно установил игру Battlefield2, так вот, в ней есть папка с шейдерами, формат .fx. Не проверял как они работают в квесте, но если кому надо, могу выложить куда-нить.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 07 Января 2009, 02:20:07
давно уже хотел спросить кто ни будь делал в "квесте" динамические тени то есть что бы они двигались?,в данном случае мне нужно для деревьев и травы
нашел в NVIDIA Shader Library  (http://developer.download.nvidia.com/shaderlibrary/webpages/shader_library.html) такой шейдер как shadow PCSS вернее я о нем уже давно знаю(у этого шейдера есть предок только я так понял разница в нем та что там тени не плавные,но я рад бы и такому),но как сделать что бы он работал в квесте не представляю и какой директ для этого нужен 9 или 10.
кто нибуть может помочь в данной проблеме?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 07 Января 2009, 02:26:52
Про PCSS я уже тоже думал, но походу он контачит только с 10 директиксом((( С тенями вообще завал... скорбим...


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 07 Января 2009, 02:32:32
беда :'(


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 07 Января 2009, 02:39:41
Думаю, что Const_47 может дать точный ответ, походу, он один здесь реально шарит в шейдерах... ;)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Const_47 от 07 Января 2009, 03:35:29
И че сразу 47? :))) Вот у Viik-a спросите, вот он там на офф форуме тени мастерит.

На Q3D PCSS я пока не пытался реализовать. Делал только на
DX вот по этому уроку lastworld.net.ru/doc.php?DOC_ID=18 - 59k
так сказать в целях обучения.
   


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Viik от 07 Января 2009, 21:54:15
Две недели назад запостил:
http://forum.quest3d.com/index.php?topic=66112.0


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 07 Января 2009, 22:48:06
круто! :o
правда все сложно,но попробую разобраться


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 07 Января 2009, 22:52:41
Был на форуме, читал что пишут...но так и не понял, как убрать бахраму?? Походу блур не работает...
***
p.s. У меня GF7600 GT


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Viik от 08 Января 2009, 15:11:51
Бахрама будет меньше при большем разрешении текстуры, сейчас это не реально сделать, нужен апдейт квеста. 2-й вариант это использовать экспоненциальные тени для спот лайта а не поинт лайта как у меня, багов будет меньше.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 08 Января 2009, 21:20:09
а где объявляется тип лайта?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Viik от 09 Января 2009, 13:30:29
он не объявляеться, для этого нужно переделывать шейдер ... разбирайся с более простыми примерами, на ооф форуме запощено несколько версий шадоумап, постили еще до меня, там обычный спот лайт юзаеться.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 09 Января 2009, 20:03:22
→|Den|← - это про то как раз что я те говорил -
Цитировать
на ооф форуме запощено несколько версий шадоумап, постили еще до меня, там обычный спот лайт юзаеться.
я искал но так ничего и не нашол,а может просто не понял


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 09 Января 2009, 20:20:25
да, Den_ya... готового мало чего в мире..( Жаль что в шейдерах вообще практически не разбираюсь, так бы хоть выложил несколько вариаций и со спот, и с поинт... обидно.. наверно у Viik просто нет времени.. :'(


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 09 Января 2009, 21:09:32
неволнуйся ты практически не разбираешся в шейдерах, а я вообще ничего не понимаю! ;D ;D ;D ;D


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 09 Января 2009, 21:20:42
 :D :D Просто обидно, что чел старался, выводил код шейдера под квест... и обламывает так в конце.. шейдер то классный..


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Den_ya от 09 Января 2009, 23:14:24
обидно,а что сделаеш(не зделать конечно можно - самому ;D),покрайней мере уже что то есть


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 09 Января 2009, 23:20:57
самому ;D
плохой вариант ;D ;D
я больше дезигнер))


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Viik от 10 Января 2009, 18:47:35
Кстати в 4.2.2 шадоумапы и так есть, чего их не юзать.

Переделывать под споты смысла не вижу, ну выложу их, заюзает 1-2 человека, будут просить переделать то и это...уже проходили эту историю.

http://forum.quest3d.com/index.php?topic=62961.0
http://forum.quest3d.com/index.php?topic=64300.0

Можно и еще нарыть если хорошо поискать.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: →|๖ۣۜDen|← от 10 Января 2009, 21:48:38
Ну спасибо хоть на том, что есть ;)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Const_47 от 12 Января 2009, 18:07:22
Чел эту тему ковыряет.
http://forum.quest3d.com/index.php?topic=66203.0
Пожалуй стыбрю:)))


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: IYV от 15 Сентября 2009, 18:22:21
To Glow

Вот пример блока кода, в котором берутся данные о модели из приложения:

   half4 position      : POSITION;
   half3 tangent      : TANGENT;
   half3 binormal      : BINORMAL;
   half3 normal      : NORMAL;
   float2 texCrd      : TEXCOORD0; //Это первый текстурный канал, float2 - двумерный вектор(UV)


В вертексном блоке, обычно просто переносят эти данные во фрагментный блок без изменений:

   Out.texCrd = In.texCrd;

Но, что бы изменять масштаб координат, например в первом канале, надо в код внести такие изменения:

Out.texCrd.x = In.texCrd.x*Ваша_преременная_для_U;
Out.texCrd.y = In.texCrd.y*Ваша_преременная_для_V;
или
Out.texCrd = float2(In.texCrd.x*Ваша_преременная_для_U, In.texCrd.y*Ваша_преременная_для_V);
// Так при умножении на 1 координаты не изменятся, при *0,5 - тайловая текстура увеличится в 2 раза, при *2 - уменьшится в 2 раза и т.д.

Если же требуется просто смещать координаты по какой либо из осей, то значения надо прибавлять, наприамер In.texCrd0.x+Ваша_преременная_для_U и т.д.

Надеюсь, что понятно объяснил. :)

А можно ли подобным образом сделать поворот текстур от переменной?
Если кто знает,помогите плз.Заранее спасибо.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 16 Сентября 2009, 00:46:08
Найди в программе ShaderFX метод UV ROTATOR и подсоедини его к текстурному методу на канал UV  8)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: redis от 16 Октября 2009, 19:11:03
Люди добрые, скорей всего я плохо искал, но искал честно))), существует ли исходник с динамическим тенями без (stencil shadow) что бы можно было только свою текстуру тени прикрутить ну и ещё что нибудь какие нибудь параметры чтобы работало ))), просто с шейдерами у меня пока туго, времени нету, я планирую графикой в самом конце заняться когда вся игровая механика готова будет

хотя бы ткныте меня носом в исходник, один я нашёл но там тень дёргается


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: redis от 09 Ноября 2009, 00:28:03
Уважаемый Viik вы говорли о шедоу мапах которые есть в версии 4.2.2. так вот со статичным обьектом у меня всё получилось, а с анимированным персонажем не вышло, это так задумано или есть секрет о котором я не знаю ? ))


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Viik от 09 Ноября 2009, 14:36:48
Для персонажа со скинингом при рендере в шадоумапу нужен свой шейдер.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: redis от 09 Ноября 2009, 15:02:16
А  в Квесте есть этот шейдер ? И где его взять ?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Viik от 09 Ноября 2009, 19:04:07
На офф форуме, в разделе Демос есть ветка про ССАО, я там выкладывал примеры ССАО с VSM тенями, в одном из примеров есть анимированный монстр.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: redis от 13 Ноября 2009, 18:18:24
Ого здоровская демка, спасибо огромное :)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: VIVID от 12 Июня 2010, 14:38:32
Интересно, а можно ли сделать с помощью пиксельного шейдора живую текстуру.. ну к примеру чтобы он рисовал часы на плоскости а стрелка двигалась с течением времени..?)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 12 Июня 2010, 17:40:03
VIVID
можно, для этого достаточно иметь 2 текстуры:
текстура фон - для циферблата
текстура стрелка - для стрелки, должна быть с прозрачностью

дальше в шейдере идёт игра с текстурными координатами.



Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: RazorSoul от 25 Декабря 2010, 23:17:39
Здравствуйте товарищи квестовцы! :) Я работаю в квесте недавно и в шейдерах неразобрался. Потому вопрос как в шейдер эф икс сделать шейдер который заливает тайловую текстуру с бампом на сурфэйс в зависимости от цвета вершин?? Подобное есть в примере нэйчурал рендер в квесте 4.2.3 тока без бампа. Но понять этот хслс без знаний шэйдеростроения невозможно. Плиз помогите разобраться :'(


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 25 Декабря 2010, 23:47:15

СЮДА (http://guest3d.wohlnet.ru/forum/index.php?topic=426.0)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: RazorSoul от 26 Декабря 2010, 21:04:47
Спасиб, попробую вызубрить :), только если не затруднит, можно ли в принципе прикрутить бамп или рельеф к вертекс колор. В примере шейдер эф икс я нашёл этот шейдер текстурирования, но там только 3 текстуры (каждой из них соответствует канал рэд, блю или грин), так вот можно ли как нибудь (или вообще в принципе )увеличить кол-во текстур. ???
если такое возможно(и с бампом, и с кол-вом текстур)то я фанат шэйдер текстур, и квеста ;D
ps. делаю диплом в квесте ;)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 26 Декабря 2010, 21:56:20
Можно до 8 текстур вроде в Квесте.

форматы текстур  тоже в квесте ограничены.


Цитировать
Спасиб, попробую вызубрить , только если не затруднит, можно ли в принципе прикрутить бамп или рельеф к вертекс колор.
Курить вредно, потому что я руки  с мылом мою.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: RazorSoul от 01 Января 2011, 17:59:34
 ;D Ага с мылом и курю. Дым с пузырями получается. ;D А если серьезно то я имел ввиду следующее: если вершина Red => заливается текстура кирпичики, если Green => камушки, Blue => травка. Так вот (просветите меня ламера) можно ли в квесте зделать так: если вершина Red => заливается текстура кирпичики с бампмэп (или рельефмэп) шейдером, если Green => камушки с бампмэп (или рельефмэп) шейдером, Blue => травка с бампмэп (или рельефмэп) шейдером?.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 02 Января 2011, 02:47:14
Цитировать
если вершина Red => заливается текстура кирпичики, если Green => камушки, Blue => травка.

обычный фильтр:


с вертексного в пиксельный  гоним   цвет вершины
IN.vertexColor

далее в пиксельном строим условия (если надо жёсткий переход)


Код:
float4 albedo;

if (IN.vertexColor.r>0.02f)
{
albedo=tex2D(семплер кирпичной текстуры, IN.texCoord);
}
else
{
albedo=tex2D(семплер камушки текстуры, IN.texCoord);
}

if (IN.vertexColor.b>0.02f)
{
albedo=tex2D(семплер травка текстуры, IN.texCoord);
}



если нужны плавные границы, то луч юзать текстуры в этих целях
и  в пиксельном просто миксовать
Цитировать
float3 targetVar;


float mixMask=tex2D(семплер маски текстуры, IN.texCoord);
float3 var1=tex2D(семплер кирпичной текстуры, IN.texCoord);
float3 var2=tex2D(семплер кирпичной текстуры, IN.texCoord);

targetVar=lerp(var1,var2, mixMask);


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Cludz от 31 Января 2011, 11:12:01
Люди помогите 2й ИС не светит, или очень слабо светит
Ткните пальцем что не так в коде
Код:
// DIFFUSE LIGHT+ATTENUATION+TEXTURE
/////////////////////////////////////////////////////////////////////////
///// Объявление Переменных /////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
// Матрицы
float4x4 WorldVP : WorldViewProjection; // Произведение мировой, видовой и проекционной матриц
float4x4 World   : World; // Матрица мирового преобразования
float4x4 WorldIT : WorldInverseTranspose; // Инвертированная - транспонированная мир матрица
 
// Макрос для замены в коде MAX_LIGHTS на 8
#define MAX_LIGHTS 8
 
// Источник света
float3 lightpos[MAX_LIGHTS] : LIGHTPOS; // Подключение позиции источника света
float3 lightcol[MAX_LIGHTS] : LIGHTCOLOR; // Подключение цвета источника
float light_atten[MAX_LIGHTS]: LIGHTATT1; // Затухание источника

// Одиночный слайдер для значения типа Value
float valueName :CHANNELVALUE0 < // CHANNELVALUE0 - номер канала
    string UIName = "Slider Value"; // Имя в редакторе
    string UIWidget = "slider"; // Тип
    float UIMin = 0.0;     // Минимальное значение
    float UIMax = 10.0;             // Максимальное значение
float UIStep = 0.01;
> = 2.2;
 
float3 DiffuseColor : CHANNELVECTOR0 <
    string UIName =  "Diffuse Color";  // Имя в редакторе
    string UIWidget = "Color";    // Тип виждета
> = {1,1,1}; // Дефолтовое значение

//////////
//Подключил текстуры из Квеста
//2D текстуру
texture gColorTexture : COLORMAP0 <
    string ResourceName = "default_color.dds";
    string UIName =  "Diffuse Texture";
    string ResourceType = "2D";
>;

sampler2D Texture1 = sampler_state {
    Texture = <gColorTexture>;

    MinFilter = Linear;
    MipFilter = Linear;
    MagFilter = Linear;

    AddressU = Wrap;
    AddressV = Wrap;
}; 
 
/////////////////////////////////////////////////////////////////////////
///// Структуры /////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
// Входящие данные

struct a2v
{
    float4 position : POSITION; // Позиция объекта
float3 normal    : NORMAL; // Нормаль к поверхности
float2 texCoor      : TEXCOORD0; // Текстурные координаты

};
 
// Исходящие данные
struct v2f
{
    float4 HPosition    : POSITION; // Позиция объекта
float3 wnormal    : TEXCOORD2; // Направление нормали в мировом пространстве
float3 LightVector0 : TEXCOORD1; // Вектор света
    float3 LightVector1 : TEXCOORD3;
float2 texCoor      : TEXCOORD0; // Текстурные координаты
};
 
/////////////////////////////////////////////////////////////////////////
///// Шейдеры ///////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
 
// Вершинный шейдер
v2f VS(a2v IN)
{
    v2f OUT = (v2f)0; // Обнуление выходной структуры
OUT.wnormal = mul(IN.normal,WorldIT); // Получение нормали в мировой системе координат
float3 worldSpacePos = mul(IN.position,World); // Получаем позицию вершины в мировом пространстве
OUT.LightVector0 = (lightpos[0]-worldSpacePos) * light_atten[0]*0.03; // Вносим радиус затухания в вектор света
    OUT.LightVector1 = (lightpos[1]-worldSpacePos) * light_atten[1]*0.03;
OUT.HPosition = mul(IN.position,WorldVP);
    OUT.texCoor = IN.texCoor;  // Передаем в пиксельный шейдер
    return OUT;
}
 
// Пиксельный шейдер
float4 PS(v2f IN) : COLOR
{
float3 N = normalize(IN.wnormal);
    float3 L = normalize(IN.LightVector0);
    float3 L1 = normalize(IN.LightVector1);
float diffuse = dot(N,L);
float diffuse1 = dot(N,L1);
float atten = saturate(1.0 - dot(IN.LightVector0, IN.LightVector0)); // Затухание
    float4 tex = tex2D(Texture1, IN.texCoor.xy);
float3 resultA = lightcol[0]*diffuse*DiffuseColor*atten*tex;
float3 resultB = lightcol[1]*diffuse1*DiffuseColor*atten*tex;
float3 result = resultA + resultB;
return float4(result,1);
}
 
/////////////////////////////////////////////////////////////////////////
///// Техника ///////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
 
technique Main
 {
    pass p0
 {
        VertexShader = compile vs_2_0 VS();
        PixelShader = compile ps_2_0 PS();
ZWriteEnable = true;
 }
}

быдлокод дэтэктэд ;)



Цитировать
float atten = saturate(1.0 - dot(IN.LightVector0, IN.LightVector0)); // Затухание
в любых случаях выражение  имеет результат 0


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Alteste от 31 Января 2011, 13:17:56
Ха! Привет! Приятно видеть свой код.
Этот код написан для одного источника. Чтобы подключить несколько источников нужно делать отдельный проход (pass) для каждого. Чуть позже выложу полный код


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 31 Января 2011, 16:17:39
Цитировать
Ха! Привет! Приятно видеть свой код.
  :P


Цитировать
Этот код написан для одного источника. Чтобы подключить несколько источников нужно делать отдельный проход (pass) для каждого. Чуть позже выложу полный код
ага и просадить FPS

pass = DIP

по возможности  надо стараться впихнуть в 1 проход   максимальное число ИС сколько он позволяет.

Cludz
Ниже рабочий пример    "как это делается" +  вывел расчёт  параметров ИС  в  методы, что  сократит инструкции  8)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Cludz от 31 Января 2011, 17:35:57
спасибо за помощь, у меня шок, код Sqwer в моем примере не работает... пробовал изменить пример Sqwer*а тож не пашет банально заменить 3dObjectData таже фигня
может дело в квесте (у меня версия 4.3.2) или в видяхе (NVIDIA GeForce 6800 GS) или еще какой черт, будем разбираться


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 31 Января 2011, 17:42:27
Цитировать
спасибо за помощь, у меня шок, код Sqwer в моем примере не работает...

как тебе удалось обмануть ДХ?   ;D

100%   кривой пример у тебя

ещё раз сверься с моим примером  , с параметрами источников света.

3dObjectData - не влияет
версия 4.3.2 - не влияет
NVIDIA GeForce 6800 GS - не влияет

еще какой черт - скорее всего



а луч выложи свои наработки -  пофиксим


Цитировать
банально заменить 3dObjectData таже фигня
если ты в моём примере менял, то  что-то не то  именно с Вертекс датой.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 31 Января 2011, 21:26:15
 :) Там нечему неработать. Единственное, что направление вектора света считается как для поинт-лайта и не важно, какой тип ставиться в самом квесте.

У меня вопрос к sqwer'у - динамическое ветвление в коде шейдера не позволяет ускорить вычисления путем введения условий для того, что бы отсеч ненужные на данный момент вычисления.
Фактически операции считаются параллельно в любом случае для обоих вариантов ветвления, но переменной присваивается  итоговое значение верное на данный момент. Я натыкался на информацию, что это особенность свойственна для многоядерной архитектуры, но к сожалению не могу найти эту информацию снова.
Существует ли возможность как-то обойти эту проблему? Или может быть тоже натыкался на эту инфу и поделишся ссылкой? ;)

 Спасибо.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 31 Января 2011, 22:20:38
Цитировать
У меня вопрос к sqwer'у - динамическое ветвление в коде шейдера не позволяет ускорить вычисления путем введения условий для того, что бы отсеч ненужные на данный момент вычисления.
Фактически операции считаются параллельно в любом случае для обоих вариантов ветвления, но переменной присваивается  итоговое значение верное на данный момент.

нет,  в HLSL  есть   возможность переключения:

расскрывать ветвь и считать параллельно
и действовать как при настоящем условии (сперва выполнять условие и по результату считать)


кури HLSL на MSDN

тут референсы по всем условиям
http://msdn.microsoft.com/en-us/library/bb509600(v=VS.85).aspx

каждый тип условного оператора  имеет  предикат (атрибут), который и устанавливает спопоб работы оператора

например  IF
http://msdn.microsoft.com/en-us/library/bb509610(v=VS.85).aspx

Цитировать
branch   Evaluate only one side of the if statement depending on the given condition.
- тип:  исполняется 1 вариант  поусловию

flatten   Evaluate both sides of the if statement and choose between the two resulting values.
- тип: исполняется 2 варианта  по результату

по умолчанию "branch"



ЗЫ  многие  высказывают  свой негатив по поводу использования  условных операторов, основываясь на больших штрафах  исполнения IF , чем на исполнение внутреннего кода.

ДА  это было так, старые карты   Gфорсы (до 8ххх серии) и АТИхи (до 3ххх)   не могли эффективно справляться с условными операторами, но сейчас уже на дворе 2011  и раритетных карт  уже почти не осталось, так что не стоит бояться этих  операторов и наоборот  почаще использовать, где они заметно дадут прирост. например циклы с участием выборки из текстуры (POM например).


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 01 Февраля 2011, 00:52:28
Спасибо, Sqwer! Похоже, это то, что надо. :)

ЗЫ.Сталкнулся с проблемой - в коде эффекта много таких переходов. Но использование входных параметров, которые по условиям должны исключать куски кода со сложными вычислениями, скорости не прибавляет. Т.е. она остается такой же как и при использовании этих блоков кода.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 01 Февраля 2011, 02:02:03
чем и как мерил? надеюсь  по мс и при статической камере в релиз режиме при одинаковой загрузке проца.

если это  простая логика (умножить/разделить/добавить)
то  на глаз ничего не поменяется, даже если это цикл


а вот такие тяжёлые операции как (чтение текстурного семплера / возведение в степень) - существенно влияют на скорость
(на это следует обратить особое внимание , если захочень создать рельефную имплементацию )


вполне возможно копилятор HLSL эффектов Квеста не устанавливает необходимые флаги оптимизации, игнорируя атрибуты.


В нашем с Русланом двиге на ДХ10 ввод  условных операторов на чтение текстур давал большой прирост. (конечно у нас и текстурки не "детские" : 3 чётырёх HDR(16 float) канальные текстуры ), логика была простой, по глубине проверяли стоит ли  читать G буфер. Если небо - то  пропускаем / если объекты - то читаем.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Cludz от 01 Февраля 2011, 11:56:08
поковырялся в коде Sqwer*а к сожалению он не дает нужного мне результата
картинка сделана в максе но суть думаю понятна
http://piccy.info/view3/1037622/e2f195900a9508a20794e075cfe5457a/


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 01 Февраля 2011, 12:36:03
2Cludz
Цитировать
поковырялся в коде Sqwer*а к сожалению он не дает нужного мне результата

всё что я сдела - это упростил, оптимизировал и исправил представленный тобой код.


но в любом случае  тебе надо использовать эмбиент свет

найди кусок кода


Цитировать
   float3 sumLight=0;

   sumLight+=float3(0.2f,0.2f,0.2f);

   sumLight+=lightcol[0]*CalculateLightInfluance(N,IN.LightVector0,light_atten[0]);
   sumLight+=lightcol[1]*CalculateLightInfluance(N,IN.LightVector1,light_atten[1]);

вставь   то , что отмечено красным
это и есть эмбиент цвет


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 01 Февраля 2011, 13:07:01
Цитировать
чем и как мерил? надеюсь  по мс и при статической камере в релиз режиме при одинаковой загрузке проца.

Нет. Мерил на глаз. Блок достаточно тяжелый, что бы не заметить разницы. В блоке я делаю размытие по гаусу 3х6 + шум. Т.е. 18 выборок в цикле из одной текстуры + столько же выборок из текстуры шума. коэффициент размытия зависит от значения читаемого из текстуры. При значения близким к 0 этот фильтр должен отключаться, а так же в зависимости от значения коэффициента хотелось бы снижать количество интераций.
Получается, что если на входе все пиксели текстуры =0, то производительность такая же, как если бы текстура имела бы значение >0, т.е. низкая. Можно попробовать прерывать цикл. 

Цитировать
вполне возможно копилятор HLSL эффектов Квеста не устанавливает необходимые флаги оптимизации, игнорируя атрибуты.

Это так, компилятор квеста не понимает такие флаги. По крайней мере "в лоб" не прокатило.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 01 Февраля 2011, 13:17:14
Цитировать
Это так, компилятор квеста не понимает такие флаги. По крайней мере "в лоб" не прокатило.
печально, надо протестить

если инфа подтвердится, то   единственный выход -  создать свой рендер.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Cludz от 01 Февраля 2011, 15:07:59
Alteste выложи пожалуйста свой код для 2х ИС
если можно с описанием  ::)
http://upload.com.ua/get/902316716/We die standing.cgr
Мои дебри только тссс :D


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 01 Февраля 2011, 19:46:51
Cludz, а чего сам не добавишь второй источник? Ты же уже посчитал направление для него?
Скопируй код для первого источника, но подставь вектор другого. Типа того - 
Код:
// Пиксельный шейдер
float4 PS(v2f IN) : COLOR
{
float3 N = normalize(IN.wnormal);

//Считаем для первого ИС
float3 L1 = normalize(IN.LightVector0);
float diffuseL1 = dot(N,L1);
float attenL1 = saturate(1.0 - dot(IN.LightVector0, IN.LightVector0)); // Затухание для первого ИС
float3 lColorL1 = lightcol[0]*diffuseL1*attenL1;

//Считаем для второго ИС
float3 L2 = normalize(IN.LightVector1);
float diffuseL2 = dot(N,L2);
float attenL2 = saturate(1.0 - dot(IN.LightVector1, IN.LightVector1)); // Затухание для второго ИС
float3 lColorL2 = lightcol[1]*diffuseL2*attenL2;


    float4 tex = tex2D(Texture1, IN.texCoor.xy);


float3 result = (lColorL1+lColorL2)*DiffuseColor*tex;
return float4(result,1);
}

Но, все равно, логичнее выносить идентичные блоки вычислений в функции, как у Sqwer'а

А в коде у Alteste, выложенном тобой, тоже считаются 2 ИС, но там ошибка:
Код:
	float atten = saturate(1.0 - dot(IN.LightVector0, IN.LightVector0)); // Затухание
    float4 tex = tex2D(Texture1, IN.texCoor.xy);
float3 resultA = lightcol[0]*diffuse*DiffuseColor*atten*tex;
float3 resultB = lightcol[1]*diffuse1*DiffuseColor*atten*tex;
Обрати внимание, что для затухания второго источника используются данные первого.

Кстати да, какой смысл в выражении "saturate(1.0 - dot(IN.LightVector0, IN.LightVector0));" так и не понял) Т.к. результат = 0 при любом раскладе. Затухание не так считается, эт точно.)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Cludz от 01 Февраля 2011, 19:56:56
для меня код как незнакомые английские слова))
то я пробовал продублировать, до ума так и не довел
в шейдерах копаюсь 3й день
спасибо за разъяснения


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 02 Февраля 2011, 16:14:43
2 dfx

Цитировать
Нет. Мерил на глаз. Блок достаточно тяжелый, что бы не заметить разницы.
только что проверил работу  ветвления IF - раздница есть


проверял так:

Цитировать
if (yes>1)
  {
  for( int i = 0;i < 100; i++ )
    {

   aldedo       += tex2D (gAlbedoMap, pIn.texC );
    normal       += tex2D (gNORMALMap, pIn.texC );
   position    += tex2D (gPOSITIONMap, pIn.texC );
   self      += tex2D (gSELFILLUMMap, pIn.texC );
   
     }

   }

каждая текстура -  4 каналка на 16float каждый

в цикле проганяется чтение  из 4ех текстур   100 раз

переменную  по которой происходит условие  "yes"   брал с внешней переменной, прилинкованной к HLSL каналу.


при yes=0    FPS  = 200
при yes=20   FPS  = 50

так что бранчинг влияет

=======================================================

Цитировать
Это так, компилятор квеста не понимает такие флаги. По крайней мере "в лоб" не прокатило.

так точно!

проверил:
перед   if (yes>1)    поставил   [branch]
Код:
  [branch] if (yes>1)  

квестовый анализатор семантики  выдал ошибку
Код:
unexpected token [ 
,  хотя в реальности ошибки нет  :P

но хорошо, что по умолчанию  стоит атрибут branch









Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Alteste от 02 Февраля 2011, 20:21:38
Ниже рабочий пример    "как это делается" +  вывел расчёт  параметров ИС  в  методы, что  сократит инструкции  8)
Сквер, ты из параметра затухание (аттенюэйшн) сделал силу света:
I = cos(L,N)* LightPower - получился обычный директник
Смысл в том, чтобы свет затухал на расстоянии.
Именно затухание отличает пойнтлайт от директа, посмотри мой пример еще раз http://guest3d.wohlnet.ru/forum/index.php?topic=1688.0


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 02 Февраля 2011, 20:52:19
Цитировать
Именно затухание отличает пойнтлайт от директа


отличает поинт от директа    вектор освещения!!
а не только аутенация

Для поинта он расчитывается: как нормализация раздницы(  позиция источника света - позиция поверхности)
учитывается затухание по расстоянию


Для директа он расчитывается: как нормализация раздницы (позиция источника света - 0)
затухание по расстоянию не учитывается



Цитировать
I = cos(L,N)* LightPower - получился обычный директник
мдя  оппечатался
вот поправленный вариант


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Alteste от 02 Февраля 2011, 22:02:57
Sqwer + в карму :)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 03 Февраля 2011, 01:18:04
Цитировать
переменную  по которой происходит условие  "yes"   брал с внешней переменной, прилинкованной к HLSL каналу.
В этом то и проблема. Я переменную для некоторых условий читаю из текстуры. Если читать из вне, то работает.
Вот кусочек кода для примера:
Код:
float3 refColor;
float glossiness = useGlossinesTexture==1?tex2D(glossinessSampler,In.texCoord.xy).r:iGlossiness;
float anisotropy = useAnisotropyTexture==1?tex2D(anisoSampler,In.texCoord.xy).r:iAnisotropy;
float anisoDir = useAnisoDirTexture==1?tex2D(anisoDirSampler,In.texCoord.xy).r:iAnisoDir;
float metallness = useMetallnessTexture==1?tex2D(metallnessSampler,In.texCoord.xy).r:iMetallness;

if (glossines == 0)
{
    float3 refVec = -reflect(eyeVec,Nn);
    refColor = texCUBE(envSampler,refVec);

}
else
{
    refColor = cubeBlur(envSampler,Nn,Bn,Tn,glossiness,Anisotropy,anisoDir,eyeDir);

}
if (metallness<1)
{
    refColor *= fresnel(eyeVec,Nn,frIOR);
}

Если использовать значения из вне, типа этого:
Код:
float3 difColor=0;
if (difCalcType==useDifCubeTexture)
{
    difColor +=texCUBE(difCubeSampler,Nn);
}
if (difCalcType==useEnvCube_Linear)
{
    difColor += createDifLightLinear(envCubeSampler,Nn);
}
if (difCalcType==useEnvCube_Cubic)
{
    difColor += createDifLightCubic(envCubeSampler,Nn);
}

вроде работает.

Цитировать
хотя в реальности ошибки нет 
Т.е. эффект всеравно компилируется? Или тут имеется ввиду, что должно компилироваться, если бы не квестовый анализатор?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 03 Февраля 2011, 03:06:50
Цитировать
Или тут имеется ввиду, что должно компилироваться, если бы не квестовый анализатор?
ага


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 03 Февраля 2011, 16:55:27
Да уж. В квесте море таких моментов(
Кстати,
Цитировать
проверял так:


Цитировать
if (yes>1)
  {
  for( int i = 0;i < 100; i++ )
    {

   aldedo       += tex2D (gAlbedoMap, pIn.texC );
    normal       += tex2D (gNORMALMap, pIn.texC );
   position    += tex2D (gPOSITIONMap, pIn.texC );
   self      += tex2D (gSELFILLUMMap, pIn.texC );
   
     }

   }

каждая текстура -  4 каналка на 16float каждый

в цикле проганяется чтение  из 4ех текстур   100 раз

это не совсем медленно) При выборке одного пикселя из текстуры по одним и тем же координатам не сильно просадит фпс, т.к. эти данные кэшируются и после первой выборки чтение идет из кеша. А значит эта тяжелая инструкция используется один раз. Т.е. образно -
Код:
aldedo       += tex2D (gAlbedoMap, pIn.texC );
normal       += tex2D (gNORMALMap, pIn.texC );
position    += tex2D (gPOSITIONMap, pIn.texC );
self      += tex2D (gSELFILLUMMap, pIn.texC );

for( int i = 0;i < 100; i++ )
    {
aldedo       += aldedo;
normal       += normal;
position    += position;
self        +=self;
    }


 Кроме того компилятор может просечь что к чему и на выходе сделать вообще так:
Код:
aldedo       += tex2D (gAlbedoMap, pIn.texC )*100;
normal       += tex2D (gNORMALMap, pIn.texC )*100;
position    += tex2D (gPOSITIONMap, pIn.texC )*100;
self      += tex2D (gSELFILLUMMap, pIn.texC )*100;
Что, конечно не факт.

 Но если каждую интерацию читать пиксель по случайным координатам и использовать большой разброс, то 50 фпс точно не будет)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 03 Февраля 2011, 17:03:59
Цитировать
Кроме того компилятор может просечь что к чему и на выходе сделать вообще так:


а подумай:  зачем я поставил перед "="   плюс?  ;)



Цитировать
эти данные кэшируются и после первой выборки чтение идет из кеша.
это  уже на совести  разработчиков драйверов и архитектуры железки.


РС
да и насколько я помню кэшируется только  вертексные данные (не уверен на 100%)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 03 Февраля 2011, 17:25:01
Цитировать
а подумай:  зачем я поставил перед "="   плюс?

Сложение с текущим значением переменной, т.е. сделать выборку и сто раз прибавить результат.) Компиляторы не такие глупые, да и в железках кучу железных оптимизаций.

Цитировать
это  уже на совести  разработчиков драйверов и архитектуры железки.
РС
да и насколько я помню кэшируется только  вертексные данные (не уверен на 100%)

И это тоже кешируется) Иначе бы небыло 50 фпс)
А что за железка?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 03 Февраля 2011, 18:16:06
Цитировать
Компиляторы не такие глупые
плохо подумал, давай ещё  :D

(не думай  что я стебусь, в своей правоте я уверен...  ибо сам ставил всевозможные опыты )


Цитировать
железках кучу железных оптимизаций.
где ты такое  узрел? пруф линк на инфу в студию


GPU видяхи устроен по принципу  RISC процессора, так что никокого инлайн оптимазинга нет.
Видяха берёт вычисления количиством, а не качеством.


Цитировать
И это тоже кешируется) Иначе бы небыло 50 фпс)
и опять всего лишь слова...
нужны не предположения  а факты.


железка старая  Гфорса 8800 серии.

для чистоты эксперемента могу провести на  болеее новой


Цитировать
РС
да и насколько я помню кэшируется только  вертексные данные (не уверен на 100%)
http://www.gamedev.ru/terms/VertexCache


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 03 Февраля 2011, 21:24:09
Цитировать
где ты такое  узрел? пруф линк на инфу в студию


GPU видяхи устроен по принципу  RISC процессора, так что никокого инлайн оптимазинга нет.
Видяха берёт вычисления количиством, а не качеством.

Я думаю, что кэши и прочее, как раз для оптимизации производительности и используется.


Цитировать
и опять всего лишь слова...
нужны не предположения  а факты.

Какие факты? То, что существует не только вершинный кэш, но и текстурный и еще горстка кешей? :D Были ветки на форумах, где народ эксперементировал с тем же SSAO и было замечено, что производительность сильно зависит от радиуса выборки соседних пикселей и т.д.

Либо ты прикалываешся, либо мы совсем о разном говорим.


Цитировать
Двойной кэш текстур
Уже существовал на GeForce3. Новые алгоритмы лучше работали при использовании мультитекстурирования или высококачественной фильтрации. Благодаря этому в GeForce4 Ti была значительно улучшена производительность при наложении 3-4 текстур.
http://gamegpu.ru/geforce-4-series/geforce-4-ti-4200-osobennosti-arhitektury.html

Цитировать
– Текстурный блок – логика
адресации текстурных массивов в 1D,
2D, 3D  + L1 Кэш Текстур
http://www.nvidia.ru/docs/IO/60385/Lecture_44.pdf

Цитировать
Потоковые процессоры сгруппированы в восемь блоков по 16 штук, каждый из которых оснащен четырьмя текстурными модулями и общим L1-кэшем.
http://www.compress.ru/Archive/CP/2006/12/5/

Цитировать
Кэш первого уровня имеет объем 64 KB, по 32 KB для вершин и текстур (похоже на L1-кэш для данных и инструкций у CPU), общий же кэш второго уровня равен 256 KB. Текстурных блока у R600 всего четыре.

http://article.techlabs.by/30_940_2.html

Цитировать
С помощью утилиты NVPerfHUD можно включать или выключать ту или иную функциональность драйвера или GPU. Например с помощью mipmap LOD bias можно сделать все текстуры размером 2х2. Если производительность при этом возрастет, значит узкое место � кэш-промахи при доступе к текстурам
http://amax.h16.ru/docs/nv.html


 ??? ::) ???
Сори за такой длинный пост(


Вот один из фактов оптимизации кода компилятором, с которым я столкнулся. Это такой же цикл как и у тебя, Sqwer.
Берем такой код :
Код:
	
half2 passessUV = half(6,3);
float3 refColor=0;
for (int x = 0; x < passessUV.x; ++x)
{
float pX = x-p_.x;
if (pX<=0) {rTn = -rTn;}
for (int y = 0; y < passessUV.y; ++y)
{
float pY = y-p_.y;
if (pY<=0) {rBTn = -rBTn;}
float3 tNn = normalize(lerp(normals,rTn,(abs(pX)+noise_.x)*glossinessUV.x));
float3 btNn = normalize(lerp(tNn,rBTn,(abs(pY)+noise_.y)*glossinessUV.y));
refColor += texCUBE(iSamplerCube, -reflect(iEyeVec,btNn) ).r;
}
}
refColor /=passesQ;
Результат - 7фпс (
Отключаем выборку, но используем значение предыдущей переменной, что бы компилятор не отбросил предыдущие вычисления-
Код:
refColor += btNn//texCUBE(iSamplerCube, -reflect(iEyeVec,btNn) ).r;
Результат - 30фпс
далее убираем из вычислений значение переменной интерации  -
Код:
	float pX = p_.x;//x-p_.x;
if (pX<=0) {rTn = -rTn;}
for (int y = 0; y < passessUV.y; ++y)
{
float pY = p_.y;//y-p_.y;
Результат - 52фпс
возвращаем выборку, но оставляем убранные значения счетчика - 46фпс


Смотрим результаты и делаем выводы.
В первый раз имеем большую зону выборки - 7фпс
В последний - читаем один и тот же пиксель - 46фпс
Во второй - не читаем текстуру вообще, но с каждой интерацией прибавляемое значение меняется - 30фпс
в третий не меняется, т.к. вычисления остаются идентичными для каждой интерации - 52 фпс

видео: GF8600GT
Объект занимает 100% вьюпорта. разрешение - 1272х849
В шейдере есть другие инструкции, помимо этого цикла.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Sqwer от 04 Февраля 2011, 03:21:36
Цитировать
да и в железках кучу железных оптимизаций.
ну и где эта куча?   
кроме кэша ничего не нашлось  ::)

Цитировать
Были ветки на форумах, где народ эксперементировал с тем же SSAO и было замечено, что производительность сильно зависит от радиуса выборки соседних пикселей и т.д.
наверное ты не так понял.
суть ССАО  в том, что  для затенения мы проверяем  соседние пиксели на разницу глубины.
выборка происходит из соседних пикселей.
чем дальше стреляем - тем разреженней   зона выборки
(представь зерно в кучке  и  зерно этой же кучки разбросанное по складу)
поскольку   происходит разряжение (снижение плотности) тестов надо её компенсировать, вопрос  КАК??
ответ: увеличив плотность    увеличением кол-ва выборок.

Итого   -  увеличивая размер выборки    мы  увеличиваем кол-во выборок, дабы сохранить прежнюю плотность (качество ссао)

ЗЫ.
"не доверяй каждому слову" так  говорил Виктор Куропятник.
и блин.. он был прав
на  геймдеве топчатся много новичков, у которых что-то не так с...   и они начинают  выдумывать   непонятно, что, внушая свои  догатки остальным. Хорошо, что там есть старожилы (обычно  со стороны участников), которые пресекают подобные идеи.

В любом случае, доверять можно им  или пэперам, к постам новечков яб относился с опаской.  :-\



Цитировать
Это такой же цикл как и у тебя, Sqwer.
вовсе нет, твой жирнее!


   
Цитировать
Либо ты прикалываешся, либо мы совсем о разном говорим.
не, я серьёзный как индюк
меня заинтересовал твои суждения и решил убедиться сам

Тест №1 Задача:  ИЗМЕРИТЬ  ФПС при включ/выключенном цикле
узнать, работает ли бранчинг

вкл/выкл  контролируется   условием IF 
переменная yes    - внешняя,  тип float
Код:
if (yes>1)
{
for( int i = 0;i < 100; i++ )
{
aldedo += tex2D (gAlbedoMap, (pIn.texC ));
  normal += tex2D (gNORMALMap, (pIn.texC) );
position += tex2D (gPOSITIONMap, (pIn.texC) );
self += tex2D (gSELFILLUMMap, (pIn.texC) );

}

}

Результаты:
включ цикл  - 56 ФПС   (18 мс)
выключ цикл - 170 ФПС  (6 мс)
бранчинг работает


 
Тест №2 Задача:  проверить гипотезу  о нарушении попадания в кэш текстур в случае сдвига текстурных координат.

добавим в код  смещение текстурных
(оптимизатор не схлопнет цикл, поскольку стоят + / также изменения текстурных координат зависит от цикла , поскольку подключаем переменную i /  i  принимает целые значения , а адресация текстур приводится в диапозоны [0..1], т.е.  мы по сути стреляем в одни и теже координаты, для исключения этого  добавим произвольное смещения *0,ххх)

 
Цитировать

 if (yes>1)
{
for( int i = 0;i < 100; i++ )
{

aldedo       += tex2D (gAlbedoMap,       (pIn.texC+i*0.01) );
normal       += tex2D (gNORMALMap,       (pIn.texC+i*0.011) );
position    += tex2D (gPOSITIONMap,    (pIn.texC+i*0.0111) );
self      += tex2D (gSELFILLUMMap,    (pIn.texC+i*0.01111) );
   
   }

}   

Результат:

10 ФПС (100,0 мс)


в цикле выполняется доп операция +i*0.ххх, которая  не бесплатна
посмотрим на  штрафы включения этой  +i*0.ххх
для этого поменяем код

 
Цитировать
if (yes>1)
{
for( int i = 0;i < 100; i++ )
{
aldedo    +=i*0.01;
normal     +=i*0.011;
position  +=i*0.0111;
self     +=i*0.01111;

   aldedo       += tex2D (gAlbedoMap, (pIn.texC));
    normal       += tex2D (gNORMALMap, (pIn.texC) );
   position    += tex2D (gPOSITIONMap, (pIn.texC) );
   self      += tex2D (gSELFILLUMMap, (pIn.texC) );
   
   }

}   
 
Результат:
34 ФПС  (29,4  мс)


Узнаем штраф не попадания по кэшу:

100,0 мс - 29,4 мс = 70,6 мс

Узнаем штраф  на  вызов операций   +i*0.ххх

29,4 мс -18 мс = 11,4 мс

Пусть  цикл без смещения текстурок  и без   функции +i*0.хххх   является номиналом, тогда посчитаем  относительный штраф:

(70,6/18)*100%= 392%
(11,4/18)*100%= 63%
Это значит , что ввод  блока  +i*0.хххх замедлил работу шейдера на 63%

Промах по кэшу замедлил  ещё на 392% 


Теперь  проверим между собой

(70,6/11,4)*100%=619%
т.е.  штраф на не попадания в кэш состовляет  619% от штрафа на  блок +i*0.хххх


ТЕПЕРЬ подумаем,   а вбруг  эксперемент не читстый??!   вдруг  у нас   все текстуры находятся в кэше??!!   
 ответ- ИСКЛЮЧЕНО  (ибо текстуры  разрешения 1280*1024 на 64бит/пиксель     это примерно для 4 текстур  40мб!!    естественно, что  такого  кэша  видяха  8800GTX не имеет)

мэй би кэшируется этими самими  регионами.  ::)  ???
нужны пэперы для конкретных архитектур и дров.



ОБЩИЙ ВЫВОД:

миф о штрафе промаха текстурного кэша   ПОДТВЕРЖДЁН




!!!люди  будьте аккуратнее с циклами!!!


 


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 04 Февраля 2011, 06:11:01
Цитировать
наверное ты не так понял.
Я правильно понял. Имелось ввиду увеличение радиуса без увеличения интераций, но там использовалась жесткая тектура шума (256х256), когда стали использовать шум 4х4. Скорость выросла, но артифакты стали заметнее.

тест подтверждает суждения


Цитировать
Результаты:
включ цикл  - 56 ФПС   (18 мс)
выключ цикл - 170 ФПС  (6 мс)
бранчинг работает

Это не может не работать :) Проблема была немного в другом - значение для условий читалось из тектуры. А это уже совсем другое. Если внешнее значение - константа на момент исполнения шейдера, то значение создаваемое самим шейдером в процессе заранее не известно, что содает свои штрафы при ветвлениях(

Интересный экперимент. Но тут странно, что производительность так рухнула.
Код:
if (yes>1)
{
for( int i = 0;i < 100; i++ )
{
   aldedo       += tex2D (gAlbedoMap, (pIn.texC+i+0.3 ));
    normal       += tex2D (gNORMALMap, (pIn.texC+i+0.3) );
   position    += tex2D (gPOSITIONMap, (pIn.texC+i+0.3) );
   self      += tex2D (gSELFILLUMMap, (pIn.texC+i+0.3) );
   
   }

 

ага очень странно,  поправил  -  разница ощутима стала.  :-X

Кстати, насчет схлопывания цикла и дороговизны сложения, попробуй код
   aldedo+=i+0.3;
   normal+=i+0.3;
   position+=i+0.3;
   self+=i+0.3;

заменить на
   aldedo+=0.2+0.3;
   normal+=0.4+0.3;
   position+=0.8+0.3;
   self+=0.1+0.3;

исключив, тем самым, значение интератора из вычислений. У меня, как я писал, производительность сильно отличается при таких раскладах. Т.е. если в выражениях учавствует значение интератора, то производительность падает прилично, при идентичных операциях. Вполне возможно, что при одних и тех же результатах во всех интерациях, сложение не производятся честно каждую интерацию. надо попробовать посмотреть асм на выходе - там виднее будет.

ага в таких случаях он выносит выражение 0.2+0.3 за цикл

Вообще же, если копать глубоко по устройству гпу, оптимизации кода и т.д., то более полезными оказываются статьи по CUDA, там более подробно описывают все нюансы, чем в статьях по графическим эффектам. Сам сейчас курю эти доки из сети. :)


если вкусное найдёшь -  заливай.. посмотрим  :)

За тесты +1 ;D


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Cludz от 10 Апреля 2011, 01:33:56
Цитировать
float4 blend(float4 texture0, float4 texture1, float layerOpacity)
{
    const float blendRange = 0.1;
 
    if (texture1.a < layerOpacity - blendRange)     
    {
         return texture1;
    }
    else if (texture1.a > layerOpacity + blendRange)
    {
        return texture0;
    }
    else
    {
        float f = (texture1.a - layerOpacity + blendRange) / (2 * blendRange);
        return lerp(texture1, texture0, f);
    }
}
смешивание текстур через альфа канал, как это адаптировать под квест?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Alteste от 10 Апреля 2011, 11:34:46
Цитировать
смешивание текстур через альфа канал, как это адаптировать под квест?
Код:
// BLEND DIFFUSE ALPHA
/////////////////////////////////////////////////////////////////////////
///// Объявление Переменных /////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
// Объявление матриц
float4x4 WorldVP : WorldViewProjection; // Произведение мировой, видовой и проекционной матриц
float4x4 World   : World; // Матрица мирового преобразования
float4x4 WorldIT : WorldInverseTranspose; // Инвертированная - транспонированная мир матрица

// Переменные (Value)
float LayerOpac : CHANNELVALUE0 <
    string UIWidget = "slider";
    float UIMin = 0.0;
    float UIMax = 1.0;
    string UIName =  "Layer Opacity";
> = 1;

/////////////////////////////////////////////////////////////////////////
///// Текстуры //////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////

texture texmap : TEXTURE0;
sampler Texture1 = sampler_state
{
Texture = <texmap>;
    MinFilter = Linear;
    MipFilter = Linear;
    MagFilter = Linear;
    AddressU = Wrap;
    AddressV = Wrap;
    AddressW = Wrap;
};

texture texmap2 : TEXTURE1;
sampler Texture2 = sampler_state
{
Texture = <texmap2>;
    MinFilter = Linear;
    MipFilter = Linear;
    MagFilter = Linear;
    AddressU = Wrap;
    AddressV = Wrap;
    AddressW = Wrap;
};
/////////////////////////////////////////////////////////////////////////
///// Структуры /////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////

//Входящие данные
struct appdata
{
    float4 position : POSITION; // Позиция объекта
float3 Normal    : NORMAL; // Нормаль к поверхности
float2 texcoord0 : TEXCOORD0; // Текстурные координаты
};

//Исходящие данные
struct vertexOutput
{
    float4 HPosition    : POSITION; // Позиция объекта
float3 wNormal    : TEXCOORD0; // Направление нормали в мировом пространстве
float2 texcoord0 : TEXCOORD3; // Текстурные координаты
};

/////////////////////////////////////////////////////////////////////////
///// Шейдеры ///////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
//Вершинный шейдер
vertexOutput VS(appdata IN)
{
    vertexOutput OUT;
OUT.wNormal = normalize(mul(IN.Normal,WorldIT));
float4 worldSpacePos = mul(IN.position,World);
    OUT.HPosition = mul(IN.position,WorldVP);
OUT.texcoord0 = IN.texcoord0;
    return OUT;
}

// Функция смешивания
float4 blend(float4 texture0, float4 texture1, float layerOpacity)
{
    const float blendRange = 0.1;
 
    if (texture1.a < layerOpacity - blendRange)     
    {
         return texture1;
    }
    else if (texture1.a > layerOpacity + blendRange)
    {
        return texture0;
    }
    else
    {
        float f = (texture1.a - layerOpacity + blendRange) / (2 * blendRange);
        return lerp(texture1, texture0, f);
    }
}

//Пиксельный шейдер
float4 PS(vertexOutput IN) : COLOR
{
float4 tex1 = tex2D(Texture1,IN.texcoord0.xy);
float4 tex2 = tex2D(Texture2,IN.texcoord0.xy);
float4 result = blend(tex1,tex2,LayerOpac);
return result;
}

/////////////////////////////////////////////////////////////////////////
///// Техника ///////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
technique Main
 {
    pass p0
 {
        VertexShader = compile vs_2_0 VS();
        PixelShader = compile ps_2_0 PS();
ZWriteEnable = true;
 }
}


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Cludz от 10 Апреля 2011, 20:37:20
blendRange что это? и зачем оно нужно?)
выходит это была уже готовая функция
а как альфа каналу задать отдельные текстурные координаты?


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Alteste от 11 Апреля 2011, 06:12:58
blendRange что это? и зачем оно нужно?)
выходит это была уже готовая функция
а как альфа каналу задать отдельные текстурные координаты?
Ты лучше скажи что тебе нужно получить


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Cludz от 11 Апреля 2011, 10:46:50
Цитировать
Ты лучше скажи что тебе нужно получить
смешивание множества текстур(8шт лимит квеста если не ошибаюсь) на терейне(terrain),текстура в альфа канале растянута на всю модель, величина в альфа канале показывает процент заполнения текстуры.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Alteste от 11 Апреля 2011, 14:44:31
Цитировать
Ты лучше скажи что тебе нужно получить
смешивание множества текстур(8шт лимит квеста если не ошибаюсь) на терейне(terrain),текстура в альфа канале растянута на всю модель, величина в альфа канале показывает процент заполнения текстуры.
Напиши подробно (какие текстуры и как смешиваются, какие текстурные коодринаты и у какой текстуры альфа-канал) или приведи пример на материалах 3dsmax.


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: Cludz от 12 Апреля 2011, 17:36:04
1я текстура смешивается с 2й относительно альфа маски 1й,
если в альфа канале 1 (белый) рисовать 1ю текстуру если 0 (черный) рисовать 2ю а если 0.5 (серый) рисовать 50/50
также 2я и 3я текстуры через альфа маску 2й, 3я и 4я и так далее до 8й, альфа 8й текстуры хочу сделать теневой маской.
Текстурные координаты для альфа маски 1, 1
Для цветовой не знаю это зависит от размеров модели, я хотел делать модель размеров 1км на 1км но думаю не в ложусь в лимит пикселей, для всех текстур координаты одинаковы (кроми альфа каналов)


Название: Re: "Крутизна и реализьм" - тема про шейдеры
Отправлено: dfx от 12 Апреля 2011, 22:27:27
Привет.
На самом деле это не очень хорошая идея хранить маску в альфе, по крайней мере для ландшафта. Я не знаю, каким образом используешь текстуры, но проще делать так -

Смешиваем песок,зеленую траву, желтую траву, камни, снег -
песок, трава, камни - тайлящаяся текстура 512х512 RGB
снег - можно просто материалом или бамп...
маски храним в отдельной текстуре, например 2048х2048 RGB
в канале RED - одна маска, скажем для песка и травы, в канале BLUE - другая и т.д.
Тайловые текстуры у нас получаются одинаковые для всех уровней, а маски привязаны к ландшафту.

Тем не менее можно найти применение и для альфа-канала текстур - там тоже хранить маски, но локальные, учитывающие особенности диффузной текстуры. Они будут просто визуально увеличивать детализацию перехода от одного слоя к другому, т.к. какой бы не была большой текстура, переходы все равно будут слишком мягкие, что смотрится не очень красиво.