MatCap

Material Capture. It is to capture the material on a texture. And represent it to the model.(https://digitalrune.github.io/DigitalRune-Documentation/html/9a8c8b37-b996-477a-aeab-5d92714be3ca.htm)

The general procedure is: (https://forum.unity.com/threads/writing-a-matcap-shader.518949/)

  1. convert the object space normal to view space.
  2. remap it to (0,1)
  3. use it as UV to sample matcap texture.

Ben Golus’ implementation: https://gist.github.com/bgolus/02e37cd76568520e20219dc51653ceaahttps://twitter.com/bgolus/status/1487224443688554497?s=20&t=-4eC1dOBkMmIMLR5-9QloQhttps://forum.unity.com/threads/getting-normals-relative-to-camera-view.452631/

Unity Lighting Optimization

source: https://unity.com/how-to/advanced/optimize-lighting-mobile-games

UV channels

One set of UV channels is enough, because metallic, occlusion, and smoothness value from the texture usually stores in the same place. However, objects in the scene share the same lightmap, so each object needs a new set of UV.

Unity Animation

Generic vs. Humanoid

source: https://forum.unity.com/threads/legacy-vs-generic-vs-humanoid-pros-and-cons.297492/ The first difference is that humanoid support retargeting. I can apply the same set of animation to many models that have an configured avatar. But humanoid doesn’t support extra bones, such as capes, weapons, or clothing.

Mixamo Animation

source: https://forum.unity.com/threads/how-to-getting-mixamo-and-unity-to-work.560284/ An easy way is to upload the model to Mixamo, and download animation with the custom model.

New Input Systems

source: https://docs.unity3d.com/Packages/com.unity.inputsystem@1.2/manual/Components.html#playerinput-componentThere are two ways to receive new inputs. One is manually checking if player are using the device:

var keyboard = Keyboard.current;
if (keyboard.cKey.wasPressedThisFrame)
{ 
	// do something
}

Another is by Input Action. This method requires Player Input component. We can define methods to invoke during events or receiving messages.

Unity’s StarterAssets used a script called “StarterAssetsInput” to record and update the input value by using broadcasting messages. The player controller script read the value from it to update animation and other stuff.