mohsen zare
mohsen zare
  • 104
  • 467 205
Why Godot Physics is slow? SIMD
In this video we discuss why it is important for Godot to add SIMD feature into the engine! I could modify a small part of Godot engine core to work with SIMD but doing that for entire engine need more work!
I know making this big change will be hard but it is necessary to take this step forward!
I am not the first person to propose this! there some Github discussion and proposal for that! some of them are for more 5 years ago! unfortunately up to this point there is no attention to add SIMD in Godot!
Discord:
discord.gg/ravFervXVW
Twitter:
x.com/mohsenph69
patreon:
patreon.com/mohsenzare?Link&
Chapters:
00:00 - intro
00:30 - SIMD support
02:35 - SIMD in different CPU
06:06 - Memory Alignment requirement
07:78 - modifying Godot basis for SIMD support
08:44 - ending
มุมมอง: 5 434

วีดีโอ

HLod system in Godot! Handling massive scene!
มุมมอง 2.4Kหลายเดือนก่อน
So the is the first video about the progress in Hierarchical Level-Of-Detail (HLOD) system in Godot! at the time of publishing this video the system is still not completed but we are working on that to publish at least the first version of that! This will be part of MTerrain plugin! We made system to be able to create a large world with a lots of objects! Discord: discord.gg/ravFervXVW Twitter:...
Terrain deformation by Curve - MTerrain plugin Godot
มุมมอง 2.5K4 หลายเดือนก่อน
Please download the latest version of M Terrain plugin for this! Here we have another tool which work on top of out new curve system! with this you can automatically modify terrain height-map, terrain image and even grass! all of these are done non-destructible! MPath system and road creation video: th-cam.com/video/pXIaW62I20k/w-d-xo.html creating terrain from scratch video: th-cam.com/video/7...
MTerrain has a new UI system! Godot Terrain
มุมมอง 1.8K4 หลายเดือนก่อน
Thank for great work of RossUnger we have a new UI system for MTerrain! Now you can control almost all functionality of MTerrain from one single panel! In this video you see a introduction to new UI system! Discord: discord.gg/ravFervXVW Twitter: x.com/mohsenph69 Download latest: github.com/mohsenph69/Godot-MTerrain-plugin/releases Github: github.com/mohsenph69/Godot-MTerrain-plugin
I made a Road system for Godot engine
มุมมอง 4.4K5 หลายเดือนก่อน
This will come on top of my terrain plugin and still at the time of recording of this video is under development! This is not only for Road you can use that to generate any kind of mesh like walls, terrain track, river or any other type of repeating mesh! video about MOctMesh: th-cam.com/video/hJ3zW3rjwao/w-d-xo.html Discord: discord.gg/ravFervXVW Twitter: x.com/mohsenph69 Download latest: gith...
Handling large scene in Godot
มุมมอง 5K7 หลายเดือนก่อน
So this will be a start point for me to create a system for handling large scene in Godot! I thought to myself lets create and finish one octree system for everything so we don't have to rewrite that in each system separately! Other than this I think one central octree will be much more efficient the several one! by the way in some cases you can create other octree also! Discord: discord.gg/rav...
More Grass update in M Terrain plugin - Godot Engine
มุมมอง 2.9K8 หลายเดือนก่อน
Adding some custom data open many new things for grass! I just mentioned some of the simple ones! Discord: discord.gg/ravFervXVW Twitter: x.com/mohsenph69 Github: github.com/mohsenph69/Godot-MTerrain-plugin patreon: patreon.com/mohsenzare?Link& Wiki: github.com/mohsenph69/Godot-MTerrain-plugin/wiki Some video which I suggest to watch before watching this: Terrain creation: th-cam.com/video/7CTH...
Terrain and Grass Editing in-game with MTerrain plugin Godot Engine
มุมมอง 2.1K9 หลายเดือนก่อน
So basically in this new version of mterrain plugin I added some functionality to be able to deform terrain and update grass in real-time in-game! With time I will improve some stuff to make this thing faster specially for grass! Please note: One thing that I want to add to video above is that, calling function update_dirty_texture on terrain in a different thread should be safe, so you can als...
Terrain tutorial Godot - Mountain Lake
มุมมอง 20K9 หลายเดือนก่อน
So this is a tutorial to create a Mountain landscape with Godot! I try to focus on base stuff, but I can not explain everything so I will refers to other video also. Discord: discord.gg/ravFervXVW Github: github.com/mohsenph69/Godot-MTerrain-plugin Wiki: github.com/mohsenph69/Godot-MTerrain-plugin/wiki Download for Windows: drive.google.com/file/d/1GX4OOj7HZnquhNCNmLruxQbecrn3Ji0h/view?usp=shar...
sRGB color space & Linear color space concept in computer graphic
มุมมอง 2.6K10 หลายเดือนก่อน
This was about sRGB color space and linear color space! down here I will put more useful resources, which you can read them! learnopengl.com/Advanced-Lighting/Gamma-Correction www.cambridgeincolour.com/tutorials/gamma-correction.htm blog.johnnovak.net/2016/09/21/what-every-coder-should-know-about-gamma/ blog.wolfire.com/2010/02/Gamma-correct-lighting Also I add one more thing here, Many game se...
Prevent Tile Texture in Terrain
มุมมอง 23K11 หลายเดือนก่อน
In this video we are looking at possible solution to prevent tile texture or texture repetition Video for Texture Rotation: th-cam.com/video/ssrJGxMtssE/w-d-xo.html Video for splatmap: th-cam.com/video/sXPGHBod9KY/w-d-xo.html Chapters: intro - 00:00 artistic solutions - 01:00 texture mixing - 01:28 color variation - 01:50 detail texture - 02:18 texture rotation - 03:23 distance base blending - ...
New Terrain Compression Algorithm on M Terrain plugin
มุมมอง 4.6K11 หลายเดือนก่อน
Please note this compassion for each terrain and heightmap will give a different result, But as I tested for different type of terrain my compression algorithm perform better to PNG! Other video resources: Compression algorithm explained: th-cam.com/video/5KkVftV-PTk/w-d-xo.html Splatmap tutorial: th-cam.com/video/sXPGHBod9KY/w-d-xo.html regions size explained: th-cam.com/video/PcAkWClET4U/w-d-...
I made a Compression Algorithm for Heightmap Terrain
มุมมอง 68K11 หลายเดือนก่อน
This show the General algorithm for compressing a Heightmap image using quadtree and quantization. This compression algorithm will more optimize with linear regression model calculated with least square method in 3 dimension. I can say we implement delta encoding compression with linear regression in 3 dimension. Video and image resources used in this video: Quadtree collision calculation demo:...
Insane Huge Terrain 10,000 square km - Godot engine
มุมมอง 10Kปีที่แล้ว
And now we have no limitation for RAM memory usage for create our Terrain for open world games M Terrain Plugin on Github: github.com/mohsenph69/Godot-MTerrain-plugin Wiki page: github.com/mohsenph69/Godot-MTerrain-plugin/wiki Discord: discord.gg/EN447Q4hfM Terrain progress play list: th-cam.com/video/9olfCkPs1WU/w-d-xo.html Patreon: patreon.com/mohsenzare?Link&
MTerrain Adding Water System - new update - Godot engine
มุมมอง 1.7Kปีที่แล้ว
I think we can use material next pass as a simple water solution for our terrain which is really efficient! there are more changes which I wrote in my Github release page! And I hope as I got more free time I will create a good tutorial for water shader in Godot! this demo is not really a good example of water shader I just put something together for this demo! M Terrain Plugin on Github: githu...
GDExtension for Android in Godot
มุมมอง 1.4Kปีที่แล้ว
GDExtension for Android in Godot
so Hole in M Terrain - Godot engine
มุมมอง 780ปีที่แล้ว
so Hole in M Terrain - Godot engine
Alien Planet Terrain in Godot
มุมมอง 1.2Kปีที่แล้ว
Alien Planet Terrain in Godot
Brush Masks for M Terrain plugin in Godot
มุมมอง 784ปีที่แล้ว
Brush Masks for M Terrain plugin in Godot
Auto Vertex Painter in Godot
มุมมอง 2.2Kปีที่แล้ว
Auto Vertex Painter in Godot
Splatmap in M Terrain - Godot engine
มุมมอง 2.1Kปีที่แล้ว
Splatmap in M Terrain - Godot engine
M Terrain Shader base concept - part 01
มุมมอง 1.3Kปีที่แล้ว
M Terrain Shader base concept - part 01
Depth Texture explained - Godot
มุมมอง 7Kปีที่แล้ว
Depth Texture explained - Godot
Texture Painting on Terrain - Godot
มุมมอง 6Kปีที่แล้ว
Texture Painting on Terrain - Godot
Type Casting Godot GDExtension c++ - part 13
มุมมอง 1.9Kปีที่แล้ว
Type Casting Godot GDExtension c - part 13
M Terrain Navigation First release tutorial - Godot 4.1
มุมมอง 2.5Kปีที่แล้ว
M Terrain Navigation First release tutorial - Godot 4.1
Paint Navigation Mesh on Terrain in Godot
มุมมอง 1.4Kปีที่แล้ว
Paint Navigation Mesh on Terrain in Godot
M Terrain Navigation first Demo - Open Word Navigation handling for Godot
มุมมอง 792ปีที่แล้ว
M Terrain Navigation first Demo - Open Word Navigation handling for Godot
Navigation mesh Open-world Terrain - First step Godot
มุมมอง 1.5Kปีที่แล้ว
Navigation mesh Open-world Terrain - First step Godot
M Terrain Shader introduction
มุมมอง 1.4Kปีที่แล้ว
M Terrain Shader introduction

