• Advertisement

Search the Community

Showing results for tags 'R&D'.



More search options

  • Search By Tags

    Type tags separated by commas.
  • Search By Author

Content Type


Categories

  • Audio
    • Music and Sound FX
  • Business
    • Business and Law
    • Career Development
    • Production and Management
  • Game Design
    • Game Design and Theory
    • Writing for Games
    • UX for Games
  • Industry
    • Interviews
    • Event Coverage
  • Programming
    • Artificial Intelligence
    • General and Gameplay Programming
    • Graphics and GPU Programming
    • Engines and Middleware
    • Math and Physics
    • Networking and Multiplayer
  • Visual Arts
  • Archive

Categories

  • News

Categories

  • Audio
  • Visual Arts
  • Programming
  • Writing

Categories

  • GameDev Unboxed

Categories

  • Game Dev Loadout

Categories

  • Game Developers Conference
    • GDC 2017
    • GDC 2018
  • Power-Up Digital Games Conference
    • PDGC I: Words of Wisdom
    • PDGC II: The Devs Strike Back
    • PDGC III: Syntax Error

Forums

  • Audio
    • Music and Sound FX
  • Business
    • Games Career Development
    • Production and Management
    • Games Business and Law
  • Game Design
    • Game Design and Theory
    • Writing for Games
  • Programming
    • Artificial Intelligence
    • Engines and Middleware
    • General and Gameplay Programming
    • Graphics and GPU Programming
    • Math and Physics
    • Networking and Multiplayer
  • Visual Arts
    • 2D and 3D Art
    • Critique and Feedback
  • Topical
    • Virtual and Augmented Reality
    • News
  • Community
    • For Beginners
    • GameDev Challenges
    • GDNet+ Member Forum
    • GDNet Lounge
    • GDNet Comments, Suggestions, and Ideas
    • Coding Horrors
    • Your Announcements
    • Hobby Project Classifieds
    • Indie Showcase
    • Article Writing
  • Affiliates
    • NeHe Productions
    • AngelCode
  • Workshops
    • C# Workshop
    • CPP Workshop
    • Freehand Drawing Workshop
    • Hands-On Interactive Game Development
    • SICP Workshop
    • XNA 4.0 Workshop
  • Archive
    • Topical
    • Affiliates
    • Contests
    • Technical
  • GameDev Challenges's Topics

Calendars

  • Community Calendar
  • Games Industry Events
  • Game Jams
  • GameDev Challenges's Schedule

Blogs

There are no results to display.

There are no results to display.

Developers

Developers


Group


About Me


Website


Industry Role


Twitter


Github


Twitch


Steam

