Unity3D, round the edges of a box, cube?

筅森魡賤 提交于 2019-12-18 13:29:54

问题


What's the usual way to round the edges on a cube, a rectangular object as in the examples?

The ideal result would look pretty much exactly like these images.

(Naturally, you could literally use a mesh that has carefully rounded edges and corners, but it takes many tris to achieve that.)


Note, of course for a NON-shader approach...

Add two small flat boxes and simply make that new normal halfway, i.e., 45 degrees, between the two sides:

That would be drawn perfectly round ...

GDG below has provided an article where someone asserts that this is indeed the best way, if not using a shader approach.

I'm really wondering how to do this with a shader though.


Note - incredibly detailed tutorial on the non-shader approach

http://catlikecoding.com/unity/tutorials/rounded-cube/


回答1:


Using deferred shading you may access G-buffer to locate and round edges like it done in this paper. Though it is a post-processing technique so it is able to emulate roundness in a limits of some pixels.

Simple averaged normals (1 pixel width):

Simple averaged normals (2 pixel width):

Simple averaged normals (3 pixel width):




回答2:


I'd certainly defer to a shader-oriented answer, but especially if the necessary shaders aren't available on a given platform, I'd accomplish this with a few "level of detail" models aka LoD.

  • Give the GameObject for this object meshes for a 6-sided box, a slightly-curved box, and an up-close very-curved box. (http://www.wings3d.com/ is my go-to simple modeling tool)
  • Give the GameObject a behavior script that checks each frame for distance from camera.

  • Activate the appropriate mesh based on the distance, and deactivate the others, this should be done at a distance where the change isn't detectable at the highest resolution available to the player.

This technique is pretty widely used in 3d games, a good way to represent far-off swarms of things that can become much more detailed once the camera gets up close.




回答3:


We were able to accomplish beveled cubes for our game WorldToBuild. The key is really that you can go ahead and make the beveled model, then just move the vertices in groups.

So in short, all I had to do to achieve the effect was:

  • Create a beveled cube (I used Blender).
  • Find what vertices you're going to move in each direction by their position from center.
  • Calculate out the beveled edges, and set the exact size.

I wrote an article about it here. Scroll to the bottom of the article if you just want to know the process:

https://www.linkedin.com/pulse/coding-resizable-beveled-cubes-unity-richard-christley



来源:https://stackoverflow.com/questions/25078224/unity3d-round-the-edges-of-a-box-cube

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!