blog.sandm.cc

Reader

Read the latest posts from blog.sandm.cc.

from signicolor

La psicología de los colores es la rama de la psicología que se ocupa del efecto que tienen los colores en la mente y el comportamiento humano. Los colores pueden tener un impacto significativo en nuestras emociones, percepciones y comportamiento, y por lo tanto, se utilizan a menudo en la publicidad, el diseño gráfico y el marketing para transmitir mensajes y crear una cierta atmósfera o estado de ánimo. Algunos ejemplos de cómo los colores pueden afectar nuestras emociones y comportamiento incluyen: El rojo puede aumentar la frecuencia cardíaca y la presión arterial, y puede ser percibido como energizante y estimulante. El azul suele ser percibido como calmante y relajante, y puede reducir la frecuencia cardíaca y la presión arterial. El amarillo puede ser percibido como alegre y energizante, pero también puede ser percibido como agresivo o desagradable si se utiliza en exceso. El verde puede ser percibido como calmante y equilibrado, y puede ayudar a reducir el estrés y la ansiedad. El morado suele ser percibido como sofisticado y lujoso, y puede ser utilizado para transmitir una sensación de misterio o creatividad. Es importante tener en cuenta que estos efectos pueden variar según la persona y el contexto, y que no hay una regla universal sobre cómo los colores afectan a todas las personas de la misma manera. Además, es importante tener en cuenta que el significado y el efecto de los colores pueden variar según la cultura y el contexto. El significado de los colores es el siguiente, dependiendo de cada uno de ellos: El rojo es a menudo asociado con la pasión, el amor, la emoción y la fuerza. También puede ser utilizado para indicar peligro o emergencia. El azul se asocia a menudo con la calma, la serenidad y la confianza. También puede ser utilizado para simbolizar la lealtad y la honestidad. El verde se asocia a menudo con la naturaleza, la frescura y la abundancia. También puede simbolizar la esperanza y el crecimiento. El amarillo se asocia a menudo con la alegría, la felicidad y la energía. También puede ser utilizado para simbolizar la cautela, como en los carteles de tráfico que advierten de peligros potenciales. El morado se asocia a menudo con la nobleza, la riqueza y la creatividad. También puede simbolizar el misterio y el espiritualismo. El blanco se asocia a menudo con la pureza, la inocencia y la limpieza. También puede ser utilizado para simbolizar la paz y la armonía. El negro se asocia a menudo con el lujo, la elegancia y la sofisticación. También puede simbolizar la misteriosidad y la oscuridad.

 
Read more...

from TILT

nextcloud is a general purpose file management system. It provides a online home for files.

usage

  1. when an image file is to be served directly append the link with /preview. This is easier than using the provided link, which a link to a download management page and then extracting the imbeded image link.

  2. netcloud server are usually provisioned with extra app to enable management calendars, schedules etc.

 
Read more...

from senpie

Nothing much for today either. I was again playing with multi-threading and noticed a had a bug. The issue was that several cores were computing the result, however, because I had data races I would get a poor-quality picture. I didn't check the output image, that's why I didn't notice it yesterday. The idea is that even tho each core would do one sample, running on 8 cores would mean I have 8 samples per pixel when averaged. However, because random was shared it wouldn't do 8 samples, but some sequences would be corrupted and I get less than 8 samples. Here the code I finally ended up with:

static std::hash<std::thread::id> hasher;
static std::uniform_real_distribution<double> distribution(0.0, 1.0);

inline double random_double() {
  static thread_local std::mt19937 generator(
    static_cast<unsigned>(hasher(std::this_thread::get_id()))
  );
  return distribution(generator);
}

I have static thread_local, which says that each thread has its own random number generator. Furthermore, its constructor receives the hash of the current thread_id resulting in different seeds for each seed, so sampling on different threads would actually make sense. Nevertheless, there is a case where hash id could repeat and my threads' work would be redundant. Fortunately for my use case since I use very few threads, six on Windows, 8 on Mac (4 efficiency cores, 4 performance cores), and all threads start “at the same” it is little likely that id would repeat. On that note, I think the code I wrote that distributes the tasks to threads still looks kinda of ugly, and I can do better. For that specific purpose, I resumed reading Bjarne's book, specifically the “Threads and Tasks” section, to seek for better alternative. In the meantime, let's enjoy more renders of balls. This time in full HD, with 80 samples per pixel. Why again balls? you may ask. Because I am too lazy to write code for loading meshes and handling a ray-to-triangle intersection, but I will do it eventually, most probably tomorrow. This time the image took 25 minutes to render, which is quite good considering the other render took me 4 hours. Note the previous render was 120x675.