Found 26 results

  1. R&D chatbot

    Please help in completing the code. I am unable to use defined function import sys import nltk import random from nltk.tokenize import word_tokenize,sent_tokenize GREETING_KEYWORDS = ("hello", "hi", "greetings", "sup", "what's up",) GREETING_RESPONSES = ["'sup bro", "hey", "*nods*", "hey you get my snap?"] User_input = input ("User said:") type (User_input) def check_for_greeting(sentence): """If any of the words in the user's input was a greeting, return a greeting response""" words = word_tokenize (sentence) if words in GREETING_KEYWORDS: print(random.choice(GREETING_RESPONSES)) return; check_for_greeting(sentence = User_input )
  2. Hi everybody, i'm ready to announce: Lights of Dreams IV v7.57. Candy World II v7.97. Candy Racing Cup v2.75. Candy World Adventures v4.75. Candy to the Rescue IV v5.57. Candy's Space Adventures v15.47. Candy's Space Mysteries II v6.07. Two updates since last edit: - Enhanced the Space, Missions & Sceneries in Candy's Space Adventures ! - Verified bonus, options, maps & more tricks in Candy's Space Mysteries II ! - We generally debug our games since now then ! They are available for download on my website: - Xilvan Design Websites - One new link are now available: a OneDrive link. But, there is still a Google Drive & old CNET.download.com link. Hope you'll appreciate ! If you want to watch the videos of our games: - My youtube Channel - Please, Subscribe to my channel for more infos about our new releases. Friendly, Xylvan, Xilvan Design.
  3. Hello gamedev, I am currently evaluating the worthiness of jumping into RD work for an automatic impostor system in our engine. In the past I've witnessed tremendous performance increase from such a system into the engine of LumenRT (which has to cope with unoptimized user created content). We're a little bit in the same situation right now. Possibly large fields with way too much data (high poly etc..). So if the engine would support auto-impostor-ing of stuff that'd be cool. Though, to make it a bit more modern, I was thinking that we could extend the parallax validity of billboards by storing the depth too, and render them using parallax occlusion mapping. So the invalidation could come after the camera has moved to a more radical angle than for traditional impostors. These exist techniques with full volumetric billboards that I am aware of, but they need the gometry shader to generate slices, and cost heavy voxel storage. I need something very light on the bandwidth to cope with switch/PS4 limitations. Can you point me to modern research on well balanced imposter techniques sounding like this ? or any idea you have on the matter. thanks
  4. If you have CROWDFUNDED the development of your game, which of the following statements do you agree with? 1. I went out of my way to try to launch my game by the estimated delivery date 2. I made an effort to launch my game by the estimated delivery date 3. I was not at all concerned about launching my game by the estimated delivery date ------------------------------------------------------------------------------- Hi there! I am an academician doing research on both funding success and video game development success. For those who have CROWDFUNDED your game development, it would be extremely helpful if you could fill out a very short survey (click the Qualtrics link below) about your experiences. http://koc.ca1.qualtrics.com/jfe/form/SV_5cjBhJv5pHzDpEV The survey would just take 5 minutes and I’ll be happy to share my findings of what leads to crowdfunding success and how it affects game development based on an examination of 350 Kickstarter projects on game development in return. This is an anonymous survey and your personal information will not be recorded. Thank you very much in advance!
  5. R&D AI Book Bundle

    Just unless you missed it, Humble Bundle is currently selling a book bundle regarding AI and machine learning. Link The bundle includes one book for UE4 and a lot of general books.
  6. R&D Advanced AI in Games?

    At the company I currently work for we have been working on a variety of AI projects related to big data, natural speech, and autonomous driving. While these are interesting uses of AI, I wonder about their application in real-time systems like games. Games can't tolerate large delays while sending data to the cloud or complex calculation and are also limited in storage space than can be allocated to data. I am curious about the community's view of where complex AI could fit in gaming?
  7. Hi, I'm looking for suggestions for this game similar to ravensburger scotland yard any deas is appreciated https://images-cdn.fantasyflightgames.com/filer_public/78/b4/78b4b240-ec1d-416d-8486-970fb5a941c9/whitehall_mystery_rulebook_small_copy.pdf thanks
  8. Zone generation

    I have integrated the zone separation with my implementation of the Marching Cubes algorithm. Now I have been working on zone generation. A level is separated in the following way : Shrink the zone map to exactly fit an integer number of Chunk2Ds, which are of 32² m². For each Chunk2D, analyse all zones inside its boundaries and determine all possible heights for Chunk3Ds, which are of 32³ m³. Imagine this as a three dimensional array as an hash map : we are trying to figure out all keys for Chunk3Ds for a given Chunk2D. Create and generate a Chunk3D for each height found. Execute the Marching Cubes algorithm to assemble the geometry for each Chunk3D. In our game, we want levels to look like and feel like a certain world. The first world we are creating is the savanna. Even though each Chunk3D is generated using 3D noise, I made a noise module to map 3D noises into the 2D to able to apply 2D perturbation to the terrain. I also tried some funkier procedural noises : An arch! The important thing with procedural generation, it's to have a certain level of control over it. With the new zone division system, I have achieved a minimum on that path for my game.
  9. we are looking for someone who can develop a fully automatic [recruiting information removed by moderator - please use jobs section]
  10. Hi, Currently I'm working in a project in where an AI team of NPCs must attack a squad of 4 characters manipulated by the Player. The problem I have is all the info I've found about AI against a player is related by attacking a single character. In this particular scenario attack rules changes because the AI must be aware about four characters. I'm curious if any one knows some paper about this particular scenario. Thanks.
  11. Zone division

    A friend and I are making a rogue-lite retro procedural game. As in many procedural rogue-lite games, it will have rooms to complete but also the notion of zones. The difference between a zone and a room is that a zone is open air whilst a room is not. Rooms are connected mainly by corridors while zones are mostly naturally connected / separated by rivers and mountains. Because we want levels with zones to be generated, we need to tame the beast that is procedural generation. How can we generate each zone itself and also clearly divide them? Until now, I had only been using the Java noise library called Joise, which is the Java community port of JTippetts' Accidental Noise Library. I needed the zone data to be generated with basis function modules, i.e. Perlin noise, but in contrast I needed a more structured approach for the zone division. Joise library does have a cell noise module that is a Worley noise. It looks like this depending on its 4 parameters (1, 0, 0, 0) : Using math modules, I was able to morph that noise into something that looks like a Voronoi diagram. Here's what a Voronoi diagram should look like (never mind the colors, the important parts are the cell edges and the cell centers) : A more aesthetic version : The Worley noise that I had morphed into a Voronoi-like diagram did not include the cell centers, did not include metadata about the edges and was not enough deterministic in a sense that sometimes, the edges would around 60 pixels large. I then searched for a Java Voronoi library and found this one called Voronoi-Java. With this, I was able to generate simple Voronoi diagrams : Relaxed : 1 iteration Relaxed : 2 iterations The relaxation concept is actually the Lloyd's algorithm fortunately included within the library. Now how can I make that diagram respect my level generation mechanics? Well, if we can limit an approximated number of cells within a certain resolution, that would be a good start. The biggest problem here, is that the relaxation reduces the number of cells within a restricted resolution (contrary to the global resolution) and so we need to keep that in mind. To do that, I define a constant for the total number of sites / cells. Here's my code : private Voronoi createVoronoiDiagram(int resolution) { Random random = new Random(); Stream<Point> gen = Stream.generate(() -> new Point(random.nextDouble() * resolution, random.nextDouble() * resolution)); return new Voronoi(gen.limit(VORONOI_SITE_COUNT).collect(Collectors.toList())).relax().relax().relax(); } A brief pseudo-code of the algorithm would be the following : Create the Voronoi diagram Find the centermost zone Selects X number of zones while there are zones that respect the selection criteria Draw the border map Draw the smoothed border map The selection criteria is applied for each edge that is connected only to one selected zone. Here's the selection criteria : Is connected to a closed zone, i.e. that all its edges form a polygon Does have two vertices Is inclusively in the resolution's boundaries Here's the result of a drawn border map! In this graph, I have a restricted number of cells that follow multiple criteria and I know each edge and each cell center point. To draw the smoothed border map, the following actions must be taken : emit colors from already drawn pixels and then apply a gaussian blur. Personally, I use the JH Labs Java Image Filters library for the gaussian blur. With color emission only : With color emission and a gaussian blur : You may ask yourself why have we created a smoothed border map? There's a simple reason for this, which is that we want the borders to be gradual instead of abrupt. Let's say we want rivers or streams between zones. This gradual border will allow us to progressively increase the depth of the river and making it look more natural in contrast with the adjacent zones. All that's left is to flood each selected cell and apply that to a zone map.
  12. Am a new game dev and I need the help of you (the experts) While making the game I had one main problem, In my game, the player moves his mouse to control the direction of a sword that his character is supposed swings against other players, the problem is that I don't know how to program the hand to move according to the mouse. I will be grateful if someone can give me a helping hand on how to code it or a general idea of how this thing can be programmed on unity ^^.
  13. Hi, Recently I have been looking into a few renderer designs that I could take inspiration from for my game engine. I stumbled upon the BitSquid and the OurMachinery blogs about how they architect their renderer to support multiple platforms (which is what I am looking to do!) I have gotten so far but I am unsure how a few things that they say in the blogs.. This is a simplified version of how I understand their stuff to be setup: Render Backend - One per API, used to execute the commands from the RendererCommandBuffer and RendererResourceCommandBuffer Renderer Command Buffer - Platform agnostic command buffer for creating Draw, Compute and Resource Update commands Renderer Resource Command Buffer - Platform agnostic command buffer for creation and deletion of GPU resources (textures, buffers etc..) The render backend has arrays of API specific resources (e.g. VulkanTexture, D3D11Texture ..) and each engine-side resource has a uint32 as the handle to the render-side resource. Their system is setup for multi-threaded usage (building command buffers in parallel and executing RenderCommandBuffers (not resources) in parallel. One things I would like clarification on In one of the blog posts they say When the user calls a create-function we allocate a unique handle identifying the resource Where are the handles allocated from? the RenderBackend? How do they do it in a thread safe way that's doesn't kill performance? If anyone has any ideas or any additional resources on the subject, that would be great. Thanks
  14. Disclaimer: I was tempted to put this in Game Design, but it heavily references AI so feel free to move it to wherever it needs to be if this is the wrong place. I had this idea that a game could use machine learning to support it's AI and make itself a really challenging opponent (nothing new there), but also to tailor its style of playing based on feedback given by human players. Using an RTS as a classic example, lets say you prefer to play defensively. You would probably get more enjoyment out of games where the opponent was offensive so as to challenge your play style. At the end of each match, you give a quick bit of feedback in the form of a score ('5/10 gold stars' for example) that pertains to your AI opponent's style of play. The AI then uses this to evaluate itself, cross referencing its score against previous scores in order to determine the optimum 'preferable' play style. Then I got onto to thinking about two issues with the idea: 1) The human player might not be great at distinguishing feedback about their opponents play style from feedback about their game experience in general. 2) In a multiplayer context, players could spam/abuse/troll the system by leaving random/erroneous feedback. Could you get round this by evaluating the player without them knowing it, i.e. could some other data recorded from the way a player acts in a game be used to approximate their enjoyment of a particular opponents play style without being too abstract? For example 'length of time played somehow referenced against length of time directly engaged with AI opponent' etc... Do any existing games work like this? I just came up with it when I saw a stat that call of duty has been played for a collective 25 billion hours or something - which made me that would be the perfect bank of experience to teach a deep learning computer how players interact with a game. Just a bit of abstract thinking, that's all.
  15. [To the moderator: I selected this forum as TTS technology falls within AI; I found no better alternative. I hope it is acceptable.] In this post I would like to share opinions about Text To Speech (TTS) technology in the context of gaming. I am not a gaming expert – rather, my expertise is in signal and speech processing. I am working at the IBM Research division. I hope this post will trigger a discussion and opinion sharing. My purpose here is to discuss “quality”. I plan to discuss technology trends in follow on posts . The potential benefit of “good quality” TTS technology for game developers is clear. But it is still considered as delivering “insufficient quality”. What is “quality” anyway, in our context? 1. The basic quality of modern TTS is good, in general. State of the art machine learning algorithms enable good prediction of the prosody (“intonation”, duration, loudness, emphasis and more) from the text, and the synthesized speech achieves good scores in subjective quality tests. This is no more the “robotic” sound it used to be. It sounds natural and “clean”. For applications such as announcements or commercial question answering, modern TTS provides a good alternative. 2. Natural speech, however, needs correct emphasis of different words across the sentences. Due to the ambiguity of the natural language, the algorithms (and humans as well) cannot always determine “correctly” the emphasis from the text of isolated sentences or utterances, without full knowledge of the entire context. This can limit the quality achievable by modern TTS technology. 3. When we consider gaming applications, additional needs arise. For example, using a formal style for generating the speech for a scene of action would sound weird – where are the emotions? The emotional content in human speech is essential for conveying messages. This is certainly an important aspect of “quality”. 4. Yet another aspect that relates to “quality”, at least in the broader sense, is the variety of voices. Most modern TTS technologies are based on pre-recorded human voices (recording of voice talents uttering a large collection of sentences). As recording, and processing the recorded speech, are expensive and time consuming, the variety of voices in typical TTS products is limited, often a few and less commonly several tens of different voices per “major” language. Moreover, gaming often requires non-human voices, such as “cartoonish” ones, to best support the different characters. To summarize, using repeatedly the same voices across games and characters, amounts to less than optimal experience, or in other words – to lower “quality”. I hope this provides some initial insights – from the perspective of a speech technology researcher. I hope to get feedback from the gaming experts. Am I right? What have I missed? What would allow game developers to start benefiting from the TTS technology? All the best, Aharon.
  16. Hello, I want you guys to help me to know the difference between technical artist and graphics programming role. I'm very interested in arts, maths and programming that's why i started to study computer graphics ( before i know that there is a technical artist role ) but after i know it i get confused knowing what the key similarity and difference between both of them. Can both position be in overlap and may be work on the same set of tasks/problems? What is the responsibilities of both of them? What's the skillset one should have to work on either of them? Thanks for your time, Regards.
  17. My SDF font looks great at large sizes, but not when I draw it at smaller sizes. I have my orthogonal projection matrix setup so that each unit is a 1x1 pixel. The text is rendered from Freetype2 to a texture atlas @ 56px with a spread of 8 pixels (the multiplier is 8x and scaled down). I'm drawing @ 18px in the screenshot attached to this post. The way I calculate the size of the text quads is by dividing the desired size (18px in the screenshot) by the size of the glyphs in the atlas (56px in this case), and scaling the glyph sprite by that factor. So: 18/56 = ~0.32, and I multiply the rect's size vector by that when it comes to vertex placement (this obviously doesn't apply to the vertices' texture coords). Now, I made sure that all metrics stored in my SDF font files are whole numbers (rect position/size, bearing amounts, advance, etc), but when I scale the font, vertex positions are almost always not going to be whole numbers. I increase the "edge" smoothstep shader parameter for smaller text as well, but it doesn't seem to help all that much.
  18. Hi guys, So I have an AI game in mind and I was wondering what are the best ways or techniques to sell my idea of my prototype and proof of concept. Should I make a trailer? Should make a magazine style book? Should I make a video in talking about my game like they do in Kickstarter campaigns? Any feedback would be highly appreciated!
  19. Hello guys, I just registered this site and heard from my lecturer that this a good site to talk about certain topics since my research topic are mostly programmer who are experienced with AI can answer the survey. The reason of the survey below is to understand which is suitable solution for 2d platformer pathfinding for AI and which one is easier to implement for 2D platformer. I would appreciate if you guys give your responses for the survey link shared and thank you for spending time answering the survey. Sorry if the survey is a bit hard to understand, I tried to make it understandable as best as I can. Again, thank you! https://goo.gl/forms/S0etAlAAHL6S5kTI2
  20. NVIDIA has developed a new machine learning methodology for generating unique and realistic looking faces using GAN i-e Generative Adversarial Network. The GAN is not a new technology, but where NVIDIA differentiates is through the progressive training method it developed. The key idea is to grow both the generator and discriminator progressively: starting from a low resolution, they add new layers that model increasingly fine details as training progresses. This both speeds the training up and greatly stabilizes it, allowing them to produce images of unprecedented quality. NVIDIA took a database of photographs of famous people and used that to train its system. By working together, the neural networks were able to produce fake images that are nearly indistinguishable from real human photographs. https://www.youtube.com/watch?v=2edOMMREazo
  21. Hi, Tile based renderers are quite popular nowadays, like tiled deferred, forward+ and clustered renderers. There is a presentation about GPU based particle systems from AMD. What particularly interest me is the tile based rendering part. The basic idea is, that leave the rasterization pipeline when rendering billboards and do it in a compute shader instead, much like Forward+. You determine tile frustums, cull particles, sort front to back, then render them until the accumulated alpha value is below 1. The performance results at the end of the slides seems promising. Has anyone ever implemented this? Was it a success, is it worth doing? The front to back rendering is the most interesting part in my opinion, because overdraw can be eliminated for alpha blending. The demo is sadly no longer available..
  22. Hi everyone, I'm new to learning AI pathfinding, although R&D for 3 month... so here is the problem that I had, hope there are someone can give me some advice. I was trying to develop my Flight Agent in 3D space. and store all the obstacles reference into octree. so I got the space & obstacle distribution represent in octree already, however I wanted to implement 1) Navigation network graph region (to define the space in region) 2) HPA* , to implement the high level path finding based on simplify network graph the major issue : I know how to collect all remain space from octree node, but I didn't know how to segment the space, and build up a network graph based on it.
  23. Hi, i’m trying to build an effective AI for the Buraco card game (2 and 4 players). I want to avoid the heuristic approach : i’m not an expert of the game and for the last games i’ve developed this way i obtained mediocre results with that path. I know the montecarlo tree search algorithm, i’ve used it for a checkers game with discrete result but I’m really confused by the recent success of other Machine Learning options. For example i found this answer in stack overflow that really puzzles me, it says : "So again: build a bot which can play against itself. One common basis is a function Q(S,a) which assigns to any game state and possible action of the player a value -- this is called Q-learning. And this function is often implemented as a neural network ... although I would think it does not need to be that sophisticated here.” I’m very new to Machine Learning (this should be Reinforcement Learning, right?) and i only know a little of Q-learning but it sounds like a great idea: i take my bot, making play against itself and then it learns from its results… the problem is that i have no idea how to start! (and neither if this approach could be good or not). Could you help me to get the right direction? Is the Q-learning strategy a good one for my domain? Is the Montecarlo still the best option for me? Would it work well in a 4 players game like Buraco (2 opponents and 1 team mate)? Is there any other method that i’m ignoring? PS: My goal is to develop an enjoyable AI for a casual application, i can even consider the possibility to make the AI cheating for example by looking at the players hands or deck. Even with this, ehm, permission i would not be able to build a good heuristic, i think Thank you guys for your help!
  24. Hello, I have been here about 2 months ago with my Dynamic Foam project and got help from a developer but we ran into some problems connecting centroids to establish a network between the 'foam bubbles'. Here is some extra information for why those centroids need to be connected and form a network along with the problem explained at the end. I. Dynamic Medium II. Fields and Boids III. From Boids to a PBD Network IV. From Curling Motion to Strings V. Position Based Dynamics (PBD) VI. The Problem -- I. Dynamic Medium The goal of this project is to create a kind on a Zero-player game, a bit like Conway's Game of Life, where cells fluctuate based on surrounding cells, and where the goal to generate Knots within a Dynamic Medium. To get a sense of such a dynamic network think of a foam with bubbles (volumes) where a micro-fluid runs through the edges (currents). These currents move from high to low pressure, forming circuits. The intensity of the fluid passing the bubbles can make the bubbles shrink or expand. Some currents will be able to line up and form closed circuits. In 2D these structures are simple loops, in 3D these loops can form strings, and in a next step these strings form again closed-circuits -> knots. -- II. Fields and Boids One way to get a model of bubbles and currents going was by using Boid-particles and Fields, which was tried in Processing. Here are short clips to show the interaction: • http://imgur.com/a/Mp0SG • https://vimeo.com/user37290268 A. In the first clip the Fields (red circles) keep their size while the small particles flow in between and form a circuit. B. In the second version the size of the Fields is influenced by the number of particles within. This gives rise to a dynamic foam with Fields fluctuating. Expand <-> Shrink -- III. From Boids to a PBD Network The problem with using Boids is that they have their limitations whereby the quick expansion of Fields causes the particles to be splattered around, interrupting the steady current. (stable flow vs. splashed around) Keeping the Boid-particles flowing is important, because a flow-circuit gives rise to organisational rules such as flows going against each other block each other, others can go along and strengthen each other, similar to an electronic circuit: So to fix these problems a move to PBD was made and hoping to create a network model (nodes/edges) that replaces the small particles. The flow replaced by edges: Fields expanding and shrinking depending on the amount of flow through the edges: • Having two Fields A.B. and in between from point a. to b. an edge. • This edges (a.b.) can replace all the boids moving in between (A.B.) • Edge (a.b.) can represents 1 or 1 million small particles or more, simplification. • Between Field A. and B. a measurement of tension •-VVVVV-• (A/B) • The more tension between (A.B.) the less flow there can be in (a.b.) • Inverse the more flow there is in (a.b.) the less tension between (A.B.) • The edge (a.b.) runs through the Fields A. and B, cooling or heating up Fields A. and B. • Through edge (a.b.) runs a current the larger this current the bigger the Fields A. and B. become, expansion vs. shrinking, hot vs. cold, condense vs. vaporise. The inspiration for the move to 'Position Based Dynamics' came from a talk by Jos Stam where he explained a method explicit on position and using springs: http://www.birs.ca/events/2014/5-day-workshops/14w5147/videos/watch/201402191414-Stam.html http://www.birs.ca//workshops//2014/14w5147/files/Stam-BIRS-2014.pdf -- IV. From Curling Motion to Strings At the basis of this Dynamic Foam is the idea to get the bubbles moving through the medium based on self regulated currents between the bubbles: The mechanics are like a sliding-puzzle where the parts can move to where there is space (created): Space can be created by letting the bubbles shrink on one side and expand on the other, so they can move into that created space, and as a result we get fluctuations and a rolling-curling-motion: Here is a fun animation that is similar to the idea: https://imgur.com/gallery/xIUGOd9 But for those lemons the input-force is gravity, in my model it are the micro-fluid-currents that effect the size. If the fluid is colder than the bubble than it will condensate and the field will expand; when it is warmer the field will vaporise and shrink. The dynamic curing motion from above, could also turn around and close-loop into knots: In 3D the wind up curls would be like these folk dansers waving strings: http://www.youtube.com/watch?v=uvE5yt83WPU (at 1:44) These strings can turn into knots etc. etc. -- V. Position Based Dynamics (PBD) For a look at the current situation you can check this short clip, where a small network is in place based on centroids, and where the volumes can fluctuate: http://imgur.com/QSG71hW Here is are the project files on GitHub if you would like to have a closer look: • https://github.com/VirtualOrganics/PBD_DynamicFoam_Files • https://github.com/InteractiveComputerGraphics/PositionBasedDynamics (The PDB software) -- VI. The Problem We took the PBD software from GitHub and modified the Demo example called 'GenericConstraintsDemos'. All constraints are taken out except the distance constraint , and the simulation is limited to work on a 2D plane with the intention of extending to 3D eventually. Check out the graph: As you can see in the example, there are nine circles. The simulation allows for any number of circles. The green dots represent the centers of the circles; the red dots represent the centroids of the three adjacent/connected circles; the black dots represent some (outer) intersections between circles; and the blue lines connect either centroids with other centroids, or centroids to intersections in a particular pattern. In the simulation, the radii of the circles can change and, since a distance constraint is applied, the varying sizes of the circles causes the locations (and existence) of the dots and lines to change. The code at this point is able to identify/calculate the locations of the black dots and the red dots, but he had trouble coming up with an algorithm that correctly connects the red and black dots. The diagram above shows the correct connections, but coming up with an algorithm to do this automatically and as the simulation runs stalled our progress. So I'm now looking for a developer who can take it to the next level. It doesn't necessarily need to be in PBD an other Physics Engine (Bullet?) might do the job, one where on top of the physics-interactions a network-formula can balance out the weights and regulate the system. All suggestions and questions are more than welcome! Best, m.
  25. I was reworking on my LightProbe filter, and I wrote some code to generate the Reference Cubemap, but then I noticed some discontinuous on the border of each face.(Top:CPU implementaion, Bottom: GPU implementation, the contrast has been adjusted on the right side) At first I think it maybe caused by the interpolation, but then I tried the same algorithm in 2D (like a slice in the normal light probe prefiltering) for better visualization, and the result really confused me. See the attachments, the top half is the Prefiltered Color value, displayed per channel, it's upside down because I used the ColorValue directly as the y coordinate. The bottom half is the differential of the color, it's very clearly there is a discontinuous, and the position is where the border should be. And as the roughness goes higher, the plot gets stranger . So, I am kinda of stuck in here, what's happening and what to do to remove this artifact? Anybody have any idea? and here is my code inline FVector2D Map(int32 FaceIndex, int32 i, int32 FaceSize, float& SolidAngle) { float u = 2 * (i + 0.5) / (float)FaceSize - 1; FVector2D Return; switch (FaceIndex) { case 0: Return = FVector2D(-u, -1); break; case 1: Return = FVector2D(-1, u); break; case 2: Return = FVector2D(u, 1); break; case 3: Return = FVector2D(1, -u); break; } SolidAngle = 1.0f / FMath::Pow(Return.SizeSquared(), 3.0f / 2.0f); return Return.SafeNormal(); } void Test2D() { const int32 Res = 256; const int32 MipLevel = 8; TArray<FLinearColor> Source; TArray<FLinearColor> Prefiltered; Source.AddZeroed(Res * 4); Prefiltered.AddZeroed(Res * 4); for (int32 i = 0; i < Res; ++i) { Source[i] = FLinearColor(1, 0, 0); Source[Res + i] = FLinearColor(0, 1, 0); Source[Res * 2 + i] = FLinearColor(0, 0, 1); Source[Res * 3 + i] = FLinearColor(0, 0, 0); } const float Roughness = MipLevel / 8.0f; const float a = Roughness * Roughness; const float a2 = a * a; // Brute force sampling with GGX kernel for (int32 FaceIndex = 0; FaceIndex < 4; ++FaceIndex) { for (int32 i = 0; i < Res; ++i) { float SolidAngle = 0; FVector2D N = Map(FaceIndex, i, Res, SolidAngle); double TotalColor[3] = {}; double TotalWeight = 0; for (int32 SampleFace = 0; SampleFace < 4; ++SampleFace) { for (int32 j = 0; j < Res; ++j) { float SampleJacobian = 0; FVector2D L = Map(SampleFace, j, Res, SampleJacobian); const float NoL = (L | N); if (NoL <= 0) continue; const FVector2D H = (N + L).SafeNormal(); const float NoH = (N | H); float D = a2 * NoL * SampleJacobian / FMath::Pow(NoH*NoH * (a2 - 1) + 1, 2.0f) ; TotalWeight += D; FLinearColor Sample = Source[SampleFace * Res + j] * D; TotalColor[0] += Sample.R; TotalColor[1] += Sample.G; TotalColor[2] += Sample.B; } } if (TotalWeight > 0) { Prefiltered[FaceIndex * Res + i] = FLinearColor( TotalColor[0] / TotalWeight, TotalColor[1] / TotalWeight, TotalColor[2] / TotalWeight); } } } // Save to bmp const int32 Width = 4 * Res; const int32 Height = 768; TArray<FColor> Bitmap; Bitmap.SetNum(Width * Height); // Prefiltered Color curve per channel float MaxDelta = 0; for (int32 x = 0; x < Width; ++x) { FColor SourceColor = Source[x].ToFColor(false); Bitmap[x] = SourceColor; FColor Sample = Prefiltered[x].ToFColor(false); check(Sample.R < 256); check(Sample.G < 256); check(Sample.B < 256); Bitmap[Sample.R * Width + x] = FColor(255, 0, 0); Bitmap[Sample.G * Width + x] = FColor(0, 255, 0); Bitmap[Sample.B * Width + x] = FColor(0, 0, 255); if (x > 0) { const FLinearColor Delta = Prefiltered[x] - Prefiltered[x - 1]; MaxDelta = FMath::Max(MaxDelta, FMath::Max3(FMath::Abs(Delta.R), FMath::Abs(Delta.G), FMath::Abs(Delta.B))); } } // Differential per channel const float Scale = 128 / MaxDelta; for (int32 x = 1; x < Width; ++x) { const FLinearColor Delta = Prefiltered[x] - Prefiltered[x - 1]; Bitmap[int32(512 + Delta.R * Scale) * Width + x] = FColor(255, 0, 0); Bitmap[int32(512 + Delta.G * Scale) * Width + x] = FColor(0, 255, 0); Bitmap[int32(512 + Delta.B * Scale) * Width + x] = FColor(0, 0, 255); } FFileHelper::CreateBitmap(TEXT("Test"), Width, Height, Bitmap.GetData()); } Roughness 0.5.bmp Roughness 1.bmp
  • Advertisement