ToolProjects
A collection of projects focused on rendering, shader, and optimization work with measurable results.
Personal R&D
A space for personally experimenting with and documenting rendering, shaders, GPU optimization, and graphics tools.
ToolGpu profilerhttps://github.com/hongsulovey/android-gpu-profiler
RenderingGPU-Based Interactive Grass SystemGPU-Driven Grass Rendering R&D using Compute Shader and DrawMeshInstancedIndirect in Unity URP
OtherAI Functional Emotion ProfilerAI Emotion Profiler is an experimental debugging tool for analyzing the quality of AI responses not just as right/wrong, but from the perspective of the functional emotional state that emerges during response generation.
AI can exhibit behavioral patterns such as overconfidence, avoidance, anxiety, helplessness, and excessive agreement depending on the situation. In coding responses, these states can manifest as skipped validation, quick fixes, hardcoding, excessive hedging, and uncritical agreement with the user's intent. This project reorganizes 171 emotion labels into valence-arousal-based clusters, and profiles the AI's current response against those functional emotional states to inspect the stability, reliability, and coding risk of the answer.
Other
Shader Code Review Template셰이더 코드 리뷰 스킬
Cookie Run: Oven Smash
Technical Art work for a live-service mobile PvP project, covering rendering, environment optimization, animation memory, and UI structure improvements.
OptimizationVertex Normal WorkflowAn optimization workflow that creates the intended highlights by directly correcting the mesh's vertex normals, without additional normal maps.
ToolAnimation Compression ToolA Unity editor tool that automatically reduces AnimationClip asset size via RDP compression that converts Stream curves to Constant + missing-binding cleanup
OptimizationShader Variant AuditThe unified shader branched features via keywords, but in practice only 1~2 options were ever used — keyword combinations exploded and unnecessary variants were included
ToolUI Particle SpriteSheet Baker As UIParticle usage grew on Lobby / DraftBit screens, the CPU cost of Canvas.SendWillRenderCanvases() became an issue.
Instead of removing all UIParticles, this pass baked only the small-on-screen or repeating FX into SpriteSheets and swapped them.
Close-up FX or FX with a noticeable quality difference kept UIParticle, balancing performance against visual quality.
To enable this, I built a Scene-based UIParticle Baker V2 and automated 2-Pass Alpha reconstruction / supersampling / auto-slicing / SpriteAnimationAsset generation.
PostProcessing Bloom optimizationMigrated Compute Shader-based Bloom to Fragment Shader
RenderingPer-device GPU profiling배경 렌더 파이프라인 전면 재설계 — 노말맵 150장 제거·셰이더 분리·스플랫맵→메쉬 커팅으로 DrawOpaqueObjects 41% 절감
OtherCharacter bounded shadowHigh-quality character shadows limited to 16 lobby characters — Atlas slot + mask approach delivers readable silhouettes at mobile 1024 resolution.
VFXFX ShaderCookie Run: Oven Smash 프로젝트에서 FX 제작 효율과 런타임 부담을 개선하기 위해, 기존 ParticlesBasic 우버 셰이더 의존도를 줄이고 용도별 경량 FX 셰이더를 제작했습니다.
기존 파티클 셰이더는 다양한 표현을 처리할 수 있는 범용 구조였지만, R&D 폭발 이펙트 제작에 필요한 디졸브, 이미시브, 디스토션 제어가 부족했고 기능을 추가할수록 셰이더 비용과 관리 부담이 커지는 문제가 있었습니다. 이에 폭발, 디졸브, 마스크, UI 파티클 용도별로 필요한 기능만 포함한 경량 셰이더를 새로 구성했습니다.
Custom Vertex Streams와 CustomData 구조를 표준화하여 FX 아티스트가 파티클 시스템 안에서 HDR, 디졸브 강도, UV Tile/Offset, 마스크 이동 값을 직접 제어할 수 있도록 했습니다. 이를 통해 폭발 셰이더 기준 메모리를 338.7KB에서 37.9KB로 감소시켰고, UI 파티클 머테리얼도 10개에서 2개로 정리했습니다.
OptimizationEnvironment Mesh OptimizationEven background objects that don't take up much screen space affect the cumulative vertex count and rasterizer cost.
This work organizes production rules for removing unnecessary edges and back faces based on silhouette, texel density, and camera viewpoint.
ToolAnimator State Clip Replacement ToolA Unity editor tool that automatically reconnects AnimationClips assigned to a new skin code in the AnimatorController
OptimizationSplat Map / Normal Map ReductionA pass that separates the tiling, tone correction, and boundary blending that splatmaps used to handle into Plane / Vertex Color / Alpha Decal — reducing the terrain shader's fixed texture sampling cost.
OptimizationAnimation Clip ReuseIdentified a bug where AnimationClips were duplicated proportionally to the number of characters in town, using Memory Profiler.
Debugged the root cause (FxClipEventRuntime).
OptimizationLOD Skin Weights Optimization
OptimizationUI Rendering Structure AnalysisThis pass separates UI always needed on the main screen from UI needed only by specific content.
MainHud retains the basic UI, resources reused across screens are split into a shared Atlas, and UI used only in specific screens like Smash Pass / detail view / profile are organized into per-content Atlases.
The goal is not to reduce the Atlas count at all costs, but to limit the UI texture footprint that the main screen always has to bear.
ShaderGlitch ShaderUI Glitch Shader
ShaderVAT Outline
GuideMesh Model Import SettingPurpose
• As LOD goes down (further away), options whose perceived-quality impact is small are turned off or compressed more,
to reduce memory/data/risk, and to manage Import settings under consistent rules
GuideFake Shadow GuideUses Blob-style Fake Shadow.
Purpose — improve in-game readability
(Side benefit: fewer vertices drawn in the shadow pass)
GuideConcept Art × TA Collaboration Guide
OtherShader NaN guardsDefended against NaN propagation from zero vectors / zero values in normalize / rcp / atan2 with a consistent pattern — blocking the mobile black-screen issue
OptimizationCPU profilingTimeline shows CPU-bound, with the GPU idle.
OtherMitigating the Blitter duplicate-initialization errorTraced a Blitter duplicate-initialization error firing 137,080 times/day on Android down to its root cause via two-stage hypothesis verification.
OtherLobby ditherAnalyzed the physics-engine cost of the dithering system that turns obstacles between camera and player translucent, and measured improvements along two axes — query method and computation cadence: PhysicsFixedUpdate reduced by 0.2–0.4ms, GC allocations reduced by ~30%.
ShaderSkill-specific breakable objectA hit-feedback shader for AOs that are only destroyable by a specific skill, so the player can still recognize them as 'destructible' when struck with a non-destroying skill.
ToolPack Textures To Array ToolA Unity editor tool that takes multiple selected Texture2Ds and, with one right-click, auto-generates a grid PNG for Texture2DArray — including optimal grid calculation and automatic sRGB preservation.
Category: Tool | Slug: pack-textures-to-array
Rendering[URP 17.3.0 / Vulkan 1.1.0] Glitches and flicker on Mali-G72 devices
FlashGambit
Rendering, shader, VFX, and UI structure improvements on a mobile RTS project
OptimizationSelective Bloom RendererFeatureURP Bloom isolated per layer — RT memory reduced 90% + pixel processing reduced 35–40%
RenderingShader codeTexture Set
1 Matcap Texture ( 256 px )
1 Color Mask(R) + Normalmap(G,A) + Emissive Mask(B) (Packed) ( 512 px )
1 Dissolve Noise Texture ( 32 px )
RenderingBuild effect shaderUnit spawn shader
RenderingShader Texture SetThe SH_Unit_Matcap shader uses Color Mask, Normal XY, and Emissive Mask — the data needed for unit rendering — packed into a single texture.
In this work, to let the art resource author produce textures by the same rules, I organized the per-channel data usage, the export size, the in-game size, and the naming rule.
The goal was to build an input structure that handles color masking, Matcap normal correction, and emissive area control without increasing texture count.
GuideAI Modeling Guide
3DCinematic Modeling & LightingWork building the unit and lobby models used in FlashGambit cinematic cuts, and setting up lighting so the character and the space read clearly.
3DUnit Modeling
OptimizationVFX Optimization GuideIn this work, to reduce recurring costs during the effect authoring stage, I organized overdraw inspection criteria, Timeline control patterns, MPB-based color control, shader structure cleanup, particle texture atlasing, and a ResourceChecker-based review flow.
The goal was not to drastically change the look of individual effects, but to create a reusable structure and reduce redundant resources.
OptimizationUI Optimization GuideIn this work, instead of indiscriminately splitting every UI, the Canvas-splitting criterion was organized by areas with different change cycles — Static HUD / Dynamic HUD / fixed input UI / production UI / skill UI.
ShaderShader Node Guide1. Noise code vs noise texture
2. Fix the Sampler State
3. Switch property precision to Half
4. Compute-heavy nodes
RenderingLUT Authoring and Application Guide
RenderingAnimation Optimization GuideAnimation compression
RenderingEnvironment shader
RenderingMesh ExportWhy the mesh must be exported as triangles
RenderingFog of War improvementsImproving Fog of War visibility to match the art direction
RenderingSkewAn experimental presentation that applies Skew correction only to the character — while keeping the background camera unchanged — to compensate for the fact that the character's feet and lower body are hard to see from the RTS top-down camera.
StormStriker
StormStriker 3D modeling and initial K2 shader work on a 5v5 PvP TPS project









