how do i add decals to a object? say i want to render bullet marks on a cube or wall.
Answer by duck
Dec 01, 2009 at 02:27 PM
The simplest way to achieve this would be to Instantiate a bullet-hole object at the point at which your bullet raycast hits the wall, and use the wall's normal for the object's rotation.
Something like this:
var hitRotation = Quaternion.FromToRotation(Vector3.up, hit.normal);
Instantiate(bulletHole, hit.point, hitRotation);
However if you allow the creation of an unlimited number of bullet holes, this method might quickly start affecting performance. There are a number of ways of creating a more optimised 'decal' system, such as re-using a pool of decal objects.
Hello Duck, thanks you for the solution. This works great for flat surfaces but what if the surface is spherical and the decal is not a small bullet hole but say an big dark patch
In that case, you'll need something much more complex. There's an article on the "wolfire" blog about projecting decals on to aribtrary geometry, which basically works by duplicating and cutting out the triangles from the mesh onto which the decal falls. You'd then want to render this cut-out piece of mesh using a decal shader which draws at a higher level in the draw queue, so there's no z-fighting with the underlying mesh.
Thanks Duck, will try that approach
Duck I tried your code but it makes all the bullet hole objects 90 degrees the wrong direction.
try Vector3.forward instead of vector3.up
Answer by Ashkan_gc
Dec 01, 2009 at 02:29 PM
currently decal rendering is not supported in unity.
vote for this in feedback
however you can easily draw a texute on another with getpixels and setpixels functions of Texture2D class.
you can draw bullet texture easily on the wall. you should not use the sharedmaterial and should use the material property to get textures. if you use sharedmaterial the real asset file and all other gameobjects using the texture/material will change.
you should get the UV cords of a raycast from Raycasthit object in raycasts.
in collisions and functions like OnTriggerEnter or ...
you can cast a ray from the bullet's position and in it's movement direction and see where it will collide to the other collider. you should disable the raycast for the bullet itself
this link no longer exists.. Was it axed or did it make it's way into 4.0 and I haven't done due diligence in finding it? I'd rather not do middleware system stuff if it's going in later, this seems like it's one that should eventually make it, just too many people would use it.
It is just a broken link which brought you to this page: http://feedback.unity3d.com/suggestions/graphics-decal-system?page=1
You may think about using that one: https://www.assetstore.unity3d.com/#/content/3779
Answer by SneezingCatP
Apr 01, 2012 at 02:21 AM
I wrote my decal script into the FPS tutorial mating gun script here it is
add this to the variables
var BulletTexture : GameObject;
add this to the hit particles section
clone = Instantiate(BulletTexture, hit.point, Quaternion.FromToRotation(Vector3.up, hit.normal)); Destroy(clone.gameObject, 5); clone.transform.parent = hit.transform;
it will parent the decal object with whatever it hits then deletes it after 5 seconds
Answer by Khyrid_old
Nov 21, 2010 at 01:09 PM
I've tried a lot to get this to work but I can't figure it out. Where do I put the code? In the gun or the bullet object? I tried with putting it in the bullet and what I got was a string of bullethole objects on the ground between me and the direction I was shooting. I have no idea what I'm doing.
Answer by unitynewbie
Apr 28, 2011 at 09:11 AM
hey, yes duck, what is 'bulletHole' in the code is it an fbx?
No it is more than likley a texture or a decal.
Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.
The best place to ask and answer questions about development with Unity.
To help users post good questions and use the site effectively we have posted a user guide.
If you are a new user, check out our FAQ for more information.
If you are a moderator, see our Moderator Guidelines page.
We are making improvements to UA, see the list of changes.
For troubleshooting common problems with Unity 5.x Editor (including Win 10).
Answers and Comments
5 People are following this question.
Delete a Decal Projector at Runtime
How can I make my own shader include file (.cginc or .glslinc)?
How does Unity handle alpha sorting?
Rendering a mesh with a given set of lights