티스토리 뷰

Game/MMD

Effect

newpolaris 2017. 10. 8. 14:34

Fx에서 blend, sampler 설정하는게 찾기도 더 쉽고 코드 작성이 더 빠른거 같다

어쩌다 보니, 특히 외부 FX 파일을 사용하기 위해

shader.fx 파일을 파싱해서

hlsl 과 pass, sampler, technique 를 분리해주는 전처리기를 작성하였다.

문제는, D3DCompile 을 통해 빌드하면

  1. 빌드하는데 오래 걸린다
  2. 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
링크