ความคิดเห็น

  • @suchaaverygoodartist
    @suchaaverygoodartist วันที่ผ่านมา

    can you suggest a list of resources to learn the things as you have? I have a strong basis in programming and an okay understanding of 3d graphics. Any courses or books you would recommend?

    • @mohsenzare2511
      @mohsenzare2511 วันที่ผ่านมา

      I recommend this channel even it is not for game: www.youtube.com/@TheCodingTrain

  • @Govjul1
    @Govjul1 วันที่ผ่านมา

    Dude, how do you put collision on the streets?

  • @rafakozik8482
    @rafakozik8482 2 วันที่ผ่านมา

    Thanks for the GDExtension series, super helpful

    • @mohsenzare2511
      @mohsenzare2511 8 ชั่วโมงที่ผ่านมา

      Thanks man for your support!

  • @bottunde
    @bottunde 5 วันที่ผ่านมา

    Your channel is filled with very interesting stuff related to Godot. Subbed

  • @bottunde
    @bottunde 5 วันที่ผ่านมา

    We are getting great great grandparents with this one 🫡

  • @AryanMehrotra-lc1ej
    @AryanMehrotra-lc1ej 6 วันที่ผ่านมา

    As far as I am aware the plan is to replace the godot physics with jolt in the future, which is already shipping as an alternative to godot physics in v4.4

  • @sascha1461
    @sascha1461 8 วันที่ผ่านมา

    this is amazing!

  • @sascha1461
    @sascha1461 8 วันที่ผ่านมา

    I've been coding for the last 15 years. Never in my life have I faced something as challenging as shader coding. Thanks for the video, I don't think I'll remember anything but thanks for the effort :)

  • @benjaminmatanovic748
    @benjaminmatanovic748 10 วันที่ผ่านมา

    Amazing and straightforward, Thanks a lot!

  • @sensei5956
    @sensei5956 10 วันที่ผ่านมา

    when i run the scene terrain disappear.

    • @mohsenzare2511
      @mohsenzare2511 10 วันที่ผ่านมา

      call create_grid() function in ready

  • @RyanGosling-u5b
    @RyanGosling-u5b 11 วันที่ผ่านมา

    Broke in multiplayer This is so sad Just PIZDECH how sad No terrain addon wich normal support multiplayer (at least it just wouldn’t break on it) it's just a curse

  • @moon-xs5jn
    @moon-xs5jn 13 วันที่ผ่านมา

    if you have free time would you mind make a video about adding caves and floating islands

  • @julesvernhelm8319
    @julesvernhelm8319 15 วันที่ผ่านมา

    🔥🔥

  • @Axelz58
    @Axelz58 17 วันที่ผ่านมา

    remapping shortcuts is very useful

  • @suchaaverygoodartist
    @suchaaverygoodartist 19 วันที่ผ่านมา

    amazing video again, I learn an enormous amount in ever single thing you make. Please keep creating. Is there any way I can make a donation or contribution?

  • @matnan7624
    @matnan7624 20 วันที่ผ่านมา

    How to create heightmap terrain with collision in Godot 4 : Step 1 - "Open blender" Refuses to elaborate further

  • @suchaaverygoodartist
    @suchaaverygoodartist 21 วันที่ผ่านมา

    this was an absolutely wonderful video. I knew nothing about triplanar mapping, and now I feel like I can go in Godot and experiment with it.

  • @РоманВольф-е1ж
    @РоманВольф-е1ж 21 วันที่ผ่านมา

    Nice train

  • @ITSPRONIBIR
    @ITSPRONIBIR 22 วันที่ผ่านมา

    is it ok for making low poly terrain

  • @lucazfc
    @lucazfc 29 วันที่ผ่านมา

    There is an open proposal on github named "Use SIMD vectorization intrinsics in the core" and an open pull request named "Add SIMD option to compile system and implement SIMD for vector4".

    • @Capewearer
      @Capewearer 28 วันที่ผ่านมา

      It's hanging for several years.

  • @celumusasmoke271
    @celumusasmoke271 หลายเดือนก่อน

    Did I get here late, or I am doing something wrong with MTerrain🥲

  • @dimitardimitrov7950
    @dimitardimitrov7950 หลายเดือนก่อน

    thanks, good tutorial how can i use the same mask for the snow but in vertex to scale up only the masked verts like displacement of sorts.

  • @Prof_Natanael
    @Prof_Natanael หลายเดือนก่อน

    Can you make a game performance video? Your fps is incredible, of course you may have a beautiful machine, but it's clear that you have great knowledge about performance.

  • @ehmprah
    @ehmprah หลายเดือนก่อน

    This is incredible! I have been trying to do just this for days. Thank you <3

  • @MethanicBlast
    @MethanicBlast หลายเดือนก่อน

    Thanks for not making a clickbait video title and yet still making people wonder

  • @berhangundogdu7297
    @berhangundogdu7297 หลายเดือนก่อน

    I think it is more likely an issue of who will maintain this? Even in this video you encounter problems with the basis. This problem will affect the rest of the codebase then only people who can contribute/maintain would be programmers who live closer to the metal than your average programmer. I like low-level programming, and it hurts me to say that their policy on code simplicity sounds the right choice as a company. Maybe we can get best of both worlds in the future.

  • @jupiterbjy
    @jupiterbjy หลายเดือนก่อน

    kinda sad we can't use sampler2D or array as per-instance uniform... chunked implementation of this inevitably requires mesh generation

  • @Ivorforce
    @Ivorforce หลายเดือนก่อน

    You can check on Godbolt that pretty much every compiler automatically applies SIMD optimization to most trivial math. They are becoming so good at it that some people are advocating against writing SIMD by hand and just letting the compiler do its thing. The real reason it's usually not done is backwards compat. Even upgrading to AVX is so controversial because of users with old CPUs that its just not worth it. To properly make use of SIMD, you can't get around dynamic dispatch. If Jolt is fast, this is probably what they're doing. But it's also a lot more work.

  • @Zkryhn
    @Zkryhn หลายเดือนก่อน

    Ngl you should work with the Team of Redot, as it's going to be more likely to be implemented overthere instead

  • @ss_sina358
    @ss_sina358 หลายเดือนก่อน

    حاجی ای کاش فارسیشم مییزاشتی 🤧

  • @nerdydrow
    @nerdydrow หลายเดือนก่อน

    The Godot team refusing to add SIMD and insisting the the complier can do it truly show that none of them worked in the AAA games industry

    • @Capewearer
      @Capewearer 28 วันที่ผ่านมา

      They never shipped games in their engine. And unlike Unity devs, they don't have strong feedback from experienced developers.

    • @nerdydrow
      @nerdydrow 25 วันที่ผ่านมา

      @@Capewearer they never worked in a dev team, only porting to handhelds, so technically none of them shipped an AAA game let alone worked on one in Godot

  • @The_Filosof
    @The_Filosof หลายเดือนก่อน

    The BEST. If not the BEAST.

  • @tiagotiagot
    @tiagotiagot หลายเดือนก่อน

    Why is the engine working on such a low level instead of just talking to abstraction layers and letting it pick automatically whatever approach the hardware it is running on does better?

  • @sanyi9667
    @sanyi9667 หลายเดือนก่อน

    mohsen it would be amazing if you would make another godot project with real actual features build in. Some already tried based on ideological misalignments but their repos are weak. you on the other hand could come up with actual features and others WILL follow!

  • @NoctorOnwood
    @NoctorOnwood หลายเดือนก่อน

    Support different CPU architectures, operate systems and graph APIs are core work of middle layers, third party libraries can do other, or need game developer implement by themself with some specific requires. Godot does perfect encapsulation in high level, but have some problems in low level, its codebase is not as solid and mature as some famous framework like SDL, Thats limits its ceiling.

  • @childlearningclub
    @childlearningclub หลายเดือนก่อน

    I think they should add you to Godot.

  • @Kry0000
    @Kry0000 หลายเดือนก่อน

    These are the types of videos that I love to watch, you have gained a subscriber. Thanks for sharing this video, it is appreciated.

  • @minamozaffari53
    @minamozaffari53 หลายเดือนก่อน

    every time that I think you can't surprise me anymore you outdo yourself! Awesome, you're wonderful and I wish your videos were appreciated even more 👌👌👌

  • @MrTravoltino
    @MrTravoltino หลายเดือนก่อน

    Does Jolt supports SIMD? Jolt right now pretends to Godot's default physics's place. So why GodotPhysics even need a SIMD? Why waste effort on Godot Physics, when Jolt already surpasses it? Also as far as I know, physics's contributor left the Godot team, leaving GodotPhysics in a suspended state.

    • @mohsenzare2511
      @mohsenzare2511 หลายเดือนก่อน

      yeah, but this is not only about physics engine! other part of the engine also be optimized by SIMD

    • @gruntaxeman3740
      @gruntaxeman3740 หลายเดือนก่อน

      Just dumb idea to change Bullet :( Godot 5.x with physics would been much better idea.

    • @MrTravoltino
      @MrTravoltino หลายเดือนก่อน

      @@gruntaxeman3740 Bullet developers has stopped support their engine with all bugs in it.

    • @gruntaxeman3740
      @gruntaxeman3740 หลายเดือนก่อน

      @@MrTravoltino I've looked Bullet source code. It is not the cleanest code base, but the Bullet engine itself works excellent. Physics engine isn't that simple to do correctly and we are talking about real time physics. So there is tradeoffs for accuracy vs speed. I've read some paper where different physics engines were evaluated, measured, and there was comparison tables of features, and Bullet actually shines on those comparisons. It also used on games that have complex physics like Rockstar games. Because it works, it can be maintained with very little effort. It is not very buggy, it is just not improving anymore. So a perfectly valid solution is to take the Bullet code, put it in the game engine, use static code analysis tools and linters, and just change compiler switches to newer language version and more strict analysis so build process can throw warning if there is something weird. Otherwise it can be used as a black box. Until, we really got replacement that is at least good as Bullet in accuracy, features and performance.

    • @MrTravoltino
      @MrTravoltino หลายเดือนก่อน

      @@gruntaxeman3740 Better is the enemy of good.

  • @josu_id
    @josu_id หลายเดือนก่อน

    A ~300% improvement on physics performance would be absolutely insane. Please consider submitting your implementation to the Redot team!

  • @NFvidoJagg2
    @NFvidoJagg2 หลายเดือนก่อน

    TIL what SSE and AVX are.

    • @mohsenzare2511
      @mohsenzare2511 หลายเดือนก่อน

      SSE suport 128 BIT, AVX 256 bit, but there is more you can read about them online

  • @Capewearer
    @Capewearer หลายเดือนก่อน

    Not only physics is slow. Skeletal animations, scenegraph itself, rendering, resolution scaling... When all of these will be fixed, I doubt it'll be Godot.

    • @dosdoğruyup
      @dosdoğruyup หลายเดือนก่อน

      wdym, you doubt it will be godot?

    • @Capewearer
      @Capewearer หลายเดือนก่อน

      @@dosdoğruyup because that means that engine needs complete overhaul. And by the time it happens, it won't be the same.

    • @dosdoğruyup
      @dosdoğruyup หลายเดือนก่อน

      @@Capewearer I see. thanks for explaining.

    • @elchippe
      @elchippe หลายเดือนก่อน

      A lot of these mathematical operations affect the performance of the entire engine like animation, GDScript is less performance, sound and even 3D performance is affected because a lot of operations are done in the CPU before is send to the GPU.

    • @elchippe
      @elchippe หลายเดือนก่อน

      A lot of these mathematical operations affect the performance of the entire engine like animation, GDScript is less performance, sound and even 3D performance is affected because a lot of operations are done in the CPU before is send to the GPU.

  • @Xero_Wolf
    @Xero_Wolf หลายเดือนก่อน

    As an artist does some coding I'm thankful for the sight into the inner workings of Godot. I'm really surprised that Godot doesn't support such an old instruction set. I remember build PCs over a decade ago and had to make sure the the CPUs I used had certain features like this because the games and software I use required them. I can see why it can be frustrating to many Godot users. Many of us choose Godot because of it's open source nature but it still feels like it's being held back due to issues like this that honestly shouldn't be.

    • @mohsenzare2511
      @mohsenzare2511 หลายเดือนก่อน

      you know even with these problem it is working and it is open source, but I hope it will get better in future

    • @ayzhol9620
      @ayzhol9620 หลายเดือนก่อน

      This is why I had to leave when my 3D project was starting to show shape. I love everything Godot is trying to be. I want to support them so much and I will, however right now the engine is not fast or strong enough to pull the sort of worlds/art I want to push. Sadly days ago I had to pack up and replicate the project in Unreal very, very grudgingly. (To be honest I am replicating all the code for the player control back into Godot so I can pick up when Godot comes up to par by the end of next year).

  • @1KiloDepartment
    @1KiloDepartment หลายเดือนก่อน

    Afaik, GODOT is (hopefully) gonna be using Jolt by default in the future for physics! (See GODOT issue 7308) But hopefully these changes can be implemented in the other parts of the engine! I'm also curios about the Rapier Physics Engine. It supports 2D physics too, which would be amazing if that could be improved too with it! Edit: There is an interesting topic around XPBD in a Reddit post I found by looking up "Jolt vs Rapier GODOT". That could be interesting to delve deeper into!

    • @mohsenzare2511
      @mohsenzare2511 หลายเดือนก่อน

      both Jolt and Rapiear support SIMD as I know

    • @1KiloDepartment
      @1KiloDepartment หลายเดือนก่อน

      @@mohsenzare2511 Oh wait I didn't proofread my comment :P I meant to say that Rapier could replace the current GODOT 2D physics engine, as Jolt currently doesn't support that (unless you were to make a mixed 3D 2D game, as you can lock the RigidBody movement onto a plane!)

  • @s4uss
    @s4uss หลายเดือนก่อน

    cool video, let's hope Godot foundation fixes their physics, I mean come on, $100k a month in donations (estimation because we don't see one-time donations on the site), and they can't fix such a crucial part of the engine.

    • @charlieking7600
      @charlieking7600 หลายเดือนก่อน

      A food for thought: just because they earn money, they do not care anymore. Wow, Godot turned out to be another wolf under the sheep's clothing?

  • @635574
    @635574 หลายเดือนก่อน

    Rapier also supports simd for 2D and 3D

  • @JebaliJihed-g5c
    @JebaliJihed-g5c หลายเดือนก่อน

    do you think that the godot team will add this in the future ?

    • @verendale1789
      @verendale1789 หลายเดือนก่อน

      in like Godot 5 if we're lucky

    • @JebaliJihed-g5c
      @JebaliJihed-g5c หลายเดือนก่อน

      ​@@verendale1789 when will be that ? are you being sarcastic ? cause i really want to know

    • @verendale1789
      @verendale1789 หลายเดือนก่อน

      @@JebaliJihed-g5c I was, but what I really mean is that we are shit out of luck and it will take years and years.

  • @deRNmEpRrMm
    @deRNmEpRrMm หลายเดือนก่อน

    Have you opened a GitHub issue on the Godot proposals for SIMD optimization if there doesn't already exist one? This would probably yield the most results and chances for a change.

  • @GradientOGames
    @GradientOGames หลายเดือนก่อน

    Ah, as a Unity user watching this I'm thinking, this is why the burst compiler exists. I believe its important for godot to have something like the burst compiler for their engine, or at least some form of vectorisation because the performance benefits are quite literally 10x.

    • @635574
      @635574 หลายเดือนก่อน

      Or 100x as ive seen in codemonkey videos on unity DOTS

  • @davidj3048
    @davidj3048 หลายเดือนก่อน

    Complex! Thanks for sharing!