Render of balls, 80 samples per pixel, max depth 50, 1920x1080

 
Read more...

from senpie

I have finally added the multi-threading support. A screenshot showing 100% utilization of my CPU resources: OS X System Monitor/CPU Utilization CPU Utilization on MacBook Pro 13 m1, when rendering in multi-threading mode. There was 5x improvement in speed, which is amazing considering my computer has 6 cores ( tested on windows ). That's it for today, I will share with more insight tomorrow!

 
Read more...

from senpie

I am now on a path of darkness, and no tutorial shall help me. That is, I have finished the tutorial and I am experimenting on my own, therefore there is no one to hold my hand and tell me if I am doing something right, or wrong. Speaking of someone to hold my hand, this post has been sponsored by HedgeTheHog#andranik3949, who was kind enough to help me when I was completely lost debugging my code. Wish I could say the same for the compiler... The issue was that I was trying to use std::bind, to pass to the render function a reference to my world. HedgeTheHog found The arguments to bind are copied or moved, and are never passed by reference unless wrapped in std::ref or std::cref. Therefore, a solution would be to force pass the reference with the use of std::ref, where auto f = std::bind(func, std::ref(world));, then use f();. Another workaround is to use std::placeholders::_1, where auto f = std::bind(func, std::placeholders::_1); the pass the world in function call such as f(world);. There are some other errors I have yet to battle, but I will talk about them after I find a fix. The second challenge I have to face is to somehow use local instances of random generators. “Why?” you may ask. Because, if I have several threads using the same random number generator it's gonna be a bottleneck since random generators usually maintain some type of inner state. Therefore, all of the cpu cache across all of the cores will be invalidated. Someone smart reading this may think “Aha! Just use static thread_local, instead of static”. Unfortunately, that is useless, because I would have the same seed over all instances. I need to figure out a way to have that with different seeds on each thread and without making my code super ugly. That's it for today, see you!

 
Read more...

from senpie

Today, I have spent extra hours to finish up the project. The final result looks super cool. Since I haven't yet added support for multithreading this scene took me around four hours to render. It had 500 samples per pixel, with a max depth of 50 rays. Final rend For the last day, I have added defocus blur.

I am not sure yet, what I would want to add to this project, but I will decide soon. That's it for today, see you tomorrow!

 
Read more...

from senpie

Almost done with the series! Although next step would be to add simple improvements for quality of life. Here is the list of stuff done ( again in reverse chronological order ):

Added camera controls with lookfrom and lookat parameters.
Added glass material.
Added metal material fuzziness property.
Added materials.

Yet again, below is the evolution of the output image after each major change ( in chronological order ) Fuzzy Metal Fuzzy metal.

Glass Attempt Glass Attempt.

FOV experiment FOV experiment

Camera controls Camera controls.

Zoomed in Zoomed in.

That's it for today. Code is as always available in my github page. I have implemented some more stuff, but there is currently a bug, so I will leave it for tomorrow. See you!

 
Read more...

from Unai's 100 Game Dev

Hello there, Unai here with my 1st day of 100 days of Game Developing! First of all, this is my 3rd day xd

My main objective is to work everyday on a game prototype of mine at least 1 hour. Probably some days I'll work on some other game prototypes, or whatever, but I am going to try to stay on focused only on one project at a time.

The game idea is a Tower Defense based in a mountain pass. During the day you manage your base, build new defences and improve your production facilities, and at night you see how they defend them.

BUT THERE IS A TWIST.

You can control almost any character/defense you see in the game.

So well, I said this is my 3rd day, I don't know why but I find it super hard to actually write this down. I'm gonna do a very fast recap of my progress so far:

Day 1: Started the project, I'm gonna be using Unreal. Started with the camera movement of the city mode, my plan is to make first the transition between camera mode and NPC control.

