Skip to content

Instantly share code, notes, and snippets.

View quizcanners's full-sized avatar

Yurii Selinnyi quizcanners

View GitHub Profile
@quizcanners
quizcanners / Unity Fragment Shader Cheat Sheet .cs
Last active April 16, 2024 15:48
To keep snippets of code for Shaders. Just some stuff that I often use but also often forget because brain=poo
//https://neginfinity.bitbucket.io/ - a blog where I found how to do shadows for raymarched/raytraced primitives.
//https://docs.unity3d.com/Manual/SL-UnityShaderVariables.html
//https://github.com/TwoTailsGames/Unity-Built-in-Shaders/blob/master/CGIncludes/UnityCG.cginc - Most interesting stuff ;)
//https://github.com/TwoTailsGames/Unity-Built-in-Shaders/tree/master/CGIncludes
//https://docs.unity3d.com/Manual/SL-Shader.html
//http://developer.download.nvidia.com/CgTutorial/cg_tutorial_appendix_e.html
//https://unity3d.com/how-to/shader-profiling-and-optimization-tips
//https://docs.unity3d.com/Manual/SL-UnityShaderVariables.html
//http://www.deepskycolors.com/archive/2010/04/21/formulas-for-Photoshop-blending-modes.html
//http://www.iquilezles.org/blog/
// All functions: http://developer.download.nvidia.com/CgTutorial/cg_tutorial_appendix_e.html
// Performance
// Accessing with "_Name" is slower
Shader.SetGlobalFloat("_Name", value); // =>
int id = Shader.PropertyToID("_Name"); // Once at Start/ OnEnable
Shader.SetGlobalFloat(id, value);
// Trouble-shooting:
// Black Pixels on some devices = Division by zero
@quizcanners
quizcanners / Circle.shader
Last active September 5, 2022 03:31
Vert Frag Shader Template
// This is a starting point for most effects I make.
Shader "Playtime Painter/Effects/Circle" {
Properties{
_MainTex("Albedo (RGB)", 2D) = "white" {}
[Toggle(_DEBUG)] debugOn("Debug", Float) = 0
}
SubShader{
Tags{
@quizcanners
quizcanners / Tricks for SDF
Last active June 13, 2022 17:33
SDF Functions
Revolution. Use length(xy) as one of the parameters for any function.
Subtract X from SDF - scale it up.
max - intersect
min - unite
lerp(sdf1, sdf2, t) to morph the two
public Inspect()
{
if ("Object's Transparency:".edit(ref transparency))
RecalculateShaderParameters();
if (transparency != 0.5f && icon.Refresh.Click("Will load default value",25).nl())
transparency = 0.5f;
}
// Article: https://medium.com/@quizcanners/unity-i-have-a-custom-editor-for-every-script-5eddf20fdacc
using System.Collections.Generic;
using QuizCanners.Inspector;
#if UNITY_EDITOR
using UnityEditor;
#endif
public class SomeScript : MonoBehaviour: IPEGI {
// https://gist.github.com/hecomi/9580605
//Dirctionary:
View Matrix : camera.worldToCameraMatrix
// How to project a texture:
//cs:
projectionMatrix = camera.projectionMatrix * camera.worldToCameraMatrix
//vert:
// Transparency
alpha:fade // Means it is not a glass
Tags { "Queue" = "Transparent" "RenderType" = "Transparent" }
ZWrite Off
Blend SrcAlpha OneMinusSrcAlpha
// Adjusting strength of the Normal
o.Normal = UnpackNormal(bump0);
o.Normal.xy *= wet;
o.Normal.z = 1;
inline float3 DetectSmoothEdge(float3 edge, float3 junkNorm, float3 sharpNorm, float3 edge0, float3 edge1, float3 edge2) {
edge = max(0, edge - 0.965) * 28;
 float allof = edge.r + edge.g + edge.b;
float border = min(1, allof);
float3 edgeN = edge0*edge.r + edge1*edge.g + edge2*edge.b;
float junk = min(1, (edge.g*edge.b + edge.r*edge.b + edge.r*edge.g)*2);
return normalize((sharpNorm*(1 - border)+ border*edgeN)*(1 - junk) + junk*(junkNorm));
}
public override void OnInspectorGUI() {
var controller = (MyMaterialController )target;
EditorGUILayout.BeginHorizontal();
EditorGUI.BeginChangeCheck();
controller .transparency = EditorGUILayout.FloatField("Object's Transparency:", controller .transparency);