Search Unity

Paint In 3D ✍️ Paint In Editor✏️ Paint In 2D

Discussion in 'Assets and Asset Store' started by Darkcoder, Jul 10, 2018.

  1. jut

    jut

    Joined:
    Mar 5, 2015
    Posts:
    1
    How easy is it to tie this to our FPS controller so that we can paint to textures in response to gunshots/grenades etc by painting the bullet holes on the walls instead of using decals? I tried:

    public void TakeDamage(DamageData damage)
    {
    P3dPaintDecal p = MainCamera.GetComponent<P3dPaintDecal>();
    p.HandleHitPoint(true, 1000, 100, 10, damage.HitPosition, Quaternion.Euler(damage.HitDirection));
    }

    in response to a hit event from our FPS controller, but nothing was painted. The MainCamera is grabbed from the Tag and is being resolved correctly and therefore <p> is a valid variable.
     
  2. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    The HandleHitPoint method you call there is the correct approach to manually paint the scene, but the values you pass to it are likely incorrect. If HitDirection is a direction vector then Quaternion.Euler is the incorrect method to use, you probably want Quaternion.FromToRotation. You can also try this approach with the P3dPaintDebug component and compare it to to normal painting (e.g. P3dHitScreen) to see if the paint appears at the right location and orientation.
     
  3. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    Hey everyone,

    Version 1.11.8 of Paint in 3D is now out!
    • Added Blur Painting / Mask demo scene.
    • Added Blur Painting / Mask / Generate demo scene.
    • Added LocalMask texture sampling to Blur blending mode.
    • Added LocalMask texture sampling to Flow blending mode.
    • Added P3dGenerateMask component.
    • Renamed shader includes to reduce possible clashes with other assets.

    If your project uses the Blur or Flow blending modes then these changes are going to be very useful for you. I also added the P3dGenerateMask component, which makes setting the LocalMask for these blending modes much easier and build size saving than what would otherwise be required.

    Enjoy :)
     
  4. Davood_Kharmanzar

    Davood_Kharmanzar

    Joined:
    Sep 20, 2017
    Posts:
    411
    @Darkcoder

    hi,
    how can i get current painted Gameobject at runtime?
     
  5. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    You can hook into the P3dPaintableTexture.OnModified event. Just keep in mind this only lets you know if that texture was in range to be potentially painted, it may not have been. The only way to detect if it was actually modified is to use the P3dChangeCounter or P3dChannelCounter components (you can hook into its OnUpdated event, and compare the Total to the previous value).
     
  6. lawsonh

    lawsonh

    Joined:
    Jul 25, 2018
    Posts:
    80
    Hi Darkcoder, I am using version 1.11.8 and it seems something is broken with PaintableTexture on iphone 6. iphone 8 and unity editor are working fine.

    The paintable texture is appearing all black. When I paint it over, everything appears fine for a while, but will revert to all black after a while.
     
  7. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    Sorry for the late reply.

    Does the issue go away if you follow the Galaxy S6 steps HERE?

    It's possible the iPhone 6 GPU has this same issue. The oldest iPhone I have is the iPhone 7 though.
     
  8. Danielsantalla

    Danielsantalla

    Joined:
    Jan 7, 2015
    Posts:
    75
    Hi again! This plugin is amazing.
    How do I save a painting during gameplay? in the documentation it says "This can also be done in-game from code too, using the P3dPaintableTexture component's GetPngData() method, which you can then save to file, and later load back using the LoadData(byte[]) method."

    That specific part "which you can then save to file", how do I do that? where does that info is being saved to? what type of file? the code says that it is being returned as a PNG texture array, but how do I actually save it? Can you further elaborate here?.

    Also, how would I go about saving a painted texture made out of multiple p3dpaintabletextures? (like a pbr arrangement for example), and how would I load it later? Thanks!
     
    Last edited: Aug 30, 2021
  9. Danielsantalla

    Danielsantalla

    Joined:
    Jan 7, 2015
    Posts:
    75
    Hi again,
    I also found another method that seems to save directly to player prefs (p3dhelper). Which method should I use to save paintings to a gallery? Thanks!
     
  10. lawsonh

    lawsonh

    Joined:
    Jul 25, 2018
    Posts:
    80
    Hey @Darkcoder thanks for the reply. I tried commenting those out, but it didn't help. Still the same issue.

    I found this post from last year where this person has the same issue as me:

    I tried disabling mipmap as well but it didn't help either.
     
  11. lawsonh

    lawsonh

    Joined:
    Jul 25, 2018
    Posts:
    80
    Also I was using an older version of paintin3D previously (1.9.14), and this issue did not exist on iphone 6.
     
  12. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    You can use THIS to write bytes to a file, and THIS to get it back. You can also use the built-in PlayerPrefs solution. Which you use depends on your project, so you should read up on the differences and decide yourself.


    Alright, I'll try it out on iPhone 7 and see if I can replicate the issue. [Edit] I noticed I don't have any USB-C to Lightning cables, so you'll have to wait 2 days for one to arrive.

    Quite a while back I rewrote all the painting algorithms to use double buffering, and this may have changed the behavior you experience. If so, I can add the old code back as new blending modes and see if that fixes things.
     
    Last edited: Aug 31, 2021
  13. lawsonh

    lawsonh

    Joined:
    Jul 25, 2018
    Posts:
    80
    Thanks a lot! I'm not sure if the issue exists on iphone 7 as I don't have one, but I hope that you can replicate it.
     
    Darkcoder likes this.
  14. Danielsantalla

    Danielsantalla

    Joined:
    Jan 7, 2015
    Posts:
    75
    Thanks. Actually, I got it working using load() and p3dhelper.savebytes() methods. Besides that I also use the clear() to erase my canvas. However, when exporting to the Oculus quest, none of these methods are working (not even clear()). Do you have any idea of what could be happening? I'm completely sure it's not an error on my end, simply the clear() is not working
     
    Last edited: Aug 31, 2021
  15. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    I created a new project in 2019.4.12f1 (because it has legacy XR, the version shouldn't matter though) with Paint in 3D 1.11.8 and Clear() works on my Oculus Quest 2 both with Oculus Link, and directly on the device. I tested using this script:

    Code (csharp):
    1.  
    2. using UnityEngine;
    3.  
    4. public class NewBehaviourScript : MonoBehaviour
    5. {
    6.     float counter;
    7.  
    8.     void Update()
    9.     {
    10.         counter += Time.deltaTime;
    11.  
    12.         if (counter > 10.0f)
    13.         {
    14.             counter = 0.0f;
    15.  
    16.             foreach (var p in PaintIn3D.P3dPaintableTexture.Instances) p.Clear();
    17.         }
    18.     }
    19. }
    It's possible that Quest 1 handles things differently, but if the painting itself works then I can't imagine why this would be the case. I don't have the original Quest to test on though.
     
    Danielsantalla likes this.
  16. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    Alright, I created a new iOS project with default settings with Paint in 3D 1.11.8 and the "14 Isolate Tools" demo scene. I tested it on iPhone 7 and iPad Air 2, and it works as expected on both.

    The Air 2 has the "PowerVR GXA6850" GPU which sounds similar to the "PowerVR GX6450" in the iPhone 6. So there could be a difference, or maybe your project has some different settings that cause this. Can you also test a new project with the same demo scene on your device and see if the issue exists?
     
  17. lawsonh

    lawsonh

    Joined:
    Jul 25, 2018
    Posts:
    80
    Hey Darkcoder, thanks for your troubleshooting. So I built the test scene and seems like it is broken as well on iphone 6. Here's a video:
     
  18. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    Thanks for the video. I didn't see anything like that, It's almost as if the paintable textures are resetting after some time.

    I know someone with an old iPhone 6 that I can test with, but I won't be able to meet them for 2 weeks. I'll test it when I get my hands on it.
     
  19. lawsonh

    lawsonh

    Joined:
    Jul 25, 2018
    Posts:
    80
    Thank you so much
     
    Darkcoder likes this.
  20. neapolitanstudios

    neapolitanstudios

    Joined:
    Feb 17, 2011
    Posts:
    75
  21. hjupter2

    hjupter2

    Joined:
    Dec 3, 2013
    Posts:
    15
    Hi @Darkcoder I was wondering if its possible to have color mixing, I was looking into the docs and tried messing around with different settings but nothing close, maybe you can point me in the right direction.
     
  22. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    Congrats, it looks fantastic! I added it to the first post :)


    You can kind of mix colors if you use a lower opacity value (e.g. 0.5). It's not possible to mix colors like with real life wet acrylic/watercolor/etc paint though. To get an effect like this you would have to read the underlying color (e.g. using P3dReadColor), and then modify the brush color based on this. One challenge with this idea is that as you paint, the underlying color will change before you read it, because your paint will have a radius that paints 'ahead' of the single point that the color is read from. If you use a lower opacity paint then this may not be an issue, as the underlying color should still be there to contribute color to your brush. If you need full opacity like with acrylic paint then you would need a much more complex setup though.
     
  23. gizmo_rob

    gizmo_rob

    Joined:
    Feb 20, 2016
    Posts:
    11
    Hey!
    I've been working over the last week getting Paint in 3D integrated into my game (Hokko Life) and I'm on the hunt for a good example, starting point or reference for painting continuous lines through script.

    I'm using a DecalPainter's HandleHitPoint function to paint, however on reducing the Radius property of the component, there is noticeable spacing between the points on smaller scale. What's the preferred way of handling scaling and continouous line painting with Paint in 3D through script? If you can point me in the right direction, I'd be super grateful! Thanks!
     
  24. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    If you use hit points then the only way to remove those gaps is to paint more times until there is no gap. Components like P3dHitScreen have the Advanced/HitSpacing setting, which tries to paint once every 'n' world space units, though it's easy to move the mouse quickly over complex geometry and cause thousands of hits to be generated, so the HitLimit setting can stop that.

    A more efficient way to paint thin lines is to use the HandleHitLine method. However, this doesn't support different scales at each point, and it doesn't work well with semi-transparent paint.

    If you need complex paint with varying scales and other modifiers then I recommend using the first approach. One thing you could do is use the HitSpacing idea, and instead of skipping hits when you reach the HitLimit is to store them in some like of queue, and gradually paint them over time. It depends how you want your final project to work though. You can also aggressively split up your mesh(es) as detailed HERE, so that painting many times per frame has less performance impact.
     
  25. gizmo_rob

    gizmo_rob

    Joined:
    Feb 20, 2016
    Posts:
    11
    Thanks for the mega-quick reply!

    The methods you mention are pretty much the direction I was thinking of heading in, but I wanted to check there wasn't some sort of built-in solution or intended approach that I was completely missing! Hopefully HandleHitLine can provide what I'm after, as I don't intend to be changing anything during stroke painting.
     
    Darkcoder likes this.
  26. Danielsantalla

    Danielsantalla

    Joined:
    Jan 7, 2015
    Posts:
    75
    Hello again. Thanks for all your help. When I try to load() a normal texture, sometimes this happens: upload_2021-9-8_22-8-44.png

    It looks like there was some sort of glitch either when saving or loading the texture.
    I use P3dHelper.SaveBytes(name,normalp3d.GetPngData()) to save the texture and later load(name). I'm not loading immediately after saving, so it is not a problem of not having enough time to save the texture. Do you know what might be happening? this only happens on the quest. On the pc, it is not happening.
     

    Attached Files:

  27. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    Does this consistently happen on the Quest? i.e. the first time you save/load it breaks like this, or only after a while?

    It looks like the data isn't saving or loading properly for some reason, perhaps it's running out of storage space or something?

    It would be great if you could output a checksum of the image bytes[] data before saving and after loading to check to see if they're the same.
     
  28. Danielsantalla

    Danielsantalla

    Joined:
    Jan 7, 2015
    Posts:
    75
    I'll try it out thanks. Yes it's kinda random, 1 out of 3 textures is glitched like that. Sometimes even the first one is glitched like that. I have plenty of space in my quest tho, so I don't think it's a storage issue. Here's a clip of the system to give you an idea of what I'm doing: https://twitter.com/danielsantalla/status/1435717587158061060?s=19
     
    Darkcoder and kittik like this.
  29. kittik

    kittik

    Joined:
    Mar 6, 2015
    Posts:
    565
    Hi @Darkcoder, I am really enjoying using PaintIn3D, it's been really helpful in my current project.

    I would like to ask what the best way to find the PaintableTexture component of a hit gameobject, which has multiple PaintableTexture components.

    In an example, I am using 3 PaintableTexture components on one GameObject, but want to know which one I am actually hitting, in order to store that information.

    Ideally, the hitpoint would refer to the correct PaintableTexture.

    Thanks
     
  30. villaman

    villaman

    Joined:
    Apr 21, 2021
    Posts:
    69
    Hello,
    I was wondering whether Paint in 3D could be used to create a runtime whiteboard/blackboard kind of functionality. I am aware you have a blackboard demo, but had some specific questions.

    Note: I'm imagining something a little closer to creating/editing a PowerPoint slide than something like Microsoft Paint. I'll use the term "slide" below to refer to the painting surface, which can be pictured to be a Plane or a side of a Cube etc.

    1. I understand that there is the concept of Live Painting, where a decal can be moved, scaled and rotated. Is this a one-time thing before the decal is "baked" in or can one go back later and again move/scale/rotate the decal later (say, after adding a second decal)?

    2. If the above is a one-time thing, then maybe one workaround would be for each decal to be in its own layer? Would this be feasible? I don't envisage more than (say) 20 decals/text entries/"other commands" per "slide". Would there be any scale issue with (say) 20 layers? (My understanding is that layering is done by having a texture per layer?).

    3. Can Text (ideally Text Mesh Pro) be added? I'm not looking to paint on the text, but rather have the text painted onto the "slide".

    4. Would it be possible to animate the decals and/or text? The idea being that if the user added "commands" in the following order... decal1, decal2, text1, some hand-drawn graffiti, decal5, text2, decal3, then later the user could watch the "slide" being built up by "replaying" decal1, decal2, text1... etc.

    5. If #4 is possible, would be possible to later on go in and re-order the "commands"? Say, change "decal1, decal2, text1..." to "decal2, text1, decal1...".

    6. Could animations be played out of order? i.e. I have the aforementioned command list, "decal1, decal2, text1, ...", could I go in an just animate (say) decal2?

    7. I'm assuming (based on reading this forum) that the user could load in a transparent PNG at runtime and use that as a decal. Just wanted to confirm that.

    thanks
     
  31. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    Looks great!


    When you say 'hit' what are you referring to? A custom raycast or something? If so, you can check the P3dPaintableTexture's Group setting to see which is which.


    1 - Once you bake a live decal you can no longer move the baked decal. To move it you would have to clear/reset your paintable texture to remove the baked stuff, and then you can use the live decals again from the start.

    2 - Why not just use multiple live decals? It would indeed be better in terms of performance to to have 20 layers where only one layer at a time is live, but it's also more difficult to configure.

    3 - You can decal paint anything that can be rendered by a camera (e.g. TMP, 3D objects), see the "59 Dynamic Decal" demo scene.

    4, 5, 6 - If they're using live painting then yes.

    7 - Yes.
     
  32. villaman

    villaman

    Joined:
    Apr 21, 2021
    Posts:
    69
    Hi,
    Thanks for your quick response. So, it seems like the key to everything I was referring to is "Live Painting". And keeping multiple decals simultaneously "live". Is it possible to serialize the state of multiple live decals without baking them? So that when they are loaded back, they are once again "live"? In other words, these live decals would essentially never get baked, since (presumably) once they are baked, all the ability to edit/reorder/animate them would be lost?
     
  33. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    Live painting works using the same system as the paint preview under the mouse, where it paints to a temporary texture that gets erased on the next frame. When you 'bake' the live painting, it applies the paint to the main texture instead of the temporary one, therefore losing all 'live' features, because that texture isn't erased.

    The live painting setup is done by adding the P3dPaintNearby and P3dPaintDecal components to any GameObject in the scene, so you can easily serialize this using Unity's JsonUtility or similar.
     
  34. GreaterHawkeye

    GreaterHawkeye

    Joined:
    Apr 13, 2017
    Posts:
    34
    Hi @Darkcoder !

    Thanks for this awesome tool, I just love it :)

    I've got a question though, is there a way to make the "P3DButtonIsolate" togglable? I want to make the "Fill" option togglable by clicking in the button.

    I've got a Canvas with "Fill" button in, which I added the ButtonIsolate script. I've created an Empty with "Fill" and "Paint" gameobjects (they are siblings). Fill has HitScreen and PaintFill, Paint has HitScreen and PaintDecal.
    I've set the "Target" of ButtonIsolate of Fill to the Fill Object which I've set to inactive by default.

    It works fine, when I enter play mode I can paint with my decal (because Fill is unactive and Paint is active), when I hit the "Fill" button, it deactivates the "Paint" gameobject and activate the "Fill" one.

    But I would like to be able to toggle this effect by clicking again on "Fill" button so it would deactivate Fill and activate Paint. Is there any way to do so?

    Thanks in advance!
     
  35. Danielsantalla

    Danielsantalla

    Joined:
    Jan 7, 2015
    Posts:
    75
    Hi, continuing on this issue. Seems like the problem is that the save method doesn't save all the bytes on the oculus quest. The loading is working fine, the issue is that the saving sometimes gets corrupt. I've already tried saving using coroutines so that there's no overlapping on saving different textures but it doesn't work.

    Right now I'm saving(Albedo), waiting 15 seconds, and then saving(Normal). The normals always seem to glitch at the bottom part. Any idea of how to fix this? I've already tried giving MORE time to the saving (a full minute) but the error is still there.
    upload_2021-9-13_17-29-1.png
     
  36. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    I'll send you a private message with an updated script shortly.


    P3dHelper.SaveBytes uses PlayerPrefs, and perhaps there's some size limit on the Quest that you're encountering. I recommend you try directly using .GetPngData() with System.IO.File.WriteAllBytes and ReadAllBytes.
     
    GreaterHawkeye likes this.
  37. SDTF

    SDTF

    Joined:
    Sep 3, 2020
    Posts:
    9
    Is there anyway to change the position of the raycast? For instance: I have a first person shooter with a couch co-op option. Painting works in 1player mode as the hit point is in the center of the screen. When I switch to 2player mode the hit point remains in the center of the game screen and does not paint anything. What I want is for the hit point to be in the center of my player's cameras. Is there a way to do this?
     
  38. lawsonh

    lawsonh

    Joined:
    Jul 25, 2018
    Posts:
    80
    Hey just wondering if you were able to get a hold of that old iphone.
     
  39. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    It depends how your painting is configured. If you use the P3dHitBetween or P3dHitThrough components, then you can specify the start and end points via Transforms. This allows you to make the raycast go from the player-specific camera, to a Transform placed directly in front. This should allow each player to paint at the center of their screens without issue. The only downside is you would need to write a little custom script to enable/disable this P3dHit___ component based on the player's finger touch or other control system you use.


    I will have it in my hands in 3 days, sorry for the delay :)
     
    lawsonh likes this.
  40. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    I tested it on the iPhone 6 and I can replicate the issue. I'll see if I can track down what's causing this over the next few days!
     
  41. lawsonh

    lawsonh

    Joined:
    Jul 25, 2018
    Posts:
    80
    Awesome, thanks a lot. Actually I reverted to the old paintin3d and it was still happening. Then I unchecked "connect hits" and the issue was fixed. Maybe that is related.
     
    Jmonroe and Darkcoder like this.
  42. manscomgamedesign

    manscomgamedesign

    Joined:
    Feb 17, 2021
    Posts:
    38
    hi

    I have a shootable weapon raycast setup on my script and i want to paint the decal when it hits the object I want, but I just can not find documentation talks about calling functions to paint the decal, please assist me with this.

    Thank you
     
  43. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    Check out the "79 Paint From Code" demo scene.
     
    manscomgamedesign likes this.
  44. manscomgamedesign

    manscomgamedesign

    Joined:
    Feb 17, 2021
    Posts:
    38
    Thank you very much for reply! I can paint now
     
    Darkcoder likes this.
  45. manscomgamedesign

    manscomgamedesign

    Joined:
    Feb 17, 2021
    Posts:
    38
    Hi

    I used the P3dPaintSphere.cs and successfully cutout a sphere shape on the model, but am I able to customise another cutout shape?

    Thank you!
     
  46. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    You can use P3dPaintDecal for this. If you're using a blending mode like AlphaBlend then the Texture setting's alpha channel can be the shape, or you can use the Shape setting which will work for all modes.
     
    manscomgamedesign likes this.
  47. manscomgamedesign

    manscomgamedesign

    Joined:
    Feb 17, 2021
    Posts:
    38
    Thank you very much for you help! I can now cutout the shape I wanted. For this process, I switch the P3dPaintSphere.cs to the P3dPaintDecal.cs follow your suggestion and assigned a texture that has the shape I want to cutout and then I used the subtract blending mode and turning off the first three channels which I think they are the RGB channels if I am not wrong about this because I just starting to learn what shader is and I am not sure if these channels are representing the RGBA of the texture but that works out for me to use the texture shape to cutoff the mesh.

    And For everything I done is just using the unity’s standard shader and set the cutoff mode but I have no idea why using the cutoff mode will work out.... I am still learning shader on a very early stage.

    But As a shader beginning learner, I also want to start use shader on PaintIn3D to make fantastic result. Unfortunately, looking on the PaintIn3D documentation I am getting confuse of how shader works out on the painting process. Therefore, I also want to directly post questions here ask about how the PaintIn3D knows “When” and “How” to execute the shader logic when it is painting on an object.

    For example the above case I was using the unitys' standard shader cutoff mode on my character object.
    For this case:
    1.Why PaintIn3Ds' subtract blending mode only works on this mode?

    2.And why PaintIn3D knows I am using the cutoff mode?

    3.Is it mean that if I want to use shader to paint then the target that I need to use shader for is the paint target object (in this case is the character object)?

    4.If so, then the actual target using the shader should be the characters' texture and not the paint texture assign on the paint component right?

    5.if that is the case, is it mean that I should be writing shader for the character texture in order paint out the effect I want?

    Please forgive me for asking so many questions but I really think PaintIn3D is a very powerful asset and I want to fully use that to achieve my goal. Please point me to the right direction.

    Thank you very much!
     
  48. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    Paint in 3D doesn't know or care what shader/material you use, it will paint everything the same depending on your P3dPaint___ component settings.

    The reason why your cutout shader/material looks different to non-cutout shader/materials is because this cutout shader has special code that makes the object transparent if the main texture's alpha channel is below 0.5/128. Most shaders don't have this code, so they will ignore the alpha channel, and therefore be fully opaque. You can test this out by changing your material's shader from cutout to non-cutout, and you will see it changes despite Paint in 3D not doing anything.

    I think all 5 of your questions are related to this same misunderstanding, so understanding how shaders work should clear up all confusion.
     
    manscomgamedesign likes this.
  49. AndrewRoto

    AndrewRoto

    Joined:
    Jul 7, 2021
    Posts:
    10
    Is there anything special that needs done to get the P3D Hit Screen 'Points On UV' emit option to work in a build? I'm having success getting it to paint properly in editor, but in build only it fails to paint. No errors are caught in the logs, and our callbacks for successful paints (color history, for example) are writing correctly, implying that we're not erroring out, but no color is being applied to the texture in the game view. This is only happening with the P3D Hit Screen with P3D Paint Sphere. P3D Fill Tool is working and exporting correctly with no issues.

    Is anyone else running into this? Have I missed something crucial to using
     
  50. Darkcoder

    Darkcoder

    Joined:
    Apr 13, 2011
    Posts:
    3,412
    If I make a new project in 2020.3.17f1 with Paint in 3D 1.11.9 and make a windows build of the "21 UV" demo scene, then it works as expected. You'll have to provide more details on how I can replicate this issue.