티스토리 뷰
Fx에서 blend, sampler 설정하는게 찾기도 더 쉽고 코드 작성이 더 빠른거 같다
어쩌다 보니, 특히 외부 FX 파일을 사용하기 위해
shader.fx 파일을 파싱해서
hlsl 과 pass, sampler, technique 를 분리해주는 전처리기를 작성하였다.
문제는, D3DCompile 을 통해 빌드하면
- 빌드하는데 오래 걸린다
- Pipeline State 에서 HLSL 디버깅에 진입시 버벅인다.
반면 같은 소스를 header로 컴파일하여 include 하면 문제가 없었다.
좀더 제대로 짜서 effect db 같은 걸 만들어야 할거 같다.
이렇게 살아야하나 방황을 했는데, 인터넷에서 괜찮은 샘플을 발견하였다.
확실히 xml 이 파싱이 나은듯, 그냥 fx를 파싱하다 보니 시간만 잡아먹은듯하다.
input layout은 확장성 때문에 뺏지만 지금 생각하면 넣는게 속이 편하다.
OpenGL shader compile이 빨라서 open 까지는 별로 안걸렸다.
cache는 못찼았음
<?xml version='1.0'?>
<effect language="hlsl">
<include name="sys:fx/GBuffer.fxml"/>
<include name="sys:fx/inputlayout.fxml"/>
<parameter name="matModelViewProject" type="float4x4" semantic="matModelViewProject"/>
<parameter name="texSkybox" type="texture2D"/>
<shader>
<![CDATA[
void SkyVS(
in float4 Position : POSITION,
out float3 oNormal : TEXCOORD0,
out float4 oPosition : SV_Position)
{
oNormal = Position;
oPosition = mul(matModelViewProject, Position);
}
float4 SkyPS(in float3 normal : TEXCOORD0) : SV_Target
{
return texSkybox.Sample(PointClamp, ComputeSphereCoord(normalize(normal)));
}
]]>
</shader>
<technique name="OpaqueSpecific">
<pass name="SkyboxRender">
<state name="inputlayout" value="POS3F"/>
<state name="vertex" value="SkyVS"/>
<state name="fragment" value="SkyPS"/>
<state name="cullmode" value="front"/>
</pass>
</technique>
</effect>
Shader reflection 없이 macro, technique 를 사용한다.
'Game > MMD' 카테고리의 다른 글
MMD 구현 중 정리 (0) | 2017.10.14 |
---|---|
Aligned (Rigidbody + Bone ) motion (0) | 2017.10.12 |
Tone mapping (4) (0) | 2017.10.08 |
Bloom (1) (0) | 2017.10.07 |
Outline (2) (0) | 2017.10.06 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크