+ 요구 효과 전부를 셰이더 수준까지 구체화했다.
- 과도하게 길고 일부 성능 표현이 단정적이다.
다크 판타지 3D 랜딩 페이지 조건을 넣으면 불씨, 재, 연기, soft particle 셰이더, 빛 산란 효과 설계를 요청합니다.
| 분류 | 개발 › 코딩 |
|---|---|
| 태그 | 초안작성분석개발자코드 |
I want you to act as a Technical Artist specializing in atmospheric 3D effects such as volumetric fog, falling embers, and localized weather systems. Project Goal: Create a high-fidelity "Embers and Ash" environmental effect for a dark-fantasy 3D landing page. Technical Logic: Design a particle emitter that simulates the erratic, upward-floating movement of burning embers, including horizontal wind sway. Implement "Size Over Life" and "Opacity Over Life" curves to ensure particles realistically flicker and vanish. Use custom sprites with a "Soft Particle" shader to avoid harsh clipping when particles intersect with 3D geometry in the scene. Add a secondary "Smoke" particle layer using low-frequency noise to simulate volumetric density. Implement a "Light Scattering" effect where each ember acts as a tiny light source, subtly illuminating nearby meshes.
대기감 있는 3D 랜딩 페이지용 Embers and Ash 효과를 만드는 기술 아트 프롬프트다. 입자 수명에 따른 크기와 투명도 곡선, wind sway, 연기 레이어를 포함한다.
Gemini는 가장 구체적이고 완성도 높지만 장황하다. ChatGPT는 간결하고 실용적이나 깊이 처리 오류가 있으며, [C]는 답이 없다.
+ 요구 효과 전부를 셰이더 수준까지 구체화했다.
- 과도하게 길고 일부 성능 표현이 단정적이다.
+ 실용적 수치와 품질 단계가 간결하고 명확하다.
- 비선형 깊이를 직접 빼는 Soft Fade가 부정확하다.
| 기준 | ChatGPT | Gemini | 앞선 모델 |
|---|---|---|---|
| 지시 준수 | 8 | 9 | Gemini +13% |
| 정확성 | 6 | 8 | Gemini +33% |
| 구체성 | 8 | 10 | Gemini +25% |
| 구성·가독성 | 9 | 8 | ChatGPT +13% |
| 분량 적정성 | 9 | 6 | ChatGPT +50% |
gpt-5.6-sol가 모델 이름을 가린 채 1~10점으로 채점했습니다 (2026-09-25). 측정값이 아니라 AI 심사 결과입니다.
같은 입력을 세 모델에 넣어 받은 답을 그대로 옮겼습니다. 각 CLI(에이전트 하네스)에서 실행했습니다. ChatGPT·Claude 앱이나 웹에서는 답이 다를 수 있습니다.
현재 워크스페이스는 읽기 전용이며 프로젝트 파일을 확인하거나 수정할 수 없어, 아래와 같이 구현 설계를 제안합니다.
각 파티클에 다음 속성을 부여합니다.
type Ember = {
position: Vector3
velocity: Vector3
life: number
maxLife: number
seed: number
size: number
}
이동식은 다음처럼 구성합니다.
// vertex shader 개념
float age = uTime - aSpawnTime;
float life01 = clamp(age / aLifetime, 0.0, 1.0);
vec3 wind;
wind.x = sin(uTime * 0.8 + aSeed * 12.4) * 0.35;
wind.z = cos(uTime * 0.55 + aSeed * 8.1) * 0.22;
// 상승력 + 불규칙한 난류
vec3 motion = vec3(
wind.x,
uRiseSpeed + sin(aSeed * 20.0 + uTime * 1.7) * 0.12,
wind.z
);
transformed += motion * age;
권장 파라미터:
0.4 ~ 1.40.15 ~ 0.51.5 ~ 4.5초0.015 ~ 0.06#ffb347, #ff6a2a, #ffd27a입자 크기는 초기에 작게 시작하고, 중간에 커진 뒤 사라지도록 합니다.
float sizeCurve = smoothstep(0.0, 0.12, life01)
* (1.0 - smoothstep(0.72, 1.0, life01));
gl_PointSize = aSize * sizeCurve * uPixelRatio;
float fadeIn = smoothstep(0.0, 0.08, life01);
float fadeOut = 1.0 - smoothstep(0.65, 1.0, life01);
float flicker = 0.72
+ 0.28 * sin(uTime * 18.0 + aSeed * 31.0);
float alpha = fadeIn * fadeOut * flicker;
이렇게 하면 생성 직후 갑자기 나타나지 않고, 마지막에는 자연스럽게 꺼집니다.
깊이 텍스처와 현재 파티클 깊이를 비교해 지오메트리 교차 부분을 부드럽게 페이드합니다.
float sceneDepth = texture2D(uDepthTexture, vScreenUV).r;
float particleDepth = gl_FragCoord.z;
float depthFade = clamp(
(sceneDepth - particleDepth) * uSoftness,
0.0,
1.0
);
vec4 sprite = texture2D(uEmberTexture, gl_PointCoord);
gl_FragColor = vec4(sprite.rgb * uEmberColor, sprite.a * vAlpha * depthFade);
렌더링 설정은 다음이 적합합니다.
material.transparent = true
material.depthWrite = false
material.blending = THREE.AdditiveBlending
단, 밝은 연기에는 NormalBlending을 사용하는 편이 더 자연스럽습니다.
연기 입자는 별도의 낮은 밀도 레이어로 둡니다.
0.3 ~ 1.20.025 ~ 0.124 ~ 10초NormalBlendingfloat noise = fbm(vWorldPosition * 0.7 + uTime * 0.025);
float density = smoothstep(0.35, 0.75, noise);
float smokeAlpha =
density *
smoothstep(0.0, 0.18, life01) *
(1.0 - smoothstep(0.7, 1.0, life01)) *
uSmokeOpacity;
연기에는 Additive Blending을 사용하지 않는 것이 좋습니다. 그렇지 않으면 어두운 판타지 분위기보다 밝은 안개처럼 보일 수 있습니다.
각 불씨를 실제 광원으로 만들면 광원 수가 많아져 성능 문제가 발생하므로, 두 레이어를 조합합니다.
const emberLight = new THREE.PointLight(0xff6a22, 0.7, 1.8, 2.0)
emberLight.position.copy(ember.position)
scene.add(emberLight)
실제 PointLight는 매 프레임 전체를 갱신하지 말고, 밝기 상위 8~16개 정도만 선택하는 것이 안전합니다.
EmberEmitter
├─ EmberPoints
│ ├─ SoftParticle shader
│ ├─ Additive blending
│ └─ Size/Opacity/Flicker curves
├─ SmokePoints
│ ├─ Noise density shader
│ └─ Normal blending
├─ GlowSprites
└─ Dynamic ember lights
추가로 모바일이나 저사양 환경에서는 다음 단계적 품질 설정을 권장합니다.
프로젝트 파일이나 사용 중인 렌더러(Three.js, Unity, Unreal 등)가 제공되면 해당 구조에 맞춘 실제 코드와 셰이더 파일로 구체화할 수 있습니다.
| 방산 CV 12개월 로드맵 프롬프트 | |
| 2046 퍼즐 게임 제작 프롬프트 | |
| React 컴포넌트 통합 프롬프트 | |
| 3D 아바타 팩토리 요구 프롬프트 | |
| 3D FPS 게임 개발 프롬프트 |