ryzerrr's picture
Upload folder using huggingface_hub
40c0886 verified
|
Raw
History Blame Contribute Delete
4.04 kB

Unity Rendering

Materials and Shaders

A Material is an asset that defines how a surface is rendered. It references a Shader (the GPU program) and sets its properties (colors, textures, numbers).

Unity 2022 ships the following built-in shaders worth knowing:

Shader Use case
Standard The default PBR shader -- metal/smoothness workflow
Universal Render Pipeline/Lit URP equivalent of Standard
Unlit/Texture Pure textured quad, no lighting
Sprites/Default 2D sprites
UI/Default Canvas UI Image

The generated project uses the Built-in Render Pipeline (not URP) so that the agent can rely on Shader.Find("Standard") without any package setup.

Procedural materials

var mat = new Material(Shader.Find("Standard"));
mat.name = "ProceduralWater";
mat.color = new Color(0.2f, 0.6f, 0.8f, 0.7f);
mat.SetFloat("_Glossiness", 0.85f);
mat.SetFloat("_Metallic", 0.1f);
mat.EnableKeyword("_EMISSION");
mat.SetColor("_EmissionColor", new Color(1f, 0.85f, 0.4f));
mat.renderQueue = 3000; // transparent
GetComponent<MeshRenderer>().sharedMaterial = mat;
  • _Color, _MainTex, _Glossiness, _Metallic, _EmissionColor are the Standard shader's main properties.
  • Call EnableKeyword("_EMISSION") before setting _EmissionColor.
  • For transparent materials set _Mode to 3 (Transparent) and configure blend modes as in the WaterMaterial.cs generator.

Lighting

  • Directional light -- simulates the sun. Rotating it changes time of day. The DayNightCycle.cs generator does exactly this.
  • Point light -- radiates in all directions; cost is proportional to the number of pixels it touches. Use sparingly on mobile.
  • Spot light -- cone shape; useful for flashlights, street lamps.
  • Area light -- only baked; good for indoor ceilings.

Realtime vs Baked: static geometry should use baked lighting (Lightmap) for performance; dynamic objects use realtime lighting.

Light l = gameObject.AddComponent<Light>();
l.type = LightType.Point;
l.color = Color.white;
l.intensity = 1.5f;
l.range = 15f;
l.shadows = LightShadows.Soft; // softest, but most expensive

Skybox and ambient

  • The skybox is set via RenderSettings.skybox or Window > Rendering > Lighting > Environment.
  • RenderSettings.ambientLight controls flat ambient color when RenderSettings.ambientMode = AmbientMode.Flat.
  • The DayNightCycle generator lerps both ambientLight and Camera.main.backgroundColor between day/night colors.

Post-processing (Built-in Pipeline)

Post-processing is provided by the com.unity.postprocessing package. Add a Post-process Layer to the Main Camera and a Post-process Volume to the scene to drive effects such as Bloom, Color Grading, Depth of Field, Vignette and Motion Blur.

// You usually configure post-processing in the inspector rather than code.
// Make sure the camera has a PostProcessLayer and a global PostProcessVolume.

LOD (Level of Detail)

Use LODGroup to swap meshes based on distance. Unity picks the LOD level based on the screen-space size of the bounding box.

LOD 0 -- 60%+ screen size   -- high-poly mesh
LOD 1 -- 30%-60%            -- medium
LOD 2 -- 10%-30%            -- low
Cull  -- <10%               -- not rendered

For procedural cities, prefer instancing (Graphics.DrawMeshInstanced) or LODGroup over spawning 50+ full-detail buildings.

Fog

RenderSettings.fog = true;
RenderSettings.fogMode = FogMode.Linear;
RenderSettings.fogColor = new Color(0.5f, 0.5f, 0.5f, 1f);
RenderSettings.fogStartDistance = 50f;
RenderSettings.fogEndDistance = 300f;

Fog hides the far clip plane pop-in and is essential for large open worlds.