x


Adding decals to a object

how do i add decals to a object? say i want to render bullet marks on a cube or wall.

more ▼

asked Dec 01, 2009 at 01:41 PM

pkamat gravatar image

pkamat
483 28 23 30

(comments are locked)
10|3000 characters needed characters left

2 answers: sort voted first

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.

more ▼

answered Dec 01, 2009 at 02:27 PM

duck gravatar image

duck ♦♦
47.5k 129 189 457

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

Dec 02, 2009 at 09:33 AM pkamat

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. http://blog.wolfire.com/2009/06/how-to-project-decals/

Dec 02, 2009 at 02:06 PM duck ♦♦

Thanks Duck, will try that approach

Dec 03, 2009 at 06:34 AM pkamat

Duck I tried your code but it makes all the bullet hole objects 90 degrees the wrong direction.

Dec 04, 2010 at 04:43 AM Khyrid_old

try Vector3.forward instead of vector3.up

May 06, 2011 at 03:57 PM cormac
(comments are locked)
10|3000 characters needed characters left

currently decal rendering is not supported in unity. vote for this in feedback http://feedback.unity3d.com/pages/15792-unity 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

more ▼

answered Dec 01, 2009 at 02:29 PM

Ashkan_gc gravatar image

Ashkan_gc
10.1k 76 91 160

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.

Dec 08, 2013 at 06:04 AM SinisterRainbow

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

Dec 12, 2013 at 09:55 PM Dantus
(comments are locked)
10|3000 characters needed characters left

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

Dj

more ▼

answered Apr 01, 2012 at 02:21 AM

SneezingCatP gravatar image

SneezingCatP
46 3 2 2

(comments are locked)
10|3000 characters needed characters left

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.

more ▼

answered Nov 21, 2010 at 01:09 PM

Khyrid_old gravatar image

Khyrid_old
11 3

(comments are locked)
10|3000 characters needed characters left

hey, yes duck, what is 'bulletHole' in the code is it an fbx?

more ▼

answered Apr 28, 2011 at 09:11 AM

unitynewbie gravatar image

unitynewbie
1 3 2 4

No it is more than likley a texture or a decal.

May 06, 2012 at 04:48 PM john essy
(comments are locked)
10|3000 characters needed characters left
Your answer
toggle preview:

Up to 2 attachments (including images) can be used with a maximum of 524.3 kB each and 1.0 MB total.

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Topics:

x813
x94
x30

asked: Dec 01, 2009 at 01:41 PM

Seen: 28062 times

Last Updated: Dec 12, 2013 at 09:55 PM