Mopnex
Участник
Репутация: 34
Offline
Пол: Награды:
API: Unity 3D
Деятельность: Программист-рукожоп
Сообщений: 191
~(^-^)~
|
|
« : Сентябрь 21, 2016, 16:53:33 » |
|
Три дня потратил на поиск готового шейдера для создания псевдо-3Д планет для GMS, безрезультатно. Наткнулся на сайт, на котором нашел множество крутых шейдеров. Язык GLSL, как раз то что нужно. Пришлось немного попотеть, поискать мануалов чтоб подогнать эти шейдеры под гамак, но в итоге получилось) Оставлю пример тут, может знатоки подскажут что сделал не так, что можно оптимизировать, переделать. Внешне всё работает, но мог и накосячить при переносе, хотелось бы сделать данный шейдер более универсальным, для создания различных планет. Помощь исправлении багов и улучшении шейдера приветствуется Добавлено: Сентябрь 21, 2016, 17:17:21 Так же добавлю шейдер солнца Добавлено: Сентябрь 21, 2016, 17:39:03 Вот переделал еще один космический шейдер для создания красивого космоса) Всё, стартовый набор для создания игры космические рейнджеры готов! ПыСы: Добавил рабочий пример работы шейдера
|
|
« Последнее редактирование: Февраль 25, 2017, 20:19:20 от Mopnex »
|
Записан
|
Ушёл в себя. Вышел из себя. Пришёл в себя. Норм погулял.
|
|
|
skypo
GM Pro user
Репутация: 63
Offline
Пол: Награды:
API: GameMaker Studio Pro
Сообщений: 809
|
|
« Ответ #1 : Сентябрь 21, 2016, 18:27:59 » |
|
осталась самая мелочь - собственно собрать игру
|
|
|
Записан
|
|
|
|
Mopnex
Участник
Репутация: 34
Offline
Пол: Награды:
API: Unity 3D
Деятельность: Программист-рукожоп
Сообщений: 191
~(^-^)~
|
|
« Ответ #2 : Сентябрь 21, 2016, 18:39:00 » |
|
игра и создается из мелочей
Добавлено: Сентябрь 21, 2016, 23:19:27 исправил шейдер планеты, теперь он рисует как надо, вложение обновил.
|
|
« Последнее редактирование: Сентябрь 21, 2016, 23:19:27 от Mopnex »
|
Записан
|
Ушёл в себя. Вышел из себя. Пришёл в себя. Норм погулял.
|
|
|
NickLatkovich
Никита Латкович
GM Pro user
Репутация: 185
Offline
Пол: Награды:
API: GameMaker Studio Master
Сообщений: 853
7*3=21;73=p(21);37=p(12)
|
|
« Ответ #3 : Сентябрь 22, 2016, 09:01:36 » |
|
Эммм... Я конечно поставлю плюсик за старание... Но... FPS == 6???
P.S. для сравнения, такая же планета из двух 3D сфер (небо и земля) на моём супер-медленном компе выдаёт... 260 FPS.
|
|
|
Записан
|
|
|
|
luden
GM Pro user
Репутация: 151
OfflineНаграды:
API: GameMaker Studio Master
Сообщений: 704
|
|
« Ответ #4 : Сентябрь 22, 2016, 09:43:20 » |
|
Мне одному кажется, что выглядит жутко? Я не знаю как именно там реализован бампмап, но он даёт херову тучу лишних теней которые просвечивают сквозь всё подряд. Короче вот - https://habrahabr.ru/post/248381/
|
|
|
Записан
|
|
|
|
Mopnex
Участник
Репутация: 34
Offline
Пол: Награды:
API: Unity 3D
Деятельность: Программист-рукожоп
Сообщений: 191
~(^-^)~
|
|
« Ответ #5 : Сентябрь 22, 2016, 14:36:38 » |
|
Мне одному кажется, что выглядит жутко? Я не знаю как именно там реализован бампмап, но он даёт херову тучу лишних теней которые просвечивают сквозь всё подряд. Короче вот - https://habrahabr.ru/post/248381/А сможешь их шейдер переписать на GLSL? я пытался, в итоге не вышло , а вдохновлялся именно этим постом. Жаль что их шейдер написан на HLSL, пока что безуспешно пытаюсь переписать его на GL
|
|
|
Записан
|
Ушёл в себя. Вышел из себя. Пришёл в себя. Норм погулял.
|
|
|
DmitryDS
Потому что я такой-сякой
GM Pro user
Репутация: 159
OfflineНаграды:
API: GameMaker Studio Master
Сообщений: 1061
|
|
« Ответ #6 : Сентябрь 22, 2016, 14:43:09 » |
|
GM:S умеет в HLSL 9 и 11, но они не рекомендованы: первый только для 32-битных Windows, а второй - только для Win8 и виндофона.
|
|
|
Записан
|
Я никогда никого не пытаюсь оскорбить или обидеть, хотя порой веду себя вызывающе. Не обижайтесь, я не со зла
|
|
|
Mopnex
Участник
Репутация: 34
Offline
Пол: Награды:
API: Unity 3D
Деятельность: Программист-рукожоп
Сообщений: 191
~(^-^)~
|
|
« Ответ #7 : Сентябрь 22, 2016, 14:58:39 » |
|
GM:S умеет в HLSL 9 и 11, но они не рекомендованы: первый только для 32-битных Windows, а второй - только для Win8 и виндофона.
И как тогда быть? как переписать тот шейдер с хабра? Если с GL я еще чуток разобрался, то в HL вообще не шарю Добавлено: Сентябрь 22, 2016, 23:22:56 Вообщем прикрепляю простенький шейдер, опять же для создания планет, без атмосферы и освещения. Проблема как и с предыдущими, как заставить его рисоваться в других местах кроме верхнего левого угла экрана?
|
|
« Последнее редактирование: Сентябрь 22, 2016, 23:22:58 от Mopnex »
|
Записан
|
Ушёл в себя. Вышел из себя. Пришёл в себя. Норм погулял.
|
|
|
Dmi7ry
Гл. Администратор
Репутация: 1379
Offline
Пол: Награды:
API: GameMaker Studio Master
Деятельность: Code, design
Сообщений: 6626
|
|
« Ответ #8 : Сентябрь 23, 2016, 09:40:56 » |
|
Проблема как и с предыдущими, как заставить его рисоваться в других местах кроме верхнего левого угла экрана? Если не хватает скиллов в шейдерах, то рисуйте в сурфейс, который выводите в любое место экрана.
|
|
|
Записан
|
- А какой, собственно, командой процессора колобок ест черта? - Командой EAT... | | Справка и FAQ в правом верхнем углу... | |
|
|
|
Mopnex
Участник
Репутация: 34
Offline
Пол: Награды:
API: Unity 3D
Деятельность: Программист-рукожоп
Сообщений: 191
~(^-^)~
|
|
« Ответ #9 : Сентябрь 23, 2016, 11:35:46 » |
|
Проблема как и с предыдущими, как заставить его рисоваться в других местах кроме верхнего левого угла экрана? Если не хватает скиллов в шейдерах, то рисуйте в сурфейс, который выводите в любое место экрана. Хотелось бы осилить шейдеры, чтоб производительность не страдала Добавлено: Сентябрь 24, 2016, 13:53:21 Помогите разобраться с проблемой, есть шейдер рисующий планету (в проекте планета Земля), отрисовывает отлично, если не одно но (точнее два) : если добавить еще какой-нибудь спрайт (в примере пустой спрайт 200*200) он начинает рисоваться (хотя в шейдере явно указано что должен рисоваться один спрайт текстуры планеты) и вторая проблема это невозможность перемещения области отрисовки (рисует только в левом верхнем углу и нигде больше, для наглядности на стрелках сделал перемещение объекта). Тут отрисовывается если добавить пустой спрайт (нигде его не используя) Тут отрисовывается нормально (если удалить пустой спрайт и сохранить после этого проект)
|
|
« Последнее редактирование: Сентябрь 24, 2016, 13:53:24 от Mopnex »
|
Записан
|
Ушёл в себя. Вышел из себя. Пришёл в себя. Норм погулял.
|
|
|
|
Mopnex
Участник
Репутация: 34
Offline
Пол: Награды:
API: Unity 3D
Деятельность: Программист-рукожоп
Сообщений: 191
~(^-^)~
|
|
« Ответ #11 : Сентябрь 24, 2016, 15:35:52 » |
|
Уже говорил вам в чате давным-давно: ставьте галочку "used for 3d", тогда изображение не будет запаковываться в текстурный атлас.
Спасибо! Забыл совсем про это) Осталось разобраться с отрисовкой шейдера по месту нахождения объекта) Добавлено: Сентябрь 24, 2016, 18:18:20 Вертекс шейдер // // Simple passthrough vertex shader // attribute vec3 in_Position; // (x,y,z) varying vec2 fragCoord; //varying vec4 v_pos; void main() { vec4 object_space_pos = vec4( in_Position.x, in_Position.y, in_Position.z, 1.0); gl_Position = gm_Matrices[MATRIX_WORLD_VIEW_PROJECTION] * object_space_pos; //v_pos=gm_Matrices[MATRIX_WORLD]*object_space_pos; fragCoord = in_Position.xy; } Фрагмент шейдер - // // Simple passthrough fragment shader // const float pi = 3.14159265; uniform vec2 iResolution; uniform float iGlobalTime; uniform sampler2D iSprite; varying vec2 fragCoord; //varying vec4 v_pos; void main() { //vec2 fragCoord = v_pos.xy; vec2 uv = fragCoord.xy / iResolution.yy; vec2 p = 2.0 * (uv - 0.5); float r = sqrt(p.x*p.x + p.y*p.y); if (r<=1.0) { float d = r != 0.0 ? asin(r) / r : 0.0; vec2 p2 = 1.5*d * 1.5*p; float x3 = mod(p2.x / (pi*2.0) + 0.5 + iGlobalTime*0.1, 1.0); float y3 = p2.y / (pi*2.0) + 0.5; vec2 newCoord = vec2(x3, y3); vec4 sphereColor = texture2D(iSprite, newCoord); gl_FragColor = sphereColor; } else { gl_FragColor = vec4(0.0,0.0,0.0, 0.0); } } В Draw - shader_set(shader_planet); shader_set_uniform_f(resolt, 200,200); shader_set_uniform_f(time, current_time/1000); texture_set_stage(samp_spr,tex_sprite); draw_sprite(sprite2, 0, x,y); shader_reset(); draw_text(x,y,string(fps_real ));
|
|
« Последнее редактирование: Сентябрь 24, 2016, 18:18:20 от Mopnex »
|
Записан
|
Ушёл в себя. Вышел из себя. Пришёл в себя. Норм погулял.
|
|
|
life Jumb
GM Pro user
Репутация: 251
Offline
Пол: Награды:
API: GameMaker Studio Pro
Деятельность: Программист
Сообщений: 1512
|
|
« Ответ #12 : Сентябрь 24, 2016, 18:35:16 » |
|
vec4 sphereColor = texture2D(iSprite, newCoord); вот тут у тебя рисуемая текстура униформой а что у тебя в gm_BaseTexture, что такое sprite2? Пробовал заменить их или вообще использовать gm_BaseTexture?
И кде вообще код когда ты передаешь iSprite через униформу почему она у тебя вообще рисуется, по логике вообще должно забаговать
|
|
|
Записан
|
|
|
|
Mopnex
Участник
Репутация: 34
Offline
Пол: Награды:
API: Unity 3D
Деятельность: Программист-рукожоп
Сообщений: 191
~(^-^)~
|
|
« Ответ #13 : Сентябрь 24, 2016, 20:07:12 » |
|
vec4 sphereColor = texture2D(iSprite, newCoord); вот тут у тебя рисуемая текстура униформой а что у тебя в gm_BaseTexture, что такое sprite2? Пробовал заменить их или вообще использовать gm_BaseTexture?
И кде вообще код когда ты передаешь iSprite через униформу почему она у тебя вообще рисуется, по логике вообще должно забаговать
vec4 sphereColor = texture2D(iSprite, newCoord); - вот тут используется iSprite, тут высчитывает текстурные координаты, но как ты сказал, я убрал это, и сделал через gm_BaseTexture
|
|
|
Записан
|
Ушёл в себя. Вышел из себя. Пришёл в себя. Норм погулял.
|
|
|
|