Day 2: Continued with city view controller, almost finishe. I've been following some YT tutorials on it and I'll probably use them a lot in the future. Also started playing a bit with landscape painting. Broke the sky and lightining someway... don't know why.

Day 3: I feel confident enough right now with the camera movement in the city mode, so I did the beggining of the change between NPC view and City View.

As a side note, I have two thoughts: 1. I find it very hard to actually write this things, and also sometimes to do this 1h work. Because I don't count the work I do for other courses, and I'm also doing 30' of writing everyday... hope I can keep up. I think after the first week it should become easier, but I feel like then it is going to be the hardest... Fingers crossed. 2. I really should sit down some day and think about the scope of the game...

 
Leer más...

from senpie-hy

Վերջին փոստս գրելուց հետո հասկացա, թե ինչքան շատ գործ կա անելու խաղերի դիզայնի և խաղերի ծրագրավորման ոլորտը հայաֆիկացնելու համար։ Ոնց եմ ուզում հայաստանում խաղերի արդյունաբերություննը լինի բարձր մակադակի։ Ինչի՞ չենք կարա ասենք Ամերիկայի, Ճապոնիայի, Շվեդիայի կամ Լեհաստանի մակարդակի խաղեր սարքենք։ Չեմ խոսում AAA խաղերի մասին, որի վրա հազարներով մարդիկ են աշխատում, բայց են փոքր ու ապշեցնող ինդիների մասին, որ մարկետը գրավում են ու պարզվում ա երեք հոգով են սարքել։ Մենք ունենք համապատասխան մասնագետներ, լիքը ծրագրավորող, լիքը արտիս, մաթեմատիկ ու ստեղծարարներ։ Հնչյունային օպերատորներ ջան ձեր մասին չեմ մոռացել, դուք հրաշք եք~~~ Հետ գալով հայաֆիկացման խնդրին, ուզում եմ նշել, որ երբ գրում էի անցած փոստը ինձ հազիվ էի զսպում անգլերեն եզրույթները չգործածել և ի վերջո պարտվեցի։ Իրականությունը են ա, որ էդ եզրույթների համար համապատասխան բառը չկա հայերենում ու էդ խնդիր ա։ Դրա համար կոչ եմ անում բոլոր հայ խաղերի դիզայներներին, կրիտիկներին և այլոց ավելի շատ հոդվածներ գրել խաղերի մասին հայերենով, որ լեզուն զարգանա ու մարդկանց խաղերի գրագիտությունը հետը։ Բերեմ մի բառի օրինակ որ հայերենում չկա ու շատ էի ուզում թարգմանել, բայց ցավոք համապատասխան փորձառությունը թարգմանելու չունեմ, իսկ ուղիղ թարգմանությունը շատ տարօրինակ ա հնչում։ Խոսքը գնում ա “joystick” բառի մասին։ Փոստը գրելուց հետո խնդրեցի Անիին որ Դավիթ Իսաջանյանից հարցնի ոնց ինքը էդ բառը կթարգմաներ, որովհետև պարոն Իսաջանյանը այժմ իրենց “Introduction to Translation” է դասավանդում ու ստացա լաւագույն պատասխանը որը կարելի էր ակնկալել։ Ուզում եմ կիսվեմ բոլորիդ հետ ու մի գուցե կարողանաք նույն մեթոդը կիրառել ձեր թարգմանությունների մեջ

Dear Ani, 

I would definitely choose to translate the word. A calque could be a good option, խինդաձող, ժպտաձող, ցնծաձող, but I am afraid these would create unnecessary (also, somewhat naughty) associations, and as a result, people would only ridicule the word. I would therefore choose a word that does not have the kind of connotations ձող has in ordinary language, and would opt for կայմ; i.e., the (stick-like) mast of a sailing boat: հեռակայմ, խաղակայմ, ժպտակայմ, կառակայմ (կառավարման կայն), etc. 

Let me know which one you like more! 

Yours, D. I.

Խաղակայմը շատ հաւես ա հնչում, միտքը հասցնում ա ու տարօրինակ չի։ Բայց սենց պետք ա անել ամեն ինչի համար։ Հիմա լիքը հետաքրքիր թեմաներ եմ սովորում համալսարանում, չեմ կարում կիսվեմ, որովհետև հայերեն եմ ուզում գրեմ ու դժվարանում եմ։ Հուսով եմ կապրեմ են ապագայում, որ կկարողանամ հայերենով հանգիստ մտքերս արտահայտեմ խաղերի մասին խոսալուց։

