← Back
JetBrains TV October 19, 2026 35m

Live-Building AI-Driven PCG with Godot, C#, and Gemini | Sharmishtha Sen | GameDev Day 2026

Read full transcript 26 segments
  1. We'll bring Sammy on here who's going to We'll bring Sammy on here who's going to be talking about uh prompts and playable be talking about uh prompts and playable be talking about uh prompts and playable worlds with uh C and GDAU. worlds with uh C and GDAU. worlds with uh C and GDAU. >> Hey Sammy, how you doing? >> Hey Sammy, how you doing? >> Hey Sammy, how you doing? >> Hello. Am I audible? Am I visible? >> Hello. Am I audible? Am I visible? >> Hello. Am I audible? Am I visible? >> Yeah, we're all set. >> Yeah, we're all set. >> Yeah, we're all set. >> We can see you. We can hear you. >> We can see you. We can hear you. >> We can see you. We can hear you. >> That's all great. So, thanks for having >> That's all great. So, thanks for having >> That's all great. So, thanks for having me here. I am beyond excited to be here me here. I am beyond excited to be here me here. I am beyond excited to be here with all of you today and if and let me with all of you today and if and let me with all of you today and if and let me just start talking or do we have any just start talking or do we have any just start talking or do we have any questions coming in before I start. questions coming in before I start. questions coming in before I start. >> I think to get started. >> I think to get started. >> I think to get started. >> Okay. >> Okay. >> Okay. >> Absolutely. We can see your slides. >> Absolutely. We can see your slides. >> Absolutely. We can see your slides. You're all good. You're all good. You're all good. >> Yep. Yep. Awesome. So, so welcome >> Yep. Yep. Awesome. So, so welcome >> Yep. Yep. Awesome. So, so welcome everyone to my talk. It's about prompt everyone to my talk. It's about prompt everyone to my talk. It's about prompt to playable world. So if you are an to playable world. So if you are an to playable world. So if you are an indie game developer, a student, a indie game developer, a student, a indie game developer, a student, a technical artist or just someone who technical artist or just someone who technical artist or just someone who loves world building and you know that loves world building and you know that loves world building and you know that creating expansive 3D world is one of creating expansive 3D world is one of creating expansive 3D world is one of the most rewarding part of the game dev the most rewarding part of the game dev the most rewarding part of the game dev and also undeniably the most exhausting and also undeniably the most exhausting and also undeniably the most exhausting and today we are breaking past the hype and today we are breaking past the hype and today we are breaking past the hype and the gimmick to talk about the real and the gimmick to talk about the real and the gimmick to talk about the real production engineering. So what my t production engineering. So what my t production engineering. So what my t talk is titled is prompto playable world talk is titled is prompto playable world talk is titled is prompto playable world and it is a life building using our and it is a life building using our and it is a life building using our AIdriven PCG logic with code dot c and AIdriven PCG logic with code dot c and AIdriven PCG logic with code dot c and gemini. So we are going to basically gemini. So we are going to basically gemini. So we are going to basically explore how we can connect open-source explore how we can connect open-source explore how we can connect open-source tooling modern IDE workflows and local tooling modern IDE workflows and local tooling modern IDE workflows and local uh agents with cloud language models uh agents with cloud language models uh agents with cloud language models directly into our engine and turn it directly into our engine and turn it directly into our engine and turn it into an AI generally uh editor time code into an AI generally uh editor time code into an AI generally uh editor time code builder. So take a seat back, press builder. So take a seat back, press builder. So take a seat back, press start and let's jump right straight into start and let's jump right straight into start and let's jump right straight into it. So a quick introduction, who is

  2. it. So a quick introduction, who is it. So a quick introduction, who is Sammy? Why am I talking about here? So Sammy? Why am I talking about here? So Sammy? Why am I talking about here? So uh my name is Sharmishta, but in the uh my name is Sharmishta, but in the uh my name is Sharmishta, but in the community everybody calls me Sami. I am community everybody calls me Sami. I am community everybody calls me Sami. I am a game deer, a game developer and a QA a game deer, a game developer and a QA a game deer, a game developer and a QA professional with hands-on experience professional with hands-on experience professional with hands-on experience spanning on console, mobile and indie spanning on console, mobile and indie spanning on console, mobile and indie development. and I have completed my development. and I have completed my development. and I have completed my master's degree at Aram University in master's degree at Aram University in master's degree at Aram University in Melbourne where my research was focused Melbourne where my research was focused Melbourne where my research was focused heavily into virtual reality and gesture heavily into virtual reality and gesture heavily into virtual reality and gesture based interaction design and because of based interaction design and because of based interaction design and because of my background in QA and system design I my background in QA and system design I my background in QA and system design I care about two things. So one is the care about two things. So one is the care about two things. So one is the developer ergonomics and rock solid developer ergonomics and rock solid developer ergonomics and rock solid performance. I don't really like the performance. I don't really like the performance. I don't really like the tech you know like that looks pretty in tech you know like that looks pretty in tech you know like that looks pretty in 5-second video but when I put it into a 5-second video but when I put it into a 5-second video but when I put it into a production build and I start running the production build and I start running the production build and I start running the exe file it just breaks. So I have exe file it just breaks. So I have exe file it just breaks. So I have shared this philosophies at different shared this philosophies at different shared this philosophies at different events. One of them would be technical events. One of them would be technical events. One of them would be technical games and also I was invited in South by games and also I was invited in South by games and also I was invited in South by Southwest talks in Sydney and you can Southwest talks in Sydney and you can Southwest talks in Sydney and you can find my work and writeups there at find my work and writeups there at find my work and writeups there at samigame101.net if you are interested in samigame101.net if you are interested in samigame101.net if you are interested in more. So today's talk is born directly more. So today's talk is born directly more. So today's talk is born directly out of my own frustration with out of my own frustration with out of my own frustration with development bottlenecks and how we can development bottlenecks and how we can development bottlenecks and how we can come up with practical solution to come up with practical solution to come up with practical solution to overcome them.

  3. overcome them. overcome them. So let's talk about the reality of So let's talk about the reality of So let's talk about the reality of building games in a small team or a solo building games in a small team or a solo building games in a small team or a solo def and this is what I call as a indie def and this is what I call as a indie def and this is what I call as a indie bottleneck. So the first handcraft bottleneck. So the first handcraft bottleneck. So the first handcraft burnout. So when I'm putting my assets burnout. So when I'm putting my assets burnout. So when I'm putting my assets into a 3D world one by one and and I try into a 3D world one by one and and I try into a 3D world one by one and and I try to run it, it already gives the GPU a to run it, it already gives the GPU a to run it, it already gives the GPU a long large number of memory space. And long large number of memory space. And long large number of memory space. And if you're making a large terrain, uh if you're making a large terrain, uh if you're making a large terrain, uh placing chunks, trees, and everything placing chunks, trees, and everything placing chunks, trees, and everything manually one by one, it kind of drains manually one by one, it kind of drains manually one by one, it kind of drains your creative bandwidth away from the your creative bandwidth away from the your creative bandwidth away from the mechanics and the system and gameplay mechanics and the system and gameplay mechanics and the system and gameplay loops. And the second is the SAS uh and loops. And the second is the SAS uh and loops. And the second is the SAS uh and the budget barriers. So if anybody knows the budget barriers. So if anybody knows the budget barriers. So if anybody knows uh the modern generative tools or uh the modern generative tools or uh the modern generative tools or massive world pipelines and that locks massive world pipelines and that locks massive world pipelines and that locks you into a very expensive multi-enter you into a very expensive multi-enter you into a very expensive multi-enter enterprise subscription or like very enterprise subscription or like very enterprise subscription or like very heavy server clusters and as indies we heavy server clusters and as indies we heavy server clusters and as indies we need that pipeline that run on consumer need that pipeline that run on consumer need that pipeline that run on consumer grade a mid tire hardware with zero grade a mid tire hardware with zero grade a mid tire hardware with zero subscription fees and third is where we subscription fees and third is where we subscription fees and third is where we try to solve with traditional procedural try to solve with traditional procedural try to solve with traditional procedural generation. So when you're using a generation. So when you're using a generation. So when you're using a simplex or a ping noise, we fall right simplex or a ping noise, we fall right simplex or a ping noise, we fall right into something called the soldier's into something called the soldier's into something called the soldier's void, which is a repetitive constant or void, which is a repetitive constant or void, which is a repetitive constant or repetitive world that keeps generating.

  4. repetitive world that keeps generating. repetitive world that keeps generating. And we know that unconstrained noise And we know that unconstrained noise And we know that unconstrained noise that creates the chaotic and unplayable that creates the chaotic and unplayable that creates the chaotic and unplayable blobs. There are no landmarks and no blobs. There are no landmarks and no blobs. There are no landmarks and no natural choke points and no paced natural choke points and no paced natural choke points and no paced gameplay. And finally, you face gameplay. And finally, you face gameplay. And finally, you face something called as a environmental QA something called as a environmental QA something called as a environmental QA bottleneck. So if you generate like bottleneck. So if you generate like bottleneck. So if you generate like random terrains and you spend days random terrains and you spend days random terrains and you spend days manually just inspecting the chunks to manually just inspecting the chunks to manually just inspecting the chunks to find where are the floating trees, find where are the floating trees, find where are the floating trees, broken collision or impossible geometry. broken collision or impossible geometry. broken collision or impossible geometry. And our goal today is to solve every And our goal today is to solve every And our goal today is to solve every single one of these problems. Replacing single one of these problems. Replacing single one of these problems. Replacing this handiccraft burnout with editor this handiccraft burnout with editor this handiccraft burnout with editor time generative rules, local AI on time generative rules, local AI on time generative rules, local AI on hardware and while preserving strict hardware and while preserving strict hardware and while preserving strict design author [laughter] design author [laughter] design author [laughter] excuse me. Uh so basically we're trying excuse me. Uh so basically we're trying excuse me. Uh so basically we're trying to do is like having an author level to do is like having an author level to do is like having an author level design while having our AI and uh the design while having our AI and uh the design while having our AI and uh the editor runtime generation work strictly editor runtime generation work strictly editor runtime generation work strictly under a constraint. under a constraint. under a constraint. So let's talk about the procedural So let's talk about the procedural So let's talk about the procedural spectrum with code dot and car. So to spectrum with code dot and car. So to spectrum with code dot and car. So to build a large world that runs smoothly build a large world that runs smoothly build a large world that runs smoothly and our engine level foundation has to and our engine level foundation has to and our engine level foundation has to be like really fast and in go.4 for be like really fast and in go.4 for be like really fast and in go.4 for dynamic scripting can struggle when you dynamic scripting can struggle when you dynamic scripting can struggle when you are iterating through hundreds on are iterating through hundreds on are iterating through hundreds on thousands of vertices coordinates in thousands of vertices coordinates in thousands of vertices coordinates in real time and that is why our PCD code real time and that is why our PCD code real time and that is why our PCD code is basically entirely built on C# using is basically entirely built on C# using is basically entirely built on C# using net framework because it works much net framework because it works much net framework because it works much faster in real time compared to using faster in real time compared to using faster in real time compared to using your GDScript which will give you a your GDScript which will give you a your GDScript which will give you a little bit of lag while you're compiling little bit of lag while you're compiling little bit of lag while you're compiling a lot of vertices in the in proc a lot of vertices in the in proc a lot of vertices in the in proc generation

  5. generation generation so first point is where high performance so first point is where high performance so first point is where high performance performance geometry threading. So we performance geometry threading. So we performance geometry threading. So we generate our terent meshes using go generate our terent meshes using go generate our terent meshes using go dot's low-level array mesh and the fast dot's low-level array mesh and the fast dot's low-level array mesh and the fast noise light. So by offing the heavy noise light. So by offing the heavy noise light. So by offing the heavy noise sampling analytical normal noise sampling analytical normal noise sampling analytical normal evaluation and vertx coordinate map to evaluation and vertx coordinate map to evaluation and vertx coordinate map to asynchronous background task while task asynchronous background task while task asynchronous background task while task run and we keep the main thread run and we keep the main thread run and we keep the main thread completely responsive. So no editor completely responsive. So no editor completely responsive. So no editor freezing, no UI lockups are there while freezing, no UI lockups are there while freezing, no UI lockups are there while generating your code. generating your code. generating your code. Now coming to the GPU accelerated batch Now coming to the GPU accelerated batch Now coming to the GPU accelerated batch scattering. So if you instantiate scattering. So if you instantiate scattering. So if you instantiate individual node 3D scenes for every tree individual node 3D scenes for every tree individual node 3D scenes for every tree rock or bush in your world, you drown in rock or bush in your world, you drown in rock or bush in your world, you drown in the engine in CPU scene tree overhead. the engine in CPU scene tree overhead. the engine in CPU scene tree overhead. And in our C script, we calculate the And in our C script, we calculate the And in our C script, we calculate the candidate positions and check the slope candidate positions and check the slope candidate positions and check the slope limits and serializes transform matrices limits and serializes transform matrices limits and serializes transform matrices directly into a packed float 32 array directly into a packed float 32 array directly into a packed float 32 array buffer. And we feed that buffer right buffer. And we feed that buffer right buffer. And we feed that buffer right into a multimesh instance 3D. And that into a multimesh instance 3D. And that into a multimesh instance 3D. And that helps us to batch over 30,000 helps us to batch over 30,000 helps us to batch over 30,000 environmental instances in a single GPU environmental instances in a single GPU environmental instances in a single GPU draw call.

  6. draw call. draw call. Now coming to the manage proceduralism Now coming to the manage proceduralism Now coming to the manage proceduralism via authored anchors. So to avoid a via authored anchors. So to avoid a via authored anchors. So to avoid a soulless void, we don't let the noise soulless void, we don't let the noise soulless void, we don't let the noise run wild. So what I have done is we run wild. So what I have done is we run wild. So what I have done is we define a authored marker 3D node in our define a authored marker 3D node in our define a authored marker 3D node in our scene and we use that C# math that scene and we use that C# math that scene and we use that C# math that calculates the distance from each calculates the distance from each calculates the distance from each vertices to this anchors and it uses a vertices to this anchors and it uses a vertices to this anchors and it uses a linear interpolation [snorts] to flatten linear interpolation [snorts] to flatten linear interpolation [snorts] to flatten out the dynamic noise into a smooth out the dynamic noise into a smooth out the dynamic noise into a smooth foundation for tutorial hubs. You can foundation for tutorial hubs. You can foundation for tutorial hubs. You can use it for roads dungeon while use it for roads dungeon while use it for roads dungeon while automatically carving out vegetation and automatically carving out vegetation and automatically carving out vegetation and clear zones. clear zones. clear zones. [snorts] So beyond the chat box and [snorts] So beyond the chat box and [snorts] So beyond the chat box and ending AI runtime blindness. So when ending AI runtime blindness. So when ending AI runtime blindness. So when what is there this AI runtime blindness what is there this AI runtime blindness what is there this AI runtime blindness that talk about when I'm developing so that talk about when I'm developing so that talk about when I'm developing so uh basically what happens is when I'm uh basically what happens is when I'm uh basically what happens is when I'm using a web based LLM model and put a using a web based LLM model and put a using a web based LLM model and put a prompt into it such as chat GPT claude prompt into it such as chat GPT claude prompt into it such as chat GPT claude or Gemini and say like let's say write or Gemini and say like let's say write or Gemini and say like let's say write me a code for player movement in go dot me a code for player movement in go dot me a code for player movement in go dot and or give me a script for procedural and or give me a script for procedural and or give me a script for procedural tenant generation and what actually tenant generation and what actually tenant generation and what actually happens is you hit a AI runtime happens is you hit a AI runtime happens is you hit a AI runtime blindness blindness blindness So your browser model does not have So your browser model does not have So your browser model does not have access to your active scene tree node access to your active scene tree node access to your active scene tree node hierarchy or script dependencies and it hierarchy or script dependencies and it hierarchy or script dependencies and it has no idea to guess what is your node has no idea to guess what is your node has no idea to guess what is your node name which leads to immediate null name which leads to immediate null name which leads to immediate null reference exceptions reference exceptions reference exceptions and because of that there is a little and because of that there is a little and because of that there is a little bit of version drift here and there. Uh bit of version drift here and there. Uh bit of version drift here and there. Uh what I mean to say is like in general what I mean to say is like in general what I mean to say is like in general models you could see that they are

  7. models you could see that they are models you could see that they are trained into the older models of go dot trained into the older models of go dot trained into the older models of go dot usually giving you syntax for go do 3 usually giving you syntax for go do 3 usually giving you syntax for go do 3 and when you will ask for like go.4 four and when you will ask for like go.4 four and when you will ask for like go.4 four C# code, it still ends up giving you a C# code, it still ends up giving you a C# code, it still ends up giving you a code which uses e kinetic body or like code which uses e kinetic body or like code which uses e kinetic body or like old code three connect signal code old code three connect signal code old code three connect signal code signatures and that fails when the signatures and that fails when the signatures and that fails when the moment you paste them and every time you moment you paste them and every time you moment you paste them and every time you have like run the logic you have to have like run the logic you have to have like run the logic you have to change the code or change the syntax change the code or change the syntax change the code or change the syntax which is again a double task for any which is again a double task for any which is again a double task for any indie developer and time consuming. indie developer and time consuming. indie developer and time consuming. Now coming to the silent runtime Now coming to the silent runtime Now coming to the silent runtime failures. So a web chat box cannot failures. So a web chat box cannot failures. So a web chat box cannot really read your engine console or really read your engine console or really read your engine console or runtime debugger. So if you're using an runtime debugger. So if you're using an runtime debugger. So if you're using an array index that is out of bound or a array index that is out of bound or a array index that is out of bound or a collision mask, there's always a collision mask, there's always a collision mask, there's always a mismatch in the web AI and which is mismatch in the web AI and which is mismatch in the web AI and which is completely uh different to what you're completely uh different to what you're completely uh different to what you're doing in your live editor. [snorts] So this is here one of the examples So this is here one of the examples where I've taken the code generated from where I've taken the code generated from where I've taken the code generated from uh Gemini with on the web based and I've uh Gemini with on the web based and I've uh Gemini with on the web based and I've pasted into the rider and I have tried pasted into the rider and I have tried pasted into the rider and I have tried to generate the code but you can see to generate the code but you can see to generate the code but you can see there are like hundred of error and that there are like hundred of error and that there are like hundred of error and that error is happening because we are error is happening because we are error is happening because we are instead of like um looking at it just instead of like um looking at it just instead of like um looking at it just blindly generates a code and what you blindly generates a code and what you blindly generates a code and what you can see is there are a lot of compiler can see is there are a lot of compiler can see is there are a lot of compiler errors and syntax error while it tries errors and syntax error while it tries errors and syntax error while it tries to pass a vector 3 directly into a float to pass a vector 3 directly into a float to pass a vector 3 directly into a float tangent buffer and without converting tangent buffer and without converting tangent buffer and without converting these components and you can see the these components and you can see the these components and you can see the rider has flagged all of it and luckily rider has flagged all of it and luckily rider has flagged all of it and luckily the local AI agent which I have used it the local AI agent which I have used it the local AI agent which I have used it is diagnosing that and trying to correct is diagnosing that and trying to correct is diagnosing that and trying to correct each and every um syntax that I have

  8. each and every um syntax that I have each and every um syntax that I have copied from the web AI and trying to copied from the web AI and trying to copied from the web AI and trying to correct it and we move this from the correct it and we move this from the correct it and we move this from the blind guessing to a verified compiler blind guessing to a verified compiler blind guessing to a verified compiler through inbuilt IDE workflows. Now let's just look at our overall Now let's just look at our overall pipeline like how it works. Uh so number pipeline like how it works. Uh so number pipeline like how it works. Uh so number one is using our engine and IDE setup. one is using our engine and IDE setup. one is using our engine and IDE setup. So instead of like relying on the web So instead of like relying on the web So instead of like relying on the web version, we can directly implement our version, we can directly implement our version, we can directly implement our AI into the IDE setup using our Jet AI into the IDE setup using our Jet AI into the IDE setup using our Jet Brains trader and dedicated uh editor Brains trader and dedicated uh editor Brains trader and dedicated uh editor bindings birectionally using C# sync uh bindings birectionally using C# sync uh bindings birectionally using C# sync uh syncing. Uh coming to the local and syncing. Uh coming to the local and syncing. Uh coming to the local and cloud AI. So a dual brain setup is what cloud AI. So a dual brain setup is what cloud AI. So a dual brain setup is what I have set it up and why do I actually I have set it up and why do I actually I have set it up and why do I actually need a dual brain setup? we will come need a dual brain setup? we will come need a dual brain setup? we will come come into that why would I need a local come into that why would I need a local come into that why would I need a local AI and a cloud AI working towards the AI and a cloud AI working towards the AI and a cloud AI working towards the logic. Uh so so my first local AI model logic. Uh so so my first local AI model logic. Uh so so my first local AI model which I'm using is the Olama instance which I'm using is the Olama instance which I'm using is the Olama instance which is on the local host 11434 which is on the local host 11434 which is on the local host 11434 alongside with the cloud Gemini 3.6 alongside with the cloud Gemini 3.6 alongside with the cloud Gemini 3.6 which I have connected via Ryel plugin.

  9. which I have connected via Ryel plugin. which I have connected via Ryel plugin. Then coming to the engine context Then coming to the engine context Then coming to the engine context bridge. So the magic glue the go.m MCP bridge. So the magic glue the go.m MCP bridge. So the magic glue the go.m MCP pro plug-in running on a local websocket pro plug-in running on a local websocket pro plug-in running on a local websocket server port that is at 6505 and this server port that is at 6505 and this server port that is at 6505 and this exposes the lysene hierarchies to our exposes the lysene hierarchies to our exposes the lysene hierarchies to our AI. So both of our AI that is a local AI. So both of our AI that is a local AI. So both of our AI that is a local and cloud AI has the access through this and cloud AI has the access through this and cloud AI has the access through this MCP bridge. Now coming to the custom C# MCP bridge. Now coming to the custom C# MCP bridge. Now coming to the custom C# PCG core. Our procedural generator PCG core. Our procedural generator PCG core. Our procedural generator handle the array mesh con construction handle the array mesh con construction handle the array mesh con construction vector using normal math and marker 3D vector using normal math and marker 3D vector using normal math and marker 3D height blending. height blending. height blending. And the next is the GPU scattering and And the next is the GPU scattering and And the next is the GPU scattering and shader. So the multi mesh 3D pipeline shader. So the multi mesh 3D pipeline shader. So the multi mesh 3D pipeline that batches the foliage and combined that batches the foliage and combined that batches the foliage and combined with the custom go shader code for with the custom go shader code for with the custom go shader code for procedial genetic height and it helps me procedial genetic height and it helps me procedial genetic height and it helps me to get more uh textures on the slope and to get more uh textures on the slope and to get more uh textures on the slope and biome while I'm blending it in the real biome while I'm blending it in the real biome while I'm blending it in the real time. time. time. So now why would I use a rider ad and So now why would I use a rider ad and So now why would I use a rider ad and opensource plug-in and what's the use of opensource plug-in and what's the use of opensource plug-in and what's the use of it? So number one is I find rider a it? So number one is I find rider a it? So number one is I find rider a really high uh a very lightweight as really high uh a very lightweight as really high uh a very lightweight as well as high fast processing uh IDE. So well as high fast processing uh IDE. So well as high fast processing uh IDE. So heavy procedural generation do does heavy procedural generation do does heavy procedural generation do does requires a heavy loop and calculating requires a heavy loop and calculating requires a heavy loop and calculating normals and triangulation geometry normals and triangulation geometry normals and triangulation geometry requires a raw execution power. C# requires a raw execution power. C# requires a raw execution power. C# running on modern.net Net executes running on modern.net Net executes running on modern.net Net executes mathematical operation significantly mathematical operation significantly mathematical operation significantly faster than the dynamic scripting which faster than the dynamic scripting which faster than the dynamic scripting which is essential to keep the generation is essential to keep the generation is essential to keep the generation setup free. The deep engine integration

  10. setup free. The deep engine integration setup free. The deep engine integration rider's dedicated go plugin which is the rider's dedicated go plugin which is the rider's dedicated go plugin which is the continue plug-in which I've used for my continue plug-in which I've used for my continue plug-in which I've used for my uh project. It actually helps the editor uh project. It actually helps the editor uh project. It actually helps the editor to run to to check errors and inst to run to to check errors and inst to run to to check errors and inst instantly giving me solution. So you instantly giving me solution. So you instantly giving me solution. So you don't have to reload and toggle back and don't have to reload and toggle back and don't have to reload and toggle back and forth constantly while you are editing forth constantly while you are editing forth constantly while you are editing your code. your code. your code. Coming to advanced IDE profiling and Coming to advanced IDE profiling and Coming to advanced IDE profiling and refactoring. So the rider includes refactoring. So the rider includes refactoring. So the rider includes performance profiler memory allocating performance profiler memory allocating performance profiler memory allocating trackers. So when you are like trackers. So when you are like trackers. So when you are like scattering 30,000 trees or like let's scattering 30,000 trees or like let's scattering 30,000 trees or like let's say 50,000 elements all over your say 50,000 elements all over your say 50,000 elements all over your terrain in one GPU draw call, you really terrain in one GPU draw call, you really terrain in one GPU draw call, you really need a lot of memory inside your loop need a lot of memory inside your loop need a lot of memory inside your loop and causing so much memory it can cause and causing so much memory it can cause and causing so much memory it can cause a garbage spikes and your code might a garbage spikes and your code might a garbage spikes and your code might break. So luckily uh the rider is able break. So luckily uh the rider is able break. So luckily uh the rider is able to handle a really big chunk of memory to handle a really big chunk of memory to handle a really big chunk of memory inside your system. inside your system. inside your system. So unified AI hub. So using my continue So unified AI hub. So using my continue So unified AI hub. So using my continue plug-in I can get directly access to not plug-in I can get directly access to not plug-in I can get directly access to not only the local model but also I can only the local model but also I can only the local model but also I can connect it to the cloud model and give connect it to the cloud model and give connect it to the cloud model and give it access to my solutions and car it access to my solutions and car it access to my solutions and car preferences and projects as well as preferences and projects as well as preferences and projects as well as shaders which it can read in real time shaders which it can read in real time shaders which it can read in real time and give me the output.

  11. So [snorts] let me just uh explain you So [snorts] let me just uh explain you what I mean by dual agent architecture. what I mean by dual agent architecture. what I mean by dual agent architecture. So the dual aged architecture we don't So the dual aged architecture we don't So the dual aged architecture we don't only rely on just one model right only rely on just one model right only rely on just one model right because uh our cloud API has a limited because uh our cloud API has a limited because uh our cloud API has a limited amount of token and every time using the amount of token and every time using the amount of token and every time using the cloud AI will exhaust our tokens even if cloud AI will exhaust our tokens even if cloud AI will exhaust our tokens even if we keep on we try to minim minimize the we keep on we try to minim minimize the we keep on we try to minim minimize the usage but at the end of the day PCG usage but at the end of the day PCG usage but at the end of the day PCG logic is a little complex and we might logic is a little complex and we might logic is a little complex and we might require to do it hundreds and thousands require to do it hundreds and thousands require to do it hundreds and thousands of iteration while generating in real of iteration while generating in real of iteration while generating in real time. So that's why the dual agent time. So that's why the dual agent time. So that's why the dual agent architecture works because I can use uh architecture works because I can use uh architecture works because I can use uh local AI as well and I can change and as local AI as well and I can change and as local AI as well and I can change and as well as iterate my syntax number of well as iterate my syntax number of well as iterate my syntax number of times. So for the dual agent from one I times. So for the dual agent from one I times. So for the dual agent from one I have used the cloud AI which is Gemini have used the cloud AI which is Gemini have used the cloud AI which is Gemini 3.6 and this is our architecture which 3.6 and this is our architecture which 3.6 and this is our architecture which helps us refactoring write uh special helps us refactoring write uh special helps us refactoring write uh special shaders algorithms optimize some C# shaders algorithms optimize some C# shaders algorithms optimize some C# maths and it provides us the maximum maths and it provides us the maximum maths and it provides us the maximum reasoning power and deep context without reasoning power and deep context without reasoning power and deep context without consuming too much of local resources. consuming too much of local resources. consuming too much of local resources. Now coming to the local AI that is my Now coming to the local AI that is my Now coming to the local AI that is my Olama which I have integrated with KMA 3 Olama which I have integrated with KMA 3 Olama which I have integrated with KMA 3 or Quen 2.5 coder. This is our inline or Quen 2.5 coder. This is our inline or Quen 2.5 coder. This is our inline copilot and we use it for autocomp copilot and we use it for autocomp copilot and we use it for autocomp completion helping functions uh tweaking completion helping functions uh tweaking completion helping functions uh tweaking our PCG parameters and the good part is our PCG parameters and the good part is our PCG parameters and the good part is since it runs 100% offline. It gives us since it runs 100% offline. It gives us since it runs 100% offline. It gives us complete privacy at zero course cost and complete privacy at zero course cost and complete privacy at zero course cost and uh API tokens.

  12. uh API tokens. uh API tokens. Now coming to the shared engine bridge Now coming to the shared engine bridge Now coming to the shared engine bridge which is the go.mcp and luckily the both which is the go.mcp and luckily the both which is the go.mcp and luckily the both models are able to use gomcp server and models are able to use gomcp server and models are able to use gomcp server and websocket port 6505 and this ensures websocket port 6505 and this ensures websocket port 6505 and this ensures whether we are asking gemini for a whether we are asking gemini for a whether we are asking gemini for a complex shader or for a parameter tw and complex shader or for a parameter tw and complex shader or for a parameter tw and both models can see the exact life scene both models can see the exact life scene both models can see the exact life scene hierarchy. I don't have to keep changing hierarchy. I don't have to keep changing hierarchy. I don't have to keep changing the models or the MCP for uh live uh or the models or the MCP for uh live uh or the models or the MCP for uh live uh or the local AI and one of the best aspect of the setup and one of the best aspect of the setup is that it allows development folks on is that it allows development folks on is that it allows development folks on model setup. So I don't have a really model setup. So I don't have a really model setup. So I don't have a really high GPU. So my current uh CPU and GPU high GPU. So my current uh CPU and GPU high GPU. So my current uh CPU and GPU capacity is at uh a complete GPU is at capacity is at uh a complete GPU is at capacity is at uh a complete GPU is at Nvidia 1060 at 6GB as well as my GPU is Nvidia 1060 at 6GB as well as my GPU is Nvidia 1060 at 6GB as well as my GPU is an Intel Core i7 and because of my uh no an Intel Core i7 and because of my uh no an Intel Core i7 and because of my uh no not so powerful engine using this local not so powerful engine using this local not so powerful engine using this local uh LLM models kind of helps me with like uh LLM models kind of helps me with like uh LLM models kind of helps me with like giving a really good output with like giving a really good output with like giving a really good output with like with my limited GPU capacity with my limited GPU capacity with my limited GPU capacity and they only need up to four to 8 GB of and they only need up to four to 8 GB of and they only need up to four to 8 GB of VRAM via Olama and you can run this VRAM via Olama and you can run this VRAM via Olama and you can run this pipeline smoothly on any standardized pipeline smoothly on any standardized pipeline smoothly on any standardized game laptop. So we do not have to like game laptop. So we do not have to like game laptop. So we do not have to like spend a lot of money on getting a very spend a lot of money on getting a very spend a lot of money on getting a very high and PC or having a very high-end high and PC or having a very high-end high and PC or having a very high-end GPU. Even if you have a low GPU, you can GPU. Even if you have a low GPU, you can GPU. Even if you have a low GPU, you can run this model and you can like create run this model and you can like create run this model and you can like create games on it. This is what my idea is.

  13. games on it. This is what my idea is. games on it. This is what my idea is. And since we are also on a budget And since we are also on a budget And since we are also on a budget constraint, indie developers don't have constraint, indie developers don't have constraint, indie developers don't have that much of resources on getting really that much of resources on getting really that much of resources on getting really high graphics or a setup or space to high graphics or a setup or space to high graphics or a setup or space to like work with um like realtime AI. So like work with um like realtime AI. So like work with um like realtime AI. So these Olama and Genma 3 and coin 2.5 these Olama and Genma 3 and coin 2.5 these Olama and Genma 3 and coin 2.5 works really smooth while generating works really smooth while generating works really smooth while generating your C# code and you don't have to worry your C# code and you don't have to worry your C# code and you don't have to worry about your uh cloud bills or about your uh cloud bills or about your uh cloud bills or or [clears throat] API rate limits and or [clears throat] API rate limits and or [clears throat] API rate limits and you can generate terren hundred or you can generate terren hundred or you can generate terren hundred or thousands of time. So you don't need to thousands of time. So you don't need to thousands of time. So you don't need to like worry about anything while like worry about anything while like worry about anything while generating. generating. generating. So this is an example what I have done. So this is an example what I have done. So this is an example what I have done. So in this session what I have done I So in this session what I have done I So in this session what I have done I have prompted the continue uh plug-in have prompted the continue uh plug-in have prompted the continue uh plug-in which I have asked it to do is update which I have asked it to do is update which I have asked it to do is update the min and max scale properties to use the min and max scale properties to use the min and max scale properties to use an export property hint range from 0.1 an export property hint range from 0.1 an export property hint range from 0.1 to 5.0 with uh 05 step increments and to 5.0 with uh 05 step increments and to 5.0 with uh 05 step increments and keep the defaults at 0.2 2 and 0.5 and keep the defaults at 0.2 2 and 0.5 and keep the defaults at 0.2 2 and 0.5 and do not touch any other properties and do not touch any other properties and do not touch any other properties and luckily the agent immediately generates luckily the agent immediately generates luckily the agent immediately generates a precise go.4 C# attribute syntax. Now a precise go.4 C# attribute syntax. Now a precise go.4 C# attribute syntax. Now you can see you can see you can see that how clean this is and does not try that how clean this is and does not try that how clean this is and does not try to rewrite the whole file or introduce to rewrite the whole file or introduce to rewrite the whole file or introduce any deprecisated goax. And we review the any deprecisated goax. And we review the any deprecisated goax. And we review the files and apply these changes which is files and apply these changes which is files and apply these changes which is just instantly saved into our C# just instantly saved into our C# just instantly saved into our C# solution and ready for the go do solution and ready for the go do solution and ready for the go do inspector.

  14. So now how does the AI actually knows So now how does the AI actually knows what is inside our go do project. So I what is inside our go do project. So I what is inside our go do project. So I think this is a like really interesting think this is a like really interesting think this is a like really interesting question and while doing some research a question and while doing some research a question and while doing some research a lot of people have faced a lot of issue lot of people have faced a lot of issue lot of people have faced a lot of issue on uh um installing gocp but luckily on uh um installing gocp but luckily on uh um installing gocp but luckily with radar I never found that issue with radar I never found that issue with radar I never found that issue because I just installed mcp which is uh because I just installed mcp which is uh because I just installed mcp which is uh that runs at the coding solo go.mcp via that runs at the coding solo go.mcp via that runs at the coding solo go.mcp via npx pointing out directly into the go.xe npx pointing out directly into the go.xe npx pointing out directly into the go.xe table and this established me a table and this established me a table and this established me a birectional communication bridge. So if birectional communication bridge. So if birectional communication bridge. So if you can see over here I have just just you can see over here I have just just you can see over here I have just just made the link over here and the path made the link over here and the path made the link over here and the path where the MCP server is saved and the go where the MCP server is saved and the go where the MCP server is saved and the go dot and that's it. So there is no major dot and that's it. So there is no major dot and that's it. So there is no major hassle for me to install any MCP server hassle for me to install any MCP server hassle for me to install any MCP server and you can also do the same. Um now and you can also do the same. Um now and you can also do the same. Um now coming to the Lysale awareness so what coming to the Lysale awareness so what coming to the Lysale awareness so what does exactly MCP does like once I've does exactly MCP does like once I've does exactly MCP does like once I've installed it into the plug-in I've installed it into the plug-in I've installed it into the plug-in I've installed it into the editor and I've installed it into the editor and I've installed it into the editor and I've set set this up. So the lies in set set this up. So the lies in set set this up. So the lies in awareness. So the AI queries the server awareness. So the AI queries the server awareness. So the AI queries the server to inspect any active scene tree node to inspect any active scene tree node to inspect any active scene tree node and hierarchies and it knows that what and hierarchies and it knows that what and hierarchies and it knows that what is the static content parent exist and is the static content parent exist and is the static content parent exist and it knows where the mesh gen is and it it knows where the mesh gen is and it it knows where the mesh gen is and it uses the exactly verified node paths uses the exactly verified node paths uses the exactly verified node paths automated debugging loop. So the MCP automated debugging loop. So the MCP automated debugging loop. So the MCP servers allows the AI assists to launch servers allows the AI assists to launch servers allows the AI assists to launch the go dot editor and run the project in the go dot editor and run the project in the go dot editor and run the project in the debug mode and capture live console the debug mode and capture live console the debug mode and capture live console output in the runtime and stack traces.

  15. output in the runtime and stack traces. output in the runtime and stack traces. If an engine exception fires, the agent If an engine exception fires, the agent If an engine exception fires, the agent reads it directly to the log and it can reads it directly to the log and it can reads it directly to the log and it can actually selfcorrect your C# code. And actually selfcorrect your C# code. And actually selfcorrect your C# code. And it also has built-in tools. So it it also has built-in tools. So it it also has built-in tools. So it provides like specialized tools out of provides like specialized tools out of provides like specialized tools out of the box such as analyzing structures, the box such as analyzing structures, the box such as analyzing structures, exporting scenes, mesh libraries for exporting scenes, mesh libraries for exporting scenes, mesh libraries for grid, map workflows and managing the grid, map workflows and managing the grid, map workflows and managing the user ID references for code 4.4 and user ID references for code 4.4 and user ID references for code 4.4 and above versions. [snorts] So here is an example what I [snorts] So here is an example what I have done. The end of bridge solving is have done. The end of bridge solving is have done. The end of bridge solving is in a gameplay performance issue. So when in a gameplay performance issue. So when in a gameplay performance issue. So when I was generating a procedural foilage I was generating a procedural foilage I was generating a procedural foilage when was complete clumping too closely when was complete clumping too closely when was complete clumping too closely together. So we gave the continue this together. So we gave the continue this together. So we gave the continue this prompt. Update the spawn foliage layer prompt. Update the spawn foliage layer prompt. Update the spawn foliage layer method to prevent clamping and maintain method to prevent clamping and maintain method to prevent clamping and maintain a list of spawn positions a list of spawn positions a list of spawn positions before adding a new transform 3D and before adding a new transform 3D and before adding a new transform 3D and check if the distance between the check if the distance between the check if the distance between the current vortex and all previously current vortex and all previously current vortex and all previously spawned position is greater than the spawned position is greater than the spawned position is greater than the minimum radius and only spawn if there minimum radius and only spawn if there minimum radius and only spawn if there is a far enough away. I look at the AI's is a far enough away. I look at the AI's is a far enough away. I look at the AI's technical response. It didn't only write technical response. It didn't only write technical response. It didn't only write me a a native distance check code but it me a a native distance check code but it me a a native distance check code but it also used the formula which is the also used the formula which is the also used the formula which is the distance squared two instead of distance distance squared two instead of distance distance squared two instead of distance 2. And why does that matter? So why does 2. And why does that matter? So why does 2. And why does that matter? So why does like that algorithm matters is because like that algorithm matters is because like that algorithm matters is because the standis equin equilian distance the standis equin equilian distance the standis equin equilian distance requires computing square root requires computing square root requires computing square root operations at every single candidate operations at every single candidate operations at every single candidate position against every spawn tree in a position against every spawn tree in a position against every spawn tree in a loop running in tens and thousands of

  16. loop running in tens and thousands of loop running in tens and thousands of times square root. will you will use times square root. will you will use times square root. will you will use will be used to tank your frame rate up will be used to tank your frame rate up will be used to tank your frame rate up and using this disc squared method and using this disc squared method and using this disc squared method compares [snorts] against the square compares [snorts] against the square compares [snorts] against the square radius directly eliminates any expensive radius directly eliminates any expensive radius directly eliminates any expensive square root calculation entirely and square root calculation entirely and square root calculation entirely and this is the level of high performance C# this is the level of high performance C# this is the level of high performance C# logic this workflow delivers so now keep the pipeline completely so now keep the pipeline completely reliable we enforced a strict four stage reliable we enforced a strict four stage reliable we enforced a strict four stage data cycle because we don't want any data cycle because we don't want any data cycle because we don't want any carbon data which the AI generates and carbon data which the AI generates and carbon data which the AI generates and give a CPU a heavy load for that. So give a CPU a heavy load for that. So give a CPU a heavy load for that. So number one is what I have used is called number one is what I have used is called number one is what I have used is called the rulebased engine access. So we the rulebased engine access. So we the rulebased engine access. So we defined an explicit dot continue rules defined an explicit dot continue rules defined an explicit dot continue rules that instructs the AI to query the gomcb that instructs the AI to query the gomcb that instructs the AI to query the gomcb on port 6505 before generating any code on port 6505 before generating any code on port 6505 before generating any code and next is the context aware fetching. and next is the context aware fetching. and next is the context aware fetching. So when giving a task the agent inspects So when giving a task the agent inspects So when giving a task the agent inspects the scene tree and the project the scene tree and the project the scene tree and the project dependencies and grounding every script dependencies and grounding every script dependencies and grounding every script modification in a live state modification in a live state modification in a live state and then coming to the zero and then coming to the zero and then coming to the zero hallucination execution. So by combining hallucination execution. So by combining hallucination execution. So by combining a strict system prompt with verified MCP a strict system prompt with verified MCP a strict system prompt with verified MCP data that we eliminate the version data that we eliminate the version data that we eliminate the version confusion. So the AI is barred from confusion. So the AI is barred from confusion. So the AI is barred from using GDScript or go3 syntax.

  17. using GDScript or go3 syntax. using GDScript or go3 syntax. So closed loop verifications. So if an So closed loop verifications. So if an So closed loop verifications. So if an error occurs even during the compilation error occurs even during the compilation error occurs even during the compilation or runtime, the MCP bridge feeds the or runtime, the MCP bridge feeds the or runtime, the MCP bridge feeds the console logs back into the AI context console logs back into the AI context console logs back into the AI context for immediate selfcorrection. for immediate selfcorrection. for immediate selfcorrection. And what kind of data am I passing like And what kind of data am I passing like And what kind of data am I passing like like since we are talking about rules. like since we are talking about rules. like since we are talking about rules. So these are the particular few rules So these are the particular few rules So these are the particular few rules that I have implemented in my project that I have implemented in my project that I have implemented in my project while I was generating the the terrain for the using the PCG the the terrain for the using the PCG logic. So number one is the inspector logic. So number one is the inspector logic. So number one is the inspector parameters export. So anything that parameters export. So anything that parameters export. So anything that you're exporting in the inspector you're exporting in the inspector you're exporting in the inspector parameters uh I have what I have done is parameters uh I have what I have done is parameters uh I have what I have done is I have defined a noise frequencies like I have defined a noise frequencies like I have defined a noise frequencies like 0.015F 0.015F 0.015F and taking the maximum tren height at and taking the maximum tren height at and taking the maximum tren height at 8.0 F and also using the random seeds 8.0 F and also using the random seeds 8.0 F and also using the random seeds and marker 3D blend AI. So that's one of and marker 3D blend AI. So that's one of and marker 3D blend AI. So that's one of the value I have passed into the rules. the value I have passed into the rules. the value I have passed into the rules. Second is the engine scene tree and node Second is the engine scene tree and node Second is the engine scene tree and node path. So live verified string path such path. So live verified string path such path. So live verified string path such as static content parent and marker as static content parent and marker as static content parent and marker tutorial ensuring that there is zero tutorial ensuring that there is zero tutorial ensuring that there is zero invalid code path error. Coming to the invalid code path error. Coming to the invalid code path error. Coming to the procedural geometry buffer. So ar mesh procedural geometry buffer. So ar mesh procedural geometry buffer. So ar mesh vertx coordinates counterclockwise quad vertx coordinates counterclockwise quad vertx coordinates counterclockwise quad indexed arrays and analytical normal indexed arrays and analytical normal indexed arrays and analytical normal vectors is one another thing which I vectors is one another thing which I vectors is one another thing which I have passed. Coming to the GPU foliage have passed. Coming to the GPU foliage have passed. Coming to the GPU foliage logic. This is again a very important logic. This is again a very important logic. This is again a very important one. We do not want our AI or the agent one. We do not want our AI or the agent one. We do not want our AI or the agent or to kind of generate really random big or to kind of generate really random big or to kind of generate really random big buffer value. So we have packed it into

  18. buffer value. So we have packed it into buffer value. So we have packed it into a flow 32 array that containing 3D a flow 32 array that containing 3D a flow 32 array that containing 3D transformation matrices position uh transformation matrices position uh transformation matrices position uh rotation base and scale and fed directly rotation base and scale and fed directly rotation base and scale and fed directly into the multimesh 3D. So our system into the multimesh 3D. So our system into the multimesh 3D. So our system rules are absolutely like strict. It rules are absolutely like strict. It rules are absolutely like strict. It [snorts] it says that only use the C# uh [snorts] it says that only use the C# uh [snorts] it says that only use the C# uh code and use only go.4 four like node code and use only go.4 four like node code and use only go.4 four like node 3D, character body 3D and exposed UKQL 3D, character body 3D and exposed UKQL 3D, character body 3D and exposed UKQL via export and construct this meshes via export and construct this meshes via export and construct this meshes using the CCW winding and verify the using the CCW winding and verify the using the CCW winding and verify the scene path via MCP before generating any scene path via MCP before generating any scene path via MCP before generating any references. So this kind of rules kind references. So this kind of rules kind references. So this kind of rules kind of help us give a much more um uh clean of help us give a much more um uh clean of help us give a much more um uh clean code when we are prompting our agent for code when we are prompting our agent for code when we are prompting our agent for giving us a realtime logic whenever giving us a realtime logic whenever giving us a realtime logic whenever generating any uh terrain data or any generating any uh terrain data or any generating any uh terrain data or any procedural generator or any foliage procedural generator or any foliage procedural generator or any foliage mechanics. So here is an example. So this slide So here is an example. So this slide shows how easy it is to log these guard shows how easy it is to log these guard shows how easy it is to log these guard rates into your IDE. So inside the rates into your IDE. So inside the rates into your IDE. So inside the continue plug-in we have created a continue plug-in we have created a continue plug-in we have created a dedicated workspace rule called go.4 C# dedicated workspace rule called go.4 C# dedicated workspace rule called go.4 C# world generation and once this file is world generation and once this file is world generation and once this file is saved every prompt we send automatically saved every prompt we send automatically saved every prompt we send automatically inherit inherits this constants. So you inherit inherits this constants. So you inherit inherits this constants. So you don't have to like kind of retype every don't have to like kind of retype every don't have to like kind of retype every time the remember to use go.4 or don't time the remember to use go.4 or don't time the remember to use go.4 or don't use GDScript and it becomes impetative.

  19. use GDScript and it becomes impetative. use GDScript and it becomes impetative. So once the rule is defined, your AI So once the rule is defined, your AI So once the rule is defined, your AI will generate it accordingly to the rule will generate it accordingly to the rule will generate it accordingly to the rule and it will give you a clean code every and it will give you a clean code every and it will give you a clean code every single time whenever you're prompting single time whenever you're prompting single time whenever you're prompting it. So this is one logic that I have used. I So this is one logic that I have used. I have taken the rule and I have tweaked have taken the rule and I have tweaked have taken the rule and I have tweaked some values into the video uh as you can some values into the video uh as you can some values into the video uh as you can see for the see for the see for the uh for the export properties and range. uh for the export properties and range. uh for the export properties and range. And once I have pasted that, I'll just And once I have pasted that, I'll just And once I have pasted that, I'll just quickly scroll into the play screen. And quickly scroll into the play screen. And quickly scroll into the play screen. And you can see I get a really clean looking you can see I get a really clean looking you can see I get a really clean looking terrain uh which does not crumple or terrain uh which does not crumple or terrain uh which does not crumple or scutter in in the video. Now coming to the runbased world Now coming to the runbased world architecture. Now let's look under the architecture. Now let's look under the architecture. Now let's look under the hood. Now how a runtime world hood. Now how a runtime world hood. Now how a runtime world architecture behaves while running. So architecture behaves while running. So architecture behaves while running. So number one is dynamic chunk loading number one is dynamic chunk loading number one is dynamic chunk loading memory. So world is divided into our memory. So world is divided into our memory. So world is divided into our infinite grid of chunks and our chunk infinite grid of chunks and our chunk infinite grid of chunks and our chunk manager is the one that monitors players manager is the one that monitors players manager is the one that monitors players coordinate and dynamically instantiating coordinate and dynamically instantiating coordinate and dynamically instantiating chunks within a target area while chunks within a target area while chunks within a target area while culling and freeing out of bounds chunks culling and freeing out of bounds chunks culling and freeing out of bounds chunks from the memory and it maintains a from the memory and it maintains a from the memory and it maintains a steady 60 plus fps. Now off of off steady 60 plus fps. Now off of off steady 60 plus fps. Now off of off thread mesh generation. So as mentioned thread mesh generation. So as mentioned thread mesh generation. So as mentioned earlier calculating procedal generation earlier calculating procedal generation earlier calculating procedal generation noise and building geometry buffer on noise and building geometry buffer on noise and building geometry buffer on the main thread will basically cause a the main thread will basically cause a the main thread will basically cause a severe frame rate setter and we run our

  20. severe frame rate setter and we run our severe frame rate setter and we run our uh fast noise light calculation based on uh fast noise light calculation based on uh fast noise light calculation based on the background thread threads using the the background thread threads using the the background thread threads using the task.run and however this is a critical task.run and however this is a critical task.run and however this is a critical go technical rule you cannot add nodes go technical rule you cannot add nodes go technical rule you cannot add nodes or modify the CN from background thread or modify the CN from background thread or modify the CN from background thread and doing so will crash the engine. So and doing so will crash the engine. So and doing so will crash the engine. So [snorts] instead of that we are using [snorts] instead of that we are using [snorts] instead of that we are using call deferred to pass those completed call deferred to pass those completed call deferred to pass those completed buffers and back into the main thread buffers and back into the main thread buffers and back into the main thread using code safely. Now manage procedural using code safely. Now manage procedural using code safely. Now manage procedural uh blending. So our dynamic height maps uh blending. So our dynamic height maps uh blending. So our dynamic height maps is continuously interpolated around our is continuously interpolated around our is continuously interpolated around our marker 3D anchored and ensuring that marker 3D anchored and ensuring that marker 3D anchored and ensuring that regardless how the procedural seat regardless how the procedural seat regardless how the procedural seat changes our critical gameplay foundation changes our critical gameplay foundation changes our critical gameplay foundation remains stable and leveled. remains stable and leveled. remains stable and leveled. So let's dive into the core mathematical So let's dive into the core mathematical So let's dive into the core mathematical that makes this uh level look so that makes this uh level look so that makes this uh level look so playable. So first is our dual uh vector playable. So first is our dual uh vector playable. So first is our dual uh vector math. Uh we have implemented different math. Uh we have implemented different math. Uh we have implemented different approaches in the biome terrain approaches in the biome terrain approaches in the biome terrain generation script. And if you see the generation script. And if you see the generation script. And if you see the geometric cross product. So for each geometric cross product. So for each geometric cross product. So for each triangle we have taken the edge vector triangle we have taken the edge vector triangle we have taken the edge vector and calculated the uniform normals and calculated the uniform normals and calculated the uniform normals creating a clean and face low poly creating a clean and face low poly creating a clean and face low poly aesthetics in a single color over the aesthetics in a single color over the aesthetics in a single color over the ground. But in sandy or dirt terin, a ground. But in sandy or dirt terin, a ground. But in sandy or dirt terin, a new script was created rolling for uh new script was created rolling for uh new script was created rolling for uh desert dunes and faceted normals that desert dunes and faceted normals that desert dunes and faceted normals that creates several uh severe problems and creates several uh severe problems and creates several uh severe problems and most notably chunk border lines uh most notably chunk border lines uh most notably chunk border lines uh lighting scenes and a cross product edge lighting scenes and a cross product edge lighting scenes and a cross product edge was generated which helped us to resolve was generated which helped us to resolve was generated which helped us to resolve this kind of a chunk and chunk derated

  21. this kind of a chunk and chunk derated this kind of a chunk and chunk derated issue and also helped us to have a issue and also helped us to have a issue and also helped us to have a visible lighting split. Now coming to the slope awareness uh GPU Now coming to the slope awareness uh GPU foliage uh the foliage manager script we foliage uh the foliage manager script we foliage uh the foliage manager script we sampled it to a y component of the sampled it to a y component of the sampled it to a y component of the surface normal and since a normalized surface normal and since a normalized surface normal and since a normalized vector point we straightened up the y of vector point we straightened up the y of vector point we straightened up the y of the 1.0 and checking if the normal dopy the 1.0 and checking if the normal dopy the 1.0 and checking if the normal dopy is less than the max slope giving us to is less than the max slope giving us to is less than the max slope giving us to automatically prevent trees and rocks automatically prevent trees and rocks automatically prevent trees and rocks spawning on a vertical script and then spawning on a vertical script and then spawning on a vertical script and then third is the realtime physics. So we third is the realtime physics. So we third is the realtime physics. So we extracted the collision shape from the extracted the collision shape from the extracted the collision shape from the generated array mesh and used it a chunk generated array mesh and used it a chunk generated array mesh and used it a chunk mesh to create a uh a shape and then mesh to create a uh a shape and then mesh to create a uh a shape and then attached it to a collision shape 3D and attached it to a collision shape 3D and attached it to a collision shape 3D and explicitly set that to a concave back explicitly set that to a concave back explicitly set that to a concave back face collision true. And this single face collision true. And this single face collision true. And this single line ensures that the player character line ensures that the player character line ensures that the player character will never clip or fall into a will never clip or fall into a will never clip or fall into a procedural terrain. procedural terrain. procedural terrain. [snorts] [snorts] [snorts] So here is what the math looks like when So here is what the math looks like when So here is what the math looks like when rendered into a go dot viewer port. rendered into a go dot viewer port. rendered into a go dot viewer port. Notice how cleanly the foliage is Notice how cleanly the foliage is Notice how cleanly the foliage is distributed and the tree clusters are distributed and the tree clusters are distributed and the tree clusters are naturally in valley and flat cleared.

  22. naturally in valley and flat cleared. naturally in valley and flat cleared. But as the terrain rises into steeper But as the terrain rises into steeper But as the terrain rises into steeper the ridges and normal, it will the ridges and normal, it will the ridges and normal, it will automatically keep the slope clear and automatically keep the slope clear and automatically keep the slope clear and the lighting is also consistent the the lighting is also consistent the the lighting is also consistent the entire chunk laying out running on a entire chunk laying out running on a entire chunk laying out running on a locked frame rate of 60 plus. Now quickly just let's look at the Now quickly just let's look at the shader implementation in go do you do shader implementation in go do you do shader implementation in go do you do not need a really complex or manual not need a really complex or manual not need a really complex or manual wrapping for the procedure world. We can wrapping for the procedure world. We can wrapping for the procedure world. We can use a custom shader and instead of hot use a custom shader and instead of hot use a custom shader and instead of hot reloading we can directly edit the go reloading we can directly edit the go reloading we can directly edit the go dot uh code into the rider and the dot uh code into the rider and the dot uh code into the rider and the instant you press control S the go dot instant you press control S the go dot instant you press control S the go dot uh will reload your shader material uh will reload your shader material uh will reload your shader material inside directly and your PCG cartel. So inside directly and your PCG cartel. So inside directly and your PCG cartel. So when generating this procedural measures when generating this procedural measures when generating this procedural measures uh we often run into a visual bug which uh we often run into a visual bug which uh we often run into a visual bug which is invisible or cull triangles. So if is invisible or cull triangles. So if is invisible or cull triangles. So if you index an array wins or lock uh into you index an array wins or lock uh into you index an array wins or lock uh into a clockwise instead of uh a clockwise instead of uh a clockwise instead of uh counterclockwise go [snorts] dot will counterclockwise go [snorts] dot will counterclockwise go [snorts] dot will render it really bad and you won't be render it really bad and you won't be render it really bad and you won't be able to see it. So adding a render color able to see it. So adding a render color able to see it. So adding a render color mode disabled guarantees that both sides mode disabled guarantees that both sides mode disabled guarantees that both sides are drawn eliminating transparent holes are drawn eliminating transparent holes are drawn eliminating transparent holes in your terrain or having any glare in your terrain or having any glare in your terrain or having any glare while the sun hits the terrain.

  23. while the sun hits the terrain. while the sun hits the terrain. Now inspector driven control. So we Now inspector driven control. So we Now inspector driven control. So we prompted our AI to structure shader prompted our AI to structure shader prompted our AI to structure shader parameter using a group uniform and the parameter using a group uniform and the parameter using a group uniform and the hint range and automatically it builds hint range and automatically it builds hint range and automatically it builds up a slider that is clean and go dot up a slider that is clean and go dot up a slider that is clean and go dot allows your inspector to adjust the sand allows your inspector to adjust the sand allows your inspector to adjust the sand grass building uh noise patch scales and grass building uh noise patch scales and grass building uh noise patch scales and roughness visually without touching the roughness visually without touching the roughness visually without touching the code. So this is how I have implemented code. So this is how I have implemented code. So this is how I have implemented the shader code where I have given the the shader code where I have given the the shader code where I have given the Gemini 3.6 Six uh a logic to generate Gemini 3.6 Six uh a logic to generate Gemini 3.6 Six uh a logic to generate which says that uh update this spatial which says that uh update this spatial which says that uh update this spatial shader to include organic orange dirt shader to include organic orange dirt shader to include organic orange dirt patches and keep the render mode color patches and keep the render mode color patches and keep the render mode color disable add uniform vector 4 for sand disable add uniform vector 4 for sand disable add uniform vector 4 for sand grass and patched alo and use this 3D grass and patched alo and use this 3D grass and patched alo and use this 3D value noise function based on the world value noise function based on the world value noise function based on the world position mask patches primarily over the position mask patches primarily over the position mask patches primarily over the grass and you can notice how the prompt grass and you can notice how the prompt grass and you can notice how the prompt has prompt has used all of the has prompt has used all of the has prompt has used all of the instruction and given me a proper board. instruction and given me a proper board. instruction and given me a proper board. So now let's just summarize the So now let's just summarize the So now let's just summarize the performance and the architecture that performance and the architecture that performance and the architecture that keeps this locked at 60 plus FPS. Uh keeps this locked at 60 plus FPS. Uh keeps this locked at 60 plus FPS. Uh number one is a zero runtime overhead.

  24. number one is a zero runtime overhead. number one is a zero runtime overhead. So all AI generation is taking place So all AI generation is taking place So all AI generation is taking place strictly at the editor time inside Jet strictly at the editor time inside Jet strictly at the editor time inside Jet Brains Rider. So when you export your Brains Rider. So when you export your Brains Rider. So when you export your final game executable, there are no final game executable, there are no final game executable, there are no language models running on cloud API language models running on cloud API language models running on cloud API calls and that actually helps us to calls and that actually helps us to calls and that actually helps us to compile the game run on pure compile the game run on pure compile the game run on pure multi-threaded C#. Next is our multi-threaded C#. Next is our multi-threaded C#. Next is our asynchronized threading. So all the asynchronized threading. So all the asynchronized threading. So all the noise calculation and vertices array noise calculation and vertices array noise calculation and vertices array generation run off the thread where task generation run off the thread where task generation run off the thread where task runing safely to the main thread by runing safely to the main thread by runing safely to the main thread by call. Deferred. Coming to the GPU draw call. Deferred. Coming to the GPU draw call. Deferred. Coming to the GPU draw call batching. So through the multi mesh call batching. So through the multi mesh call batching. So through the multi mesh instances we are rendering 20,000 to instances we are rendering 20,000 to instances we are rendering 20,000 to 30,000 trees rocks and grass grass in a 30,000 trees rocks and grass grass in a 30,000 trees rocks and grass grass in a single draw call serializing the single draw call serializing the single draw call serializing the transform matrices into a flat memory transform matrices into a flat memory transform matrices into a flat memory buffer without allocating any individual buffer without allocating any individual buffer without allocating any individual tree in the nodes. Coming to the dynamic tree in the nodes. Coming to the dynamic tree in the nodes. Coming to the dynamic uh chunk culling, we streamed chunks uh chunk culling, we streamed chunks uh chunk culling, we streamed chunks based on a player proximity and in based on a player proximity and in based on a player proximity and in immediately free out any bounds that is immediately free out any bounds that is immediately free out any bounds that is out of the data like out of the bound out of the data like out of the bound out of the data like out of the bound mesh and prevent any RAM bloating and mesh and prevent any RAM bloating and mesh and prevent any RAM bloating and memory leaks. And this is our finally memory leaks. And this is our finally memory leaks. And this is our finally final outcome when I have integrated all final outcome when I have integrated all final outcome when I have integrated all the procedures I have mentioned above.

  25. the procedures I have mentioned above. the procedures I have mentioned above. And you can see that it is a smooth uh And you can see that it is a smooth uh And you can see that it is a smooth uh smooth terrain and our custom shader and smooth terrain and our custom shader and smooth terrain and our custom shader and spial shader are running smoothly from spial shader are running smoothly from spial shader are running smoothly from the warm sand up. There's also an autumn the warm sand up. There's also an autumn the warm sand up. There's also an autumn graph with organic dot patch and there graph with organic dot patch and there graph with organic dot patch and there are thousands of stylized bridge uh are thousands of stylized bridge uh are thousands of stylized bridge uh trees and boulders that populate the trees and boulders that populate the trees and boulders that populate the landscape. And this entire world was generated in And this entire world was generated in texture populated using our editor time texture populated using our editor time texture populated using our editor time AI co-builder inside rider and go do AI co-builder inside rider and go do AI co-builder inside rider and go do buildin on open source tools running buildin on open source tools running buildin on open source tools running locally with zero manual asset placing locally with zero manual asset placing locally with zero manual asset placing any fork and you get both the any fork and you get both the any fork and you get both the scalability of the procedial generation scalability of the procedial generation scalability of the procedial generation and the deliberate structure of and the deliberate structure of and the deliberate structure of handcrafted level design. handcrafted level design. handcrafted level design. So just quickly to wrap up the session So just quickly to wrap up the session So just quickly to wrap up the session there are four uh takeaways. One is my there are four uh takeaways. One is my there are four uh takeaways. One is my editor time code builder. So stop editor time code builder. So stop editor time code builder. So stop treating the AI as a runtime player treating the AI as a runtime player treating the AI as a runtime player gimmick and please uh use an MCP bridge gimmick and please uh use an MCP bridge gimmick and please uh use an MCP bridge coming to connect your IDE with a go dot coming to connect your IDE with a go dot coming to connect your IDE with a go dot using IMCP uh manage your proceduralism using IMCP uh manage your proceduralism using IMCP uh manage your proceduralism and perform don't let the AI go wild and perform don't let the AI go wild and perform don't let the AI go wild please use the rules the marker 2D and please use the rules the marker 2D and please use the rules the marker 2D and the math logic and in future we can use the math logic and in future we can use the math logic and in future we can use more foliage more buffers that can more foliage more buffers that can more foliage more buffers that can handle handle more uh data much handle handle more uh data much handle handle more uh data much efficiently. Now currently this is a efficiently. Now currently this is a efficiently. Now currently this is a prototype but we are thinking of using prototype but we are thinking of using prototype but we are thinking of using more loops and runtime debugger in the more loops and runtime debugger in the more loops and runtime debugger in the future takeaways. Thank you and any future takeaways. Thank you and any future takeaways. Thank you and any questions I would love to hear.

  26. questions I would love to hear. questions I would love to hear. [laughter] [laughter] [laughter] >> Hi Sammy, great talk. Thanks so much. >> Hi Sammy, great talk. Thanks so much. >> Hi Sammy, great talk. Thanks so much. >> Y >> Y >> Y >> yeah fantastic talk. I think you built a >> yeah fantastic talk. I think you built a >> yeah fantastic talk. I think you built a really interesting uh pipeline there of really interesting uh pipeline there of really interesting uh pipeline there of different tools and everything. Um, different tools and everything. Um, different tools and everything. Um, unfortunately we've run a little bit unfortunately we've run a little bit unfortunately we've run a little bit over, so we don't have time for Q&A over, so we don't have time for Q&A over, so we don't have time for Q&A right now, but if anybody does have any right now, but if anybody does have any right now, but if anybody does have any questions, please put them in the chat. questions, please put them in the chat. questions, please put them in the chat. And Sammy, if you want to uh pop into And Sammy, if you want to uh pop into And Sammy, if you want to uh pop into the chat there and see what's going on the chat there and see what's going on the chat there and see what's going on there. there. there. >> Um, some people are already asking about >> Um, some people are already asking about >> Um, some people are already asking about which models you chose and why. So, which models you chose and why. So, which models you chose and why. So, yeah, just hop in the chat there. And yeah, just hop in the chat there. And yeah, just hop in the chat there. And >> I'd be interested in hearing a bit more >> I'd be interested in hearing a bit more >> I'd be interested in hearing a bit more about if we had more time, I'd ask about about if we had more time, I'd ask about about if we had more time, I'd ask about the OMCP as well. And understanding the OMCP as well. And understanding the OMCP as well. And understanding about the good is good. Um, getting the about the good is good. Um, getting the about the good is good. Um, getting the agents to do debugging for you as well. agents to do debugging for you as well. agents to do debugging for you as well. That's pretty cool, too. Yeah, but That's pretty cool, too. Yeah, but That's pretty cool, too. Yeah, but unfortunately I'm very sorry to unfortunately I'm very sorry to unfortunately I'm very sorry to >> That's all good. That's all good. And >> That's all good. That's all good. And >> That's all good. That's all good. And thank you so much for having me. Let's thank you so much for having me. Let's thank you so much for having me. Let's just keep building the future of game just keep building the future of game just keep building the future of game development together. development together. development together. >> Exactly. >> Exactly. >> Exactly. >> Fantastic. Can't agree more. >> Fantastic. Can't agree more. >> Fantastic. Can't agree more. >> Thank you. Thanks. Thanks. Bye. Bye. >> Thank you. Thanks. Thanks. Bye. Bye. >> Thank you. Thanks. Thanks. Bye. Bye. [music]

No summary available yet.

View original episode ↗