Some shapes, even if no 3D art designers provide models, can also be generated in code.
This is a very important way for independent developers who want to remain original and do not want to borrow others ' models.
Today is dedicated to you with shader programming to achieve a heart, pinned down a faint feeling of homesickness.
Eventually:
Development environment: Unity 4.5.5
First step: Create a standard sphere at the origin point
Gameobject, Create Other, Sphere
(Note: The size is the default)
Step Two: Create the Heartshader.shader file in the shader folder
Source:
Shader "Custom/heart" {Properties {_lightcolor ("Light Color", color) = (1,1,1,1) _darkcolor ("Dark color", color) = ( 1,1,1,1)}subshader {//vertex//Fragmentpass{cgprogram//-GPU begin//define a function Type:vertex Name:vert (def Ault) #pragma vertex vert//define another function Type:fragment Name:frag (default) #pragma fragment Fraguniform Half4 _lightcolor;uniform half4 _darkcolor;//typedef vertex struct//V2f:vertex to fragmentstruct vertexinput{fixed4 Vertex:P Osition; Must have};struct fragmentinput{fixed4 pos:sv_position;//must havefloat4 color:color;};/ /compute Fragment by Vertexfragmentinput vert (Vertexinput i) {fragmentinput o;if (i.vertex.y < 0 && ABS (i.verte X.Z) <= 0.2 && abs (i.vertex.x) <= 0.2) {i.vertex.y-= 0.12-sqrt (Pow (i.vertex.z,2) + POW (i.vertex.x,2)) * 0. 65;} if (i.vertex.y > 0 && abs (I.VERTEX.Z) <= 0.5 && abs (i.vertex.x) <= 0.5) {i.vertex.y-= 0.3-sqrt (Pow (i.vertex.z,2) + POW (i.vertex.x,2)) * 0.5;IF (ABS (I.VERTEX.Z) <= 0.2 && abs (i.vertex.x) < 0.48) {i.vertex.y-= 0.2-SQRT (ABS (I.VERTEX.Z)) * 0.45;}} O.pos = Mul (UNITY_MATRIX_MVP, I.vertex); O.color = _lightcolor;float r = (_DARKCOLOR.R-_LIGHTCOLOR.R) * (1-I.VERTEX.Y) + _lightcolor.r;float g = (_DARKCOLOR.G-_LIGHTCOLOR.G) * (1-i.vertex.y) + _lightcolor.g;float B = (_DarkColor.b-_Lig HTCOLOR.B) * (1-i.vertex.y) + _lightcolor.b;o.color = FLOAT4 (r,g,b,0.5); return o;} Half4 Frag (Fragmentinput i): Color{return I.color;} ENDCG//-GPU end}}//Get the default Shaderfallback "diffuse"}
Step Three: Add a custom material to the sphere
Create a material, choose custom----heart to customize the shader, and add the material to the sphere created in the first step
Summary:
The focus of this article is to implement the Hearts shape, the core code in the vertex shader section.
This shader shader color rendering processing is relatively simple, can be based on the actual need to improve color rendering.
It is also important to note that the model generated by shader programming is only visually altered, while the collision Detection (Collider) is still original (spherical).
Unity with shader programming for 3D Hearts