#մտքեր #խաղերիդիզայն #թարգմանություն

 
Read more...

from senpie-hy

Անցած ուրբաթ մեր համալսարանում մեկնարկեց խաղերի ջեմ պլյուսը ( անգլ.՝ game jam+ )։ Ով տեղեակ չի ինչ է խաղերի ջեմը ասեմ՝ խաղերի ջեմը սովորաբար երկու օր տևողությամբ միջոցառում է, որի ժամանակ տարբեր հեռանկարի մարդիկ հավաքվում են խաղ ստեղծելու նպատակով։ Կարևոր է նշել, որ խաղը պարտադիր չի լինի թվային ( սակայն ցանկալի է ), այլ կարելի է ստեղծել սեղանի, մտովի և ցանկացած այլ տիպի խաղ, այդ թվում նաև կենդանի գործողություններով դերախաղեր ( անգլ.՝ live action role playing game ):

Օր զրո

Ջեմը սկսեց ժամը վեցին, երբ հայտատարեցին թեմաները։ Այս անգամ մրցում էինք երեք կատեգորայում՝ ոչ ծաղիկ ոչ մոլորակ ( անգլ.՝ No Plant no Planet ), վերմակ ու ջոյստիկ ( անգլ.՝ A blanket and joystick ), վերանայել կլասիկաները ( անգ.՝ Rethink the classics ), ուրախ ժամանակ անցկանցել ( անգլ.՝ Having fun Casually ), հիմնված իրական դեպքերի վրա ( անգլ.՝ Based on real events ): Ամբողջ օրը ծախսեցինք մտքի վրա աշխատելով։ Ընտրեցինք իմ միտքը, որը շներին կերակրելու մասին էր։ Ես միտքը կտեղավորեի «ուրախ ժամանակ անցկացնել» կատեգորիայի մեջ, սակայն որոշեցինք ասել որ վերանայում ենք կլասիկաները, կլասիկան լինելով Risk of Rain 2-ը։

Risk of Rain 2: Gameplay shot > Լուսանկար Risk or Rain 2 խաղից

Մտքի նկարագրությունը

Խաղը տեղի էի ունենում փոքր թաղամասում, որտեղ խաղացողին վարձել են շներին ման տալու համար։ Ման տալու ընթացքում բոլոր շները փախնում են ու սկսում են վազել քարտեզի տաբեր կողմերով, և պետք է շներից մի քանիսին հավաքել մինչև ժամանակի ավարտը, թե չէ աշխատանքից կհեռացնեն։ Խաղը իրենով երրորդ դեմքից կրակոցի է ( անգլ.՝ third person shooter ), որտեղ խաղացողը կրակում է ուտելիք շների վրա և երբ շան սովածության մակարդակը նվազում է զրոյի, նա հեզանում է և միանում խաղացողին վզակապով։ Հակրավոր է նշել, որ խաղը ունի շատ արագ ընթացք Doom Eternal-ի նման, որտեղ ճարպիկորեն պետք է շարժվել քարտեզի տարբեր մասերով և ճշգրիտ շարժումներով «կերակրել» շանը։ Խաղը ունի երեք դժվարություններ։ Առաջին, քարտեզում կան սկյուռիկներ և կատուները, որոնք փորձելու են խանգարեն խաղացողին տարբեր կերպով ժամանակը սպառելու համար։ Երբ շները կապված ենք խաղացողին, նրանք տարբեր ինտեռվալներով փորձելու են քաշեն խաղացողին դեպի իրենց կողմ, խանգարելով խաղացողին նշան բռնել և տեղաշարժվել, հարկավոր է նշել որ ինչքան շատ շուն այդքան ավելի դժվար է լինելու տեղաշարժվել։ Եվ երրոդ շները ունեն սովոծանալու հատկություն, այսինքն եթե երկար ման գաք նույն շներով, իրեքն սովոծանալու են ու էլի փախչեն։ Սակայն շներին հավաքելը ունի երկու լավ կողմ, առաջին հավաքելով տարբեր տեսակի շներ, ստանում եք տարբեր տեսակի առավելությունները ( անգլ.` buff ), օրինակ հավելյալ արագություն, կամ ավելի արագ տեմպով կերակրելու ձևեր։Նաև որոշ քանակի շներ հավաքելուց հետո, հայտնվում է հիմնական թիրախը ( չգիտեմ ոնց թարքմանեմ boss-ը այս կոնտեքստում ), որ շաաաատ մեծ ու շաաատ սոված շուն է։ Իրան կերակրելուց հետո դուք հաղթում եք։

Օր առաջին

Թմում վեց հոգի էինք։ Երեք հոգի ծրագրավորող, մեկ հարթակի դիզայներ ( անգլ.՝ level designer ), մեկ արտիստ և մի հոգի ով սկսնակ էր և փորձում էր ամեն ինչում օգնել։ Ինձ որոշեցին նշանակել, որպես lead programmer, որ համար շատ զխճում եմ, քանի որ ավելի շատ զբաղված էի մյուս ծրագրավորողներին տարբեր բաներ բացատրելով և գործերը մարդկանց մեջ բաժանելով։ Ես պետք է գրեի «ոչ խաղացող կերպարների»(անգլ.՝ Non Player Character)՝ այս դեպքում շների ,կատուների և սկյուռիկների արհեստական բանականությունը և պահվածքը, որի վրա ես ցավոք չհասցրեցի շատ աշխատել։ Որպես շարժիչ (անգլ.՝ Game Engine) որոշեցինք օգտագործել Godot-ը, որը շատ հարմար է փոքր և միջին չափի խաղեր ստեղծելու համար։ Բանականության համար գրում էի օգուտի վրա հիմնված բանականություն (անգլ.` utilty-based AI )։ Գաղափարը պարզ է և շատ էֆեկտիվ է խաղերի մեջ։ Մի քանի բառով, կերպարներին տալիս եմ մի քանի հնարավոր գործողություն, անիմաստ վազել, փախնել խաղացողից, կծել կամ ուրիշ բաներ, և ամեն մեկին տալիս եմ փոփոխական արժեք։ Ապա, կախված որ գործողությունն է տվյալ պահին ավելի արժեքավոր, կերպարը անում է կոնկրետ բան։ Ասենք եթե հեռու է խաղացողից ապա անիմաստ կվազի քարտեզով, եթե խաղացողը մոտիկանա, կփորձի փախնել և այլն։ Օրվա վերջում արդեն ունեինք մի քանի աշխատող բան որոնք պատրաստել էինք տարբեր համակարգիչների վրա և պետք է հավաքեինք իրար գլխի։

Վերջին Օր

Երկրորդ օրը արդեն կիսաքնած էինք, բայց լիքը գործ արեցինք։ Առաջին հերթին սկսեցինք բոլորի արած գործերի մի պռոյեկտի մեջ ավելացնել, որը բերեց լիքը կոնֆլիկտների, խոսքը գնում է գիթ ( անգլ.՝ git ) կոնֆլիկտների մասին։ Կոնֆլիկտները ուղղելուց շատ ժամանակ չէր մնացել, ու գնացինք խաղը ցուցադրելու վրա։ Իհարկե ոչմի տեղ չշահեցինք քանի-որ խաղը շատ կիսատ վիճակում էր և հիմնական գեյփլեյից ոչ մի հատկանշական բան դեռ չկար, բայց մենք շատ հավես ժամանակ անցկացրեցինք, իսկ ես լիքը բան սովորեցի գոդոտից և մարդկանց առաջնորդելու մասին։ Խաղը դրած է itch.io-ի էջում Hounded: Նաև կցեմ եմ փոքր հոլովակ խաղից

Hounded: gameplay

 
Read more...

from Unai's 100 Game Dev

Unai's First Post: THIS IS A DRILL

01101000 01110100 01110100 01110000 01110011 00111010 00101111 00101111 01110111 01110111 01110111 00101110 01111001 01101111 01110101 01110100 01110101 01100010 01100101 00101110 01100011 01101111 01101101 00101111 01110111 01100001 01110100 01100011 01101000 00111111 01110110 00111101 01100100 01010001 01110111 00110100 01110111 00111001 01010111 01100111 01011000 01100011 01010001

 
Leer más...